diff options
author | Benoit Foucher <benoit@zeroc.com> | 2005-09-06 13:19:44 +0000 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2005-09-06 13:19:44 +0000 |
commit | de41754950d96ec8af35bd202a6d9b53fd023df4 (patch) | |
tree | b6b862e80c8c946b09baf6a72805c1ca76d9a080 /cpp/src | |
parent | adding a regression test for bug 422 (diff) | |
download | ice-de41754950d96ec8af35bd202a6d9b53fd023df4.tar.bz2 ice-de41754950d96ec8af35bd202a6d9b53fd023df4.tar.xz ice-de41754950d96ec8af35bd202a6d9b53fd023df4.zip |
Fix bugs.
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/IceGrid/AdapterCache.cpp | 2 | ||||
-rw-r--r-- | cpp/src/IceGrid/Database.cpp | 8 | ||||
-rw-r--r-- | cpp/src/IceGrid/DescriptorBuilder.cpp | 4 | ||||
-rw-r--r-- | cpp/src/IceGrid/DescriptorHelper.cpp | 4 | ||||
-rw-r--r-- | cpp/src/IceGrid/NodeCache.cpp | 4 | ||||
-rw-r--r-- | cpp/src/IceGrid/ServerCache.cpp | 36 |
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) |