summaryrefslogtreecommitdiff
path: root/cpp/src/Glacier2/RoutingTable.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/Glacier2/RoutingTable.cpp')
-rw-r--r--cpp/src/Glacier2/RoutingTable.cpp31
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;
}