diff options
author | Benoit Foucher <benoit@zeroc.com> | 2006-11-24 14:10:34 +0000 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2006-11-24 14:10:34 +0000 |
commit | df8bf3b419976462a82ea6cc5ba55513f50f7a54 (patch) | |
tree | b3befacd3c9ac0b6ee28f9a1845134b5d292eee1 /cpp/src/IceGrid/NodeSessionI.cpp | |
parent | *** empty log message *** (diff) | |
download | ice-df8bf3b419976462a82ea6cc5ba55513f50f7a54.tar.bz2 ice-df8bf3b419976462a82ea6cc5ba55513f50f7a54.tar.xz ice-df8bf3b419976462a82ea6cc5ba55513f50f7a54.zip |
Code cleanup
Diffstat (limited to 'cpp/src/IceGrid/NodeSessionI.cpp')
-rw-r--r-- | cpp/src/IceGrid/NodeSessionI.cpp | 63 |
1 files changed, 41 insertions, 22 deletions
diff --git a/cpp/src/IceGrid/NodeSessionI.cpp b/cpp/src/IceGrid/NodeSessionI.cpp index 8df3407c322..fa3f29903d4 100644 --- a/cpp/src/IceGrid/NodeSessionI.cpp +++ b/cpp/src/IceGrid/NodeSessionI.cpp @@ -33,7 +33,12 @@ NodeSessionI::NodeSessionI(const DatabasePtr& database, __setNoDelete(true); try { - _database->addNode(name, this); + _database->getNode(name, true)->setSession(this); + + ObjectInfo info; + info.type = Node::ice_staticId(); + info.proxy = _node; + _database->addInternalObject(info, true); // Add or update previous node proxy. } catch(...) { @@ -72,15 +77,7 @@ NodeSessionI::getTimeout(const Ice::Current& current) const NodeObserverPrx NodeSessionI::getObserver(const Ice::Current& current) const { - NodeObserverTopicPtr topic = NodeObserverTopicPtr::dynamicCast(_database->getObserverTopic(NodeObserverTopicName)); - if(topic) - { - return topic->getPublisher(); - } - else - { - return 0; - } + return NodeObserverTopicPtr::dynamicCast(_database->getObserverTopic(NodeObserverTopicName))->getPublisher(); } void @@ -89,12 +86,12 @@ NodeSessionI::loadServers(const Ice::Current& current) const // // Get the server proxies to load them on the node. // - Ice::StringSeq servers = _database->getAllNodeServers(_name); + Ice::StringSeq servers = _database->getNode(_name)->getServers(); for(Ice::StringSeq::const_iterator p = servers.begin(); p != servers.end(); ++p) { try { - _database->loadServer(*p); + _database->getServer(*p)->load(); } catch(const Ice::UserException&) { @@ -106,21 +103,23 @@ NodeSessionI::loadServers(const Ice::Current& current) const Ice::StringSeq NodeSessionI::getServers(const Ice::Current& current) const { - return _database->getAllNodeServers(_name); + return _database->getNode(_name)->getServers(); } void -NodeSessionI::waitForApplicationReplication_async(const AMD_NodeSession_waitForApplicationReplicationPtr& cb, - const std::string& application, - int revision, - const Ice::Current&) const +NodeSessionI::waitForApplicationUpdate_async(const AMD_NodeSession_waitForApplicationUpdatePtr& cb, + const std::string& application, + int revision, + const Ice::Current&) const { - _database->waitForApplicationReplication(cb, application, revision); + _database->waitForApplicationUpdate(cb, application, revision); } void NodeSessionI::destroy(const Ice::Current& current) { + const bool shutdown = !current.adapter; // adapter is null if we're shutting down, see InternalRegistryI.cpp + { Lock sync(*this); if(_destroy) @@ -130,12 +129,12 @@ NodeSessionI::destroy(const Ice::Current& current) _destroy = true; } - Ice::StringSeq servers = _database->getAllNodeServers(_name); + Ice::StringSeq servers = _database->getNode(_name)->getServers(); for(Ice::StringSeq::const_iterator p = servers.begin(); p != servers.end(); ++p) { try { - _database->unloadServer(*p); + _database->getServer(*p)->unload(); } catch(const Ice::UserException&) { @@ -143,9 +142,29 @@ NodeSessionI::destroy(const Ice::Current& current) } } - _database->removeNode(_name, this, !current.adapter); + // + // If the registry isn't being shutdown we remove the node + // internal proxy from the database. + // + if(!shutdown) + { + _database->removeInternalObject(_node->ice_getIdentity()); + } + + // + // Next we notify the observer. + // + NodeObserverTopicPtr::dynamicCast(_database->getObserverTopic(NodeObserverTopicName))->nodeDown(_name); + + + // + // Finally, we clear the session, this must be done last. As soon + // as the node entry session is set to 0 another session might be + // created. + // + _database->getNode(_name)->setSession(0); - if(current.adapter) + if(!shutdown) { try { |