List of usage examples for org.apache.zookeeper KeeperException code
Code code
To view the source code for org.apache.zookeeper KeeperException code.
Click Source Link
From source file:org.apache.bookkeeper.meta.AbstractZkLedgerManagerTest.java
License:Apache License
@Test public void testWriteLedgerMetadataException() throws Exception { long ledgerId = System.currentTimeMillis(); String ledgerStr = String.valueOf(ledgerId); mockZkSetData(ledgerStr, serDe.serialize(metadata), 1234, KeeperException.Code.CONNECTIONLOSS.intValue(), null);//from w ww . j a va2s.c o m try { result(ledgerManager.writeLedgerMetadata(ledgerId, metadata, new LongVersion(1234L))); fail("Should fail on writing ledger metadata if encountering zookeeper exceptions"); } catch (BKException bke) { assertEquals(Code.ZKException, bke.getCode()); } verify(mockZk, times(1)).setData(eq(ledgerStr), any(byte[].class), eq(1234), any(StatCallback.class), any()); }
From source file:org.apache.bookkeeper.meta.AbstractZkLedgerManagerTest.java
License:Apache License
@Test public void testLedgerMetadataListener() throws Exception { long ledgerId = System.currentTimeMillis(); String ledgerStr = String.valueOf(ledgerId); LinkedBlockingQueue<LedgerMetadata> changes = new LinkedBlockingQueue<>(); LedgerMetadataListener listener = (ledgerId1, metadata) -> changes.add(metadata.getValue()); Stat stat = mock(Stat.class); when(stat.getVersion()).thenReturn(1234); when(stat.getCtime()).thenReturn(metadata.getCtime()); mockZkGetData(ledgerStr, true, KeeperException.Code.OK.intValue(), serDe.serialize(metadata), stat); ledgerManager.registerLedgerMetadataListener(ledgerId, listener); // the listener will be notified with first get LedgerMetadata change1 = changes.take(); assertEquals(metadata, change1);/*from ww w . j a v a 2 s. co m*/ verify(mockZk, times(1)).getData(anyString(), any(Watcher.class), any(DataCallback.class), any()); // the watcher is registered for receiving watched event assertTrue(watchers.containsKey(ledgerStr)); Set<Watcher> watcherSet1 = watchers.get(ledgerStr); assertEquals(1, watcherSet1.size()); Watcher registeredWatcher1 = watcherSet1.stream().findFirst().get(); // mock get data to return an updated metadata when(stat.getVersion()).thenReturn(1235); mockZkGetData(ledgerStr, true, KeeperException.Code.OK.intValue(), serDe.serialize(metadata), stat); // notify the watcher event notifyWatchedEvent(EventType.NodeDataChanged, KeeperState.SyncConnected, ledgerStr); // the listener should receive an updated metadata LedgerMetadata change2 = changes.take(); assertEquals(metadata, change2); verify(mockZk, times(2)).getData(anyString(), any(Watcher.class), any(DataCallback.class), any()); // after the listener receive an updated metadata, a new watcher should be registered // for subsequent changes again. assertTrue(watchers.containsKey(ledgerStr)); Set<Watcher> watcherSet2 = watchers.get(ledgerStr); assertEquals(1, watcherSet2.size()); Watcher registeredWatcher2 = watcherSet2.stream().findFirst().get(); // zookeeper watchers are same, since there is only one giant watcher per ledger manager. assertSame(registeredWatcher1, registeredWatcher2); // verify scheduler verify(scheduler, times(2)).submit(any(Runnable.class)); verify(scheduler, times(0)).schedule(any(Runnable.class), anyLong(), any(TimeUnit.class)); }
From source file:org.apache.bookkeeper.meta.AbstractZkLedgerManagerTest.java
License:Apache License
@Test public void testLedgerMetadataListenerOnLedgerDeleted() throws Exception { long ledgerId = System.currentTimeMillis(); String ledgerStr = String.valueOf(ledgerId); LinkedBlockingQueue<Optional<LedgerMetadata>> changes = new LinkedBlockingQueue<>(); LedgerMetadataListener listener = (ledgerId1, metadata) -> changes .add(Optional.ofNullable(metadata != null ? metadata.getValue() : null)); Stat stat = mock(Stat.class); when(stat.getVersion()).thenReturn(1234); when(stat.getCtime()).thenReturn(metadata.getCtime()); mockZkGetData(ledgerStr, true, KeeperException.Code.OK.intValue(), serDe.serialize(metadata), stat); ledgerManager.registerLedgerMetadataListener(ledgerId, listener); assertTrue(ledgerManager.listeners.containsKey(ledgerId)); // the listener will be notified with first get LedgerMetadata change1 = changes.take().get(); assertEquals(metadata, change1);//from w w w. j a va 2 s . c om verify(mockZk, times(1)).getData(anyString(), any(Watcher.class), any(DataCallback.class), any()); // the watcher is registered for receiving watched event assertTrue(watchers.containsKey(ledgerStr)); // mock get data to simulate an ledger is deleted mockZkGetData(ledgerStr, true, KeeperException.Code.NONODE.intValue(), null, null); // notify the watcher event notifyWatchedEvent(EventType.NodeDataChanged, KeeperState.SyncConnected, ledgerStr); // the listener should be removed from listener set and not receive an updated metadata anymore Optional<LedgerMetadata> change2 = changes.take(); assertFalse(change2.isPresent()); assertFalse(ledgerManager.listeners.containsKey(ledgerId)); // verify scheduler: the listener is only triggered once verify(scheduler, times(1)).submit(any(Runnable.class)); verify(scheduler, times(0)).schedule(any(Runnable.class), anyLong(), any(TimeUnit.class)); // no watcher is registered assertFalse(watchers.containsKey(ledgerStr)); }
From source file:org.apache.bookkeeper.meta.AbstractZkLedgerManagerTest.java
License:Apache License
@Test public void testLedgerMetadataListenerOnLedgerDeletedEvent() throws Exception { long ledgerId = System.currentTimeMillis(); String ledgerStr = String.valueOf(ledgerId); LinkedBlockingQueue<Optional<LedgerMetadata>> changes = new LinkedBlockingQueue<>(); LedgerMetadataListener listener = (ledgerId1, metadata) -> changes .add(Optional.ofNullable(metadata != null ? metadata.getValue() : null)); Stat stat = mock(Stat.class); when(stat.getVersion()).thenReturn(1234); when(stat.getCtime()).thenReturn(metadata.getCtime()); mockZkGetData(ledgerStr, true, KeeperException.Code.OK.intValue(), serDe.serialize(metadata), stat); ledgerManager.registerLedgerMetadataListener(ledgerId, listener); assertTrue(ledgerManager.listeners.containsKey(ledgerId)); // the listener will be notified with first get LedgerMetadata change1 = changes.take().get(); assertEquals(metadata, change1);/*from w w w . ja v a2s. c o m*/ verify(mockZk, times(1)).getData(anyString(), any(Watcher.class), any(DataCallback.class), any()); // the watcher is registered for receiving watched event assertTrue(watchers.containsKey(ledgerStr)); // notify the watcher event notifyWatchedEvent(EventType.NodeDeleted, KeeperState.SyncConnected, ledgerStr); // the listener should be removed from listener set and a null change is notified. Optional<LedgerMetadata> change2 = changes.take(); assertFalse(change2.isPresent()); // no more `getData` is called. verify(mockZk, times(1)).getData(anyString(), any(Watcher.class), any(DataCallback.class), any()); // listener is automatically unregistered after a ledger is deleted. assertFalse(ledgerManager.listeners.containsKey(ledgerId)); }
From source file:org.apache.bookkeeper.meta.AbstractZkLedgerManagerTest.java
License:Apache License
@Test public void testLedgerMetadataListenerOnRetries() throws Exception { long ledgerId = System.currentTimeMillis(); String ledgerStr = String.valueOf(ledgerId); LinkedBlockingQueue<LedgerMetadata> changes = new LinkedBlockingQueue<>(); LedgerMetadataListener listener = (ledgerId1, metadata) -> changes.add(metadata.getValue()); Stat stat = mock(Stat.class); when(stat.getVersion()).thenReturn(1234); when(stat.getCtime()).thenReturn(metadata.getCtime()); // fail the first get, so the ledger manager will retry get data again. mockZkGetData(ledgerStr, true, KeeperException.Code.SESSIONEXPIRED.intValue(), null, null); ledgerManager.registerLedgerMetadataListener(ledgerId, listener); assertTrue(ledgerManager.listeners.containsKey(ledgerId)); // the listener will not be notified with any updates assertNull(changes.poll());/* w w w.j a v a2 s .c om*/ // an retry task is scheduled verify(scheduler, times(1)).schedule(any(Runnable.class), anyLong(), any(TimeUnit.class)); // zookeeper is called once verify(mockZk, times(1)).getData(anyString(), any(Watcher.class), any(DataCallback.class), any()); // watcher is not registered since getData call is failed assertFalse(watchers.containsKey(ledgerStr)); // mock get data to return a valid response mockZkGetData(ledgerStr, true, KeeperException.Code.OK.intValue(), serDe.serialize(metadata), stat); schedulerController.advance(Duration.ofMillis(ZK_CONNECT_BACKOFF_MS)); // the listener will be notified with first get LedgerMetadata change = changes.take(); assertEquals(metadata, change); verify(mockZk, times(2)).getData(anyString(), any(Watcher.class), any(DataCallback.class), any()); // watcher is registered after successfully `getData` assertTrue(watchers.containsKey(ledgerStr)); }
From source file:org.apache.bookkeeper.meta.AbstractZkLedgerManagerTest.java
License:Apache License
@Test public void testLedgerMetadataListenerOnSessionExpired() throws Exception { long ledgerId = System.currentTimeMillis(); String ledgerStr = String.valueOf(ledgerId); LinkedBlockingQueue<LedgerMetadata> changes = new LinkedBlockingQueue<>(); LedgerMetadataListener listener = (ledgerId1, metadata) -> changes.add(metadata.getValue()); Stat stat = mock(Stat.class); when(stat.getVersion()).thenReturn(1234); when(stat.getCtime()).thenReturn(metadata.getCtime()); mockZkGetData(ledgerStr, true, KeeperException.Code.OK.intValue(), serDe.serialize(metadata), stat); ledgerManager.registerLedgerMetadataListener(ledgerId, listener); // the listener will be notified with first get LedgerMetadata change1 = changes.take(); assertEquals(metadata, change1);/*from w w w . j av a 2 s. c om*/ verify(mockZk, times(1)).getData(anyString(), any(Watcher.class), any(DataCallback.class), any()); // the watcher is registered for receiving watched event assertTrue(watchers.containsKey(ledgerStr)); Set<Watcher> watcherSet1 = watchers.get(ledgerStr); assertEquals(1, watcherSet1.size()); Watcher registeredWatcher1 = watcherSet1.stream().findFirst().get(); // simulate session expired notifyWatchedEvent(EventType.None, KeeperState.Expired, ledgerStr); // ledger manager will retry to read metadata again LedgerMetadata change2 = changes.take(); assertEquals(metadata, change2); verify(mockZk, times(2)).getData(anyString(), any(Watcher.class), any(DataCallback.class), any()); // the watcher is registered for receiving watched event assertTrue(watchers.containsKey(ledgerStr)); Set<Watcher> watcherSet2 = watchers.get(ledgerStr); assertEquals(1, watcherSet2.size()); Watcher registeredWatcher2 = watcherSet2.stream().findFirst().get(); assertSame(registeredWatcher1, registeredWatcher2); }
From source file:org.apache.bookkeeper.meta.AbstractZkLedgerManagerTest.java
License:Apache License
@Test public void testUnregisterLedgerMetadataListener() throws Exception { long ledgerId = System.currentTimeMillis(); String ledgerStr = String.valueOf(ledgerId); LinkedBlockingQueue<LedgerMetadata> changes = new LinkedBlockingQueue<>(); LedgerMetadataListener listener = (ledgerId1, metadata) -> changes.add(metadata.getValue()); Stat stat = mock(Stat.class); when(stat.getVersion()).thenReturn(1234); when(stat.getCtime()).thenReturn(metadata.getCtime()); mockZkGetData(ledgerStr, true, KeeperException.Code.OK.intValue(), serDe.serialize(metadata), stat); ledgerManager.registerLedgerMetadataListener(ledgerId, listener); assertTrue(ledgerManager.listeners.containsKey(ledgerId)); // the listener will be notified with first get LedgerMetadata change1 = changes.take(); assertEquals(metadata, change1);// w ww.j av a 2 s . c om verify(mockZk, times(1)).getData(anyString(), any(Watcher.class), any(DataCallback.class), any()); // the watcher is registered for receiving watched event assertTrue(watchers.containsKey(ledgerStr)); Set<Watcher> watcherSet1 = watchers.get(ledgerStr); assertEquals(1, watcherSet1.size()); Watcher registeredWatcher1 = watcherSet1.stream().findFirst().get(); // mock get data to return an updated metadata when(stat.getVersion()).thenReturn(1235); mockZkGetData(ledgerStr, true, KeeperException.Code.OK.intValue(), serDe.serialize(metadata), stat); // unregister the listener ledgerManager.unregisterLedgerMetadataListener(ledgerId, listener); assertFalse(ledgerManager.listeners.containsKey(ledgerId)); // notify the watcher event notifyWatchedEvent(EventType.NodeDataChanged, KeeperState.SyncConnected, ledgerStr); // since listener is already unregistered so no more `getData` is issued. assertNull(changes.poll()); verify(mockZk, times(1)).getData(anyString(), any(Watcher.class), any(DataCallback.class), any()); }
From source file:org.apache.bookkeeper.meta.ZkLedgerIdGenerator.java
License:Apache License
@Override public void generateLedgerId(final GenericCallback<Long> cb) { ZkUtils.asyncCreateFullPathOptimistic(zk, ledgerPrefix, new byte[0], zkAcls, CreateMode.EPHEMERAL_SEQUENTIAL, new StringCallback() { @Override/* w w w . j a v a 2s .c om*/ public void processResult(int rc, String path, Object ctx, final String idPathName) { if (rc != KeeperException.Code.OK.intValue()) { LOG.error("Could not generate new ledger id", KeeperException.create(KeeperException.Code.get(rc), path)); cb.operationComplete(BKException.Code.ZKException, null); return; } /* * Extract ledger id from generated path */ long ledgerId; try { ledgerId = getLedgerIdFromGenPath(idPathName); cb.operationComplete(BKException.Code.OK, ledgerId); } catch (IOException e) { LOG.error("Could not extract ledger-id from id gen path:" + path, e); cb.operationComplete(BKException.Code.ZKException, null); return; } // delete the znode for id generation zk.delete(idPathName, -1, new AsyncCallback.VoidCallback() { @Override public void processResult(int rc, String path, Object ctx) { if (rc != KeeperException.Code.OK.intValue()) { LOG.warn("Exception during deleting znode for id generation : ", KeeperException.create(KeeperException.Code.get(rc), path)); } else { LOG.debug("Deleting znode for id generation : {}", idPathName); } } }, null); } }, null); }
From source file:org.apache.bookkeeper.mledger.impl.MetaStoreImplZookeeper.java
License:Apache License
@Override public void getManagedLedgerInfo(final String ledgerName, final MetaStoreCallback<ManagedLedgerInfo> callback) { // Try to get the content or create an empty node zk.getData(prefix + ledgerName, false, (DataCallback) (rc, path, ctx, readData, stat) -> { executor.submit(safeRun(() -> { if (rc == KeeperException.Code.OK.intValue()) { try { ManagedLedgerInfo.Builder builder = ManagedLedgerInfo.newBuilder(); TextFormat.merge(new String(readData, Encoding), builder); ManagedLedgerInfo info = builder.build(); info = updateMLInfoTimestamp(info); callback.operationComplete(info, new ZKVersion(stat.getVersion())); } catch (ParseException e) { callback.operationFailed(new MetaStoreException(e)); }/* w w w .ja va 2s . co m*/ } else if (rc == KeeperException.Code.NONODE.intValue()) { log.info("Creating '{}{}'", prefix, ledgerName); StringCallback createcb = new StringCallback() { public void processResult(int rc, String path, Object ctx, String name) { if (rc == KeeperException.Code.OK.intValue()) { ManagedLedgerInfo info = ManagedLedgerInfo.getDefaultInstance(); callback.operationComplete(info, new ZKVersion(0)); } else { callback.operationFailed(new MetaStoreException( KeeperException.create(KeeperException.Code.get(rc)))); } } }; ZkUtils.asyncCreateFullPathOptimistic(zk, prefix + ledgerName, new byte[0], Acl, CreateMode.PERSISTENT, createcb, null); } else { callback.operationFailed( new MetaStoreException(KeeperException.create(KeeperException.Code.get(rc)))); } })); }, null); }
From source file:org.apache.bookkeeper.mledger.impl.MetaStoreImplZookeeper.java
License:Apache License
@Override public void asyncUpdateLedgerIds(String ledgerName, ManagedLedgerInfo mlInfo, Version version, final MetaStoreCallback<Void> callback) { ZKVersion zkVersion = (ZKVersion) version; if (log.isDebugEnabled()) { log.debug("[{}] Updating metadata version={} with content={}", ledgerName, zkVersion.version, mlInfo); }// w w w. j ava 2 s . c o m zk.setData(prefix + ledgerName, mlInfo.toString().getBytes(Encoding), zkVersion.version, new StatCallback() { public void processResult(int rc, String path, Object zkCtx, Stat stat) { executor.submit(safeRun(() -> { if (log.isDebugEnabled()) { log.debug("[{}] UpdateLedgersIdsCallback.processResult rc={} newVersion={}", ledgerName, Code.get(rc), stat != null ? stat.getVersion() : "null"); } MetaStoreException status = null; if (rc == KeeperException.Code.BADVERSION.intValue()) { // Content has been modified on ZK since our last read status = new BadVersionException( KeeperException.create(KeeperException.Code.get(rc))); callback.operationFailed(status); } else if (rc != KeeperException.Code.OK.intValue()) { status = new MetaStoreException( KeeperException.create(KeeperException.Code.get(rc))); callback.operationFailed(status); } else { callback.operationComplete(null, new ZKVersion(stat.getVersion())); } })); } }, null); }