diff options
Diffstat (limited to 'cpp/src/IceGrid/Database.cpp')
-rw-r--r-- | cpp/src/IceGrid/Database.cpp | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/cpp/src/IceGrid/Database.cpp b/cpp/src/IceGrid/Database.cpp index 39f4a200bde..75b9a7eab14 100644 --- a/cpp/src/IceGrid/Database.cpp +++ b/cpp/src/IceGrid/Database.cpp @@ -221,31 +221,26 @@ Database::~Database() } void -Database::setRegistryObserver(const RegistryObserverPrx& observer) +Database::setObservers(const RegistryObserverPrx& registryObserver, const NodeObserverPrx& nodeObserver) { int serial; ApplicationDescriptorSeq applications; - Ice::StringSeq nodes; { Lock sync(*this); - _registryObserver = observer; + _registryObserver = registryObserver; + _nodeObserver = nodeObserver; serial = _serial; for(StringApplicationDescriptorDict::const_iterator p = _descriptors.begin(); p != _descriptors.end(); ++p) { applications.push_back(p->second); } - - for(map<string, NodeSessionIPtr>::const_iterator p = _nodes.begin(); p != _nodes.end(); ++p) - { - nodes.push_back(p->first); - } } // // Notify the observers. // - _registryObserver->init(serial, applications, nodes); + _registryObserver->init(serial, applications); } void @@ -715,15 +710,26 @@ Database::getNode(const string& name) const void Database::removeNode(const string& name) { - Lock sync(*this); - if(_nodes.erase(name) > 0) { - if(_traceLevels->node > 0) + Lock sync(*this); + if(_nodes.erase(name) > 0) { - Ice::Trace out(_traceLevels->logger, _traceLevels->nodeCat); - out << "removed node `" << name << "'"; + if(_traceLevels->node > 0) + { + Ice::Trace out(_traceLevels->logger, _traceLevels->nodeCat); + out << "removed node `" << name << "'"; + } } } + + try + { + _nodeObserver->nodeDown(name); + } + catch(const Ice::LocalException&) + { + // TODO: Log a warning? + } } Ice::StringSeq |