Search in sources :

Example 46 with ManagedCursor

use of org.apache.bookkeeper.mledger.ManagedCursor in project pulsar by yahoo.

the class ManagedLedgerTest method testConcurrentOpenCursor.

@Test
public void testConcurrentOpenCursor() throws Exception {
    ManagedLedgerImpl ledger = (ManagedLedgerImpl) factory.open("testConcurrentOpenCursor");
    final AtomicReference<ManagedCursor> cursor1 = new AtomicReference<>(null);
    final AtomicReference<ManagedCursor> cursor2 = new AtomicReference<>(null);
    final CyclicBarrier barrier = new CyclicBarrier(2);
    final CountDownLatch latch = new CountDownLatch(2);
    cachedExecutor.execute(() -> {
        try {
            barrier.await();
        } catch (Exception e) {
        }
        ledger.asyncOpenCursor("c1", new OpenCursorCallback() {

            @Override
            public void openCursorFailed(ManagedLedgerException exception, Object ctx) {
                latch.countDown();
            }

            @Override
            public void openCursorComplete(ManagedCursor cursor, Object ctx) {
                cursor1.set(cursor);
                latch.countDown();
            }
        }, null);
    });
    cachedExecutor.execute(() -> {
        try {
            barrier.await();
        } catch (Exception e) {
        }
        ledger.asyncOpenCursor("c1", new OpenCursorCallback() {

            @Override
            public void openCursorFailed(ManagedLedgerException exception, Object ctx) {
                latch.countDown();
            }

            @Override
            public void openCursorComplete(ManagedCursor cursor, Object ctx) {
                cursor2.set(cursor);
                latch.countDown();
            }
        }, null);
    });
    latch.await();
    assertNotNull(cursor1.get());
    assertNotNull(cursor2.get());
    assertEquals(cursor1.get(), cursor2.get());
    ledger.close();
}
Also used : OpenCursorCallback(org.apache.bookkeeper.mledger.AsyncCallbacks.OpenCursorCallback) ManagedLedgerException(org.apache.bookkeeper.mledger.ManagedLedgerException) AtomicReference(java.util.concurrent.atomic.AtomicReference) CountDownLatch(java.util.concurrent.CountDownLatch) BKException(org.apache.bookkeeper.client.BKException) ManagedLedgerException(org.apache.bookkeeper.mledger.ManagedLedgerException) ManagedLedgerFencedException(org.apache.bookkeeper.mledger.ManagedLedgerException.ManagedLedgerFencedException) RejectedExecutionException(java.util.concurrent.RejectedExecutionException) MetaStoreException(org.apache.bookkeeper.mledger.ManagedLedgerException.MetaStoreException) IOException(java.io.IOException) ManagedCursor(org.apache.bookkeeper.mledger.ManagedCursor) CyclicBarrier(java.util.concurrent.CyclicBarrier) Test(org.testng.annotations.Test)

Example 47 with ManagedCursor

use of org.apache.bookkeeper.mledger.ManagedCursor in project pulsar by yahoo.

the class ManagedLedgerTest method discardEmptyLedgersOnClose.

@Test
public void discardEmptyLedgersOnClose() throws Exception {
    ManagedLedgerImpl ledger = (ManagedLedgerImpl) factory.open("my_test_ledger");
    ManagedCursor c1 = ledger.openCursor("c1");
    ledger.addEntry("entry".getBytes());
    assertEquals(ledger.getLedgersInfoAsList().size(), 1);
    c1.close();
    ledger.close();
    // re-open
    ledger = (ManagedLedgerImpl) factory.open("my_test_ledger");
    // 1 ledger with 1 entry and the current writing ledger
    assertEquals(ledger.getLedgersInfoAsList().size(), 2);
    c1.close();
    ledger.close();
    // re-open, now the previous empty ledger should have been discarded
    ledger = (ManagedLedgerImpl) factory.open("my_test_ledger");
    // 1 ledger with 1 entry, and the current
    assertEquals(ledger.getLedgersInfoAsList().size(), 2);
// writing ledger
}
Also used : ManagedCursor(org.apache.bookkeeper.mledger.ManagedCursor) Test(org.testng.annotations.Test)

