summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2005-09-06 13:19:44 +0000
committerBenoit Foucher <benoit@zeroc.com>2005-09-06 13:19:44 +0000
commitde41754950d96ec8af35bd202a6d9b53fd023df4 (patch)
treeb6b862e80c8c946b09baf6a72805c1ca76d9a080 /cpp/src
parentadding a regression test for bug 422 (diff)
downloadice-de41754950d96ec8af35bd202a6d9b53fd023df4.tar.bz2
ice-de41754950d96ec8af35bd202a6d9b53fd023df4.tar.xz
ice-de41754950d96ec8af35bd202a6d9b53fd023df4.zip
Fix bugs.
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/IceGrid/AdapterCache.cpp2
-rw-r--r--cpp/src/IceGrid/Database.cpp8
-rw-r--r--cpp/src/IceGrid/DescriptorBuilder.cpp4
-rw-r--r--cpp/src/IceGrid/DescriptorHelper.cpp4
-rw-r--r--cpp/src/IceGrid/NodeCache.cpp4
-rw-r--r--cpp/src/IceGrid/ServerCache.cpp36
6 files changed, 42 insertions, 16 deletions
diff --git a/cpp/src/IceGrid/AdapterCache.cpp b/cpp/src/IceGrid/AdapterCache.cpp
index 28e7ed1117b..67a2b438fcc 100644
--- a/cpp/src/IceGrid/AdapterCache.cpp
+++ b/cpp/src/IceGrid/AdapterCache.cpp
@@ -162,7 +162,7 @@ AdapterEntry::getProxies(int& endpointCount)
}
_lastServer = (_lastServer + 1) % _servers.size();
}
- else if(AdaptiveLoadBalancingPtr::dynamicCast(_loadBalancing))
+ else if(AdaptiveLoadBalancingPolicyPtr::dynamicCast(_loadBalancing))
{
servers = _servers;
adaptive = true;
diff --git a/cpp/src/IceGrid/Database.cpp b/cpp/src/IceGrid/Database.cpp
index 9e05c898c84..ba85d3163af 100644
--- a/cpp/src/IceGrid/Database.cpp
+++ b/cpp/src/IceGrid/Database.cpp
@@ -459,9 +459,13 @@ Database::getNode(const string& name) const
void
Database::removeNode(const string& name)
{
- _nodeCache.get(name)->setSession(0);
-
+ //
+ // We must notify the observer first (there's an assert in the
+ // observer to ensure that only nodes which are up are teared
+ // down).
+ //
_nodeObserver->nodeDown(name);
+ _nodeCache.get(name)->setSession(0);
}
Ice::StringSeq
diff --git a/cpp/src/IceGrid/DescriptorBuilder.cpp b/cpp/src/IceGrid/DescriptorBuilder.cpp
index 420aafeb379..6ef1c07603c 100644
--- a/cpp/src/IceGrid/DescriptorBuilder.cpp
+++ b/cpp/src/IceGrid/DescriptorBuilder.cpp
@@ -99,6 +99,10 @@ ApplicationDescriptorBuilder::addReplicatedAdapter(const XmlAttributesHelper& at
{
adapter.loadBalancing = new RoundRobinLoadBalancingPolicy();
}
+ else if(policy == "adaptive")
+ {
+ adapter.loadBalancing = new AdaptiveLoadBalancingPolicy();
+ }
else
{
throw "invalid load balancing policy `" + policy + "'";
diff --git a/cpp/src/IceGrid/DescriptorHelper.cpp b/cpp/src/IceGrid/DescriptorHelper.cpp
index 1952fbfa78a..d80cdd09ed2 100644
--- a/cpp/src/IceGrid/DescriptorHelper.cpp
+++ b/cpp/src/IceGrid/DescriptorHelper.cpp
@@ -2014,6 +2014,10 @@ ApplicationHelper::print(Output& out) const
{
out << "round-robin";
}
+ else if(AdaptiveLoadBalancingPolicyPtr::dynamicCast(p->loadBalancing))
+ {
+ out << "adaptive";
+ }
else
{
out << "<unknown load balancing policy>";
diff --git a/cpp/src/IceGrid/NodeCache.cpp b/cpp/src/IceGrid/NodeCache.cpp
index 7cea0b2d9da..0b0478f5809 100644
--- a/cpp/src/IceGrid/NodeCache.cpp
+++ b/cpp/src/IceGrid/NodeCache.cpp
@@ -102,7 +102,7 @@ NodeEntry::getProxy() const
Lock sync(*this);
if(!_session)
{
- throw NodeUnreachableException();
+ throw NodeUnreachableException(_name, "node is not registered");
}
return _session->getNode();
}
@@ -125,7 +125,7 @@ NodeEntry::getLoadInfo() const
Lock sync(*this);
if(!_session)
{
- throw NodeUnreachableException();
+ throw NodeUnreachableException(_name, "node is not registered");
}
return _session->getLoadInfo();
}
diff --git a/cpp/src/IceGrid/ServerCache.cpp b/cpp/src/IceGrid/ServerCache.cpp
index 31509dd81df..2ac1c4eb853 100644
--- a/cpp/src/IceGrid/ServerCache.cpp
+++ b/cpp/src/IceGrid/ServerCache.cpp
@@ -338,6 +338,10 @@ ServerEntry::syncImpl(map<string, AdapterPrx>& adpts, int& activationTimeout, in
if(!_load.get() && !_destroy.get())
{
_load = _loaded; // Re-load the current server.
+ _proxy = 0;
+ _adapters.clear();
+ _activationTimeout = 0;
+ _deactivationTimeout = 0;
}
_synchronizing = true;
@@ -363,18 +367,22 @@ ServerEntry::syncImpl(map<string, AdapterPrx>& adpts, int& activationTimeout, in
{
nodeCache.get(destroyNode)->getProxy()->destroyServer(destroy->id);
}
- catch(const NodeNotExistException&)
+ catch(const NodeNotExistException& ex)
{
if(!load)
{
- throw NodeUnreachableException();
+ ostringstream os;
+ os << ex;
+ throw NodeUnreachableException(destroyNode, os.str());
}
}
- catch(const Ice::LocalException&)
+ catch(const Ice::LocalException& ex)
{
if(!load)
{
- throw NodeUnreachableException();
+ ostringstream os;
+ os << ex;
+ throw NodeUnreachableException(destroyNode, os.str());
}
}
}
@@ -388,21 +396,27 @@ ServerEntry::syncImpl(map<string, AdapterPrx>& adpts, int& activationTimeout, in
node = loadNode;
proxy = ServerPrx::uncheckedCast(proxy->ice_collocationOptimization(false));
}
- catch(const NodeNotExistException&)
+ catch(const NodeNotExistException& ex)
{
- throw NodeUnreachableException();
+ ostringstream os;
+ os << ex;
+ throw NodeUnreachableException(loadNode, os.str());
}
catch(const DeploymentException& ex)
{
Ice::Warning out(_cache.getTraceLevels()->logger);
out << "failed to load server on node `" << loadNode << "':\n" << ex;
- throw NodeUnreachableException();
+ ostringstream os;
+ os << ex;
+ throw NodeUnreachableException(loadNode, os.str());
}
- catch(const Ice::LocalException& ex)
+ catch(const Ice::Exception& ex)
{
Ice::Warning out(_cache.getTraceLevels()->logger);
out << "unexpected exception while loading on node `" << loadNode << "':\n" << ex;
- throw NodeUnreachableException();
+ ostringstream os;
+ os << ex;
+ throw NodeUnreachableException(loadNode, os.str());
}
}
}
@@ -424,8 +438,6 @@ ServerEntry::syncImpl(map<string, AdapterPrx>& adpts, int& activationTimeout, in
{
Lock sync(*this);
_synchronizing = false;
- _loaded = _load;
- _load.reset(0);
_destroy.reset(0);
//
@@ -438,6 +450,8 @@ ServerEntry::syncImpl(map<string, AdapterPrx>& adpts, int& activationTimeout, in
if(proxy)
{
int timeout = nodeCache.getSessionTimeout() * 1000; // sec to ms
+ _loaded = _load;
+ assert(_loaded.get());
_proxy = ServerPrx::uncheckedCast(proxy->ice_timeout(timeout));
_adapters.clear();
for(StringAdapterPrxDict::const_iterator p = adpts.begin(); p != adpts.end(); ++p)