diff options
author | Benoit Foucher <benoit@zeroc.com> | 2006-09-15 15:29:05 +0000 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2006-09-15 15:29:05 +0000 |
commit | cc25d4e822f650e4d947b27a173c01de543738b4 (patch) | |
tree | be3fde742978e351c3bcc0a8118a99752396499d /cpp/src/IceGrid/NodeCache.cpp | |
parent | Code cleanup (diff) | |
download | ice-cc25d4e822f650e4d947b27a173c01de543738b4.tar.bz2 ice-cc25d4e822f650e4d947b27a173c01de543738b4.tar.xz ice-cc25d4e822f650e4d947b27a173c01de543738b4.zip |
More code cleanup + added replica session timeout
Diffstat (limited to 'cpp/src/IceGrid/NodeCache.cpp')
-rw-r--r-- | cpp/src/IceGrid/NodeCache.cpp | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/cpp/src/IceGrid/NodeCache.cpp b/cpp/src/IceGrid/NodeCache.cpp index da37fba58a1..a0af0caa448 100644 --- a/cpp/src/IceGrid/NodeCache.cpp +++ b/cpp/src/IceGrid/NodeCache.cpp @@ -28,20 +28,35 @@ class LoadCB : public AMI_Node_loadServer { public: - LoadCB(const TraceLevelsPtr& traceLevels, const ServerEntryPtr& server, const string& id, const string& node) : - _traceLevels(traceLevels), _server(server), _id(id), _node(node) + LoadCB(const TraceLevelsPtr& traceLevels, + const ServerEntryPtr& server, + const string& id, + const string& node, + int timeout) : + _traceLevels(traceLevels), _server(server), _id(id), _node(node), _timeout(timeout) { } void - ice_response(const ServerPrx& proxy, const AdapterPrxDict& adapters, int at, int dt) + ice_response(const ServerPrx& proxy, const AdapterPrxDict& adpts, int at, int dt) { if(_traceLevels && _traceLevels->server > 1) { Ice::Trace out(_traceLevels->logger, _traceLevels->serverCat); out << "loaded `" << _id << "' on node `" << _node << "'"; } - _server->loadCallback(ServerPrx::uncheckedCast(proxy->ice_collocationOptimized(false)), adapters, at, dt); + + // + // Apply the node session timeout on the proxies. + // + ServerPrx server = ServerPrx::uncheckedCast(proxy->ice_timeout(_timeout * 1000)); + AdapterPrxDict adapters; + for(AdapterPrxDict::const_iterator p = adpts.begin(); p != adpts.end(); ++p) + { + adapters.insert(make_pair(p->first, AdapterPrx::uncheckedCast(p->second->ice_timeout(_timeout * 1000)))); + } + + _server->loadCallback(server, adapters, at + _timeout, dt + _timeout); } void @@ -94,6 +109,7 @@ private: const ServerEntryPtr _server; const string _id; const string _node; + const int _timeout; }; class DestroyCB : public AMI_Node_destroyServer @@ -390,6 +406,7 @@ NodeEntry::loadServer(const ServerEntryPtr& entry, const ServerInfo& server, con try { NodePrx node; + int timeout; ServerDescriptorPtr desc; { Lock sync(*this); @@ -398,6 +415,7 @@ NodeEntry::loadServer(const ServerEntryPtr& entry, const ServerInfo& server, con throw NodeUnreachableException(_name, "the node is not active"); } node = _session->getNode(); + timeout = _session->getTimeout(); try { desc = getServerDescriptor(server, session); @@ -430,8 +448,7 @@ NodeEntry::loadServer(const ServerEntryPtr& entry, const ServerInfo& server, con } } - AMI_Node_loadServerPtr amiCB = new LoadCB(_cache.getTraceLevels(), entry, entry->getId(), _name); - + AMI_Node_loadServerPtr amiCB = new LoadCB(_cache.getTraceLevels(), entry, entry->getId(), _name, timeout); ServerInfo info = server; info.descriptor = desc; node->loadServer_async(amiCB, info, _cache.isMaster()); |