Collage  1.0.1
Object-Oriented C++ Network Library
Public Member Functions | List of all members
co::Barrier Class Reference

A networked, versioned barrier. More...

#include <barrier.h>

+ Inheritance diagram for co::Barrier:
+ Collaboration diagram for co::Barrier:

Public Member Functions

CO_API Barrier (NodePtr master=0, const uint32_t height=0)
 Construct a new barrier. More...
 
virtual CO_API ~Barrier ()
 Destruct the barrier. More...
 
Data Access

After a change, the barrier should be committed and synced to the same version on all nodes entering the barrier.

CO_API void setHeight (const uint32_t height)
 Set the number of participants in the barrier. More...
 
CO_API void increase ()
 Add one participant to the barrier. More...
 
CO_API uint32_t getHeight () const
 
Operations
CO_API void enter (const uint32_t timeout=LB_TIMEOUT_INDEFINITE)
 Enter the barrier, blocks until the barrier has been reached. More...
 
- Public Member Functions inherited from co::Object
virtual CO_API ~Object ()
 Destruct the distributed object. More...
 
CO_API bool isAttached () const
 
CO_API LocalNodePtr getLocalNode ()
 
CO_API void setID (const UUID &identifier)
 Set the object's unique identifier. More...
 
CO_API const UUID & getID () const
 
CO_API uint32_t getInstanceID () const
 
CO_API bool isBuffered () const
 
CO_API bool isMaster () const
 
virtual uint64_t getMaxVersions () const
 Limit the number of queued versions on slave instances. More...
 
virtual CO_API uint32_t chooseCompressor () const
 Return the compressor to be used for data transmission. More...
 
virtual bool isDirty () const
 Return if this object needs a commit. More...
 
CO_API void push (const uint128_t &groupID, const uint128_t &objectType, const Nodes &nodes)
 Push the instance data of the object to the given nodes. More...
 
virtual CO_API uint128_t commit (const uint32_t incarnation=CO_COMMIT_NEXT)
 Commit a new version of this object. More...
 
CO_API void setAutoObsolete (const uint32_t count)
 Automatically obsolete old versions. More...
 
CO_API uint32_t getAutoObsolete () const
 
virtual CO_API uint128_t sync (const uint128_t &version=VERSION_HEAD)
 Sync to a given version. More...
 
CO_API uint128_t getHeadVersion () const
 
CO_API uint128_t getVersion () const
 
virtual CO_API void notifyNewHeadVersion (const uint128_t &version)
 Notification that a new head version was received by a slave object. More...
 
virtual void notifyNewVersion ()
 Notification that a new version was received by a master object. More...
 
CO_API ObjectOCommand send (NodePtr node, const uint32_t cmd, const uint32_t instanceID=EQ_INSTANCE_ALL)
 Send a command with optional data to object instance(s) on another node. More...
 
virtual void notifyAttach ()
 Notify that this object will be registered or mapped. More...
 
virtual void notifyAttached ()
 Notify that this object has been registered or mapped. More...
 
virtual CO_API void notifyDetach ()
 Notify that this object will be deregistered or unmapped. More...
 
virtual void notifyDetached ()
 Notify that this object has been deregistered or unmapped. More...
 
uint32_t getMasterInstanceID () const
 
NodePtr getMasterNode ()
 
CO_API void removeSlave (NodePtr node, const uint32_t instanceID)
 
CO_API void removeSlaves (NodePtr node)
 
void setMasterNode (NodePtr node)
 
void addInstanceDatas (const ObjectDataIStreamDeque &, const uint128_t &)
 
void setupChangeManager (const Object::ChangeType type, const bool master, LocalNodePtr localNode, const uint32_t masterInstanceID)
 
virtual CO_API void detach ()
 
void transfer (Object *from)
 
void applyMapData (const uint128_t &version)
 
void sendInstanceData (Nodes &nodes)
 
- Public Member Functions inherited from co::Dispatcher
const Dispatcheroperator= (const Dispatcher &)
 
template<typename T >
void registerCommand (const uint32_t command, const CommandFunc< T > &func, CommandQueue *queue)
 Register a command member function for a command. More...
 
