diff options
author | Benoit Foucher <benoit@zeroc.com> | 2005-09-13 08:20:38 +0000 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2005-09-13 08:20:38 +0000 |
commit | 7f24d81b685383e7cc09e32ad89c830d86372ca0 (patch) | |
tree | 8ccefbe74117f62bd42dd8794cc15e3f9674cb36 /cpp/src/IceGrid/NodeCache.cpp | |
parent | Removed bogus abort(); // XXX (diff) | |
download | ice-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.cpp | 41 |
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(); } |