diff options
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/IceGrid/AdapterCache.cpp | 16 | ||||
-rw-r--r-- | cpp/src/IceGrid/AdapterCache.h | 2 | ||||
-rw-r--r-- | cpp/src/IceGrid/Cache.h | 12 | ||||
-rw-r--r-- | cpp/src/IceGrid/Database.cpp | 23 | ||||
-rw-r--r-- | cpp/src/IceGrid/NodeCache.cpp | 17 | ||||
-rw-r--r-- | cpp/src/IceGrid/NodeCache.h | 2 | ||||
-rw-r--r-- | cpp/src/IceGrid/NodeSessionI.cpp | 10 | ||||
-rw-r--r-- | cpp/src/IceGrid/NodeSessionI.h | 4 | ||||
-rw-r--r-- | cpp/src/IceGrid/ObjectCache.cpp | 7 | ||||
-rw-r--r-- | cpp/src/IceGrid/ObjectCache.h | 2 | ||||
-rw-r--r-- | cpp/src/IceGrid/ServerCache.cpp | 32 | ||||
-rw-r--r-- | cpp/src/IceGrid/ServerCache.h | 2 |
12 files changed, 72 insertions, 57 deletions
diff --git a/cpp/src/IceGrid/AdapterCache.cpp b/cpp/src/IceGrid/AdapterCache.cpp index 93b018a33ea..36dd71d292f 100644 --- a/cpp/src/IceGrid/AdapterCache.cpp +++ b/cpp/src/IceGrid/AdapterCache.cpp @@ -57,10 +57,6 @@ struct ServerLoadCI : binary_function<ServerEntryPtr&, ServerEntryPtr&, bool> } -AdapterCache::AdapterCache(const TraceLevelsPtr& traceLevels) : CacheByString<AdapterEntry>(traceLevels) -{ -} - AdapterEntryPtr AdapterCache::get(const string& id, bool create) const { @@ -79,7 +75,7 @@ AdapterCache::get(const string& id, bool create) const AdapterEntryPtr AdapterCache::addImpl(const string& id) { - if(_traceLevels->adapter > 0) + if(_traceLevels && _traceLevels->adapter > 0) { Ice::Trace out(_traceLevels->logger, _traceLevels->adapterCat); out << "added adapter `" << id << "'"; @@ -90,7 +86,7 @@ AdapterCache::addImpl(const string& id) AdapterEntryPtr AdapterCache::removeImpl(const string& id) { - if(_traceLevels->adapter > 0) + if(_traceLevels && _traceLevels->adapter > 0) { Ice::Trace out(_traceLevels->logger, _traceLevels->adapterCat); out << "removed adapter `" << id << "'"; @@ -143,7 +139,7 @@ AdapterEntry::enableReplication(const LoadBalancingPolicyPtr& policy) } } - if(_cache.getTraceLevels()->adapter > 0) + if(_cache.getTraceLevels() && _cache.getTraceLevels()->adapter > 0) { Ice::Trace out(_cache.getTraceLevels()->logger, _cache.getTraceLevels()->adapterCat); out << "enabled replication on adapter `" << _id << "'"; @@ -159,7 +155,7 @@ AdapterEntry::disableReplication() _replicated = false; remove = _servers.empty(); } - if(_cache.getTraceLevels()->adapter > 0) + if(_cache.getTraceLevels() && _cache.getTraceLevels()->adapter > 0) { Ice::Trace out(_cache.getTraceLevels()->logger, _cache.getTraceLevels()->adapterCat); out << "disabled replication on adapter `" << _id << "'"; @@ -205,6 +201,7 @@ AdapterEntry::getProxies(int& nReplicas) { vector<ServerEntryPtr> servers; bool adaptive = false; + LoadSample loadSample; { Lock sync(*this); if(_servers.empty()) @@ -233,6 +230,7 @@ AdapterEntry::getProxies(int& nReplicas) { servers = _servers; adaptive = true; + loadSample = _loadSample; } else// if(RandomLoadBalancingPolicyPtr::dynamicCast(_loadBalancing)) { @@ -249,7 +247,7 @@ AdapterEntry::getProxies(int& nReplicas) // the sort() will call and lock each server entry. // random_shuffle(servers.begin(), servers.end()); - sort(servers.begin(), servers.end(), ServerLoadCI(_loadSample)); + sort(servers.begin(), servers.end(), ServerLoadCI(loadSample)); } vector<pair<string, AdapterPrx> > adapters; diff --git a/cpp/src/IceGrid/AdapterCache.h b/cpp/src/IceGrid/AdapterCache.h index f8289576ebb..32da936f2dd 100644 --- a/cpp/src/IceGrid/AdapterCache.h +++ b/cpp/src/IceGrid/AdapterCache.h @@ -68,8 +68,6 @@ class AdapterCache : public CacheByString<AdapterEntry> { public: - AdapterCache(const TraceLevelsPtr&); - AdapterEntryPtr get(const std::string&, bool = false) const; protected: diff --git a/cpp/src/IceGrid/Cache.h b/cpp/src/IceGrid/Cache.h index 0a4e0684c58..8ed07faafed 100644 --- a/cpp/src/IceGrid/Cache.h +++ b/cpp/src/IceGrid/Cache.h @@ -26,7 +26,7 @@ class Cache : public IceUtil::Mutex public: - Cache(const TraceLevelsPtr& traceLevels) : _traceLevels(traceLevels), _entriesHint(_entries.end()) + Cache() : _entriesHint(_entries.end()) { } @@ -49,6 +49,12 @@ public: return removeImpl(key); } + void + setTraceLevels(const TraceLevelsPtr& traceLevels) + { + _traceLevels = traceLevels; + } + const TraceLevelsPtr& getTraceLevels() const { return _traceLevels; } protected: @@ -134,7 +140,7 @@ protected: return new Value(*this, key); } - const TraceLevelsPtr _traceLevels; + TraceLevelsPtr _traceLevels; std::map<Key, ValuePtr> _entries; typename std::map<Key, ValuePtr>::iterator _entriesHint; }; @@ -146,8 +152,6 @@ class CacheByString : public Cache<std::string, T> public: - CacheByString(const TraceLevelsPtr& traceLevels) : Cache<std::string, T>(traceLevels) { } - virtual std::vector<std::string> getAll(const std::string& expr) { diff --git a/cpp/src/IceGrid/Database.cpp b/cpp/src/IceGrid/Database.cpp index bde424351e5..4c05329a868 100644 --- a/cpp/src/IceGrid/Database.cpp +++ b/cpp/src/IceGrid/Database.cpp @@ -143,10 +143,9 @@ Database::Database(const Ice::ObjectAdapterPtr& adapter, _internalAdapter(adapter), _envName(envName), _traceLevels(traceLevels), - _nodeCache(nodeSessionTimeout, _traceLevels), - _objectCache(_communicator, _traceLevels), - _adapterCache(_traceLevels), - _serverCache(_nodeCache, _adapterCache, _objectCache, _traceLevels), + _nodeCache(nodeSessionTimeout), + _objectCache(_communicator), + _serverCache(_nodeCache, _adapterCache, _objectCache), _connection(Freeze::createConnection(adapter->getCommunicator(), envName)), _descriptors(_connection, _descriptorDbName), _objects(_connection, _objectDbName), @@ -175,6 +174,11 @@ Database::Database(const Ice::ObjectAdapterPtr& adapter, warn << "invalid application `" << p->first << "':\n" << ex.reason; } } + + _serverCache.setTraceLevels(_traceLevels); + _nodeCache.setTraceLevels(_traceLevels); + _adapterCache.setTraceLevels(_traceLevels); + _objectCache.setTraceLevels(_traceLevels); } Database::~Database() @@ -767,12 +771,13 @@ Database::removeObject(const Ice::Identity& id) ex.id = id; throw ex; } - objects.erase(id); - - if(_traceLevels->object > 0) + if(objects.erase(id) > 0) { - Ice::Trace out(_traceLevels->logger, _traceLevels->objectCat); - out << "removed object `" << Ice::identityToString(id) << "'"; + if(_traceLevels->object > 0) + { + Ice::Trace out(_traceLevels->logger, _traceLevels->objectCat); + out << "removed object `" << Ice::identityToString(id) << "'"; + } } } diff --git a/cpp/src/IceGrid/NodeCache.cpp b/cpp/src/IceGrid/NodeCache.cpp index 6e99a84b88c..d93fe482005 100644 --- a/cpp/src/IceGrid/NodeCache.cpp +++ b/cpp/src/IceGrid/NodeCache.cpp @@ -16,8 +16,7 @@ using namespace std; using namespace IceGrid; -NodeCache::NodeCache(int sessionTimeout, const TraceLevelsPtr& traceLevels) : - CacheByString<NodeEntry>(traceLevels), _sessionTimeout(sessionTimeout) +NodeCache::NodeCache(int sessionTimeout) : _sessionTimeout(sessionTimeout) { } @@ -106,6 +105,12 @@ NodeEntry::setSession(const NodeSessionIPtr& session) if(session) { + if(_cache.getTraceLevels() && _cache.getTraceLevels()->node > 0) + { + Ice::Trace out(_cache.getTraceLevels()->logger, _cache.getTraceLevels()->nodeCat); + out << "node `" << _name << "' up"; + } + ServerEntrySeq entries; { Lock sync(*this); @@ -115,16 +120,10 @@ 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) + if(_cache.getTraceLevels() && _cache.getTraceLevels()->node > 0) { Ice::Trace out(_cache.getTraceLevels()->logger, _cache.getTraceLevels()->nodeCat); out << "node `" << _name << "' down"; diff --git a/cpp/src/IceGrid/NodeCache.h b/cpp/src/IceGrid/NodeCache.h index 21e77482102..8ec249bea9e 100644 --- a/cpp/src/IceGrid/NodeCache.h +++ b/cpp/src/IceGrid/NodeCache.h @@ -59,7 +59,7 @@ class NodeCache : public CacheByString<NodeEntry> { public: - NodeCache(int, const TraceLevelsPtr&); + NodeCache(int); NodeEntryPtr get(const std::string&, bool = false) const; diff --git a/cpp/src/IceGrid/NodeSessionI.cpp b/cpp/src/IceGrid/NodeSessionI.cpp index 1cfe92db208..74c3f7ec485 100644 --- a/cpp/src/IceGrid/NodeSessionI.cpp +++ b/cpp/src/IceGrid/NodeSessionI.cpp @@ -8,6 +8,7 @@ // ********************************************************************** #include <Ice/Ice.h> + #include <IceGrid/NodeSessionI.h> #include <IceGrid/Database.h> @@ -16,6 +17,7 @@ using namespace IceGrid; NodeSessionI::NodeSessionI(const DatabasePtr& database, const string& name, const NodePrx& node) : _database(database), + _traceLevels(database->getTraceLevels()), _name(name), _node(node), _startTime(IceUtil::Time::now()), @@ -44,8 +46,16 @@ NodeSessionI::keepAlive(const LoadInfo& load, const Ice::Current& current) throw Ice::ObjectNotExistException(__FILE__, __LINE__); } + if(_traceLevels->node > 2) + { + Ice::Trace out(_traceLevels->logger, _traceLevels->nodeCat); + out << "node `" << _name << "' keep alive "; + out << "(load = " << _load.load1 << ", " << _load.load5 << ", " << _load.load15 << ")"; + } + _timestamp = IceUtil::Time::now(); _load = load; + } Ice::StringSeq diff --git a/cpp/src/IceGrid/NodeSessionI.h b/cpp/src/IceGrid/NodeSessionI.h index ca16608c9e1..00c4b8eaefc 100644 --- a/cpp/src/IceGrid/NodeSessionI.h +++ b/cpp/src/IceGrid/NodeSessionI.h @@ -19,6 +19,9 @@ namespace IceGrid class Database; typedef IceUtil::Handle<Database> DatabasePtr; +class TraceLevels; +typedef IceUtil::Handle<TraceLevels> TraceLevelsPtr; + class NodeSessionI : public NodeSession, public SessionI, public IceUtil::Mutex { public: @@ -36,6 +39,7 @@ public: private: const DatabasePtr _database; + const TraceLevelsPtr _traceLevels; const std::string _name; const NodePrx _node; const IceUtil::Time _startTime; diff --git a/cpp/src/IceGrid/ObjectCache.cpp b/cpp/src/IceGrid/ObjectCache.cpp index a93996a43bd..6d9163db72b 100644 --- a/cpp/src/IceGrid/ObjectCache.cpp +++ b/cpp/src/IceGrid/ObjectCache.cpp @@ -18,8 +18,7 @@ using namespace std; using namespace IceGrid; -ObjectCache::ObjectCache(const Ice::CommunicatorPtr& communicator, const TraceLevelsPtr& traceLevels) : - Cache<Ice::Identity, ObjectEntry>(traceLevels), +ObjectCache::ObjectCache(const Ice::CommunicatorPtr& communicator) : _communicator(communicator) { } @@ -51,7 +50,7 @@ ObjectCache::add(const string& adapterId, const string& endpoints, const ObjectD } p->second.insert(desc.id); - if(_traceLevels->object > 0) + if(_traceLevels && _traceLevels->object > 0) { Ice::Trace out(_traceLevels->logger, _traceLevels->objectCat); out << "added object `" << Ice::identityToString(desc.id) << "'"; @@ -88,7 +87,7 @@ ObjectCache::remove(const Ice::Identity& id) _types.erase(p); } - if(_traceLevels->object > 0) + if(_traceLevels && _traceLevels->object > 0) { Ice::Trace out(_traceLevels->logger, _traceLevels->objectCat); out << "removed object `" << Ice::identityToString(id) << "'"; diff --git a/cpp/src/IceGrid/ObjectCache.h b/cpp/src/IceGrid/ObjectCache.h index 79c6b9a6f61..9511bc919a5 100644 --- a/cpp/src/IceGrid/ObjectCache.h +++ b/cpp/src/IceGrid/ObjectCache.h @@ -50,7 +50,7 @@ class ObjectCache : public Cache<Ice::Identity, ObjectEntry> { public: - ObjectCache(const Ice::CommunicatorPtr&, const TraceLevelsPtr&); + ObjectCache(const Ice::CommunicatorPtr&); void add(const std::string&, const std::string&, const ObjectDescriptor&); ObjectEntryPtr get(const Ice::Identity&) const; diff --git a/cpp/src/IceGrid/ServerCache.cpp b/cpp/src/IceGrid/ServerCache.cpp index 3b26651680f..0ec5fa310c4 100644 --- a/cpp/src/IceGrid/ServerCache.cpp +++ b/cpp/src/IceGrid/ServerCache.cpp @@ -57,9 +57,7 @@ namespace IceGrid ServerCache::ServerCache(NodeCache& nodeCache, AdapterCache& adapterCache, - ObjectCache& objectCache, - const TraceLevelsPtr& traceLevels) : - CacheByString<ServerEntry>(traceLevels), + ObjectCache& objectCache) : _nodeCache(nodeCache), _adapterCache(adapterCache), _objectCache(objectCache) @@ -77,7 +75,7 @@ ServerCache::add(const ServerInfo& info) forEachCommunicator(AddCommunicator(*this, entry))(info.descriptor); - if(_traceLevels->server > 0) + if(_traceLevels && _traceLevels->server > 0) { Ice::Trace out(_traceLevels->logger, _traceLevels->serverCat); out << "added server `" << info.descriptor->id << "'"; @@ -118,7 +116,7 @@ ServerCache::remove(const string& id, bool destroy) if(destroy) { - if(_traceLevels->server > 0) + if(_traceLevels && _traceLevels->server > 0) { Ice::Trace out(_traceLevels->logger, _traceLevels->serverCat); out << "removed server `" << id << "'"; @@ -419,7 +417,7 @@ ServerEntry::syncImpl(map<string, AdapterPrx>& adpts, int& activationTimeout, in { nodeCache.get(destroyNode)->getProxy()->destroyServer(destroy->id); - if(_cache.getTraceLevels()->server > 1) + if(_cache.getTraceLevels() && _cache.getTraceLevels()->server > 1) { Ice::Trace out(_cache.getTraceLevels()->logger, _cache.getTraceLevels()->serverCat); out << "unloaded server `" << destroy->id << "' on node `" << destroyNode << "'"; @@ -427,10 +425,10 @@ ServerEntry::syncImpl(map<string, AdapterPrx>& adpts, int& activationTimeout, in } catch(const NodeNotExistException& ex) { - if(_cache.getTraceLevels()->server > 1) + if(_cache.getTraceLevels() && _cache.getTraceLevels()->server > 1) { Ice::Trace out(_cache.getTraceLevels()->logger, _cache.getTraceLevels()->serverCat); - out << "couldn't unload server `" << destroy->id << "' on node `" << destroyNode << "':" << ex; + out << "couldn't unload server `" << destroy->id << "' on node `" << destroyNode << "':\n" << ex; } if(!load) @@ -442,10 +440,10 @@ ServerEntry::syncImpl(map<string, AdapterPrx>& adpts, int& activationTimeout, in } catch(const Ice::LocalException& ex) { - if(_cache.getTraceLevels()->server > 1) + if(_cache.getTraceLevels() && _cache.getTraceLevels()->server > 1) { Ice::Trace out(_cache.getTraceLevels()->logger, _cache.getTraceLevels()->serverCat); - out << "couldn't unload server `" << destroy->id << "' on node `" << destroyNode << "':" << ex; + out << "couldn't unload server `" << destroy->id << "' on node `" << destroyNode << "':\n" << ex; } if(!load) @@ -466,7 +464,7 @@ ServerEntry::syncImpl(map<string, AdapterPrx>& adpts, int& activationTimeout, in node = loadNode; proxy = ServerPrx::uncheckedCast(proxy->ice_collocationOptimization(false)); - if(_cache.getTraceLevels()->server > 1) + if(_cache.getTraceLevels() && _cache.getTraceLevels()->server > 1) { Ice::Trace out(_cache.getTraceLevels()->logger, _cache.getTraceLevels()->serverCat); out << "loaded server `" << load->id << "' on node `" << loadNode << "'"; @@ -474,10 +472,10 @@ ServerEntry::syncImpl(map<string, AdapterPrx>& adpts, int& activationTimeout, in } catch(const NodeNotExistException& ex) { - if(_cache.getTraceLevels()->server > 1) + if(_cache.getTraceLevels() && _cache.getTraceLevels()->server > 1) { Ice::Trace out(_cache.getTraceLevels()->logger, _cache.getTraceLevels()->serverCat); - out << "couldn't load server `" << load->id << "' on node `" << loadNode << "':" << ex; + out << "couldn't load server `" << load->id << "' on node `" << loadNode << "':\n" << ex; } ostringstream os; @@ -486,10 +484,10 @@ ServerEntry::syncImpl(map<string, AdapterPrx>& adpts, int& activationTimeout, in } catch(const DeploymentException& ex) { - if(_cache.getTraceLevels()->server > 1) + if(_cache.getTraceLevels() && _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; + out << "couldn't load server `" << load->id << "' on node `" << loadNode << "':\n" << ex.reason; } Ice::Warning out(_cache.getTraceLevels()->logger); @@ -500,10 +498,10 @@ ServerEntry::syncImpl(map<string, AdapterPrx>& adpts, int& activationTimeout, in } catch(const Ice::Exception& ex) { - if(_cache.getTraceLevels()->server > 1) + if(_cache.getTraceLevels() && _cache.getTraceLevels()->server > 1) { Ice::Trace out(_cache.getTraceLevels()->logger, _cache.getTraceLevels()->serverCat); - out << "couldn't load server `" << load->id << "' on node `" << loadNode << "':" << ex; + out << "couldn't load server `" << load->id << "' on node `" << loadNode << "':\n" << ex; } ostringstream os; diff --git a/cpp/src/IceGrid/ServerCache.h b/cpp/src/IceGrid/ServerCache.h index 7fb40381cb8..bc880477691 100644 --- a/cpp/src/IceGrid/ServerCache.h +++ b/cpp/src/IceGrid/ServerCache.h @@ -72,7 +72,7 @@ class ServerCache : public CacheByString<ServerEntry> { public: - ServerCache(NodeCache&, AdapterCache&, ObjectCache&, const TraceLevelsPtr&); + ServerCache(NodeCache&, AdapterCache&, ObjectCache&); ServerEntryPtr add(const ServerInfo&); ServerEntryPtr get(const std::string&); |