summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/NodeCache.cpp
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2006-07-21 14:30:52 +0000
committerBenoit Foucher <benoit@zeroc.com>2006-07-21 14:30:52 +0000
commit2379dcbd554ab5c1aac616b5585c99e3d742305e (patch)
treeb674e53966fba682aa1008855a26721bd910e023 /cpp/src/IceGrid/NodeCache.cpp
parentOptimized context to avoid copies (diff)
downloadice-2379dcbd554ab5c1aac616b5585c99e3d742305e.tar.bz2
ice-2379dcbd554ab5c1aac616b5585c99e3d742305e.tar.xz
ice-2379dcbd554ab5c1aac616b5585c99e3d742305e.zip
Initial implementation of the IceGrid registry replication.
Diffstat (limited to 'cpp/src/IceGrid/NodeCache.cpp')
-rw-r--r--cpp/src/IceGrid/NodeCache.cpp21
1 files changed, 19 insertions, 2 deletions
diff --git a/cpp/src/IceGrid/NodeCache.cpp b/cpp/src/IceGrid/NodeCache.cpp
index 0ff9ededd31..517e2b1115a 100644
--- a/cpp/src/IceGrid/NodeCache.cpp
+++ b/cpp/src/IceGrid/NodeCache.cpp
@@ -13,6 +13,7 @@
#include <IceGrid/SessionI.h>
#include <IceGrid/NodeSessionI.h>
#include <IceGrid/ServerCache.h>
+#include <IceGrid/ReplicaCache.h>
#include <IceGrid/DescriptorHelper.h>
using namespace std;
@@ -154,8 +155,9 @@ private:
};
-NodeCache::NodeCache(const Ice::CommunicatorPtr& communicator, int sessionTimeout) :
+NodeCache::NodeCache(const Ice::CommunicatorPtr& communicator, ReplicaCache& replicaCache, int sessionTimeout) :
_communicator(communicator),
+ _replicaCache(replicaCache),
_sessionTimeout(sessionTimeout)
{
}
@@ -250,8 +252,23 @@ NodeEntry::setSession(const NodeSessionIPtr& session)
{
throw NodeActiveException();
}
+ else if(!session && !_session)
+ {
+ return;
+ }
+
+ if(!session && _session)
+ {
+ _cache.getReplicaCache().nodeRemoved(_session->getNode());
+ }
+
_session = session;
remove = _servers.empty() && !_session && _descriptors.empty();
+
+ if(_session)
+ {
+ _cache.getReplicaCache().nodeAdded(session->getNode());
+ }
}
if(session)
@@ -379,7 +396,7 @@ bool
NodeEntry::canRemove()
{
Lock sync(*this);
- return !_session && _servers.empty();
+ return !_session && _servers.empty() && _descriptors.empty();
}
void