use of org.apache.bookkeeper.versioning.LongVersion in project bookkeeper by apache.
the class AbstractZkLedgerManagerTest method testReadLedgerMetadataDataCorrupted.
@Test
public void testReadLedgerMetadataDataCorrupted() throws Exception {
long ledgerId = System.currentTimeMillis();
String ledgerStr = String.valueOf(ledgerId);
metadata.setVersion(new LongVersion(1234L));
Stat stat = mock(Stat.class);
when(stat.getVersion()).thenReturn(1234);
when(stat.getCtime()).thenReturn(metadata.getCtime());
mockZkGetData(ledgerStr, false, KeeperException.Code.OK.intValue(), new byte[0], stat);
GenericCallbackFuture<LedgerMetadata> callbackFuture = new GenericCallbackFuture<>();
ledgerManager.readLedgerMetadata(ledgerId, callbackFuture);
try {
result(callbackFuture);
fail("Should fail on reading ledger metadata if a ledger doesn't exist");
} catch (BKException bke) {
assertEquals(Code.ZKException, bke.getCode());
}
verify(mockZk, times(1)).getData(eq(ledgerStr), eq(null), any(DataCallback.class), any());
}
use of org.apache.bookkeeper.versioning.LongVersion in project bookkeeper by apache.
the class AbstractZkLedgerManagerTest method testLedgerMetadataListenerOnLedgerDeletedEvent.
@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));
metadata.setVersion(new LongVersion(1234L));
Stat stat = mock(Stat.class);
when(stat.getVersion()).thenReturn(1234);
when(stat.getCtime()).thenReturn(metadata.getCtime());
mockZkGetData(ledgerStr, true, KeeperException.Code.OK.intValue(), metadata.serialize(), 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);
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));
}
use of org.apache.bookkeeper.versioning.LongVersion in project bookkeeper by apache.
the class AbstractZkLedgerManagerTest method testWriteLedgerMetadataSuccess.
@Test
public void testWriteLedgerMetadataSuccess() throws Exception {
long ledgerId = System.currentTimeMillis();
String ledgerStr = String.valueOf(ledgerId);
metadata.setVersion(new LongVersion(1234L));
Stat stat = mock(Stat.class);
when(stat.getVersion()).thenReturn(1235);
when(stat.getCtime()).thenReturn(metadata.getCtime());
mockZkSetData(ledgerStr, metadata.serialize(), 1234, KeeperException.Code.OK.intValue(), stat);
assertEquals(new LongVersion(1234L), metadata.getVersion());
GenericCallbackFuture<Void> callbackFuture = new GenericCallbackFuture<>();
ledgerManager.writeLedgerMetadata(ledgerId, metadata, callbackFuture);
result(callbackFuture);
assertEquals(new LongVersion(1235L), metadata.getVersion());
verify(mockZk, times(1)).setData(eq(ledgerStr), any(byte[].class), eq(1234), any(StatCallback.class), any());
}
use of org.apache.bookkeeper.versioning.LongVersion in project bookkeeper by apache.
the class AbstractZkLedgerManagerTest method testWriteLedgerMetadataException.
@Test
public void testWriteLedgerMetadataException() throws Exception {
long ledgerId = System.currentTimeMillis();
String ledgerStr = String.valueOf(ledgerId);
metadata.setVersion(new LongVersion(1234L));
mockZkSetData(ledgerStr, metadata.serialize(), 1234, KeeperException.Code.CONNECTIONLOSS.intValue(), null);
assertEquals(new LongVersion(1234L), metadata.getVersion());
GenericCallbackFuture<Void> callbackFuture = new GenericCallbackFuture<>();
ledgerManager.writeLedgerMetadata(ledgerId, metadata, callbackFuture);
try {
result(callbackFuture);
fail("Should fail on writing ledger metadata if encountering zookeeper exceptions");
} catch (BKException bke) {
assertEquals(Code.ZKException, bke.getCode());
}
// version remain unchanged
assertEquals(new LongVersion(1234L), metadata.getVersion());
verify(mockZk, times(1)).setData(eq(ledgerStr), any(byte[].class), eq(1234), any(StatCallback.class), any());
}
use of org.apache.bookkeeper.versioning.LongVersion in project bookkeeper by apache.
the class AbstractZkLedgerManagerTest method testRemoveLedgerMetadataNoNode.
@Test
public void testRemoveLedgerMetadataNoNode() throws Exception {
long ledgerId = System.currentTimeMillis();
String ledgerStr = String.valueOf(ledgerId);
LongVersion version = new LongVersion(1234L);
mockZkDelete(ledgerStr, (int) version.getLongVersion(), KeeperException.Code.NONODE.intValue());
GenericCallbackFuture<Void> callbackFuture = new GenericCallbackFuture<>();
ledgerManager.removeLedgerMetadata(ledgerId, version, callbackFuture);
try {
result(callbackFuture);
fail("Should fail to remove metadata if no such ledger exists");
} catch (BKException bke) {
assertEquals(Code.NoSuchLedgerExistsException, bke.getCode());
}
verify(mockZk, times(1)).delete(eq(ledgerStr), eq(1234), any(VoidCallback.class), eq(null));
}
Aggregations