TAO_CosNotification  2.2.2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Member Functions | Static Public Member Functions | Private Types | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
TAO_Notify::Routing_Slip Class Reference

Class which manages the delivery of events to destination. More...

#include <Routing_Slip.h>

Inheritance diagram for TAO_Notify::Routing_Slip:
Inheritance graph
Collaboration diagram for TAO_Notify::Routing_Slip:
Collaboration graph

Public Member Functions

void set_rspm (Routing_Slip_Persistence_Manager *rspm)
 
void reconnect (void)
 
virtual ~Routing_Slip ()
 Destructor (should be private but that inspires compiler wars) More...
 
void route (TAO_Notify_ProxyConsumer *pc, bool reliable_channel)
 
void dispatch (TAO_Notify_ProxySupplier *proxy_supplier, bool filter)
 Schedule delivery to a consumer via a proxy supplier. More...
 
void wait_persist ()
 Wait until the event/routing_slip has been saved at least once. More...
 
void delivery_request_complete (size_t request_id)
 A delivery request has been satisfied. More...
 
void at_front_of_persist_queue ()
 This Routing_Slip reached the front of the persistence queue. More...
 
virtual void persist_complete ()
 The persistent storage has completed the last request. More...
 
const TAO_Notify_Event::Ptrevent () const
 
int sequence () const
 Provide an identifying number for this Routing Slip to use in debug messages. More...
 
bool should_retry () const
 Should delivery of this event be retried if it fails? More...
 
- Public Member Functions inherited from TAO_Notify::Persistent_Callback
virtual ~Persistent_Callback ()
 

Static Public Member Functions

static Routing_Slip_Ptr create (const TAO_Notify_Event::Ptr &event)
 "Factory" method for normal use. More...
 
static Routing_Slip_Ptr create (TAO_Notify_EventChannelFactory &ecf, Routing_Slip_Persistence_Manager *rspm)
 "Factory" method for use during reload from persistent storage. More...
 

Private Types

enum  State {
  rssCREATING, rssTRANSIENT, rssRELOADED, rssNEW,
  rssCOMPLETE_WHILE_NEW, rssSAVING, rssSAVED, rssUPDATING,
  rssCHANGED_WHILE_SAVING, rssCHANGED, rssCOMPLETE, rssDELETING,
  rssTERMINAL
}
 
typedef ACE_Guard
< TAO_SYNCH_MUTEX
Routing_Slip_Guard
 

Private Member Functions

void enter_state_transient (Routing_Slip_Guard &guard)
 
void continue_state_transient (Routing_Slip_Guard &guard)
 
void enter_state_reloaded (Routing_Slip_Guard &guard)
 
void enter_state_new (Routing_Slip_Guard &guard)
 
void continue_state_new (Routing_Slip_Guard &guard)
 
void enter_state_complete_while_new (Routing_Slip_Guard &guard)
 
void enter_state_saving (Routing_Slip_Guard &guard)
 
void enter_state_saved (Routing_Slip_Guard &guard)
 
void enter_state_updating (Routing_Slip_Guard &guard)
 
void enter_state_changed_while_saving (Routing_Slip_Guard &guard)
 
void continue_state_changed_while_saving (Routing_Slip_Guard &guard)
 
void enter_state_changed (Routing_Slip_Guard &guard)
 
void continue_state_changed (Routing_Slip_Guard &guard)
 
void enter_state_complete (Routing_Slip_Guard &guard)
 
void enter_state_deleting (Routing_Slip_Guard &guard)
 
void enter_state_terminal (Routing_Slip_Guard &guard)
 
bool create_persistence_manager ()
 
 Routing_Slip (const TAO_Notify_Event::Ptr &event)
 Private constructor for use by create method. More...
 
bool all_deliveries_complete () const
 Test to see if all deliveries are complete. More...
 
void add_to_persist_queue (Routing_Slip_Guard &guard)
 This routing_slip needs to be saved. More...
 
void marshal (TAO_OutputCDR &cdr)
 Marshal into a CDR. More...
 
bool unmarshal (TAO_Notify_EventChannelFactory &ecf, TAO_InputCDR &rscdr)
 Marshal from CDR. More...
 

Private Attributes

TAO_SYNCH_MUTEX internals_
 Protection for internal information. More...
 
bool is_safe_
 true when event persistence qos is guaranteed More...
 
ACE_SYNCH_CONDITION until_safe_
 signalled when is_safe_ goes true More...
 
Routing_Slip_Ptr this_ptr_
 
TAO_Notify_Event::Ptr event_
 
enum
TAO_Notify::Routing_Slip::State 
state_
 
Delivery_Request_Vec delivery_requests_
 A collection of delivery requests. More...
 
Delivery_Method_Vec delivery_methods_
 Methods that should be restarted during event recovery. More...
 
size_t complete_requests_
 How many delivery requests are complete. More...
 
