19#include <IceUtil/IceUtil.h>
20#include <IceUtil/Timer.h>
28 class NodeI :
public Node,
public IceUtil::Monitor<IceUtil::RecMutex>
33 const Ice::ObjectPrx&,
35 const std::map<int, NodePrx>&);
41 void merge(
const std::set<int>&);
43 virtual void invitation(
int,
const std::string&,
const Ice::Current&);
45 ready(
int,
const std::string&,
const Ice::ObjectPrx&,
int, Ice::Long,
const Ice::Current&);
49 const Ice::ObjectPrx&,
54 virtual bool areYouThere(
const std::string&,
int,
const Ice::Current&)
const;
55 virtual Ice::ObjectPrx
sync(
const Ice::Current&)
const;
64 Ice::ObjectPrx
startUpdate(Ice::Long&,
const char*,
int);
79 const Ice::ObjectPrx _replicaProxy;
82 const std::map<int, NodePrx> _nodes;
83 const std::map<int, NodePrx>
86 const IceUtil::Time _masterTimeout;
87 const IceUtil::Time _electionTimeout;
88 const IceUtil::Time _mergeTimeout;
96 std::set<GroupNodeInfo> _up;
97 std::set<int> _invitesIssued;
98 std::set<int> _invitesAccepted;
101 Ice::Long _generation;
103 Ice::ObjectPrx _coordinatorProxy;
107 IceUtil::TimerTaskPtr _mergeTask;
108 IceUtil::TimerTaskPtr _timeoutTask;
109 IceUtil::TimerTaskPtr _checkTask;
110 IceUtil::TimerTaskPtr _mergeContinueTask;
126 _node->finishUpdate();
141 _master = _node->startCachedRead(_generation, file, line);
149 _node->finishUpdate();
173 Ice::ObjectPrx _master;
174 Ice::Long _generation;
181 Ice::Long generation,
188 _node->startObserverUpdate(generation, file, line);
196 _node->finishUpdate();
CachedReadHelper(const NodeIPtr &node, const char *file, int line)
Ice::Long generation() const
Ice::ObjectPrx getMaster() const
bool observerPrecondition(Ice::Long generation) const
FinishUpdateHelper(const NodeIPtr &node)
void merge(const std::set< int > &)
void checkObserverInit(Ice::Long)
Ice::ObjectPrx startUpdate(Ice::Long &, const char *, int)
virtual void accept(int, const std::string &, const Ice::IntSeq &, const Ice::ObjectPrx &, const LogUpdate &, int, const Ice::Current &)
virtual bool areYouThere(const std::string &, int, const Ice::Current &) const
virtual void invitation(int, const std::string &, const Ice::Current &)
bool updateMaster(const char *, int)
NodeI(const IceStorm::InstancePtr &, const ReplicaPtr &, const Ice::ObjectPrx &, int, const std::map< int, NodePrx > &)
void recovery(Ice::Long=-1)
virtual void ready(int, const std::string &, const Ice::ObjectPrx &, int, Ice::Long, const Ice::Current &)
void startObserverUpdate(Ice::Long, const char *, int)
Ice::ObjectPrx startCachedRead(Ice::Long &, const char *, int)
ObserverUpdateHelper(const NodeIPtr &node, Ice::Long generation, const char *file, int line)
idempotent Object * sync()
Get the sync object for the replica hosted by this node.
idempotent QueryInfo query()
Get the query information for the given node.
idempotent NodeInfoSeq nodes()
Get the replication group information.
idempotent bool areYouCoordinator()
Determine if this node is a coordinator.
::std::vector<::IceStormElection::NodeInfo > NodeInfoSeq
A sequence of node info.
IceUtil::Handle< NodeI > NodeIPtr
IceUtil::Handle< Replica > ReplicaPtr
IceUtil::Handle< Observers > ObserversPtr
IceUtil::Handle< TraceLevels > TraceLevelsPtr
IceUtil::Handle< Instance > InstancePtr
IceUtil::Handle< Timer > TimerPtr
A struct used for marking the last log update.