summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/IceGrid/AdapterCache.cpp87
-rw-r--r--cpp/src/IceGrid/AdapterCache.h6
-rw-r--r--cpp/src/IceGrid/Cache.h12
-rw-r--r--cpp/src/IceGrid/Database.cpp31
-rw-r--r--cpp/src/IceGrid/NodeCache.cpp18
-rw-r--r--cpp/src/IceGrid/ObjectCache.cpp13
-rw-r--r--cpp/src/IceGrid/ServerCache.cpp60
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());