I’d consider that a bug. Any Curator recipe should shut down correctly. Open an 
issue with a test case.

-JZ

On July 15, 2014 at 8:41:14 PM, Corey Nolet ([email protected]) wrote:

I'm using a leaderSelector and path children cache together. During a shutdown 
method, I'm getting an InterruptedException and i'm having trouble figuring out 
a graceful way to handle it.

java.lang.InterruptedException

at 
java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedNanos(AbstractQueuedSynchronizer.java:1038)

at 
java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireSharedNanos(AbstractQueuedSynchronizer.java:1326)

at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:282)

at 
org.apache.curator.CuratorZookeeperClient.internalBlockUntilConnectedOrTimedOut(CuratorZookeeperClient.java:324)

at org.apache.curator.RetryLoop.callWithRetry(RetryLoop.java:105)

at org.apache.curator.utils.EnsurePath$InitialHelper.ensure(EnsurePath.java:140)

at org.apache.curator.utils.EnsurePath.ensure(EnsurePath.java:99)

at 
org.apache.curator.framework.recipes.cache.PathChildrenCache.refresh(PathChildrenCache.java:481)

at 
org.apache.curator.framework.recipes.cache.RefreshOperation.invoke(RefreshOperation.java:35)

at 
org.apache.curator.framework.recipes.cache.PathChildrenCache$10.run(PathChildrenCache.java:762)

at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)

at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)

at java.util.concurrent.FutureTask.run(FutureTask.java:166)

at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)

at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)

at java.util.concurrent.FutureTask.run(FutureTask.java:166)

at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)

at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)

at java.lang.Thread.run(Thread.java:724)





Here's my shutdown code.

      if (curatorFramework.getState().equals(CuratorFrameworkState.STARTED)) {

        pathChildrenCache.close();

        leaderSelector.close();

        curatorFramework.close();

      }



I'm assuming the closing of PathChildrenCache and LeaderSelector are probably 
asynchronous? Adding Thread.sleep(2000); does not seem to help, though. Is 
there an excepted way of closing these and waiting?

Reply via email to