summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/NodeCache.cpp
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2005-09-13 08:20:38 +0000
committerBenoit Foucher <benoit@zeroc.com>2005-09-13 08:20:38 +0000
commit7f24d81b685383e7cc09e32ad89c830d86372ca0 (patch)
tree8ccefbe74117f62bd42dd8794cc15e3f9674cb36 /cpp/src/IceGrid/NodeCache.cpp
parentRemoved bogus abort(); // XXX (diff)
downloadice-7f24d81b685383e7cc09e32ad89c830d86372ca0.tar.bz2
ice-7f24d81b685383e7cc09e32ad89c830d86372ca0.tar.xz
ice-7f24d81b685383e7cc09e32ad89c830d86372ca0.zip
Added support for load factor
Added warning for unknown XML attributes
Diffstat (limited to 'cpp/src/IceGrid/NodeCache.cpp')
-rw-r--r--cpp/src/IceGrid/NodeCache.cpp41
1 files changed, 37 insertions, 4 deletions
diff --git a/cpp/src/IceGrid/NodeCache.cpp b/cpp/src/IceGrid/NodeCache.cpp
index 0b0478f5809..f4ca10d62f8 100644
--- a/cpp/src/IceGrid/NodeCache.cpp
+++ b/cpp/src/IceGrid/NodeCache.cpp
@@ -43,6 +43,28 @@ NodeEntry::NodeEntry(Cache<string, NodeEntry>& cache, const std::string& name) :
}
void
+NodeEntry::addDescriptor(const string& application, const NodeDescriptor& descriptor)
+{
+ Lock sync(*this);
+ _descriptors.insert(make_pair(application, descriptor));
+}
+
+void
+NodeEntry::removeDescriptor(const string& application)
+{
+ bool remove = false;
+ {
+ Lock sync(*this);
+ _descriptors.erase(application);
+ remove = _servers.empty() && !_session && _descriptors.empty();
+ }
+ if(remove)
+ {
+ _cache.remove(_name);
+ }
+}
+
+void
NodeEntry::addServer(const ServerEntryPtr& entry)
{
Lock sync(*this);
@@ -56,7 +78,7 @@ NodeEntry::removeServer(const ServerEntryPtr& entry)
{
Lock sync(*this);
_servers.erase(entry->getId());
- remove = _servers.empty() && !_session;
+ remove = _servers.empty() && !_session && _descriptors.empty();
}
if(remove)
{
@@ -75,12 +97,12 @@ NodeEntry::setSession(const NodeSessionIPtr& session)
throw NodeActiveException();
}
_session = session;
- remove = _servers.empty() && !_session;
+ remove = _servers.empty() && !_session && _descriptors.empty();
}
if(remove)
{
_cache.remove(_name);
- }
+ }
if(session)
{
@@ -120,13 +142,24 @@ NodeEntry::getServers() const
}
LoadInfo
-NodeEntry::getLoadInfo() const
+NodeEntry::getLoadInfoAndLoadFactor(const string& application, float& loadFactor) const
{
Lock sync(*this);
if(!_session)
{
throw NodeUnreachableException(_name, "node is not registered");
}
+ map<string, NodeDescriptor>::const_iterator p = _descriptors.find(application);
+ loadFactor = -1.0f;
+ if(p != _descriptors.end())
+ {
+ istringstream is(p->second.loadFactor);
+ is >> loadFactor;
+ if(loadFactor < 0.0f)
+ {
+ loadFactor = 1.0f;
+ }
+ }
return _session->getLoadInfo();
}