summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/ServerCache.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/IceGrid/ServerCache.cpp')
-rw-r--r--cpp/src/IceGrid/ServerCache.cpp116
1 files changed, 33 insertions, 83 deletions
diff --git a/cpp/src/IceGrid/ServerCache.cpp b/cpp/src/IceGrid/ServerCache.cpp
index 425cc9831d1..bbcfb99a79e 100644
--- a/cpp/src/IceGrid/ServerCache.cpp
+++ b/cpp/src/IceGrid/ServerCache.cpp
@@ -244,14 +244,32 @@ ServerEntry::destroy()
}
ServerInfo
-ServerEntry::getServerInfo() const
+ServerEntry::getServerInfo(bool resolve) const
{
- Lock sync(*this);
- if(!_loaded.get() && !_load.get())
+ ServerInfo info;
{
- throw ServerNotExistException();
+ Lock sync(*this);
+ if(!_loaded.get() && !_load.get())
+ {
+ throw ServerNotExistException();
+ }
+ info = _proxy ? *_loaded : *_load;
}
- return _proxy ? *_loaded : *_load;
+ assert(info.descriptor);
+ if(resolve)
+ {
+ try
+ {
+ return _cache.getNodeCache().get(info.node)->getServerInfo(info);
+ }
+ catch(const NodeNotExistException&)
+ {
+ }
+ catch(const NodeUnreachableException&)
+ {
+ }
+ }
+ return info;
}
string
@@ -426,44 +444,20 @@ ServerEntry::syncImpl(AdapterPrxDict& adpts, int& activationTimeout, int& deacti
{
try
{
- nodeCache.get(destroy.node)->getProxy()->destroyServer(destroy.descriptor->id);
-
- if(_cache.getTraceLevels() && _cache.getTraceLevels()->server > 1)
- {
- Ice::Trace out(_cache.getTraceLevels()->logger, _cache.getTraceLevels()->serverCat);
- out << "unloaded server `" << destroy.descriptor->id << "' on node `" << destroy.node << "'";
- }
+ nodeCache.get(destroy.node)->destroyServer(destroy.descriptor->id);
}
- catch(const NodeNotExistException& ex)
+ catch(NodeNotExistException& ex)
{
- if(_cache.getTraceLevels() && _cache.getTraceLevels()->server > 1)
- {
- Ice::Trace out(_cache.getTraceLevels()->logger, _cache.getTraceLevels()->serverCat);
- out << "couldn't unload server `" << destroy.descriptor->id << "' on node `" << destroy.node
- << "':\n" << ex;
- }
-
if(!load.descriptor)
{
- ostringstream os;
- os << ex;
- throw NodeUnreachableException(destroy.node, os.str());
+ throw NodeUnreachableException(destroy.node, "node is not active");
}
}
- catch(const Ice::LocalException& ex)
+ catch(NodeUnreachableException& ex)
{
- if(_cache.getTraceLevels() && _cache.getTraceLevels()->server > 1)
- {
- Ice::Trace out(_cache.getTraceLevels()->logger, _cache.getTraceLevels()->serverCat);
- out << "couldn't unload server `" << destroy.descriptor->id << "' on node `" << destroy.node
- << "':\n" << ex;
- }
-
if(!load.descriptor)
{
- ostringstream os;
- os << ex;
- throw NodeUnreachableException(destroy.node, os.str());
+ throw;
}
}
}
@@ -472,58 +466,13 @@ ServerEntry::syncImpl(AdapterPrxDict& adpts, int& activationTimeout, int& deacti
{
try
{
- const NodePrx n = nodeCache.get(load.node)->getProxy();
- proxy = n->loadServer(load.application, load.descriptor,adpts, activationTimeout, deactivationTimeout);
- node = load.node;
- proxy = ServerPrx::uncheckedCast(proxy->ice_collocationOptimization(false));
-
- if(_cache.getTraceLevels() && _cache.getTraceLevels()->server > 1)
- {
- Ice::Trace out(_cache.getTraceLevels()->logger, _cache.getTraceLevels()->serverCat);
- out << "loaded server `" << load.descriptor->id << "' on node `" << load.node << "'";
- }
- }
- catch(const NodeNotExistException& ex)
- {
- if(_cache.getTraceLevels() && _cache.getTraceLevels()->server > 1)
- {
- Ice::Trace out(_cache.getTraceLevels()->logger, _cache.getTraceLevels()->serverCat);
- out << "couldn't load server `" << load.descriptor->id << "' on node `" << load.node
- << "':\n" << ex;
- }
-
- ostringstream os;
- os << ex;
- throw NodeUnreachableException(load.node, os.str());
- }
- catch(const DeploymentException& ex)
- {
- if(_cache.getTraceLevels() && _cache.getTraceLevels()->server > 1)
- {
- Ice::Trace out(_cache.getTraceLevels()->logger, _cache.getTraceLevels()->serverCat);
- out << "couldn't load server `" << load.descriptor->id << "' on node `" << load.node
- << "':\n" << ex.reason;
- }
-
- Ice::Warning out(_cache.getTraceLevels()->logger);
- out << "failed to load server on node `" << load.node << "':\n" << ex;
- ostringstream os;
- os << ex << "\nreason: " << ex.reason;
- throw NodeUnreachableException(load.node, os.str());
+ proxy = nodeCache.get(load.node)->loadServer(load, adpts, activationTimeout, deactivationTimeout);
}
- catch(const Ice::Exception& ex)
+ catch(NodeNotExistException& ex)
{
- if(_cache.getTraceLevels() && _cache.getTraceLevels()->server > 1)
- {
- Ice::Trace out(_cache.getTraceLevels()->logger, _cache.getTraceLevels()->serverCat);
- out << "couldn't load server `" << load.descriptor->id << "' on node `" << load.node
- << "':\n" << ex;
- }
-
- ostringstream os;
- os << ex;
- throw NodeUnreachableException(load.node, os.str());
+ throw NodeUnreachableException(load.node, "node is not active");
}
+ node = load.node;
}
}
catch(const NodeUnreachableException&)
@@ -577,6 +526,7 @@ ServerEntry::syncImpl(AdapterPrxDict& adpts, int& activationTimeout, int& deacti
_activationTimeout = 0;
_deactivationTimeout = 0;
}
+
notifyAll();
}
if(!load.descriptor && destroy.descriptor)