summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/RegistryI.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/IceGrid/RegistryI.cpp')
-rw-r--r--cpp/src/IceGrid/RegistryI.cpp57
1 files changed, 29 insertions, 28 deletions
diff --git a/cpp/src/IceGrid/RegistryI.cpp b/cpp/src/IceGrid/RegistryI.cpp
index 629fcc77302..1e4bf5bf07d 100644
--- a/cpp/src/IceGrid/RegistryI.cpp
+++ b/cpp/src/IceGrid/RegistryI.cpp
@@ -303,7 +303,6 @@ RegistryI::start(bool nowarn)
for(p = proxies.begin(); p != proxies.end(); ++p)
{
nodes.push_back(NodePrx::uncheckedCast(*p));
- _database->removeInternalObject((*p)->ice_getIdentity());
}
InternalRegistryPrxSeq replicas;
@@ -311,7 +310,6 @@ RegistryI::start(bool nowarn)
for(p = proxies.begin(); p != proxies.end(); ++p)
{
replicas.push_back(InternalRegistryPrx::uncheckedCast(*p));
- _database->removeObject((*p)->ice_getIdentity());
}
//
@@ -457,7 +455,10 @@ RegistryI::setupInternalRegistry(const Ice::ObjectAdapterPtr& registryAdapter)
ObjectPtr internalRegistry = new InternalRegistryI(this, _database, _reaper, _wellKnownObjects, _session);
Ice::ObjectPrx proxy = registryAdapter->add(internalRegistry, internalRegistryId);
_wellKnownObjects->add(proxy, InternalRegistry::ice_staticId());
- return InternalRegistryPrx::uncheckedCast(proxy);
+
+ InternalRegistryPrx registry = InternalRegistryPrx::uncheckedCast(proxy);
+ _database->setInternalRegistry(registry);
+ return registry;
}
void
@@ -1182,6 +1183,18 @@ RegistryI::registerReplicas(const InternalRegistryPrx& internalRegistry,
}
catch(const Ice::LocalException& ex)
{
+ //
+ // Clear the proxy from the database if we can't
+ // contact the replica.
+ //
+ try
+ {
+ _database->removeObject((*r)->ice_getIdentity());
+ }
+ catch(const ObjectNotRegisteredException&)
+ {
+ }
+
if(_traceLevels && _traceLevels->replica > 1)
{
Ice::Trace out(_traceLevels->logger, _traceLevels->replicaCat);
@@ -1206,39 +1219,27 @@ RegistryI::registerReplicas(const InternalRegistryPrx& internalRegistry,
void
RegistryI::registerNodes(const InternalRegistryPrx& internalRegistry, const NodePrxSeq& nodes)
{
+ const string prefix("Node-");
for(NodePrxSeq::const_iterator p = nodes.begin(); p != nodes.end(); ++p)
{
- string nodeName;
- if(_traceLevels && _traceLevels->node > 1)
+ assert((*p)->ice_getIdentity().name.find(prefix) != string::npos);
+ try
{
- nodeName = (*p)->ice_getIdentity().name;
- const string prefix("Node-");
- string::size_type pos = nodeName.find(prefix);
- if(pos != string::npos)
- {
- nodeName = nodeName.substr(prefix.size());
- }
-
- Ice::Trace out(_traceLevels->logger, _traceLevels->nodeCat);
- out << "creating node `" << nodeName << "' session";
+ _database->setNodeProxy((*p)->ice_getIdentity().name.substr(prefix.size()), *p);
}
-
- try
+ catch(const NodeNotExistException&)
{
- NodePrx::uncheckedCast(*p)->registerWithReplica(internalRegistry);
-
- if(_traceLevels && _traceLevels->node > 1)
+ //
+ // Ignore, if nothing's deployed on the node we won't need
+ // to contact it for locator requests so we don't need to
+ // keep its proxy.
+ //
+ try
{
- Ice::Trace out(_traceLevels->logger, _traceLevels->nodeCat);
- out << "node `" << nodeName << "' session created";
+ _database->removeInternalObject((*p)->ice_getIdentity());
}
- }
- catch(const Ice::LocalException& ex)
- {
- if(_traceLevels && _traceLevels->node > 1)
+ catch(const ObjectNotRegisteredException&)
{
- Ice::Trace out(_traceLevels->logger, _traceLevels->nodeCat);
- out << "node `" << nodeName << "' session creation failed:\n" << ex;
}
}
}