summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/ServerCache.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/IceGrid/ServerCache.cpp')
-rw-r--r--cpp/src/IceGrid/ServerCache.cpp54
1 files changed, 30 insertions, 24 deletions
diff --git a/cpp/src/IceGrid/ServerCache.cpp b/cpp/src/IceGrid/ServerCache.cpp
index 4411ebe8f84..7051f608430 100644
--- a/cpp/src/IceGrid/ServerCache.cpp
+++ b/cpp/src/IceGrid/ServerCache.cpp
@@ -18,6 +18,7 @@
#include <IceGrid/AllocatableObjectCache.h>
#include <IceGrid/SessionI.h>
#include <IceGrid/DescriptorHelper.h>
+#include <IceGrid/Topics.h>
using namespace std;
using namespace IceGrid;
@@ -263,6 +264,12 @@ ServerCache::clear(const string& id)
}
void
+ServerCache::setNodeObserverTopic(const NodeObserverTopicPtr& nodeObserverTopic)
+{
+ _nodeObserverTopic = nodeObserverTopic;
+}
+
+void
ServerCache::addCommunicator(const CommunicatorDescriptorPtr& oldDesc,
const CommunicatorDescriptorPtr& newDesc,
const ServerEntryPtr& server,
@@ -291,7 +298,7 @@ ServerCache::addCommunicator(const CommunicatorDescriptorPtr& oldDesc,
for(ObjectDescriptorSeq::const_iterator r = q->objects.begin(); r != q->objects.end(); ++r)
{
- _objectCache.add(toObjectInfo(_communicator, *r, q->id), application);
+ _objectCache.add(toObjectInfo(_communicator, *r, q->id), application, server->getId());
}
for(ObjectDescriptorSeq::const_iterator r = q->allocatables.begin(); r != q->allocatables.end(); ++r)
{
@@ -393,7 +400,7 @@ ServerEntry::unsync()
Lock sync(*this);
if(_loaded.get())
{
- _load = _loaded;
+ _load.reset(_loaded.release());
}
_proxy = 0;
_adapters.clear();
@@ -421,7 +428,7 @@ ServerEntry::update(const ServerInfo& info, bool noRestart)
{
Lock sync(*this);
- IceUtil::UniquePtr<ServerInfo> descriptor(new ServerInfo());
+ IceInternal::UniquePtr<ServerInfo> descriptor(new ServerInfo());
*descriptor = info;
_updated = true;
@@ -430,17 +437,17 @@ ServerEntry::update(const ServerInfo& info, bool noRestart)
{
if(_loaded.get() && descriptor->node != _loaded->node)
{
- _destroy = _loaded;
+ _destroy.reset(_loaded.release());
}
else if(_load.get() && descriptor->node != _load->node)
{
- _destroy = _load;
+ _destroy.reset(_load.release());
}
}
- _load = descriptor;
+ _load.reset(descriptor.release());
_noRestart = noRestart;
- _loaded.reset(0);
+ _loaded.reset();
_allocatable = info.descriptor->allocatable;
if(info.descriptor->activation == "session")
{
@@ -462,18 +469,18 @@ ServerEntry::destroy(bool noRestart)
if(_loaded.get())
{
assert(!_destroy.get());
- _destroy = _loaded;
+ _destroy.reset(_loaded.release());
}
else if(_load.get())
{
assert(!_destroy.get());
- _destroy = _load;
+ _destroy.reset(_load.release());
}
}
_noRestart = noRestart;
- _load.reset(0);
- _loaded.reset(0);
+ _load.reset();
+ _loaded.reset();
_allocatable = false;
}
@@ -569,14 +576,7 @@ ServerEntry::getAdminProxy()
Ice::Identity adminId;
adminId.name = _id;
adminId.category = _cache.getInstanceName() + "-NodeServerAdminRouter";
- try
- {
- return getProxy(true)->ice_identity(adminId);
- }
- catch(const SynchronizationException&)
- {
- }
- return 0;
+ return getProxy(true)->ice_identity(adminId);
}
AdapterPrx
@@ -685,7 +685,7 @@ ServerEntry::syncImpl()
if(!_load.get() && !_destroy.get())
{
- _load = _loaded; // Re-load the current server.
+ _load.reset(_loaded.release()); // Re-load the current server.
}
_updated = false;
@@ -853,8 +853,8 @@ ServerEntry::loadCallback(const ServerPrx& proxy, const AdapterPrxDict& adpts, i
// time should set the correct timeout before invoking on the
// proxy (e.g.: server start/stop, adapter activate).
//
- _loaded = _load;
- assert(_loaded.get());
+ assert(_load.get());
+ _loaded.reset(_load.release());
_proxy = proxy;
_adapters = adpts;
_activationTimeout = at;
@@ -1098,6 +1098,12 @@ ServerEntry::checkUpdate(const ServerInfo& info, bool noRestart)
return new CheckUpdateResult(_id, oldInfo.node, noRestart, desc, server->begin_checkUpdate(desc, noRestart));
}
+bool
+ServerEntry::isEnabled() const
+{
+ return _cache.getNodeObserverTopic()->isServerEnabled(_id);
+}
+
void
ServerEntry::allocated(const SessionIPtr& session)
{
@@ -1126,7 +1132,7 @@ ServerEntry::allocated(const SessionIPtr& session)
_updated = true;
if(!_load.get())
{
- _load = _loaded;
+ _load.reset(_loaded.release());
}
_session = session;
_load->sessionId = session->getId();
@@ -1213,7 +1219,7 @@ ServerEntry::released(const SessionIPtr& session)
_updated = true;
if(!_load.get())
{
- _load = _loaded;
+ _load.reset(_loaded.release());
}
_load->sessionId = "";
_session = 0;