/**
* File: InternalDomainMessages.idl
* Content: Corba definitions of the messages required to do the state transfer
* Author: LuisM Pena
* Date: 28th November 2000
* Version: 0.51.00
* Last change:
* 12th April 2001: state transfer inclusion
*
*
**/
#ifndef INTERNAL_DOMAIN_MESSAGES_IDL
#define INTERNAL_DOMAIN_MESSAGES_IDL
#include "DomainGroupHandler.idl"
module sensei
{
module middleware
{
module domains
{
enum StateTransferType
{
STT_StateHandler,
STT_BasicStateHandler,
STT_ExtendedCheckpointable,
STT_Checkpointable,
STT_StatelessTransfer
};
/***********************************************************************/
/************************* MESSAGE P ***********************************/
/***********************************************************************/
struct SubgroupProperties
{
SubgroupId id; //identity of the subgroup
DynamicSubgroupInfo info; //associated info, not used on static groups
StateTransferType type;
};
typedef sequence <SubgroupProperties> SubgroupsInfo;
struct ReplicaInformation
{
GroupMemberId replicaId;
GroupMemberIdList replicasToCoordinate;
};
typedef sequence <ReplicaInformation> ReplicasInformation;
/**
* Message p is the initial message sent between DomainGroupHandlers to
* transfer their features, and any state transfer information required
* (but not the state itself).
* It contains:
* (a) generic information about the group itself
* (b) information about the subgroup layout
* (c) list of current statefull members, with their properties and
* members being coordinated
**/
valuetype MessageP : DomainMessage
{
public long viewId; //message can only be processed on the right view
public BehaviourOnViewChanges behaviour;
public boolean coordinatorElectorRegistered;
public boolean dynamicSubgroupsAllowed;
public long nextDynamicSubgroupId;
public SubgroupsInfo subgroupsInformation;
public MemberPropertiesList props;
public ReplicasInformation replicasInfo;
};
/***********************************************************************/
/************************* MESSAGE C ***********************************/
/***********************************************************************/
struct SubgroupCoordination
{
SubgroupId id;
PhaseCoordination phase;
};
typedef sequence <SubgroupCoordination> SubgroupCoordinations;
/**
* Message c is the reply message sent from a DomainGroupHandler that
* has received the message p. It contains its properties, and the
* coordination phases of the subgroups
**/
valuetype MessageC : DomainMessage
{
public long viewId; //message can only be processed on the right view, depending on the model
public SubgroupCoordinations coordinations;
public boolean containOwnProperties; //true if the next field props is valid
public Properties props; //properties of the member being coordinated
};
/***********************************************************************/
/************************* MESSAGE E ***********************************/
/***********************************************************************/
/**
* Message e is sent when a transfer has finished, containing
* the member that has received the state and its properties
**/
valuetype MessageE : DomainMessage
{
public long viewId; //message can only be processed on the right view, depending on the model
public GroupMemberId member;
public Properties props; //properties of the member getting state
};
/***********************************************************************/
/************************* MESSAGE S ***********************************/
/***********************************************************************/
struct SubgroupState
{
SubgroupId id;
PhaseCoordination phase;
State subState;
};
typedef sequence <SubgroupState> SubgroupStates;
/**
* Message S contains the states being sent, together with the
* coordinations
**/
valuetype MessageS : DomainMessage
{
public long viewId; //message can only be processed on the right view, depending on the model
public SubgroupStates states;
};
/***********************************************************************/
/************************* MESSAGE MEMBER PROPERTIES *******************/
/***********************************************************************/
valuetype MessageMemberProperties : DomainMessage
{
public Properties props;
};
/***********************************************************************/
/************************* MESSAGE CREATE SUBGROUP *********************/
/***********************************************************************/
valuetype MessageCreateSubgroup : DomainMessage
{
public DynamicSubgroupInfo info;
public long creatorId; //id only meaningfull for the message sender
};
/***********************************************************************/
/************************* MESSAGE CREATE SUBGROUP *********************/
/***********************************************************************/
valuetype MessageRemoveSubgroup : DomainMessage
{
public SubgroupId subgroupToRemove;
public DynamicSubgroupInfo info;
};
/***********************************************************************/
/************************* CONCURRENCY MESSAGES ************************/
/***********************************************************************/
/**
* Message sent to lock/unlock a monitor
*/
valuetype MonitorMessage : DomainMessage
{
public boolean lock;
};
/**
* Message sent when a transfer ends completely, with all the actions included
*/
valuetype EndOfTransactionMessage : DomainMessage
{
public sequence<Message> actions;
};
/***********************************************************************/
/************************* MONITOR STATE *******************************/
/***********************************************************************/
valuetype MonitorState : State
{
public GroupMemberIdList locks;
};
};
};
};
#endif