Search in sources :

Example 26 with Stat

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();
}
Also used : MetaStoreException(org.apache.bookkeeper.mledger.ManagedLedgerException.MetaStoreException) Stat(org.apache.pulsar.metadata.api.Stat) CountDownLatch(java.util.concurrent.CountDownLatch) ManagedLedgerInfo(org.apache.bookkeeper.mledger.proto.MLDataFormats.ManagedLedgerInfo) Test(org.testng.annotations.Test)

Example 27 with Stat

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());
}
Also used : MetaStoreException(org.apache.bookkeeper.mledger.ManagedLedgerException.MetaStoreException) Stat(org.apache.pulsar.metadata.api.Stat) AtomicReference(java.util.concurrent.atomic.AtomicReference) CountDownLatch(java.util.concurrent.CountDownLatch) Test(org.testng.annotations.Test)

Example 28 with Stat

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();
}
Also used : ManagedLedgerInfo(org.apache.bookkeeper.mledger.proto.MLDataFormats.ManagedLedgerInfo) MetadataStoreException(org.apache.pulsar.metadata.api.MetadataStoreException) Stat(org.apache.pulsar.metadata.api.Stat) MockedBookKeeperTestCase(org.apache.bookkeeper.test.MockedBookKeeperTestCase) Assert.fail(org.testng.Assert.fail) CompletableFuture(java.util.concurrent.CompletableFuture) Test(org.testng.annotations.Test) Assert.assertNotNull(org.testng.Assert.assertNotNull) MetaStoreCallback(org.apache.bookkeeper.mledger.impl.MetaStore.MetaStoreCallback) MLDataFormats(org.apache.bookkeeper.mledger.proto.MLDataFormats) AtomicReference(java.util.concurrent.atomic.AtomicReference) ManagedCursorInfo(org.apache.bookkeeper.mledger.proto.MLDataFormats.ManagedCursorInfo) CountDownLatch(java.util.concurrent.CountDownLatch) MetaStoreException(org.apache.bookkeeper.mledger.ManagedLedgerException.MetaStoreException) FaultInjectionMetadataStore(org.apache.pulsar.metadata.impl.FaultInjectionMetadataStore) MetadataCache(org.apache.pulsar.metadata.api.MetadataCache) Data(lombok.Data) Assert.assertTrue(org.testng.Assert.assertTrue) Optional(java.util.Optional) AllArgsConstructor(lombok.AllArgsConstructor) Assert.assertFalse(org.testng.Assert.assertFalse) NoArgsConstructor(lombok.NoArgsConstructor) MetaStoreCallback(org.apache.bookkeeper.mledger.impl.MetaStore.MetaStoreCallback) MetadataStoreException(org.apache.pulsar.metadata.api.MetadataStoreException) MetaStoreException(org.apache.bookkeeper.mledger.ManagedLedgerException.MetaStoreException) MetaStoreException(org.apache.bookkeeper.mledger.ManagedLedgerException.MetaStoreException) MetadataStoreException(org.apache.pulsar.metadata.api.MetadataStoreException) CompletableFuture(java.util.concurrent.CompletableFuture) Stat(org.apache.pulsar.metadata.api.Stat) ManagedCursorInfo(org.apache.bookkeeper.mledger.proto.MLDataFormats.ManagedCursorInfo) Test(org.testng.annotations.Test)

Example 29 with Stat

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);
}
Also used : MetadataStore(org.apache.pulsar.metadata.api.MetadataStore) Stat(org.apache.pulsar.metadata.api.Stat) Cleanup(lombok.Cleanup) Test(org.testng.annotations.Test)

Example 30 with Stat

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);
}
Also used : MetadataStore(org.apache.pulsar.metadata.api.MetadataStore) LinkedBlockingDeque(java.util.concurrent.LinkedBlockingDeque) Stat(org.apache.pulsar.metadata.api.Stat) Cleanup(lombok.Cleanup) Notification(org.apache.pulsar.metadata.api.Notification) Test(org.testng.annotations.Test)

Aggregations

Stat (org.apache.pulsar.metadata.api.Stat)132 MetaStoreException (org.apache.bookkeeper.mledger.ManagedLedgerException.MetaStoreException)69 Test (org.testng.annotations.Test)66 CountDownLatch (java.util.concurrent.CountDownLatch)42 CompletableFuture (java.util.concurrent.CompletableFuture)40 ManagedLedgerException (org.apache.bookkeeper.mledger.ManagedLedgerException)39 ManagedLedgerInfo (org.apache.bookkeeper.mledger.proto.MLDataFormats.ManagedLedgerInfo)36 Cleanup (lombok.Cleanup)33 MetadataStoreException (org.apache.pulsar.metadata.api.MetadataStoreException)33 MetaStoreCallback (org.apache.bookkeeper.mledger.impl.MetaStore.MetaStoreCallback)30 MetadataStore (org.apache.pulsar.metadata.api.MetadataStore)27 Optional (java.util.Optional)24 ManagedCursorInfo (org.apache.bookkeeper.mledger.proto.MLDataFormats.ManagedCursorInfo)24 MLDataFormats (org.apache.bookkeeper.mledger.proto.MLDataFormats)21 Notification (org.apache.pulsar.metadata.api.Notification)21 ArrayList (java.util.ArrayList)18 List (java.util.List)18 Slf4j (lombok.extern.slf4j.Slf4j)18 BKException (org.apache.bookkeeper.client.BKException)18 BookKeeper (org.apache.bookkeeper.client.BookKeeper)18