diff options
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/IceGrid/Database.cpp | 8 | ||||
-rw-r--r-- | cpp/src/IceGrid/Database.h | 2 | ||||
-rw-r--r-- | cpp/src/IceGrid/RegistryI.cpp | 3 |
3 files changed, 10 insertions, 3 deletions
diff --git a/cpp/src/IceGrid/Database.cpp b/cpp/src/IceGrid/Database.cpp index 46867a30c3e..084c01b2004 100644 --- a/cpp/src/IceGrid/Database.cpp +++ b/cpp/src/IceGrid/Database.cpp @@ -119,6 +119,7 @@ Database::Database(const Ice::ObjectAdapterPtr& registryAdapter, const IceStorm::TopicManagerPrx& topicManager, const string& instanceName, const TraceLevelsPtr& traceLevels, + const RegistryInfo& info, bool master) : _communicator(registryAdapter->getCommunicator()), _internalAdapter(registryAdapter), @@ -164,11 +165,12 @@ Database::Database(const Ice::ObjectAdapterPtr& registryAdapter, _nodeObserverTopic = new NodeObserverTopic(_topicManager, _internalAdapter); _registryObserverTopic = new RegistryObserverTopic(_topicManager); - _applicationObserverTopic = new ApplicationObserverTopic(_topicManager, _applications); _adapterObserverTopic = new AdapterObserverTopic(_topicManager, _adapters); _objectObserverTopic = new ObjectObserverTopic(_topicManager, _objects); + _registryObserverTopic->registryUp(info); + // // Register a default servant to manage manually registered object adapters. // @@ -719,6 +721,8 @@ Database::addReplica(const string& name, const ReplicaSessionIPtr& session) { _replicaCache.add(name, session); + _registryObserverTopic->registryUp(session->getInfo()); + _applicationObserverTopic->subscribe(session->getObserver(), name); _adapterObserverTopic->subscribe(session->getObserver(), name); _objectObserverTopic->subscribe(session->getObserver(), name); @@ -770,6 +774,8 @@ Database::removeReplica(const string& name, const ReplicaSessionIPtr& session) _adapterObserverTopic->unsubscribe(session->getObserver(), name); _objectObserverTopic->unsubscribe(session->getObserver(), name); + _registryObserverTopic->registryDown(name); + _replicaCache.remove(name); } diff --git a/cpp/src/IceGrid/Database.h b/cpp/src/IceGrid/Database.h index a3402da3f99..9f93d00cdc8 100644 --- a/cpp/src/IceGrid/Database.h +++ b/cpp/src/IceGrid/Database.h @@ -51,7 +51,7 @@ class Database : public IceUtil::Shared, public IceUtil::Monitor<IceUtil::Mutex> public: Database(const Ice::ObjectAdapterPtr&, const IceStorm::TopicManagerPrx&, const std::string&, const TraceLevelsPtr&, - bool); + const RegistryInfo&, bool); virtual ~Database(); void destroy(); diff --git a/cpp/src/IceGrid/RegistryI.cpp b/cpp/src/IceGrid/RegistryI.cpp index a4a944b66a3..f1417d1a176 100644 --- a/cpp/src/IceGrid/RegistryI.cpp +++ b/cpp/src/IceGrid/RegistryI.cpp @@ -253,8 +253,9 @@ RegistryI::start(bool nowarn) "IceGrid.Registry", registryTopicManagerId, "Registry"); + const IceStorm::TopicManagerPrx topicManager = _iceStorm->getTopicManager(); - _database = new Database(registryAdapter, _iceStorm->getTopicManager(), _instanceName, _traceLevels, _master); + _database = new Database(registryAdapter, topicManager, _instanceName, _traceLevels, getInfo(), _master); _wellKnownObjects = new WellKnownObjectsManager(_database); InternalRegistryPrx internalRegistry; |