예제 #1
0
        public void testBasic()
        {
            CuratorZookeeperClient client = new CuratorZookeeperClient(ZkDefaultHosts,
                                                                       DefaultSessionTimeout,
                                                                       DefaultConnectionTimeout,
                                                                       null,
                                                                       new RetryOneTime(1));
            SessionFailRetryLoop retryLoop = client.newSessionFailRetryLoop(SessionFailRetryLoop.Mode.FAIL);

            retryLoop.start();
            try
            {
                client.start();
                try
                {
                    while (retryLoop.shouldContinue())
                    {
                        try
                        {
                            RetryLoop.callWithRetry
                            (
                                client,
                                CallableUtils.FromFunc <object>(() =>
                            {
                                Task <Stat> existsTask = client.getZooKeeper().existsAsync("/foo/bar", false);
                                existsTask.Wait();
                                Assert.Null(existsTask.Result);
                                KillSession.kill(client.getZooKeeper(), ZkDefaultHosts, DefaultSessionTimeout);

                                client.getZooKeeper();
                                client.blockUntilConnectedOrTimedOut();
                                existsTask = client.getZooKeeper().existsAsync("/foo/bar", false);
                                existsTask.Wait();
                                Assert.Null(existsTask.Result);
                                return(null);
                            }
                                                                ));
                        }
                        catch (Exception e)
                        {
                            retryLoop.takeException(e);
                        }
                    }
                    Assert.Fail();
                }
                catch (SessionFailRetryLoop.SessionFailedException dummy)
                {
                    // correct
                }
            }
            finally
            {
                retryLoop.Dispose();
                CloseableUtils.closeQuietly(client);
            }
        }
예제 #2
0
        public void testRetry()
        {
            CuratorZookeeperClient client = new CuratorZookeeperClient(ZkDefaultHosts,
                                                                       DefaultSessionTimeout,
                                                                       DefaultConnectionTimeout,
                                                                       null,
                                                                       new RetryOneTime(1));
            SessionFailRetryLoop retryLoop = client.newSessionFailRetryLoop(SessionFailRetryLoop.Mode.RETRY);

            retryLoop.start();
            try
            {
                client.start();
                AtomicBoolean secondWasDone = new AtomicBoolean(false);
                AtomicBoolean firstTime     = new AtomicBoolean(true);
                while (retryLoop.shouldContinue())
                {
                    try
                    {
                        RetryLoop.callWithRetry
                        (
                            client,
                            CallableUtils.FromFunc <object>(() =>
                        {
                            Task <Stat> existsTask;
                            if (firstTime.compareAndSet(true, false))
                            {
                                existsTask = client.getZooKeeper().existsAsync("/foo/bar", false);
                                existsTask.Wait();
                                Assert.Null(existsTask.Result);
                                KillSession.kill(client.getZooKeeper(), ZkDefaultHosts, DefaultSessionTimeout * 2);
                                client.getZooKeeper();
                                client.blockUntilConnectedOrTimedOut();
                            }
                            existsTask = client.getZooKeeper().existsAsync("/foo/bar", false);
                            existsTask.Wait();
                            Assert.Null(existsTask.Result);
                            return(null);
                        })
                        );

                        RetryLoop.callWithRetry
                        (
                            client,
                            CallableUtils.FromFunc <object>(() =>
                        {
                            Assert.False(firstTime.get());
                            Task <Stat> existsTask = client.getZooKeeper().existsAsync("/foo/bar", false);
                            existsTask.Wait();
                            Assert.Null(existsTask.Result);
                            secondWasDone.set(true);
                            return(null);
                        })
                        );
                    }
                    catch (Exception e)
                    {
                        retryLoop.takeException(e);
                    }
                }

                Assert.True(secondWasDone.get());
            }
            finally
            {
                retryLoop.Dispose();
                CloseableUtils.closeQuietly(client);
            }
        }