diff options
author | Benoit Foucher <benoit@zeroc.com> | 2006-12-07 15:31:48 +0000 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2006-12-07 15:31:48 +0000 |
commit | cbde90b8cc32ec3863c2d78a0ed62e1b986aebe4 (patch) | |
tree | f60a3e21a1a066f4ded02d6378c0cf9318a14460 /cpp/src/IceGrid/NodeCache.cpp | |
parent | Replicate TopicManager as well (diff) | |
download | ice-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.cpp | 34 |
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) { |