/**
* File: StateTransfer.idl
* Content: Definition of the State Transfer interface
* Author: LuisM Pena
* Date: 11th April 2001
* Version: 0.51.00
* Last change:
*
**/
#ifndef STATE_TRANSFER_IDL
#define STATE_TRANSFER_IDL
#include "GroupMembershipService.idl"
module sensei
{
module middleware
{
module domains
{
//bringing some declarations into scope ...
typedef sensei::middleware::gms::GroupMember GroupMember;
typedef sensei::middleware::gms::GroupMemberId GroupMemberId;
//taking some definitions from the CORBA specification, applying changes when required
abstract valuetype State {}; //instead of the basic ANY definition
typedef GroupMemberId Location; //instead of CosNaming::Name
typedef sequence <Location> Locations;
interface Checkpointable : GroupMember//does not use underscore, i.e, get_state!
{
State getState();
void setState (in State s);
};
typedef string Name;
typedef string Value; //simplified approach, using string instead of any
struct Property
{
Name nam;
Value val;
};
typedef sequence <Property> Properties;
/***********************************************************************/
/************************* PHASE COORDINATION **************************/
/***********************************************************************/
valuetype PhaseCoordination
{
public boolean transferFinished;
};
/***********************************************************************/
/************************* EXTENDED CHECKPOINTABLE *********************/
/***********************************************************************/
interface ExtendedCheckpointable : Checkpointable
{
void assumeState ();
};
/***********************************************************************/
/************************* BASIC STATE HANDLER *************************/
/***********************************************************************/
interface BasicStateHandler : GroupMember
{
void assumeState ();
void startTransfer (in Locations joiningMembers, inout PhaseCoordination phase);
State getState (inout PhaseCoordination phase);
void setState (in State s, in PhaseCoordination phase);
void stopTransfer (in Locations joiningMembers, in boolean transferFinished);
};
/***********************************************************************/
/************************* STATE HANDLER *******************************/
/***********************************************************************/
interface StateHandler : BasicStateHandler
{
void syncTransfer (in Location coordinator, inout PhaseCoordination phase);
void interruptTransfer (inout PhaseCoordination phase);
void continueTransfer (in Locations joiningMembers,
inout PhaseCoordination coordinator,
in PhaseCoordination joining);
};
/***********************************************************************/
/************************* COORDINATOR ELECTOR *************************/
/***********************************************************************/
struct CoordinatorInformation
{
Location statusMember;
Locations currentCoordinations;
};
typedef sequence <CoordinatorInformation> CoordinatorInformationList;
interface CoordinatorElector
{
Location getCoordinator (in Location loc, in CoordinatorInformationList info);
};
/***********************************************************************/
/************************* BEHAVIOUR ON VIEW CHANGES *******************/
/***********************************************************************/
enum BehaviourOnViewChanges
{
MembersOnTransferExcludedFromGroup,
StatelessMembersDoNotBelongToGroup,
StatelessMembersBelongToGroup
};
};
};
};
#endif