|
Public Types |
| typedef ACE_UINT64 | Block_Serial_Number |
| | A unique identifier for logical blocks in persistent storage.
|
| typedef ACE_UINT32 | Block_Number |
| | The physical address of a block in persistent storage.
|
| typedef ACE_UINT16 | Block_Size |
| | The size of a block in persistent storage.
|
| typedef ACE_UINT16 | Block_Type |
| | A code to indicate the type of block in persistent storage.
|
Public Member Functions |
| | Routing_Slip_Persistence_Manager (Standard_Event_Persistence_Factory *factory) |
| | The constructor.
|
| | ~Routing_Slip_Persistence_Manager () |
| | The destructor.
|
| void | set_callback (Persistent_Callback *callback) |
| | Set up callbacks.
|
| bool | store (const ACE_Message_Block &event, const ACE_Message_Block &routing_slip) |
| | Store an event + routing slip.
|
| bool | update (const ACE_Message_Block &routing_slip) |
| | Update the routing slip.
|
| bool | remove () |
| | Remove our associated event and routing slip from the Persistent_File_Allocator.
|
| bool | reload (ACE_Message_Block *&event, ACE_Message_Block *&routing_slip) |
| | Call this method to recover data during event reload.
|
| Routing_Slip_Persistence_Manager * | load_next () |
| | Get next RSPM during reload.
|
| bool | store_root () |
| | Commit root data to disk, which should only be done for a root node.
|
| bool | load (Block_Number block_number, Block_Serial_Number expected_serial_number) |
| | Reload data into this RSPM from the given block/serial#.
|
| bool | is_root () const |
| | Is this RSPM attached to the root block?
|
| void | release_all () |
| | During cleanup for shut down, release all chained RSPMs.
|
Private Member Functions |
| bool | store_i (const ACE_Message_Block &event, const ACE_Message_Block &routing_slip) |
| bool | update_i (const ACE_Message_Block &routing_slip) |
| bool | store_event (const ACE_Message_Block &event) |
| size_t | fill_block (Persistent_Storage_Block &psb, size_t offset_into_block, const ACE_Message_Block *data, size_t offset_into_msg) |
| size_t | fill_block (Persistent_Storage_Block &psb, size_t offset_into_block, unsigned char *data, size_t data_size) |
| bool | build_chain (Persistent_Storage_Block *first_block, Block_Header &first_header, ACE_Unbounded_Stack< size_t > &allocated_blocks, const ACE_Message_Block &data) |
| | Build a chain of Persistent_Storage_Blocks.
|
| bool | reload_chain (Persistent_Storage_Block *first_block, Block_Header &first_header, ACE_Unbounded_Stack< size_t > &allocated_blocks, ACE_Message_Block *amb, ACE_UINT64 expected_serial_number) |
| | Reload a chain from persistent store.
|
| bool | update_next_manager (Routing_Slip_Persistence_Manager *next) |
| | Locked method to do the work of setting the next_manager_.
|
| bool | persisted () |
| | Have we been persisted yet?
|
| size_t | write_first_routing_slip_block (bool prepare_only=false) |
| | Write out our first event block.
|
| void | dllist_push_back () |
| | Insert ourselves into a linked list of Routing_Slip_Persistnce_Managers.
|
| void | insert_before (Routing_Slip_Persistence_Manager *node) |
| void | remove_from_dllist () |
| | Remove ourselves from a linked list of Routing_Slip_Persistence_Managers.
|
Private Attributes |
| ACE_SYNCH_MUTEX | lock_ |
| bool | removed_ |
| ACE_UINT64 | serial_number_ |
| Persistent_File_Allocator * | allocator_ |
| Standard_Event_Persistence_Factory * | factory_ |
| Event_Header | event_header_ |
| Routing_Slip_Header | routing_slip_header_ |
| Persistent_Storage_Block * | first_event_block_ |
| Persistent_Storage_Block * | first_routing_slip_block_ |
| Routing_Slip_Persistence_Manager * | prev_manager_ |
| | We are part of a doubly-linked list.
|
| Routing_Slip_Persistence_Manager * | next_manager_ |
| ACE_Unbounded_Stack< size_t > | allocated_event_blocks_ |
| ACE_Unbounded_Stack< size_t > | allocated_routing_slip_blocks_ |
| Persistent_Callback * | callback_ |
| ACE_Message_Block * | event_mb_ |
| | if these are non-zero we own 'em
|
| ACE_Message_Block * | routing_slip_mb_ |
todo: to complete the strategization of event persistent storage this should become an interface that is implemented differently by different strategies. For now it interacts with Standard_Event_Persistence.