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

Cameron McKenzie commented on CURATOR-126:
------------------------------------------

I've had a bit of a look at this and have a unit test to reproduce the issue. 
It would seem that (unless I'm missing something), it would be simplest just to 
shutdown the executor thread before the ZooKeeper client is closed. 

In the CuratorFrameworkImpl method, this:

            client.close();
            namespaceWatcherMap.close();
            if ( executorService != null )
            {
                executorService.shutdownNow();
            }

would be changed to:
            namespaceWatcherMap.close();
            if ( executorService != null )
            {
                executorService.shutdownNow();
            }

            client.close();

> IllegalStateException in performBackgroundOperation during close
> ----------------------------------------------------------------
>
>                 Key: CURATOR-126
>                 URL: https://issues.apache.org/jira/browse/CURATOR-126
>             Project: Apache Curator
>          Issue Type: Bug
>          Components: Framework
>    Affects Versions: 2.5.0
>            Reporter: Scott Blum
>            Assignee: Cameron McKenzie
>   Original Estimate: 24h
>  Remaining Estimate: 24h
>
> {code}
> [CuratorFramework-0] ERROR 
> org.apache.curator.framework.imps.CuratorFrameworkImpl  - Background 
> exception was not retry-able or retry gave up
> java.lang.IllegalStateException: Client is not started
>       at 
> com.google.common.base.Preconditions.checkState(Preconditions.java:176)
>       at 
> org.apache.curator.CuratorZookeeperClient.getZooKeeper(CuratorZookeeperClient.java:113)
>       at 
> org.apache.curator.framework.imps.CuratorFrameworkImpl.performBackgroundOperation(CuratorFrameworkImpl.java:807)
>       at 
> org.apache.curator.framework.imps.CuratorFrameworkImpl.backgroundOperationsLoop(CuratorFrameworkImpl.java:793)
>       at 
> org.apache.curator.framework.imps.CuratorFrameworkImpl.access$400(CuratorFrameworkImpl.java:57)
>       at 
> org.apache.curator.framework.imps.CuratorFrameworkImpl$4.call(CuratorFrameworkImpl.java:275)
>       at java.util.concurrent.FutureTask.run(FutureTask.java:266)
>       at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
>       at java.lang.Thread.run(Thread.java:744)
> {code}
> I see this sometimes during test runs; I believe this happens because 
> CuratorZookeeperClient.started gets set to false during shutdown, but the 
> backgroundOperation loop can still be running since shutting down the 
> backgroundOperation loop is inherently racy.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to