diff options
author | Benoit Foucher <benoit@zeroc.com> | 2011-04-19 13:49:39 +0200 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2011-04-19 13:49:39 +0200 |
commit | 8d657499e5e2a76fa9d73598ee276617c265f53c (patch) | |
tree | a4960fc5d4f66249eb3a626dc234dcac08e48b82 /cpp/src/IceGrid/ReplicaSessionManager.cpp | |
parent | 4802 - Proxy members should be marked transient (diff) | |
download | ice-8d657499e5e2a76fa9d73598ee276617c265f53c.tar.bz2 ice-8d657499e5e2a76fa9d73598ee276617c265f53c.tar.xz ice-8d657499e5e2a76fa9d73598ee276617c265f53c.zip |
More IceGrid fixes to reduce startup delays if some slaves are unavailable
Diffstat (limited to 'cpp/src/IceGrid/ReplicaSessionManager.cpp')
-rw-r--r-- | cpp/src/IceGrid/ReplicaSessionManager.cpp | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/cpp/src/IceGrid/ReplicaSessionManager.cpp b/cpp/src/IceGrid/ReplicaSessionManager.cpp index 6dd555ab4d0..ca7ff6e6950 100644 --- a/cpp/src/IceGrid/ReplicaSessionManager.cpp +++ b/cpp/src/IceGrid/ReplicaSessionManager.cpp @@ -333,11 +333,18 @@ NodePrxSeq ReplicaSessionManager::getNodes(const NodePrxSeq& nodes) const { assert(_thread && _thread->getRegistry()); - try + if(_thread->getSession()) { - return _thread->getRegistry()->getNodes(); + try + { + return _thread->getRegistry()->getNodes(); + } + catch(const Ice::LocalException&) + { + return nodes; + } } - catch(const Ice::LocalException&) + else { return nodes; } @@ -448,12 +455,24 @@ ReplicaSessionManager::createSession(InternalRegistryPrx& registry, IceUtil::Tim if(!session) { - for(vector<QueryPrx>::const_iterator p = _queryObjects.begin(); p != _queryObjects.end(); ++p) + vector<Ice::AsyncResultPtr> results; + for(vector<QueryPrx>::const_iterator q = _queryObjects.begin(); q != _queryObjects.end(); ++q) + { + results.push_back((*q)->begin_findObjectById(registry->ice_getIdentity())); + } + + for(vector<Ice::AsyncResultPtr>::const_iterator p = results.begin(); p != results.end(); ++p) { + QueryPrx query = QueryPrx::uncheckedCast((*p)->getProxy()); + if(isDestroyed()) + { + break; + } + InternalRegistryPrx newRegistry; try { - Ice::ObjectPrx obj = (*p)->findObjectById(registry->ice_getIdentity()); + Ice::ObjectPrx obj = query->end_findObjectById(*p); newRegistry = InternalRegistryPrx::uncheckedCast(obj); if(newRegistry && used.find(newRegistry) == used.end()) { |