From ac587d9f1a6d34e46956fd17c81f99beb7ed97ad Mon Sep 17 00:00:00 2001 From: Bernard Normier Date: Wed, 10 Sep 2014 19:09:53 +0000 Subject: IceGrid::Admin now provides remote access to IceGrid registry and node Admin objects, and icegridadmin uses these new operations to show the Ice log file for IceGrid registries and IceGrid nodes (ICE-2400) --- cpp/src/IceGrid/SessionServantManager.cpp | 45 ++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 10 deletions(-) (limited to 'cpp/src/IceGrid/SessionServantManager.cpp') diff --git a/cpp/src/IceGrid/SessionServantManager.cpp b/cpp/src/IceGrid/SessionServantManager.cpp index 6f85ff9ccff..a0a54302fe6 100644 --- a/cpp/src/IceGrid/SessionServantManager.cpp +++ b/cpp/src/IceGrid/SessionServantManager.cpp @@ -21,12 +21,20 @@ SessionServantManager::SessionServantManager(const Ice::ObjectAdapterPtr& adapte bool checkConnection, const string& serverAdminCategory, const Ice::ObjectPtr& serverAdminRouter, + const string& nodeAdminCategory, + const Ice::ObjectPtr& nodeAdminRouter, + const string& replicaAdminCategory, + const Ice::ObjectPtr& replicaAdminRouter, const AdminCallbackRouterPtr& adminCallbackRouter) : _adapter(adapter), _instanceName(instanceName), _checkConnection(checkConnection), _serverAdminCategory(serverAdminCategory), _serverAdminRouter(serverAdminRouter), + _nodeAdminCategory(nodeAdminCategory), + _nodeAdminRouter(nodeAdminRouter), + _replicaAdminCategory(replicaAdminCategory), + _replicaAdminRouter(replicaAdminRouter), _adminCallbackRouter(adminCallbackRouter) { } @@ -35,26 +43,43 @@ Ice::ObjectPtr SessionServantManager::locate(const Ice::Current& current, Ice::LocalObjectPtr&) { Lock sync(*this); + Ice::ObjectPtr servant; + bool plainServant = false; + if(_serverAdminRouter && current.id.category == _serverAdminCategory) { - if(_checkConnection && _adminConnections.find(current.con) == _adminConnections.end()) - { - return 0; - } - else - { - return _serverAdminRouter; - } + servant = _serverAdminRouter; + } + else if(_nodeAdminRouter && current.id.category == _nodeAdminCategory) + { + servant = _nodeAdminRouter; + } + else if(_replicaAdminRouter && current.id.category == _replicaAdminCategory) + { + servant = _replicaAdminRouter; } else { + plainServant = true; + map::const_iterator p = _servants.find(current.id); if(p == _servants.end() || (_checkConnection && p->second.connection != current.con)) { - return 0; + servant = 0; + } + else + { + servant = p->second.servant; } - return p->second.servant; } + + if(!plainServant && servant && _checkConnection && + _adminConnections.find(current.con) == _adminConnections.end()) + { + servant = 0; + } + + return servant; } void -- cgit v1.2.3