Example 48 with ManagedCursor

use of org.apache.bookkeeper.mledger.ManagedCursor in project pulsar by yahoo.

the class ManagedLedgerTest method spanningMultipleLedgersWithSize.

@Test(timeOut = 20000)
public void spanningMultipleLedgersWithSize() throws Exception {
    ManagedLedgerConfig config = new ManagedLedgerConfig().setMaxEntriesPerLedger(1000000);
    config.setMaxSizePerLedgerMb(1);
    config.setEnsembleSize(1);
    config.setWriteQuorumSize(1).setAckQuorumSize(1);
    config.setMetadataWriteQuorumSize(1).setMetadataAckQuorumSize(1);
    ManagedLedger ledger = factory.open("my_test_ledger", config);
    assertEquals(ledger.getNumberOfEntries(), 0);
    assertEquals(ledger.getTotalSize(), 0);
    ManagedCursor cursor = ledger.openCursor("c1");
    byte[] content = new byte[1023 * 1024];
    for (int i = 0; i < 3; i++) ledger.addEntry(content);
    List<Entry> entries = cursor.readEntries(100);
    assertEquals(entries.size(), 3);
    assertEquals(cursor.hasMoreEntries(), false);
    PositionImpl first = (PositionImpl) entries.get(0).getPosition();
    PositionImpl last = (PositionImpl) entries.get(entries.size() - 1).getPosition();
    entries.forEach(e -> e.release());
    // Read again, from next ledger id
    entries = cursor.readEntries(100);
    assertEquals(entries.size(), 0);
    assertEquals(cursor.hasMoreEntries(), false);
    entries.forEach(e -> e.release());
    log.info("First={} Last={}", first, last);
    assertTrue(first.getLedgerId() < last.getLedgerId());
    assertEquals(first.getEntryId(), 0);
    assertEquals(last.getEntryId(), 0);
    ledger.close();
}
Also used : Entry(org.apache.bookkeeper.mledger.Entry) ManagedLedger(org.apache.bookkeeper.mledger.ManagedLedger) ManagedLedgerConfig(org.apache.bookkeeper.mledger.ManagedLedgerConfig) ManagedCursor(org.apache.bookkeeper.mledger.ManagedCursor) Test(org.testng.annotations.Test)

Example 49 with ManagedCursor

use of org.apache.bookkeeper.mledger.ManagedCursor in project pulsar by yahoo.

the class ManagedLedgerTest method previousPosition.

@Test
public void previousPosition() throws Exception {
    ManagedLedgerImpl ledger = (ManagedLedgerImpl) factory.open("my_test_ledger", new ManagedLedgerConfig().setMaxEntriesPerLedger(2));
    ManagedCursor cursor = ledger.openCursor("my_cursor");
    Position p0 = cursor.getMarkDeletedPosition();
    // This is expected because p0 is already an "invalid" position (since no entry has been mark-deleted yet)
    assertEquals(ledger.getPreviousPosition((PositionImpl) p0), p0);
    // Force to close an empty ledger
    ledger.close();
    ledger = (ManagedLedgerImpl) factory.open("my_test_ledger", new ManagedLedgerConfig().setMaxEntriesPerLedger(2));
    // again
    ledger.close();
    ledger = (ManagedLedgerImpl) factory.open("my_test_ledger", new ManagedLedgerConfig().setMaxEntriesPerLedger(2));
    PositionImpl pBeforeWriting = ledger.getLastPosition();
    PositionImpl p1 = (PositionImpl) ledger.addEntry("entry".getBytes());
    ledger.close();
    ledger = (ManagedLedgerImpl) factory.open("my_test_ledger", new ManagedLedgerConfig().setMaxEntriesPerLedger(2));
    Position p2 = ledger.addEntry("entry".getBytes());
    Position p3 = ledger.addEntry("entry".getBytes());
    Position p4 = ledger.addEntry("entry".getBytes());
    assertEquals(ledger.getPreviousPosition(p1), pBeforeWriting);
    assertEquals(ledger.getPreviousPosition((PositionImpl) p2), p1);
    assertEquals(ledger.getPreviousPosition((PositionImpl) p3), p2);
    assertEquals(ledger.getPreviousPosition((PositionImpl) p4), p3);
}
Also used : Position(org.apache.bookkeeper.mledger.Position) ManagedLedgerConfig(org.apache.bookkeeper.mledger.ManagedLedgerConfig) ManagedCursor(org.apache.bookkeeper.mledger.ManagedCursor) Test(org.testng.annotations.Test)

