[
https://issues.apache.org/jira/browse/CURATOR-94?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14710851#comment-14710851
]
ASF GitHub Bot commented on CURATOR-94:
---------------------------------------
Github user dtrott commented on the pull request:
https://github.com/apache/curator/pull/2#issuecomment-134519167
I am afraid that this patch is more than a year old and the underlying code
has changed.
I believe the original code with the patch applied looked like this:
https://github.com/dtrott/curator/blob/CURATOR-94/curator-x-discovery/src/main/java/org/apache/curator/x/discovery/details/ServiceDiscoveryImpl.java
Hence your suggestion of unregistered and re-registering would have worked,
however as you have pointed out, this approach will not work any more as
unregistration now requires that the service be in the map.
I have not looked at this issue since the patch was submitted (it worked
for me ;-) however a **very** cursory scan of the current code base didn't
indicate the the core issue had been fixed (PERMANENT services are not
permanent).
I don't really like my original suggestion of loading PERMANENT
registrations into all clients, as it would require a lot more overhead to
monitor (watch) and load registrations in other clients, a simpler solution
would be to add special cases to the update and unregister methods so that they
load PERMANENT the record from zookeper instead of using the map, however I
suspect that this might introduce some nasty race conditions - frankly I would
be fine with this and resolve the issue with documentation ... "PERMANENT
registrations require external synchronization", however I can see why others
may feel that isn't clean.
I would also recommend confirming if the bug still exists and if so,
removing PERMANENT until such time as someone creates a workable patch...
otherwise the code base is just leaving a landmine for someone else to step on
....
> PERMANENT registration should not be added to the services map.
> ---------------------------------------------------------------
>
> Key: CURATOR-94
> URL: https://issues.apache.org/jira/browse/CURATOR-94
> Project: Apache Curator
> Issue Type: Bug
> Components: Framework
> Affects Versions: 2.4.0
> Reporter: David Trott
>
> In ServiceDiscoveryImpl the registerService(...) method should be:
> {
> if (service.getServiceType() == ServiceType.STATIC)
> {
> services.put(service.getId(), service);
> }
> internalRegisterService(service);
> }
> This prevents two side effects:
> + PERMANENT registration are not deleted when the ServiceDiscoveryImpl class
> is closed.
> + PERMANENT registration are not re-registered (potentially with old data)
> after a connection loss event.
> The first case is a problem, since shutting down the registration app cleanly
> deletes all PERMANENT registrations.
> Additionally since PERMANENT registrations do not use ephemeral nodes the
> re-registration functionality is not needed.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)