use of org.apache.pulsar.metadata.api.Stat in project pulsar by yahoo.
the class MetaStoreImplTest method readMalformedML.
@Test(timeOut = 20000)
void readMalformedML() throws Exception {
MetaStore store = new MetaStoreImpl(metadataStore, executor);
metadataStore.put("/managed-ledgers/my_test", "non-valid".getBytes(), Optional.empty()).join();
final CountDownLatch latch = new CountDownLatch(1);
store.getManagedLedgerInfo("my_test", false, new MetaStoreCallback<MLDataFormats.ManagedLedgerInfo>() {
public void operationFailed(MetaStoreException e) {
// Ok
latch.countDown();
}
public void operationComplete(ManagedLedgerInfo result, Stat version) {
fail("Operation should have failed");
}
});
latch.await();
}
use of org.apache.pulsar.metadata.api.Stat in project pulsar by yahoo.
the class MetaStoreImplTest method deleteNonExistingML.
@Test
void deleteNonExistingML() throws Exception {
MetaStore store = new MetaStoreImpl(metadataStore, executor);
AtomicReference<MetaStoreException> exception = new AtomicReference<>();
CountDownLatch counter = new CountDownLatch(1);
store.removeManagedLedger("non-existing", new MetaStoreCallback<Void>() {
@Override
public void operationComplete(Void result, Stat version) {
counter.countDown();
}
@Override
public void operationFailed(MetaStoreException e) {
exception.set(e);
counter.countDown();
}
});
counter.await();
assertNotNull(exception.get());
}
use of org.apache.pulsar.metadata.api.Stat in project pulsar by yahoo.
the class MetaStoreImplTest method updatingCursorNode.
@Test(timeOut = 20000)
void updatingCursorNode() throws Exception {
MetaStore store = new MetaStoreImpl(metadataStore, executor);
metadataStore.put("/managed-ledgers/my_test", "".getBytes(), Optional.empty()).join();
final CompletableFuture<Void> promise = new CompletableFuture<>();
ManagedCursorInfo info = ManagedCursorInfo.newBuilder().setCursorsLedgerId(1).build();
store.asyncUpdateCursorInfo("my_test", "c1", info, null, new MetaStoreCallback<Void>() {
public void operationFailed(MetaStoreException e) {
promise.completeExceptionally(e);
}
public void operationComplete(Void result, Stat version) {
// Update again using the version
metadataStore.failConditional(new MetadataStoreException("error"), (op, path) -> op == FaultInjectionMetadataStore.OperationType.PUT && path.contains("my_test") && path.contains("c1"));
ManagedCursorInfo info = ManagedCursorInfo.newBuilder().setCursorsLedgerId(2).build();
store.asyncUpdateCursorInfo("my_test", "c1", info, version, new MetaStoreCallback<Void>() {
public void operationFailed(MetaStoreException e) {
// ok
promise.complete(null);
}
@Override
public void operationComplete(Void result, Stat version) {
promise.completeExceptionally(new Exception("should have failed"));
}
});
}
});
promise.get();
}
use of org.apache.pulsar.metadata.api.Stat in project pulsar by yahoo.
the class MetadataStoreBatchingTest method testBatchWrite.
@Test(dataProvider = "impl")
public void testBatchWrite(String provider, Supplier<String> urlSupplier) throws Exception {
@Cleanup MetadataStore store = MetadataStoreFactory.create(urlSupplier.get(), MetadataStoreConfig.builder().batchingEnabled(true).batchingMaxDelayMillis(1_000).build());
String key1 = newKey();
CompletableFuture<Stat> f1 = store.put(key1, new byte[0], Optional.empty());
String key2 = newKey();
CompletableFuture<Stat> f2 = store.put(key2, new byte[0], Optional.empty());
Stat s1 = f1.join();
Stat s2 = f2.join();
log.info("s1: {}", s1);
log.info("s2: {}", s2);
}
use of org.apache.pulsar.metadata.api.Stat in project pulsar by yahoo.
the class MetadataStoreTest method notificationListeners.
@Test(dataProvider = "impl")
public void notificationListeners(String provider, Supplier<String> urlSupplier) throws Exception {
@Cleanup MetadataStore store = MetadataStoreFactory.create(urlSupplier.get(), MetadataStoreConfig.builder().build());
BlockingQueue<Notification> notifications = new LinkedBlockingDeque<>();
store.registerListener(n -> {
notifications.add(n);
});
String key1 = newKey();
assertFalse(store.get(key1).join().isPresent());
// Trigger created notification
Stat stat = store.put(key1, "value-1".getBytes(), Optional.empty()).join();
assertTrue(store.get(key1).join().isPresent());
assertEquals(store.getChildren(key1).join(), Collections.emptyList());
assertEquals(stat.getVersion(), 0);
Notification n = notifications.poll(3, TimeUnit.SECONDS);
assertNotNull(n);
assertEquals(n.getType(), NotificationType.Created);
assertEquals(n.getPath(), key1);
// Trigger modified notification
stat = store.put(key1, "value-2".getBytes(), Optional.empty()).join();
n = notifications.poll(3, TimeUnit.SECONDS);
assertNotNull(n);
assertEquals(n.getType(), NotificationType.Modified);
assertEquals(n.getPath(), key1);
assertEquals(stat.getVersion(), 1);
// Trigger modified notification on the parent
String key1Child = key1 + "/xx";
assertFalse(store.get(key1Child).join().isPresent());
store.put(key1Child, "value-2".getBytes(), Optional.empty()).join();
n = notifications.poll(3, TimeUnit.SECONDS);
assertNotNull(n);
assertEquals(n.getType(), NotificationType.Created);
assertEquals(n.getPath(), key1Child);
n = notifications.poll(3, TimeUnit.SECONDS);
assertNotNull(n);
assertEquals(n.getType(), NotificationType.ChildrenChanged);
assertEquals(n.getPath(), key1);
assertTrue(store.exists(key1Child).join());
assertEquals(store.getChildren(key1).join(), Collections.singletonList("xx"));
store.delete(key1Child, Optional.empty()).join();
n = notifications.poll(3, TimeUnit.SECONDS);
assertNotNull(n);
assertEquals(n.getType(), NotificationType.Deleted);
assertEquals(n.getPath(), key1Child);
// Parent should be notified of the deletion
n = notifications.poll(3, TimeUnit.SECONDS);
assertNotNull(n);
assertEquals(n.getType(), NotificationType.ChildrenChanged);
assertEquals(n.getPath(), key1);
}
Aggregations