Пример #1
0
        public async Task testUpdateConflict()
        {
            var zk = await createClient();

            Assert.assertNull(await zk.existsAsync("/multi", null));

            try
            {
                await multiAsync(zk, Arrays.asList(
                                     Op.create("/multi", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT),
                                     Op.setData("/multi", "X".UTF8getBytes(), 0),
                                     Op.setData("/multi", "Y".UTF8getBytes(), 0)
                                     ));

                Assert.fail("Should have thrown a KeeperException for invalid version");
            }
            catch (KeeperException e)
            {
                //PASS
                LOG.error("STACKTRACE: " + e);
            }

            Assert.assertNull(await zk.existsAsync("/multi", null));

            //Updating version solves conflict -- order matters
            await multiAsync(zk, Arrays.asList(
                                 Op.create("/multi", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT),
                                 Op.setData("/multi", "X".UTF8getBytes(), 0),
                                 Op.setData("/multi", "Y".UTF8getBytes(), 1)
                                 ));

            Assert.assertEquals((await zk.getDataAsync("/multi", false)).Data, "Y".UTF8getBytes());
        }
Пример #2
0
        public async Task testMultiRollback()
        {
            var zk = await createClient();

            await zk.createAsync("/foo", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);

            ZooKeeper epheZk = await createClient();

            await epheZk.createAsync("/foo/bar", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);

            List <Op> opList = Arrays.asList(Op.delete("/foo", -1));

            try
            {
                await multiAsync(zk, opList);

                Assert.fail("multi delete should failed for not empty directory");
            }
            catch (KeeperException.NotEmptyException)
            {
            }

            var hasBeenDeleted = new HasBeenDeletedWatcher();

            await zk.existsAsync("/foo/bar", hasBeenDeleted);

            await epheZk.closeAsync();

            await hasBeenDeleted.triggered.WaitAsync();

            try
            {
                await zk.getDataAsync("/foo/bar", false);

                Assert.fail("ephemeral node should have been deleted");
            }
            catch (KeeperException.NoNodeException)
            {
            }

            await multiAsync(zk, opList);

            try
            {
                await zk.getDataAsync("/foo", false);

                Assert.fail("persistent node should have been deleted after multi");
            }
            catch (KeeperException.NoNodeException)
            {
            }
        }
Пример #3
0
        public async Task testInvalidVersion()
        {
            var zk = await createClient();

            try
            {
                await multiAsync(zk, Arrays.asList(
                                     Op.create("/multi", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT),
                                     Op.delete("/multi", 1)
                                     ));

                Assert.fail("delete /multi should have failed");
            }
            catch (KeeperException)
            {
                /* PASS */
            }
        }
Пример #4
0
        private async Task multiHavingErrors(ZooKeeper zk, List <Op> ops, List <KeeperException.Code> expectedResultCodes)
        {
            try
            {
                await multiAsync(zk, ops);

                Assert.fail("Shouldn't have validated in ZooKeeper client!");
            }
            catch (KeeperException e)
            {
                var results = e.getResults();
                for (int i = 0; i < results.Count; i++)
                {
                    OpResult opResult = results[i];
                    Assert.assertTrue("Did't recieve proper error response", opResult is OpResult.ErrorResult);
                    OpResult.ErrorResult errRes = (OpResult.ErrorResult)opResult;
                    Assert.assertEquals("Did't recieve proper error code", expectedResultCodes[i], errRes.getErr());
                }
            }
        }
Пример #5
0
        public async Task TestDeleteUpdateConflict()
        {
            var zk = await createClient();

            /* Delete of a node folowed by an update of the (now) deleted node */
            try
            {
                await multiAsync(zk, Arrays.asList(
                                     Op.create("/multi", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT),
                                     Op.delete("/multi", 0),
                                     Op.setData("/multi", "Y".UTF8getBytes(), 0)
                                     ));

                Assert.fail("/multi should have been deleted so setData should have failed");
            }
            catch (KeeperException)
            {
                /* PASS */
            }

            // '/multi' should never have been created as entire op should fail
            Assert.assertNull(await zk.existsAsync("/multi", null));
        }
