summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/NodeCache.cpp
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2006-12-07 15:31:48 +0000
committerBenoit Foucher <benoit@zeroc.com>2006-12-07 15:31:48 +0000
commitcbde90b8cc32ec3863c2d78a0ed62e1b986aebe4 (patch)
treef60a3e21a1a066f4ded02d6378c0cf9318a14460 /cpp/src/IceGrid/NodeCache.cpp
parentReplicate TopicManager as well (diff)
downloadice-cbde90b8cc32ec3863c2d78a0ed62e1b986aebe4.tar.bz2
ice-cbde90b8cc32ec3863c2d78a0ed62e1b986aebe4.tar.xz
ice-cbde90b8cc32ec3863c2d78a0ed62e1b986aebe4.zip
Fixed bug 1603
Diffstat (limited to 'cpp/src/IceGrid/NodeCache.cpp')
-rw-r--r--cpp/src/IceGrid/NodeCache.cpp34
1 files changed, 27 insertions, 7 deletions
diff --git a/cpp/src/IceGrid/NodeCache.cpp b/cpp/src/IceGrid/NodeCache.cpp
index dfd740c97e5..08fb3348763 100644
--- a/cpp/src/IceGrid/NodeCache.cpp
+++ b/cpp/src/IceGrid/NodeCache.cpp
@@ -350,16 +350,16 @@ NodeEntry::getInfo() const
return _session->getInfo();
}
-Ice::StringSeq
+ServerEntrySeq
NodeEntry::getServers() const
{
Lock sync(*this);
- Ice::StringSeq names;
+ ServerEntrySeq entries;
for(map<string, ServerEntryPtr>::const_iterator p = _servers.begin(); p != _servers.end(); ++p)
{
- names.push_back(p->second->getId());
+ entries.push_back(p->second);
}
- return names;
+ return entries;
}
LoadInfo
@@ -439,7 +439,7 @@ NodeEntry::loadServer(const ServerEntryPtr& entry, const ServerInfo& server, con
//
if(timeout > 0 && timeout != sessionTimeout)
{
- node = NodePrx::uncheckedCast(node->ice_timeout(sessionTimeout));
+ node = NodePrx::uncheckedCast(node->ice_timeout(timeout + sessionTimeout));
}
try
@@ -486,17 +486,37 @@ NodeEntry::loadServer(const ServerEntryPtr& entry, const ServerInfo& server, con
}
void
-NodeEntry::destroyServer(const ServerEntryPtr& entry, const ServerInfo& info)
+NodeEntry::destroyServer(const ServerEntryPtr& entry, const ServerInfo& info, int timeout)
{
try
{
+ NodePrx node;
+ {
+ Lock sync(*this);
+ checkSession();
+ node = _session->getNode();
+ int sessionTimeout = _session->getTimeout();
+
+ //
+ // Check if we should use a specific timeout (the load
+ // call can deactivate the server and it can take some
+ // time to deactivate, up to "deactivation-timeout"
+ // seconds).
+ //
+ if(timeout > 0 && timeout != sessionTimeout)
+ {
+ node = NodePrx::uncheckedCast(node->ice_timeout(timeout + sessionTimeout));
+ }
+ }
+
if(_cache.getTraceLevels() && _cache.getTraceLevels()->server > 2)
{
Ice::Trace out(_cache.getTraceLevels()->logger, _cache.getTraceLevels()->serverCat);
out << "unloading `" << info.descriptor->id << "' on node `" << _name << "'";
}
+
AMI_Node_destroyServerPtr amiCB = new DestroyCB(_cache.getTraceLevels(), entry, _name);
- getProxy()->destroyServer_async(amiCB, info.descriptor->id, info.uuid, info.revision);
+ node->destroyServer_async(amiCB, info.descriptor->id, info.uuid, info.revision);
}
catch(const NodeUnreachableException& ex)
{