diff options
author | Benoit Foucher <benoit@zeroc.com> | 2017-02-10 18:42:18 +0100 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2017-02-10 18:42:18 +0100 |
commit | 3b2960e7be53c931ffcf84a0a2fe3ca1e2b75e11 (patch) | |
tree | 8a2475dda8b95d5b837bdf5415a1a968c57642c1 /cpp/src/IceGrid/Database.cpp | |
parent | Fix (ICE-7331) - IceGridGUI preference preservation (diff) | |
download | ice-3b2960e7be53c931ffcf84a0a2fe3ca1e2b75e11.tar.bz2 ice-3b2960e7be53c931ffcf84a0a2fe3ca1e2b75e11.tar.xz ice-3b2960e7be53c931ffcf84a0a2fe3ca1e2b75e11.zip |
Fixed ICE-7328 - IceGrid no longer returns proxies from disabled servers for ByType operations
Diffstat (limited to 'cpp/src/IceGrid/Database.cpp')
-rw-r--r-- | cpp/src/IceGrid/Database.cpp | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/cpp/src/IceGrid/Database.cpp b/cpp/src/IceGrid/Database.cpp index ce458e52936..e20d176cbe8 100644 --- a/cpp/src/IceGrid/Database.cpp +++ b/cpp/src/IceGrid/Database.cpp @@ -265,6 +265,8 @@ Database::Database(const Ice::ObjectAdapterPtr& registryAdapter, _nodeObserverTopic = new NodeObserverTopic(_topicManager, _internalAdapter); _registryObserverTopic = new RegistryObserverTopic(_topicManager); + _serverCache.setNodeObserverTopic(_nodeObserverTopic); + // Set all serials to 1 if they have not yet been set. Ice::Long serial; if(!_serials.get(txn, applicationsDbName, serial)) @@ -1777,7 +1779,16 @@ Database::getObjectByTypeOnLeastLoadedNode(const string& type, LoadSample sample Ice::ObjectProxySeq Database::getObjectsByType(const string& type, const Ice::ConnectionPtr& con, const Ice::Context& ctx) { - Ice::ObjectProxySeq proxies = _objectCache.getObjectsByType(type); + Ice::ObjectProxySeq proxies; + + vector<ObjectEntryPtr> objects = _objectCache.getObjectsByType(type); + for(vector<ObjectEntryPtr>::const_iterator q = objects.begin(); q != objects.end(); ++q) + { + if(_nodeObserverTopic->isServerEnabled((*q)->getServer())) // Only return proxies from enabled servers. + { + proxies.push_back((*q)->getProxy()); + } + } IceDB::ReadOnlyTxn txn(_env); vector<ObjectInfo> infos = findByType(txn, _objects, _objectsByType, type); @@ -2162,7 +2173,7 @@ Database::load(const ApplicationHelper& app, ServerEntrySeq& entries, const stri _adapterCache.addReplicaGroup(*r, application); for(ObjectDescriptorSeq::const_iterator o = r->objects.begin(); o != r->objects.end(); ++o) { - _objectCache.add(toObjectInfo(_communicator, *o, r->id), application); + _objectCache.add(toObjectInfo(_communicator, *o, r->id), application, ""); } } @@ -2305,7 +2316,7 @@ Database::reload(const ApplicationHelper& oldApp, for(ObjectDescriptorSeq::const_iterator o = r->objects.begin(); o != r->objects.end(); ++o) { - _objectCache.add(toObjectInfo(_communicator, *o, r->id), application); + _objectCache.add(toObjectInfo(_communicator, *o, r->id), application, ""); } } |