Example usage for org.apache.zookeeper KeeperException code

List of usage examples for org.apache.zookeeper KeeperException code

Introduction

In this page you can find the example usage for org.apache.zookeeper KeeperException code.

Prototype

Code code

To view the source code for org.apache.zookeeper KeeperException code.

Click Source Link

Usage

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);
}