Example 50 with ManagedCursor

use of org.apache.bookkeeper.mledger.ManagedCursor in project pulsar by yahoo.

the class ManagedLedgerTest method testGetNextValidPosition.

@Test
public void testGetNextValidPosition() throws Exception {
    ManagedLedgerConfig conf = new ManagedLedgerConfig();
    conf.setMaxEntriesPerLedger(1);
    ManagedLedgerImpl ledger = (ManagedLedgerImpl) factory.open("testGetNextValidPosition", conf);
    ManagedCursor c1 = ledger.openCursor("c1");
    PositionImpl p1 = (PositionImpl) ledger.addEntry("entry1".getBytes());
    PositionImpl p2 = (PositionImpl) ledger.addEntry("entry2".getBytes());
    PositionImpl p3 = (PositionImpl) ledger.addEntry("entry3".getBytes());
    assertEquals(ledger.getNextValidPosition((PositionImpl) c1.getMarkDeletedPosition()), p1);
    assertEquals(ledger.getNextValidPosition(p1), p2);
    assertEquals(ledger.getNextValidPosition(p3), PositionImpl.get(p3.getLedgerId(), p3.getEntryId() + 1));
}
Also used : ManagedLedgerConfig(org.apache.bookkeeper.mledger.ManagedLedgerConfig) ManagedCursor(org.apache.bookkeeper.mledger.ManagedCursor) Test(org.testng.annotations.Test)

Aggregations

ManagedCursor (org.apache.bookkeeper.mledger.ManagedCursor)135 Test (org.testng.annotations.Test)126 ManagedLedger (org.apache.bookkeeper.mledger.ManagedLedger)102 ManagedLedgerConfig (org.apache.bookkeeper.mledger.ManagedLedgerConfig)66 Position (org.apache.bookkeeper.mledger.Position)59 Entry (org.apache.bookkeeper.mledger.Entry)57 ManagedLedgerException (org.apache.bookkeeper.mledger.ManagedLedgerException)52 CountDownLatch (java.util.concurrent.CountDownLatch)32 ManagedLedgerFactory (org.apache.bookkeeper.mledger.ManagedLedgerFactory)28 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)17 CyclicBarrier (java.util.concurrent.CyclicBarrier)15 AddEntryCallback (org.apache.bookkeeper.mledger.AsyncCallbacks.AddEntryCallback)12 ManagedLedgerFactoryConfig (org.apache.bookkeeper.mledger.ManagedLedgerFactoryConfig)12 List (java.util.List)10 BKException (org.apache.bookkeeper.client.BKException)10 AsyncCallbacks (org.apache.bookkeeper.mledger.AsyncCallbacks)10 Future (java.util.concurrent.Future)9 TimeUnit (java.util.concurrent.TimeUnit)9 AtomicReference (java.util.concurrent.atomic.AtomicReference)9 MarkDeleteCallback (org.apache.bookkeeper.mledger.AsyncCallbacks.MarkDeleteCallback)9