TAO_CosNotification
2.0.8
|
A queue of Routing_Slips waiting to be persisted. More...
#include <Routing_Slip_Queue.h>
Public Member Functions | |
Routing_Slip_Queue (size_t allowed=1) | |
Construct setting "allowed". | |
~Routing_Slip_Queue () | |
Destructor. | |
void | add (const Routing_Slip_Ptr &routing_slip) |
Add a routing slip to the tail of the queue and dispatch if necessary. | |
void | complete () |
A call back to indicate that processing is complete for a previously-queued Routing_Slip. | |
void | set_allowed (size_t allowed) |
Private Types | |
typedef ACE_Unbounded_Queue < Routing_Slip_Ptr > | Queue |
typedef ACE_Guard < TAO_SYNCH_MUTEX > | Guard |
Private Member Functions | |
void | dispatch (Guard &guard) |
bool | dispatch_one (Guard &guard) |
Routing_Slip_Queue (const Routing_Slip_Queue &rhs) | |
Routing_Slip_Queue & | operator= (const Routing_Slip_Queue &rhs) |
Private Attributes | |
size_t | allowed_ |
TAO_SYNCH_MUTEX | internals_ |
Protection for internal information. | |
size_t | active_ |
Queue | queue_ |
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.
typedef ACE_Guard< TAO_SYNCH_MUTEX > TAO_Notify::Routing_Slip_Queue::Guard [private] |
typedef ACE_Unbounded_Queue<Routing_Slip_Ptr> TAO_Notify::Routing_Slip_Queue::Queue [private] |
TAO_Notify::Routing_Slip_Queue::Routing_Slip_Queue | ( | size_t | allowed = 1 | ) |
Construct setting "allowed".
allowed | the 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] |
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.)
size_t TAO_Notify::Routing_Slip_Queue::active_ [private] |
size_t TAO_Notify::Routing_Slip_Queue::allowed_ [private] |
Protection for internal information.
Queue TAO_Notify::Routing_Slip_Queue::queue_ [private] |