Пример #6
0
        public async Task TestGetResults()
        {
            var zk = await createClient();

            /* Delete of a node folowed by an update of the (now) deleted node */
            var ops = Arrays.asList(
                Op.create("/multi", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT),
                Op.delete("/multi", 0),
                Op.setData("/multi", "Y".UTF8getBytes(), 0),
                Op.create("/foo", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT)
                );
            List <OpResult> results = null;

            try
            {
                await zk.multiAsync(ops);

                Assert.fail("/multi should have been deleted so setData should have failed");
            }
            catch (KeeperException e)
            {
                // '/multi' should never have been created as entire op should fail
                Assert.assertNull(await zk.existsAsync("/multi", null));
                results = e.getResults();
            }

            Assert.assertNotNull(results);
            foreach (OpResult r in results)
            {
                LOG.info("RESULT==> " + r);
                if (r is OpResult.ErrorResult)
                {
                    OpResult.ErrorResult er = (OpResult.ErrorResult)r;
                    LOG.info("ERROR RESULT: " + er + " ERR=>" + EnumUtil <KeeperException.Code> .DefinedCast(er.getErr()));
                }
            }
        }
Пример #7
0
        public async Task testNoWatchesTriggeredForFailedMultiRequest()
        {
            var zk = await createClient();

            HasTriggeredWatcher watcher = new HasTriggeredWatcher();
            await zk.getChildrenAsync("/", watcher);

            try
            {
                await multiAsync(zk, Arrays.asList(
                                     Op.create("/t", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT),
                                     Op.delete("/nonexisting", -1)
                                     ));

                Assert.fail("expected previous multi op to fail!");
            }
            catch (KeeperException.NoNodeException)
            {
                // expected
            }

            // by waiting for the callback we're assured that the event queue is flushed
            Assert.assertTrue(await zk.sync("/").WithTimeout(CONNECTION_TIMEOUT));
        }
Пример #8
0
        public async Task testTransactionBuilder()
        {
            var zk = await createClient();

            List <OpResult> results = await commitAsync(zk.transaction()
                                                        .create("/t1", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT)
                                                        .create("/t1/child", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT)
                                                        .create("/t2", null, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL));

            Assert.assertEquals(3, results.Count);
            foreach (OpResult r in results)
            {
                OpResult.CreateResult c = (OpResult.CreateResult)r;
                Assert.assertTrue(c.getPath().StartsWith("/t"));
                Assert.assertNotNull(c.ToString());
            }
            Assert.assertNotNull(await zk.existsAsync("/t1", false));
            Assert.assertNotNull(await zk.existsAsync("/t1/child", false));
            Assert.assertNotNull(await zk.existsAsync("/t2", false));

            results = await commitAsync(zk.transaction()
                                        .check("/t1", 0)
                                        .check("/t1/child", 0)
                                        .check("/t2", 0));

            Assert.assertEquals(3, results.Count);
            foreach (OpResult r in results)
            {
                OpResult.CheckResult c = (OpResult.CheckResult)r;
                Assert.assertNotNull(c.ToString());
            }

            try
            {
                await commitAsync(zk.transaction()
                                  .check("/t1", 0)
                                  .check("/t1/child", 0)
                                  .check("/t2", 1));

                Assert.fail();
            }
            catch (KeeperException.BadVersionException)
            {
                // expected
            }

            results = await commitAsync(zk.transaction()
                                        .check("/t1", 0)
                                        .setData("/t1", new byte[0], 0));

            Assert.assertEquals(2, results.Count);
            foreach (OpResult r in results)
            {
                Assert.assertNotNull(r.ToString());
            }

            try
            {
                results = await commitAsync(zk.transaction()
                                            .check("/t1", 1)
                                            .setData("/t1", new byte[0], 2));

                Assert.fail();
            }
            catch (KeeperException.BadVersionException)
            {
                // expected
            }

            results = await commitAsync(zk.transaction()
                                        .check("/t1", 1)
                                        .check("/t1/child", 0)
                                        .check("/t2", 0));

            Assert.assertEquals(3, results.Count);

            results = await commitAsync(zk.transaction()
                                        .delete("/t2", -1)
                                        .delete("/t1/child", -1));

            Assert.assertEquals(2, results.Count);
            foreach (OpResult r in results)
            {
                OpResult.DeleteResult d = (OpResult.DeleteResult)r;
                Assert.assertNotNull(d.ToString());
            }
            Assert.assertNotNull(await zk.existsAsync("/t1", false));
            Assert.assertNull(await zk.existsAsync("/t1/child", false));
            Assert.assertNull(await zk.existsAsync("/t2", false));
        }