diff options
Diffstat (limited to 'cpp')
-rw-r--r-- | cpp/src/IceGrid/AdapterCache.cpp | 87 | ||||
-rw-r--r-- | cpp/src/IceGrid/AdapterCache.h | 6 | ||||
-rw-r--r-- | cpp/src/IceGrid/Cache.h | 12 | ||||
-rw-r--r-- | cpp/src/IceGrid/Database.cpp | 31 | ||||
-rw-r--r-- | cpp/src/IceGrid/NodeCache.cpp | 18 | ||||
-rw-r--r-- | cpp/src/IceGrid/ObjectCache.cpp | 13 | ||||
-rw-r--r-- | cpp/src/IceGrid/ServerCache.cpp | 60 |
7 files changed, 194 insertions, 33 deletions
diff --git a/cpp/src/IceGrid/AdapterCache.cpp b/cpp/src/IceGrid/AdapterCache.cpp index 944bc27a7ab..93b018a33ea 100644 --- a/cpp/src/IceGrid/AdapterCache.cpp +++ b/cpp/src/IceGrid/AdapterCache.cpp @@ -7,6 +7,8 @@ // // ********************************************************************** +#include <Ice/LoggerUtil.h> + #include <IceGrid/AdapterCache.h> #include <IceGrid/NodeSessionI.h> #include <IceGrid/ServerCache.h> @@ -74,6 +76,28 @@ AdapterCache::get(const string& id, bool create) const return entry; } +AdapterEntryPtr +AdapterCache::addImpl(const string& id) +{ + if(_traceLevels->adapter > 0) + { + Ice::Trace out(_traceLevels->logger, _traceLevels->adapterCat); + out << "added adapter `" << id << "'"; + } + return Cache<string, AdapterEntry>::addImpl(id); +} + +AdapterEntryPtr +AdapterCache::removeImpl(const string& id) +{ + if(_traceLevels->adapter > 0) + { + Ice::Trace out(_traceLevels->logger, _traceLevels->adapterCat); + out << "removed adapter `" << id << "'"; + } + return Cache<string, AdapterEntry>::removeImpl(id); +} + AdapterEntry::AdapterEntry(Cache<string, AdapterEntry>& cache, const std::string& id) : _cache(cache), _id(id), @@ -85,41 +109,45 @@ AdapterEntry::AdapterEntry(Cache<string, AdapterEntry>& cache, const std::string void AdapterEntry::enableReplication(const LoadBalancingPolicyPtr& policy) { + Lock sync(*this); + _replicated = true; + _loadBalancing = policy; + istringstream is(policy->nReplicas); + is >> _loadBalancingNReplicas; + if(_loadBalancingNReplicas < 1) { - Lock sync(*this); - _replicated = true; - _loadBalancing = policy; - istringstream is(policy->nReplicas); - is >> _loadBalancingNReplicas; - if(_loadBalancingNReplicas < 1) + _loadBalancingNReplicas = 1; + } + else if(_loadBalancingNReplicas > static_cast<int>(_servers.size())) + { + _loadBalancingNReplicas = _servers.size(); + } + AdaptiveLoadBalancingPolicyPtr alb = AdaptiveLoadBalancingPolicyPtr::dynamicCast(_loadBalancing); + if(alb) + { + if(alb->loadSample == "1") { - _loadBalancingNReplicas = 1; + _loadSample = LoadSample1; } - else if(_loadBalancingNReplicas > static_cast<int>(_servers.size())) + else if(alb->loadSample == "5") { - _loadBalancingNReplicas = _servers.size(); + _loadSample = LoadSample5; } - AdaptiveLoadBalancingPolicyPtr alb = AdaptiveLoadBalancingPolicyPtr::dynamicCast(_loadBalancing); - if(alb) + else if(alb->loadSample == "15") { - if(alb->loadSample == "1") - { - _loadSample = LoadSample1; - } - else if(alb->loadSample == "5") - { - _loadSample = LoadSample5; - } - else if(alb->loadSample == "15") - { - _loadSample = LoadSample15; - } - else - { - _loadSample = LoadSample1; - } + _loadSample = LoadSample15; + } + else + { + _loadSample = LoadSample1; } } + + if(_cache.getTraceLevels()->adapter > 0) + { + Ice::Trace out(_cache.getTraceLevels()->logger, _cache.getTraceLevels()->adapterCat); + out << "enabled replication on adapter `" << _id << "'"; + } } void @@ -131,6 +159,11 @@ AdapterEntry::disableReplication() _replicated = false; remove = _servers.empty(); } + if(_cache.getTraceLevels()->adapter > 0) + { + Ice::Trace out(_cache.getTraceLevels()->logger, _cache.getTraceLevels()->adapterCat); + out << "disabled replication on adapter `" << _id << "'"; + } if(remove) { _cache.remove(_id); diff --git a/cpp/src/IceGrid/AdapterCache.h b/cpp/src/IceGrid/AdapterCache.h index 51c20c14cdd..f8289576ebb 100644 --- a/cpp/src/IceGrid/AdapterCache.h +++ b/cpp/src/IceGrid/AdapterCache.h @@ -71,6 +71,12 @@ public: AdapterCache(const TraceLevelsPtr&); AdapterEntryPtr get(const std::string&, bool = false) const; + +protected: + + AdapterEntryPtr addImpl(const std::string&); + AdapterEntryPtr removeImpl(const std::string&); + }; }; diff --git a/cpp/src/IceGrid/Cache.h b/cpp/src/IceGrid/Cache.h index d68b3b4d363..0a4e0684c58 100644 --- a/cpp/src/IceGrid/Cache.h +++ b/cpp/src/IceGrid/Cache.h @@ -79,9 +79,7 @@ protected: { if(create) { - ValuePtr entry = createEntry(key); - _entriesHint = _entries.insert(_entriesHint, make_pair(key, entry)); - return entry; + return addImpl(key); } else { @@ -91,6 +89,14 @@ protected: } virtual ValuePtr + addImpl(const Key& key) + { + ValuePtr entry = createEntry(key); + _entriesHint = _entries.insert(_entriesHint, make_pair(key, entry)); + return entry; + } + + virtual ValuePtr removeImpl(const Key& key) { typename std::map<Key, ValuePtr>::iterator p = _entries.end(); diff --git a/cpp/src/IceGrid/Database.cpp b/cpp/src/IceGrid/Database.cpp index d140a009698..bde424351e5 100644 --- a/cpp/src/IceGrid/Database.cpp +++ b/cpp/src/IceGrid/Database.cpp @@ -518,6 +518,10 @@ Database::setAdapterDirectProxy(const string& serverId, const string& adapterId, { Ice::Trace out(_traceLevels->logger, _traceLevels->adapterCat); out << "added adapter `" << adapterId << "'"; + if(!serverId.empty()) + { + out << " from server `" << serverId << "'"; + } } } else @@ -530,6 +534,10 @@ Database::setAdapterDirectProxy(const string& serverId, const string& adapterId, { Ice::Trace out(_traceLevels->logger, _traceLevels->adapterCat); out << "updated adapter `" << adapterId << "'"; + if(!serverId.empty()) + { + out << " from server `" << serverId << "'"; + } } } } @@ -549,10 +557,26 @@ Database::setAdapterDirectProxy(const string& serverId, const string& adapterId, if(proxies.empty()) { adapters.erase(p); + + if(_traceLevels->adapter > 0) + { + Ice::Trace out(_traceLevels->logger, _traceLevels->adapterCat); + out << "removed adapter `" << adapterId << "'"; + } } else { p.set(proxies); + + if(_traceLevels->adapter > 0) + { + Ice::Trace out(_traceLevels->logger, _traceLevels->adapterCat); + out << "removed adapter `" << adapterId << "'"; + if(!serverId.empty()) + { + out << " from server `" << serverId << "'"; + } + } } } else @@ -590,6 +614,12 @@ Database::removeAdapter(const string& adapterId) if(p != adapters.end()) { adapters.erase(p); + + if(_traceLevels->adapter > 0) + { + Ice::Trace out(_traceLevels->logger, _traceLevels->adapterCat); + out << "removed adapter `" << adapterId << "'"; + } } else { @@ -759,6 +789,7 @@ Database::updateObject(const Ice::ObjectPrx& proxy) ex.id = id; throw ex; } + ObjectInfo info = p->second; info.proxy = proxy; p.set(info); diff --git a/cpp/src/IceGrid/NodeCache.cpp b/cpp/src/IceGrid/NodeCache.cpp index f4ca10d62f8..6e99a84b88c 100644 --- a/cpp/src/IceGrid/NodeCache.cpp +++ b/cpp/src/IceGrid/NodeCache.cpp @@ -8,7 +8,7 @@ // ********************************************************************** #include <IceUtil/Functional.h> - +#include <Ice/LoggerUtil.h> #include <IceGrid/NodeCache.h> #include <IceGrid/NodeSessionI.h> #include <IceGrid/ServerCache.h> @@ -83,7 +83,7 @@ NodeEntry::removeServer(const ServerEntryPtr& entry) if(remove) { _cache.remove(_name); - } + } } void @@ -115,6 +115,20 @@ NodeEntry::setSession(const NodeSessionIPtr& session) } } for_each(entries.begin(), entries.end(), IceUtil::voidMemFun(&ServerEntry::sync)); + + if(_cache.getTraceLevels()->node > 0) + { + Ice::Trace out(_cache.getTraceLevels()->logger, _cache.getTraceLevels()->nodeCat); + out << "node `" << _name << "' up"; + } + } + else + { + if(_cache.getTraceLevels()->node > 0) + { + Ice::Trace out(_cache.getTraceLevels()->logger, _cache.getTraceLevels()->nodeCat); + out << "node `" << _name << "' down"; + } } } diff --git a/cpp/src/IceGrid/ObjectCache.cpp b/cpp/src/IceGrid/ObjectCache.cpp index fc1b1063fd4..a93996a43bd 100644 --- a/cpp/src/IceGrid/ObjectCache.cpp +++ b/cpp/src/IceGrid/ObjectCache.cpp @@ -9,6 +9,7 @@ #include <Ice/Communicator.h> #include <Ice/IdentityUtil.h> +#include <Ice/LoggerUtil.h> #include <IceGrid/ObjectCache.h> #include <IceGrid/NodeSessionI.h> @@ -49,6 +50,12 @@ ObjectCache::add(const string& adapterId, const string& endpoints, const ObjectD p = _types.insert(p, make_pair(entry->getType(), set<Ice::Identity>())); } p->second.insert(desc.id); + + if(_traceLevels->object > 0) + { + Ice::Trace out(_traceLevels->logger, _traceLevels->objectCat); + out << "added object `" << Ice::identityToString(desc.id) << "'"; + } } ObjectEntryPtr @@ -81,6 +88,12 @@ ObjectCache::remove(const Ice::Identity& id) _types.erase(p); } + if(_traceLevels->object > 0) + { + Ice::Trace out(_traceLevels->logger, _traceLevels->objectCat); + out << "removed object `" << Ice::identityToString(id) << "'"; + } + return entry; } diff --git a/cpp/src/IceGrid/ServerCache.cpp b/cpp/src/IceGrid/ServerCache.cpp index 7d4a39329fb..3b26651680f 100644 --- a/cpp/src/IceGrid/ServerCache.cpp +++ b/cpp/src/IceGrid/ServerCache.cpp @@ -76,6 +76,13 @@ ServerCache::add(const ServerInfo& info) _nodeCache.get(info.node, true)->addServer(entry); forEachCommunicator(AddCommunicator(*this, entry))(info.descriptor); + + if(_traceLevels->server > 0) + { + Ice::Trace out(_traceLevels->logger, _traceLevels->serverCat); + out << "added server `" << info.descriptor->id << "'"; + } + return entry; } @@ -109,6 +116,15 @@ ServerCache::remove(const string& id, bool destroy) forEachCommunicator(RemoveCommunicator(*this, entry))(info.descriptor); + if(destroy) + { + if(_traceLevels->server > 0) + { + Ice::Trace out(_traceLevels->logger, _traceLevels->serverCat); + out << "removed server `" << id << "'"; + } + } + return entry; } @@ -402,9 +418,21 @@ ServerEntry::syncImpl(map<string, AdapterPrx>& adpts, int& activationTimeout, in try { nodeCache.get(destroyNode)->getProxy()->destroyServer(destroy->id); + + if(_cache.getTraceLevels()->server > 1) + { + Ice::Trace out(_cache.getTraceLevels()->logger, _cache.getTraceLevels()->serverCat); + out << "unloaded server `" << destroy->id << "' on node `" << destroyNode << "'"; + } } catch(const NodeNotExistException& ex) { + if(_cache.getTraceLevels()->server > 1) + { + Ice::Trace out(_cache.getTraceLevels()->logger, _cache.getTraceLevels()->serverCat); + out << "couldn't unload server `" << destroy->id << "' on node `" << destroyNode << "':" << ex; + } + if(!load) { ostringstream os; @@ -414,6 +442,12 @@ ServerEntry::syncImpl(map<string, AdapterPrx>& adpts, int& activationTimeout, in } catch(const Ice::LocalException& ex) { + if(_cache.getTraceLevels()->server > 1) + { + Ice::Trace out(_cache.getTraceLevels()->logger, _cache.getTraceLevels()->serverCat); + out << "couldn't unload server `" << destroy->id << "' on node `" << destroyNode << "':" << ex; + } + if(!load) { ostringstream os; @@ -431,23 +465,47 @@ ServerEntry::syncImpl(map<string, AdapterPrx>& adpts, int& activationTimeout, in proxy = n->loadServer(load, adpts, activationTimeout, deactivationTimeout); node = loadNode; proxy = ServerPrx::uncheckedCast(proxy->ice_collocationOptimization(false)); + + if(_cache.getTraceLevels()->server > 1) + { + Ice::Trace out(_cache.getTraceLevels()->logger, _cache.getTraceLevels()->serverCat); + out << "loaded server `" << load->id << "' on node `" << loadNode << "'"; + } } catch(const NodeNotExistException& ex) { + if(_cache.getTraceLevels()->server > 1) + { + Ice::Trace out(_cache.getTraceLevels()->logger, _cache.getTraceLevels()->serverCat); + out << "couldn't load server `" << load->id << "' on node `" << loadNode << "':" << ex; + } + ostringstream os; os << ex; throw NodeUnreachableException(loadNode, os.str()); } catch(const DeploymentException& ex) { + if(_cache.getTraceLevels()->server > 1) + { + Ice::Trace out(_cache.getTraceLevels()->logger, _cache.getTraceLevels()->serverCat); + out << "couldn't load server `" << load->id << "' on node `" << loadNode << "':" << ex.reason; + } + Ice::Warning out(_cache.getTraceLevels()->logger); out << "failed to load server on node `" << loadNode << "':\n" << ex; ostringstream os; - os << ex; + os << ex << "\nreason: " << ex.reason; throw NodeUnreachableException(loadNode, os.str()); } catch(const Ice::Exception& ex) { + if(_cache.getTraceLevels()->server > 1) + { + Ice::Trace out(_cache.getTraceLevels()->logger, _cache.getTraceLevels()->serverCat); + out << "couldn't load server `" << load->id << "' on node `" << loadNode << "':" << ex; + } + ostringstream os; os << ex; throw NodeUnreachableException(loadNode, os.str()); |