diff options
Diffstat (limited to 'cpp')
-rw-r--r-- | cpp/demo/IceGrid/replication/config.node1 | 2 | ||||
-rw-r--r-- | cpp/demo/IceGrid/replication/config.node2 | 2 | ||||
-rw-r--r-- | cpp/demo/IceGrid/replication/config.replica1 | 2 | ||||
-rw-r--r-- | cpp/demo/IceGrid/replication/config.replica2 | 2 | ||||
-rwxr-xr-x | cpp/demo/IceGrid/replication/expect.py | 6 | ||||
-rw-r--r-- | cpp/src/IceGrid/ServerI.cpp | 10 | ||||
-rw-r--r-- | cpp/src/IceLocatorDiscovery/PluginI.cpp | 30 |
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 } } |