summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/Database.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/IceGrid/Database.cpp')
-rw-r--r--cpp/src/IceGrid/Database.cpp17
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, "");
}
}