summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/IceGrid/AdapterCache.cpp16
-rw-r--r--cpp/src/IceGrid/AdapterCache.h2
-rw-r--r--cpp/src/IceGrid/Cache.h12
-rw-r--r--cpp/src/IceGrid/Database.cpp23
-rw-r--r--cpp/src/IceGrid/NodeCache.cpp17
-rw-r--r--cpp/src/IceGrid/NodeCache.h2
-rw-r--r--cpp/src/IceGrid/NodeSessionI.cpp10
-rw-r--r--cpp/src/IceGrid/NodeSessionI.h4
-rw-r--r--cpp/src/IceGrid/ObjectCache.cpp7
-rw-r--r--cpp/src/IceGrid/ObjectCache.h2
-rw-r--r--cpp/src/IceGrid/ServerCache.cpp32
-rw-r--r--cpp/src/IceGrid/ServerCache.h2
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&);