@Test public void testExists() throws Exception { Stat stat = create2EmptyNode(zkClient, PARENT_PATH); Assert.assertEquals( String.format("%s Exists returns correct node stat", serverState), stat, zkClient.exists(PARENT_PATH, false)); }
@Test public void testMulti() throws KeeperException, InterruptedException { Op createTtl = Op.create("/a", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_WITH_TTL, 100); Op createTtlSequential = Op.create("/b", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL_WITH_TTL, 200); Op createNonTtl = Op.create("/c", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); List<OpResult> results = zk.multi(Arrays.asList(createTtl, createTtlSequential, createNonTtl)); String sequentialPath = ((OpResult.CreateResult)results.get(1)).getPath(); final AtomicLong fakeElapsed = new AtomicLong(0); ContainerManager containerManager = newContainerManager(fakeElapsed); containerManager.checkContainers(); Assert.assertNotNull("node should not have been deleted yet", zk.exists("/a", false)); Assert.assertNotNull("node should not have been deleted yet", zk.exists(sequentialPath, false)); Assert.assertNotNull("node should never be deleted", zk.exists("/c", false)); fakeElapsed.set(110); containerManager.checkContainers(); Assert.assertNull("node should have been deleted", zk.exists("/a", false)); Assert.assertNotNull("node should not have been deleted yet", zk.exists(sequentialPath, false)); Assert.assertNotNull("node should never be deleted", zk.exists("/c", false)); fakeElapsed.set(210); containerManager.checkContainers(); Assert.assertNull("node should have been deleted", zk.exists("/a", false)); Assert.assertNull("node should have been deleted", zk.exists(sequentialPath, false)); Assert.assertNotNull("node should never be deleted", zk.exists("/c", false)); }
@Test public void testDelete() throws Exception { create2EmptyNode(zkClient, PARENT_PATH); zkClient.delete(PARENT_PATH, -1); Assert.assertNull( String.format("%s Node no longer exists", serverState), zkClient.exists(PARENT_PATH, false)); }
/** * Make sure ephemerals get cleaned up when session disconnects. */ @Test public void testSessionDisconnect() throws KeeperException, InterruptedException, IOException { zk.create("/sdisconnect", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL); assertNotNull("Ephemeral node has not been created", zk.exists("/sdisconnect", null)); zk.close(); zk = createClient(); assertNull("Ephemeral node shouldn't exist after client disconnect", zk.exists("/sdisconnect", null)); }
@Test public void testCreateSequential() throws KeeperException, InterruptedException { Stat stat = new Stat(); String path = zk.create("/foo", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL_WITH_TTL, stat, 100); Assert.assertEquals(0, stat.getEphemeralOwner()); final AtomicLong fakeElapsed = new AtomicLong(0); ContainerManager containerManager = newContainerManager(fakeElapsed); containerManager.checkContainers(); Assert.assertNotNull("Ttl node should not have been deleted yet", zk.exists(path, false)); fakeElapsed.set(1000); containerManager.checkContainers(); Assert.assertNull("Ttl node should have been deleted", zk.exists(path, false)); }
@Test public void testCreate() throws KeeperException, InterruptedException { Stat stat = new Stat(); zk.create("/foo", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_WITH_TTL, stat, 100); Assert.assertEquals(0, stat.getEphemeralOwner()); final AtomicLong fakeElapsed = new AtomicLong(0); ContainerManager containerManager = newContainerManager(fakeElapsed); containerManager.checkContainers(); Assert.assertNotNull("Ttl node should not have been deleted yet", zk.exists("/foo", false)); fakeElapsed.set(1000); containerManager.checkContainers(); Assert.assertNull("Ttl node should have been deleted", zk.exists("/foo", false)); }
@Test public void testSessionExpiration() throws InterruptedException, KeeperException { final CountDownLatch expirationLatch = new CountDownLatch(1); Watcher watcher = new Watcher() { @Override public void process(WatchedEvent event) { if ( event.getState() == Event.KeeperState.Expired ) { expirationLatch.countDown(); } } }; zk.exists("/foo", watcher); zk.getTestable().injectSessionExpiration(); Assert.assertTrue(expirationLatch.await(5, TimeUnit.SECONDS)); boolean gotException = false; try { zk.exists("/foo", false); Assert.fail("Should have thrown a SessionExpiredException"); } catch (KeeperException.SessionExpiredException e) { // correct gotException = true; } Assert.assertTrue(gotException); }
@Test public void testCreateAsync() throws KeeperException, InterruptedException { AsyncCallback.Create2Callback callback = new AsyncCallback.Create2Callback() { @Override public void processResult(int rc, String path, Object ctx, String name, Stat stat) { // NOP } }; zk.create("/foo", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_WITH_TTL, callback, null, 100); final AtomicLong fakeElapsed = new AtomicLong(0); ContainerManager containerManager = newContainerManager(fakeElapsed); containerManager.checkContainers(); Assert.assertNotNull("Ttl node should not have been deleted yet", zk.exists("/foo", false)); fakeElapsed.set(1000); containerManager.checkContainers(); Assert.assertNull("Ttl node should have been deleted", zk.exists("/foo", false)); }
@Test public void testCreate() throws KeeperException, InterruptedException { Stat stat = new Stat(); zk.create("/foo", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_WITH_TTL, stat, 100); Assert.assertEquals(0, stat.getEphemeralOwner()); final AtomicLong fakeElapsed = new AtomicLong(0); ContainerManager containerManager = newContainerManager(fakeElapsed); containerManager.checkContainers(); Assert.assertNotNull("Ttl node should not have been deleted yet", zk.exists("/foo", false)); fakeElapsed.set(1000); containerManager.checkContainers(); Assert.assertNull("Ttl node should have been deleted", zk.exists("/foo", false)); }
/** * Make sure ephemerals are kept when session restores. */ @Test public void testSessionRestore() throws KeeperException, InterruptedException, IOException { zk.create("/srestore", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL); assertNotNull("Ephemeral node has not been created", zk.exists("/srestore", null)); zk.disconnect(); zk.close(); zk = createClient(); assertNotNull("Ephemeral node should be present when session is restored", zk.exists("/srestore", null)); }
@Test public void testModifying() throws KeeperException, InterruptedException { Stat stat = new Stat(); zk.create("/foo", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_WITH_TTL, stat, 100); Assert.assertEquals(0, stat.getEphemeralOwner()); final AtomicLong fakeElapsed = new AtomicLong(0); ContainerManager containerManager = newContainerManager(fakeElapsed); containerManager.checkContainers(); Assert.assertNotNull("Ttl node should not have been deleted yet", zk.exists("/foo", false)); for ( int i = 0; i < 10; ++i ) { fakeElapsed.set(50); zk.setData("/foo", new byte[i + 1], -1); containerManager.checkContainers(); Assert.assertNotNull("Ttl node should not have been deleted yet", zk.exists("/foo", false)); } fakeElapsed.set(200); containerManager.checkContainers(); Assert.assertNull("Ttl node should have been deleted", zk.exists("/foo", false)); }
@Test public void test353TTL() throws KeeperException, InterruptedException { DataTree dataTree = serverFactory.zkServer.getZKDatabase().dataTree; long ephemeralOwner = EphemeralTypeEmulate353.ttlToEphemeralOwner(100); dataTree.createNode("/foo", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, ephemeralOwner, dataTree.getNode("/").stat.getCversion()+1, 1, 1); final AtomicLong fakeElapsed = new AtomicLong(0); ContainerManager containerManager = newContainerManager(fakeElapsed); containerManager.checkContainers(); Assert.assertNotNull("Ttl node should not have been deleted yet", zk.exists("/foo", false)); fakeElapsed.set(1000); containerManager.checkContainers(); Assert.assertNull("Ttl node should have been deleted", zk.exists("/foo", false)); }
/** * Make sure ephemerals are kept when server restarts. */ @Test public void testSessionSurviveServerRestart() throws Exception { zk.create("/sdeath", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL); assertNotNull("Ephemeral node has not been created", zk.exists("/sdeath", null)); zk.disconnect(); stopServer(); startServer(); zk = createClient(); assertNotNull("Ephemeral node should be present when server restarted", zk.exists("/sdeath", null)); } }
watches[i] = new MyWatcher(); cbs[i] = new MyStatCallback(); zk.exists("/test", watches[i], cbs[i], count); zk.exists("/test", false); Assert.assertTrue("Failed to pause the connection!", zk.pauseCnxn(3000)); zk2.close(); watches[i] = new MyWatcher(); cbs[i] = new MyStatCallback(); zk.exists("/test", watches[i], cbs[i], count); Assert.assertEquals(null, zk.exists("/test", false)); waitForAllWatchers(); for(int i = 0; i < COUNT/2; i++) {
"localhost:" + qu.getPeer(index).peer.getClientPort()); zk2.exists("/foo", true);
@Test public void testMaxTTLs() throws InterruptedException, KeeperException { RequestHeader h = new RequestHeader(1, ZooDefs.OpCode.createTTL); String path = "/bad_ttl"; CreateTTLRequest request = new CreateTTLRequest(path, new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_WITH_TTL.toFlag(), EphemeralType.TTL.maxValue()); CreateResponse response = new CreateResponse(); ReplyHeader r = zk.submitRequest(h, request, response, null); Assert.assertEquals("EphemeralType.getMaxTTL() should succeed", r.getErr(), Code.OK.intValue()); Assert.assertNotNull("Node should exist", zk.exists(path, false)); }
/** * Verify that the server is sending the proper zxid. See ZOOKEEPER-1412. */ @Test public void testFollowerSendsLastZxid() throws Exception { QuorumUtil qu = new QuorumUtil(1); qu.startAll(); int index = 1; while(qu.getPeer(index).peer.follower == null) { index++; } LOG.info("Connecting to follower: {}", index); TestableZooKeeper zk = createTestableClient("localhost:" + qu.getPeer(index).peer.getClientPort()); assertEquals(0L, zk.testableLastZxid()); zk.exists("/", false); long lzxid = zk.testableLastZxid(); assertTrue("lzxid:" + lzxid + " > 0", lzxid > 0); zk.close(); qu.shutdownAll(); }
@Test public void testBadTTLs() throws InterruptedException, KeeperException { RequestHeader h = new RequestHeader(1, ZooDefs.OpCode.createTTL); String path = "/bad_ttl"; CreateTTLRequest request = new CreateTTLRequest(path, new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_WITH_TTL.toFlag(), -100); CreateResponse response = new CreateResponse(); ReplyHeader r = zk.submitRequest(h, request, response, null); Assert.assertEquals("An invalid CreateTTLRequest should throw BadArguments", r.getErr(), Code.BADARGUMENTS.intValue()); Assert.assertNull("An invalid CreateTTLRequest should not result in znode creation", zk.exists(path, false)); request = new CreateTTLRequest(path, new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_WITH_TTL.toFlag(), EphemeralType.TTL.maxValue() + 1); response = new CreateResponse(); r = zk.submitRequest(h, request, response, null); Assert.assertEquals("An invalid CreateTTLRequest should throw BadArguments", r.getErr(), Code.BADARGUMENTS.intValue()); Assert.assertNull("An invalid CreateTTLRequest should not result in znode creation", zk.exists(path, false)); }