diff options
Diffstat (limited to 'cpp/src/Glacier2/RoutingTable.cpp')
-rw-r--r-- | cpp/src/Glacier2/RoutingTable.cpp | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/cpp/src/Glacier2/RoutingTable.cpp b/cpp/src/Glacier2/RoutingTable.cpp index 285c0c231df..60004b50dca 100644 --- a/cpp/src/Glacier2/RoutingTable.cpp +++ b/cpp/src/Glacier2/RoutingTable.cpp @@ -8,6 +8,7 @@ // ********************************************************************** #include <Glacier2/RoutingTable.h> +#include <Glacier2/Instrumentation.h> using namespace std; using namespace Ice; @@ -21,11 +22,34 @@ Glacier2::RoutingTable::RoutingTable(const CommunicatorPtr& communicator, const { } +void +Glacier2::RoutingTable::destroy() +{ + IceUtil::Mutex::Lock sync(*this); + if(_observer) + { + _observer->routingTableSize(-static_cast<Ice::Int>(_map.size())); + } + _observer.detach(); +} + +Glacier2::Instrumentation::SessionObserverPtr +Glacier2::RoutingTable::updateObserver(const Glacier2::Instrumentation::RouterObserverPtr& obsv, + const string& userId, + const Ice::ConnectionPtr& connection) +{ + IceUtil::Mutex::Lock sync(*this); + _observer.attach(obsv->getSessionObserver(userId, connection, static_cast<Ice::Int>(_map.size()), _observer.get())); + return _observer.get(); +} + ObjectProxySeq -Glacier2::RoutingTable::add(const ObjectProxySeq& unfiltered, const Ice::Current& current) +Glacier2::RoutingTable::add(const ObjectProxySeq& unfiltered, const Current& current) { IceUtil::Mutex::Lock sync(*this); + size_t sz = _map.size(); + // // We 'pre-scan' the list, applying our validation rules. The // ensures that our state is not modified if this operation results @@ -99,6 +123,11 @@ Glacier2::RoutingTable::add(const ObjectProxySeq& unfiltered, const Ice::Current } } + if(_observer) + { + _observer->routingTableSize(static_cast<Ice::Int>(_map.size()) - static_cast<Ice::Int>(sz)); + } + return evictedProxies; } |