Routing_Slip_Persistence_Managerrspm_
 Pointer to a Routing_Slip_Persistence_Manager. More...
 
int sequence_
 

Static Private Attributes

static TAO_SYNCH_MUTEX sequence_lock_
 
static int routing_slip_sequence_ = 0
 
static size_t count_enter_transient_ = 0
 
static size_t count_continue_transient_ = 0
 
static size_t count_enter_reloaded_ = 0
 
static size_t count_enter_new_ = 0
 
static size_t count_continue_new_ = 0
 
static size_t count_enter_complete_while_new_ = 0
 
static size_t count_enter_saving_ = 0
 
static size_t count_enter_saved_ = 0
 
static size_t count_enter_updating_ = 0
 
static size_t count_enter_changed_while_saving_ = 0
 
static size_t count_continue_changed_while_saving_ = 0
 
static size_t count_enter_changed_ = 0
 
static size_t count_continue_changed_ = 0
 
static size_t count_enter_complete_ = 0
 
static size_t count_enter_deleting_ = 0
 
static size_t count_enter_terminal_ = 0
 
static Routing_Slip_Queue persistent_queue_
 

Detailed Description

Class which manages the delivery of events to destination.

Interacts with persistent storage to provide reliable delivery.

Member Typedef Documentation

Member Enumeration Documentation

A mini-state machine to control persistence See external doc for circles and arrows.

Enumerator
rssCREATING 
rssTRANSIENT 
rssRELOADED 
rssNEW 
rssCOMPLETE_WHILE_NEW 
rssSAVING 
rssSAVED 
rssUPDATING 
rssCHANGED_WHILE_SAVING 
rssCHANGED 
rssCOMPLETE 
rssDELETING 
rssTERMINAL 

Constructor & Destructor Documentation

TAO_Notify::Routing_Slip::~Routing_Slip ( )
virtual

Destructor (should be private but that inspires compiler wars)

TAO_Notify::Routing_Slip::Routing_Slip ( const TAO_Notify_Event::Ptr event)
private

Private constructor for use by create method.

Member Function Documentation

void TAO_Notify::Routing_Slip::add_to_persist_queue ( Routing_Slip_Guard guard)
private

This routing_slip needs to be saved.

bool TAO_Notify::Routing_Slip::all_deliveries_complete ( ) const
private

Test to see if all deliveries are complete.

void TAO_Notify::Routing_Slip::at_front_of_persist_queue ( )

This Routing_Slip reached the front of the persistence queue.

void TAO_Notify::Routing_Slip::continue_state_changed ( Routing_Slip_Guard guard)
private
void TAO_Notify::Routing_Slip::continue_state_changed_while_saving ( Routing_Slip_Guard guard)
private
void TAO_Notify::Routing_Slip::continue_state_new ( Routing_Slip_Guard guard)
private
void TAO_Notify::Routing_Slip::continue_state_transient ( Routing_Slip_Guard guard)
private
Routing_Slip_Ptr TAO_Notify::Routing_Slip::create ( const TAO_Notify_Event::Ptr event)
static

"Factory" method for normal use.

Routing_Slip_Ptr TAO_Notify::Routing_Slip::create ( TAO_Notify_EventChannelFactory ecf,
Routing_Slip_Persistence_Manager rspm 
)
static

"Factory" method for use during reload from persistent storage.

bool TAO_Notify::Routing_Slip::create_persistence_manager ( )
private
void TAO_Notify::Routing_Slip::delivery_request_complete ( size_t  request_id)

A delivery request has been satisfied.

void TAO_Notify::Routing_Slip::dispatch ( TAO_Notify_ProxySupplier proxy_supplier,
bool  filter 
)

Schedule delivery to a consumer via a proxy supplier.

Parameters
proxy_supplierthe proxy supplier that will deliver the event
filtershould consumer-based filtering be applied?
void TAO_Notify::Routing_Slip::enter_state_changed ( Routing_Slip_Guard guard)
private
void TAO_Notify::Routing_Slip::enter_state_changed_while_saving ( Routing_Slip_Guard guard)
private
void TAO_Notify::Routing_Slip::enter_state_complete ( Routing_Slip_Guard guard)
private
void TAO_Notify::Routing_Slip::enter_state_complete_while_new ( Routing_Slip_Guard guard)
private
void TAO_Notify::Routing_Slip::enter_state_deleting ( Routing_Slip_Guard guard)
private
void TAO_Notify::Routing_Slip::enter_state_new ( Routing_Slip_Guard guard)
private
void TAO_Notify::Routing_Slip::enter_state_reloaded ( Routing_Slip_Guard guard)
private
void TAO_Notify::Routing_Slip::enter_state_saved ( Routing_Slip_Guard guard)
private
void TAO_Notify::Routing_Slip::enter_state_saving ( Routing_Slip_Guard guard)
private
void TAO_Notify::Routing_Slip::enter_state_terminal ( Routing_Slip_Guard guard)
private
void TAO_Notify::Routing_Slip::enter_state_transient ( Routing_Slip_Guard guard)
private
void TAO_Notify::Routing_Slip::enter_state_updating ( Routing_Slip_Guard guard)
private
const TAO_Notify_Event::Ptr & TAO_Notify::Routing_Slip::event ( ) const
void TAO_Notify::Routing_Slip::marshal ( TAO_OutputCDR cdr)
private