virtual CO_API bool dispatchCommand (ICommand &command)
 Dispatch a command from the receiver thread to the registered queue. More...
 

Protected Member Functions

virtual void attach (const UUID &id, const uint32_t instanceID)
 
virtual ChangeType getChangeType () const
 
virtual void getInstanceData (DataOStream &os)
 Serialize all instance information of this distributed object. More...
 
virtual void applyInstanceData (DataIStream &is)
 Deserialize the instance data. More...
 
virtual void pack (DataOStream &os)
 Serialize the modifications since the last call to commit(). More...
 
virtual void unpack (DataIStream &is)
 Deserialize a change. More...
 
- Protected Member Functions inherited from co::Object
CO_API Object ()
 Construct a new distributed object. More...
 
CO_API Object (const Object &)
 Copy construct a new, unattached object. More...
 
const Objectoperator= (const Object &)
 NOP assignment operator. More...
 
- Protected Member Functions inherited from co::Dispatcher
CO_API Dispatcher (const Dispatcher &from)
 
CO_API bool _cmdUnknown (ICommand &command)
 The default handler for handling commands. More...
 

Additional Inherited Members

- Public Types inherited from co::Object
enum  ChangeType {
  NONE, STATIC, INSTANCE, DELTA,
  UNBUFFERED
}
 Object change handling characteristics, see Programming Guide. More...
 
- Public Types inherited from co::Dispatcher
typedef CommandFunc< DispatcherFunc
 The signature of the base Dispatcher callback. More...
 

Detailed Description

A networked, versioned barrier.

Definition at line 32 of file barrier.h.

Constructor & Destructor Documentation

CO_API co::Barrier::Barrier ( NodePtr  master = 0,
const uint32_t  height = 0 
)

Construct a new barrier.

Barriers are versioned, distributed objects. The process setting up the barrier does register it with its LocalNode. Processes entering the barrier will map an instance to their local node.

The master node will maintain the barrier state. It has to be reachable from all other nodes participating in the barrier. If no master node is given, the node to which the master instance is registered is used.

Note that the node of the object master, i.e., the instance which is registered, and the barrier's master node may be different.

Version
1.0
virtual CO_API co::Barrier::~Barrier ( )
virtual

Destruct the barrier.

Version
1.0

Member Function Documentation

virtual void co::Barrier::applyInstanceData ( DataIStream is)
protectedvirtual

Deserialize the instance data.

This method is called during object mapping to populate slave instances with the master object's data.

Parameters
isthe input stream.
Version
1.0

Implements co::Object.

CO_API void co::Barrier::enter ( const uint32_t  timeout = LB_TIMEOUT_INDEFINITE)

Enter the barrier, blocks until the barrier has been reached.

The implementation currently assumes that the master node instance also enters the barrier. If a timeout happens a timeout exception is thrown.

Version
1.0
virtual ChangeType co::Barrier::getChangeType ( ) const
inlineprotectedvirtual
Returns
how the changes are to be handled.
Version
1.0

Reimplemented from co::Object.

Definition at line 91 of file barrier.h.

References co::Object::DELTA.

CO_API uint32_t co::Barrier::getHeight ( ) const
Returns
the number of participants.
Version
1.0
virtual void co::Barrier::getInstanceData ( DataOStream os)
protectedvirtual

Serialize all instance information of this distributed object.

Parameters
osThe output stream.
Version
1.0

Implements co::Object.

CO_API void co::Barrier::increase ( )

Add one participant to the barrier.

Version
1.0
virtual void co::Barrier::pack ( DataOStream os)
protectedvirtual

Serialize the modifications since the last call to commit().

No new version will be created if no data is written to the output stream.

Parameters
osthe output stream.
Version
1.0

Reimplemented from co::Object.

CO_API void co::Barrier::setHeight ( const uint32_t  height)

Set the number of participants in the barrier.

Version
1.0
virtual void co::Barrier::unpack ( DataIStream is)
protectedvirtual

Deserialize a change.

Parameters
isthe input data stream.
Version
1.0

Reimplemented from co::Object.


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