summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2015-03-10 16:11:49 +0100
committerBenoit Foucher <benoit@zeroc.com>2015-03-10 16:11:49 +0100
commitc53ac81f746ec2fb4c5783fe0637560be3e5a6bf (patch)
treef15db862b19252b691459b71a265ae4f01a8ace1 /cpp
parentICE-6170 - fixed behavior of batch requests (diff)
downloadice-c53ac81f746ec2fb4c5783fe0637560be3e5a6bf.tar.bz2
ice-c53ac81f746ec2fb4c5783fe0637560be3e5a6bf.tar.xz
ice-c53ac81f746ec2fb4c5783fe0637560be3e5a6bf.zip
Fixed ICE-6362 : fixed IceLocatorDiscovery infinite retry
Diffstat (limited to 'cpp')
-rw-r--r--cpp/demo/IceGrid/replication/config.node12
-rw-r--r--cpp/demo/IceGrid/replication/config.node22
-rw-r--r--cpp/demo/IceGrid/replication/config.replica12
-rw-r--r--cpp/demo/IceGrid/replication/config.replica22
-rwxr-xr-xcpp/demo/IceGrid/replication/expect.py6
-rw-r--r--cpp/src/IceGrid/ServerI.cpp10
-rw-r--r--cpp/src/IceLocatorDiscovery/PluginI.cpp30
7 files changed, 32 insertions, 22 deletions
diff --git a/cpp/demo/IceGrid/replication/config.node1 b/cpp/demo/IceGrid/replication/config.node1
index 1e75823b868..ccdc04f6f6a 100644
--- a/cpp/demo/IceGrid/replication/config.node1
+++ b/cpp/demo/IceGrid/replication/config.node1
@@ -8,7 +8,7 @@ Ice.Default.Locator=ReplicationDemoIceGrid/Locator:default -h localhost -p 12000
# property above and un-comment the two properties below. The discovery
# plugin uses multicast to discover IceGrid.
#
-#Ice.Plugin.IceLocatorDiscovery=IceLocatorDiscovery:createIceLocatorDiscoveryy
+#Ice.Plugin.IceLocatorDiscovery=IceLocatorDiscovery:createIceLocatorDiscovery
#IceGrid.InstanceName=ReplicationDemoIceGrid
#
diff --git a/cpp/demo/IceGrid/replication/config.node2 b/cpp/demo/IceGrid/replication/config.node2
index a1c5a95ae29..37c0a629a0e 100644
--- a/cpp/demo/IceGrid/replication/config.node2
+++ b/cpp/demo/IceGrid/replication/config.node2
@@ -8,7 +8,7 @@ Ice.Default.Locator=ReplicationDemoIceGrid/Locator:default -h localhost -p 12000
# property above and un-comment the two properties below. The discovery
# plugin uses multicast to discover IceGrid.
#
-#Ice.Plugin.IceLocatorDiscovery=IceLocatorDiscovery:createIceLocatorDiscoveryy
+#Ice.Plugin.IceLocatorDiscovery=IceLocatorDiscovery:createIceLocatorDiscovery
#IceGrid.InstanceName=ReplicationDemoIceGrid
#
diff --git a/cpp/demo/IceGrid/replication/config.replica1 b/cpp/demo/IceGrid/replication/config.replica1
index f6ae90f27a9..44213f31592 100644
--- a/cpp/demo/IceGrid/replication/config.replica1
+++ b/cpp/demo/IceGrid/replication/config.replica1
@@ -8,7 +8,7 @@ Ice.Default.Locator=ReplicationDemoIceGrid/Locator:default -h localhost -p 12000
# property above and un-comment the two properties below. The discovery
# plugin uses multicast to discover IceGrid.
#
-#Ice.Plugin.IceLocatorDiscovery=IceLocatorDiscovery:createIceLocatorDiscoveryy
+#Ice.Plugin.IceLocatorDiscovery=IceLocatorDiscovery:createIceLocatorDiscovery
#IceGrid.InstanceName=ReplicationDemoIceGrid
#
diff --git a/cpp/demo/IceGrid/replication/config.replica2 b/cpp/demo/IceGrid/replication/config.replica2
index eb1a14db341..f7158625272 100644
--- a/cpp/demo/IceGrid/replication/config.replica2
+++ b/cpp/demo/IceGrid/replication/config.replica2
@@ -8,7 +8,7 @@ Ice.Default.Locator=ReplicationDemoIceGrid/Locator:default -h localhost -p 12000
# property above and un-comment the two properties below. The discovery
# plugin uses multicast to discover IceGrid.
#
-#Ice.Plugin.IceLocatorDiscovery=IceLocatorDiscovery:createIceLocatorDiscoveryy
+#Ice.Plugin.IceLocatorDiscovery=IceLocatorDiscovery:createIceLocatorDiscovery
#IceGrid.InstanceName=ReplicationDemoIceGrid
#
diff --git a/cpp/demo/IceGrid/replication/expect.py b/cpp/demo/IceGrid/replication/expect.py
index e792ac9bddf..8396d271622 100755
--- a/cpp/demo/IceGrid/replication/expect.py
+++ b/cpp/demo/IceGrid/replication/expect.py
@@ -114,9 +114,9 @@ print("running with Ice.Default.Locator set")
properties = ' --Ice.PrintAdapterReady --Ice.StdErr= --Ice.StdOut='
runDemo(properties, '')
-print("running with IceGridDiscovery")
-discovery = ' --Ice.Plugin.IceGridDiscovery=IceGrid:createIceGridDiscovery' + \
- ' --IceGridDiscovery.InstanceName=ReplicationDemoIceGrid' + \
+print("running with IceLocatorDiscovery")
+discovery = ' --Ice.Plugin.IceLocatorDiscovery=IceLocatorDiscovery:createIceLocatorDiscovery' + \
+ ' --IceLocatorDiscovery.InstanceName=ReplicationDemoIceGrid' + \
' --Ice.Default.Locator='
properties = ' --Ice.PrintAdapterReady --Ice.StdErr= --Ice.StdOut= --Ice.Default.Locator='
runDemo(properties + discovery, discovery)
diff --git a/cpp/src/IceGrid/ServerI.cpp b/cpp/src/IceGrid/ServerI.cpp
index 34f0030d790..7fcc644b987 100644
--- a/cpp/src/IceGrid/ServerI.cpp
+++ b/cpp/src/IceGrid/ServerI.cpp
@@ -1338,7 +1338,7 @@ ServerI::checkUpdate(const InternalServerDescriptorPtr& desc, bool noRestart, co
}
return true;
}
-
+
InternalServerDescriptorPtr d = _load ? _load->getInternalServerDescriptor() : _desc;
if(!descriptorUpdated(d, desc))
{
@@ -1406,7 +1406,7 @@ ServerI::destroy(const AMD_Node_destroyServerPtr& amdCB, const string& uuid, int
}
_stop = new StopCommand(this, _node->getTimer(), _deactivationTimeout);
}
-
+
if(!_destroy)
{
//
@@ -3215,11 +3215,11 @@ ServerI::getProperties(const InternalServerDescriptorPtr& desc)
p->second.push_back(createProperty("Ice.Default.Locator", locator));
}
- string discoveryPlugin = properties->getProperty("Ice.Plugin.IceGridDiscovery");
+ string discoveryPlugin = properties->getProperty("Ice.Plugin.IceLocatorDiscovery");
if(!discoveryPlugin.empty())
{
- p->second.push_back(createProperty("Ice.Plugin.IceGridDiscovery", discoveryPlugin));
- p->second.push_back(createProperty("IceGridDiscovery.InstanceName", _node->getInstanceName()));
+ p->second.push_back(createProperty("Ice.Plugin.IceLocatorDiscovery", discoveryPlugin));
+ p->second.push_back(createProperty("IceLocatorDiscovery.InstanceName", _node->getInstanceName()));
}
}
diff --git a/cpp/src/IceLocatorDiscovery/PluginI.cpp b/cpp/src/IceLocatorDiscovery/PluginI.cpp
index 798ad323974..7e391460de5 100644
--- a/cpp/src/IceLocatorDiscovery/PluginI.cpp
+++ b/cpp/src/IceLocatorDiscovery/PluginI.cpp
@@ -39,13 +39,13 @@ class Request : public IceUtil::Shared
{
public:
- Request(LocatorI* locator,
+ Request(LocatorI* locator,
const string& operation,
- Ice::OperationMode mode,
- const pair<const Ice::Byte*, const Ice::Byte*>& inParams,
+ Ice::OperationMode mode,
+ const pair<const Ice::Byte*, const Ice::Byte*>& inParams,
const Ice::Context& ctx,
const Ice::AMD_Object_ice_invokePtr& amdCB) :
- _locator(locator),
+ _locator(locator),
_operation(operation),
_mode(mode),
_context(ctx),
@@ -68,6 +68,7 @@ protected:
const Ice::AMD_Object_ice_invokePtr _amdCB;
Ice::LocatorPrx _locatorPrx;
+ IceUtil::UniquePtr<Ice::Exception> _exception;
};
typedef IceUtil::Handle<Request> RequestPtr;
@@ -134,7 +135,7 @@ const ::std::string IceGrid_Locator_ids[3] =
class VoidLocatorI : public Ice::Locator
{
public:
-
+
virtual void
findObjectById_async(const Ice::AMD_Locator_findObjectByIdPtr& amdCB,
const Ice::Identity&,
@@ -142,7 +143,7 @@ public:
{
amdCB->ice_response(0);
}
-
+
virtual void
findAdapterById_async(const Ice::AMD_Locator_findAdapterByIdPtr& amdCB,
const string&,
@@ -150,7 +151,7 @@ public:
{
amdCB->ice_response(0);
}
-
+
virtual Ice::LocatorRegistryPrx
getRegistry(const Ice::Current&) const
{
@@ -264,9 +265,17 @@ PluginI::destroy()
void
Request::invoke(const Ice::LocatorPrx& l)
{
- _locatorPrx = l;
- l->begin_ice_invoke(_operation, _mode, _inParams, _context,
- Ice::newCallback_Object_ice_invoke(this, &Request::response, &Request::exception));
+ if(l != _locatorPrx)
+ {
+ _locatorPrx = l;
+ l->begin_ice_invoke(_operation, _mode, _inParams, _context,
+ Ice::newCallback_Object_ice_invoke(this, &Request::response, &Request::exception));
+ }
+ else
+ {
+ assert(_exception.get()); // Don't retry if the proxy didn't change
+ _amdCB->ice_exception(*_exception.get());
+ }
}
void
@@ -292,6 +301,7 @@ Request::exception(const Ice::Exception& ex)
}
catch(const Ice::Exception&)
{
+ _exception.reset(ex.ice_clone());
_locator->invoke(_locatorPrx, this); // Retry with new locator proxy
}
}