TAO_CosNotification  2.4.1
Public Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
TAO_Notify::Routing_Slip_Queue Class Reference

A queue of Routing_Slips waiting to be persisted. More...

#include <Routing_Slip_Queue.h>

Collaboration diagram for TAO_Notify::Routing_Slip_Queue:
Collaboration graph
[legend]

Public Member Functions

 Routing_Slip_Queue (size_t allowed=1)
 Construct setting "allowed". More...
 
 ~Routing_Slip_Queue ()
 Destructor. More...
 
void add (const Routing_Slip_Ptr &routing_slip)
 Add a routing slip to the tail of the queue and dispatch if necessary. More...
 
void complete ()
 A call back to indicate that processing is complete for a previously-queued Routing_Slip. More...
 
void set_allowed (size_t allowed)
 

Private Types

typedef ACE_Unbounded_Queue< Routing_Slip_PtrQueue
 
typedef ACE_Guard< TAO_SYNCH_MUTEXGuard
 

Private Member Functions

void dispatch (Guard &guard)
 
bool dispatch_one (Guard &guard)
 
 Routing_Slip_Queue (const Routing_Slip_Queue &rhs)
 
Routing_Slip_Queueoperator= (const Routing_Slip_Queue &rhs)
 

Private Attributes

size_t allowed_
 
TAO_SYNCH_MUTEX internals_
 Protection for internal information. More...
 
size_t active_
 
Queue queue_
 

Detailed Description

A queue of Routing_Slips waiting to be persisted.

The Routing_Slip_Queue keeps a queue of Routing_Slips waiting to be written to persistent storage. The "allowed" parameter determines how many Routing_Slips can be handled simultaneously by the persistent storage. Until this threshold is reached, Routing_Slips are not held in the queue, but pass straight through.

Once the allowe number of Routing_Slips are being handled, any additional requests are held in the queue until persistence is complete for another Routing_Slips.

Having Routing_Slips waiting in the queue is "a good thing" [TM] because it allows delivery completions to be applied to the routing slip before it is written – thereby reducing or completely eliminating the number of actual writes to persistent storage.

Experimentation indicates that a good value for "allowed" is 1.

Allowed == 0 is treated as a special case meaning pass all Routing_Slips through the queue immediately. Setting it a good way to test how well your storage device withstands continuous beating.

Member Typedef Documentation

Constructor & Destructor Documentation

TAO_Notify::Routing_Slip_Queue::Routing_Slip_Queue ( size_t  allowed = 1)

Construct setting "allowed".

Parameters
allowedthe number of Routing_Slips that can be handled simultaneously by the persistent store.
TAO_Notify::Routing_Slip_Queue::~Routing_Slip_Queue ( )

Destructor.

TAO_Notify::Routing_Slip_Queue::Routing_Slip_Queue ( const Routing_Slip_Queue rhs)
private

Member Function Documentation

void TAO_Notify::Routing_Slip_Queue::add ( const Routing_Slip_Ptr routing_slip)

Add a routing slip to the tail of the queue and dispatch if necessary.

void TAO_Notify::Routing_Slip_Queue::complete ( )

A call back to indicate that processing is complete for a previously-queued Routing_Slip.

void TAO_Notify::Routing_Slip_Queue::dispatch ( Guard guard)
private
bool TAO_Notify::Routing_Slip_Queue::dispatch_one ( Guard guard)
private
Routing_Slip_Queue& TAO_Notify::Routing_Slip_Queue::operator= ( const Routing_Slip_Queue rhs)
private
void TAO_Notify::Routing_Slip_Queue::set_allowed ( size_t  allowed)

/brief Adjust the "allowed" value on-the-fly (not recommended, but it works.)

Member Data Documentation

size_t TAO_Notify::Routing_Slip_Queue::active_
private
size_t TAO_Notify::Routing_Slip_Queue::allowed_
private
TAO_SYNCH_MUTEX TAO_Notify::Routing_Slip_Queue::internals_
private

Protection for internal information.

Queue TAO_Notify::Routing_Slip_Queue::queue_
private

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