Marshal into a CDR.

void TAO_Notify::Routing_Slip::persist_complete ( )
virtual

The persistent storage has completed the last request.

Implements TAO_Notify::Persistent_Callback.

void TAO_Notify::Routing_Slip::reconnect ( void  )
void TAO_Notify::Routing_Slip::route ( TAO_Notify_ProxyConsumer pc,
bool  reliable_channel 
)

Route this event to destinations must be the Action request after the routing slip is created.

int TAO_Notify::Routing_Slip::sequence ( ) const

Provide an identifying number for this Routing Slip to use in debug messages.

void TAO_Notify::Routing_Slip::set_rspm ( Routing_Slip_Persistence_Manager rspm)
bool TAO_Notify::Routing_Slip::should_retry ( ) const

Should delivery of this event be retried if it fails?

bool TAO_Notify::Routing_Slip::unmarshal ( TAO_Notify_EventChannelFactory ecf,
TAO_InputCDR rscdr 
)
private

Marshal from CDR.

void TAO_Notify::Routing_Slip::wait_persist ( )

Wait until the event/routing_slip has been saved at least once.

Member Data Documentation

size_t TAO_Notify::Routing_Slip::complete_requests_
private

How many delivery requests are complete.

size_t TAO_Notify::Routing_Slip::count_continue_changed_ = 0
staticprivate
size_t TAO_Notify::Routing_Slip::count_continue_changed_while_saving_ = 0
staticprivate
size_t TAO_Notify::Routing_Slip::count_continue_new_ = 0
staticprivate
size_t TAO_Notify::Routing_Slip::count_continue_transient_ = 0
staticprivate
size_t TAO_Notify::Routing_Slip::count_enter_changed_ = 0
staticprivate
size_t TAO_Notify::Routing_Slip::count_enter_changed_while_saving_ = 0
staticprivate
size_t TAO_Notify::Routing_Slip::count_enter_complete_ = 0
staticprivate
size_t TAO_Notify::Routing_Slip::count_enter_complete_while_new_ = 0
staticprivate
size_t TAO_Notify::Routing_Slip::count_enter_deleting_ = 0
staticprivate
size_t TAO_Notify::Routing_Slip::count_enter_new_ = 0
staticprivate
size_t TAO_Notify::Routing_Slip::count_enter_reloaded_ = 0
staticprivate
size_t TAO_Notify::Routing_Slip::count_enter_saved_ = 0
staticprivate
size_t TAO_Notify::Routing_Slip::count_enter_saving_ = 0
staticprivate
size_t TAO_Notify::Routing_Slip::count_enter_terminal_ = 0
staticprivate
size_t TAO_Notify::Routing_Slip::count_enter_transient_ = 0
staticprivate
size_t TAO_Notify::Routing_Slip::count_enter_updating_ = 0
staticprivate
Delivery_Method_Vec TAO_Notify::Routing_Slip::delivery_methods_
private

Methods that should be restarted during event recovery.

Delivery_Request_Vec TAO_Notify::Routing_Slip::delivery_requests_
private

A collection of delivery requests.

TAO_Notify_Event::Ptr TAO_Notify::Routing_Slip::event_
private
TAO_SYNCH_MUTEX TAO_Notify::Routing_Slip::internals_
private

Protection for internal information.

bool TAO_Notify::Routing_Slip::is_safe_
private

true when event persistence qos is guaranteed

Routing_Slip_Queue TAO_Notify::Routing_Slip::persistent_queue_
staticprivate
int TAO_Notify::Routing_Slip::routing_slip_sequence_ = 0
staticprivate
Routing_Slip_Persistence_Manager* TAO_Notify::Routing_Slip::rspm_
private
int TAO_Notify::Routing_Slip::sequence_
private
TAO_SYNCH_MUTEX TAO_Notify::Routing_Slip::sequence_lock_
staticprivate
enum TAO_Notify::Routing_Slip::State TAO_Notify::Routing_Slip::state_
private
Routing_Slip_Ptr TAO_Notify::Routing_Slip::this_ptr_
private

Smart pointer to this object Provides continuity between smart pointers and "Routing_Slip::this" Also lets the Routing_Slip manage its own minimum lifetime.

ACE_SYNCH_CONDITION TAO_Notify::Routing_Slip::until_safe_
private

signalled when is_safe_ goes true


The documentation for this class was generated from the following files: