curator-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Cameron McKenzie (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CURATOR-126) IllegalStateException in performBackgroundOperation during close
Date Mon, 28 Jul 2014 06:18:38 GMT

    [ 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)

Mime
View raw message