curator-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CURATOR-164) curator-x-discovery: unregisterService is not guaranteed to remove the service, due to reconnectListener concurrency issue
Date Tue, 21 Apr 2015 18:05:59 GMT

    [ https://issues.apache.org/jira/browse/CURATOR-164?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14505394#comment-14505394
] 

ASF GitHub Bot commented on CURATOR-164:
----------------------------------------

Github user madrob commented on a diff in the pull request:

    https://github.com/apache/curator/pull/72#discussion_r28805374
  
    --- Diff: curator-x-discovery/src/main/java/org/apache/curator/x/discovery/details/ServiceDiscoveryImpl.java
---
    @@ -228,15 +234,18 @@ protected void     internalRegisterService(ServiceInstance<T>
service) throws Ex
         public void     unregisterService(ServiceInstance<T> service) throws Exception
         {
             String          path = pathForInstance(service.getName(), service.getId());
    -        try
    -        {
    -            client.delete().forPath(path);
    -        }
    -        catch ( KeeperException.NoNodeException ignore )
    -        {
    -            // ignore
    +        synchronized(service) {
    --- End diff --
    
    Imagine the following sequence:
    
    T1: reconnect()
    T2: unregister(X)
    T1: for each service in cache:
    T1:   register(X)
    T2: services.remove(X)
    T2: client.delete(X)
    T1: client.create(X)


> curator-x-discovery: unregisterService is not guaranteed to remove the service, due to
reconnectListener concurrency issue
> --------------------------------------------------------------------------------------------------------------------------
>
>                 Key: CURATOR-164
>                 URL: https://issues.apache.org/jira/browse/CURATOR-164
>             Project: Apache Curator
>          Issue Type: Bug
>          Components: Framework
>    Affects Versions: 2.7.0
>            Reporter: Rasmus Berg Palm
>            Assignee: Jordan Zimmerman
>            Priority: Critical
>             Fix For: 2.8.0
>
>
> In ServiceDiscoveryImpl:
> When unregistering a service, the reconnect listener might fire while deleting the path.
> This can cause a condition where the delete finishes successfully, the service is removed
from services, and then the reRegisterServices completes successfully and the service is added
back in ZK and in services, end result being that the service was not removed, even though
unregisterService did not throw any exceptions. 
> Essentially the use of the internal 'services' cache makes for a nightmare of concurrency
issues. I put this as critical as the library it's really not usable IMO.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message