use of org.apache.bookkeeper.versioning.LongVersion in project bookkeeper by apache.
the class AbstractZkLedgerManagerTest method testLedgerMetadataListenerOnSessionExpired.
@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);
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);
// the listener will be notified with first get
LedgerMetadata change1 = changes.take();
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));
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);
}
use of org.apache.bookkeeper.versioning.LongVersion in project bookkeeper by apache.
the class AbstractZkLedgerManagerTest method testRemoveLedgerMetadataHierarchicalLedgerManager.
private void testRemoveLedgerMetadataHierarchicalLedgerManager(AbstractZkLedgerManager lm) throws Exception {
long ledgerId = System.currentTimeMillis();
String ledgerStr = lm.getLedgerPath(ledgerId);
LongVersion version = new LongVersion(1234L);
mockZkUtilsAsyncDeleteFullPathOptimistic(ledgerStr, (int) version.getLongVersion(), KeeperException.Code.OK.intValue());
GenericCallbackFuture<Void> callbackFuture = new GenericCallbackFuture<>();
lm.removeLedgerMetadata(ledgerId, version, callbackFuture);
result(callbackFuture);
PowerMockito.verifyStatic(ZkUtils.class, times(1));
ZkUtils.asyncDeleteFullPathOptimistic(eq(mockZk), eq(ledgerStr), eq(1234), any(VoidCallback.class), eq(ledgerStr));
}
use of org.apache.bookkeeper.versioning.LongVersion in project bookkeeper by apache.
the class AbstractZkLedgerManagerTest method testReadLedgerMetadataSuccess.
@Test
public void testReadLedgerMetadataSuccess() 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(), metadata.serialize(), stat);
GenericCallbackFuture<LedgerMetadata> callbackFuture = new GenericCallbackFuture<>();
ledgerManager.readLedgerMetadata(ledgerId, callbackFuture);
LedgerMetadata readMetadata = result(callbackFuture);
assertEquals(metadata, readMetadata);
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 testLedgerMetadataListenerOnLedgerDeleted.
@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));
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));
// 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));
}
use of org.apache.bookkeeper.versioning.LongVersion in project bookkeeper by apache.
the class ListBookiesCommandTest method setup.
@Before
public void setup() throws Exception {
super.setup();
writableBookies = createBookies(3181, 10);
readonlyBookies = createBookies(4181, 10);
when(regClient.getWritableBookies()).thenReturn(value(new Versioned<>(writableBookies, new LongVersion(0L))));
when(regClient.getReadOnlyBookies()).thenReturn(value(new Versioned<>(readonlyBookies, new LongVersion(0L))));
PowerMockito.mockStatic(CommandHelpers.class, CALLS_REAL_METHODS);
}
Aggregations