Search in sources :

Example 1 with Entry

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

the class EntryCacheManagerTest method verifyHitsMisses.

@Test
void verifyHitsMisses() throws Exception {
    ManagedLedgerFactoryConfig config = new ManagedLedgerFactoryConfig();
    config.setMaxCacheSize(7 * 10);
    config.setCacheEvictionWatermark(0.8);
    factory = new ManagedLedgerFactoryImpl(bkc, bkc.getZkHandle(), config);
    EntryCacheManager cacheManager = factory.getEntryCacheManager();
    ManagedLedgerImpl ledger = (ManagedLedgerImpl) factory.open("ledger");
    ManagedCursorImpl c1 = (ManagedCursorImpl) ledger.openCursor("c1");
    ManagedCursorImpl c2 = (ManagedCursorImpl) ledger.openCursor("c2");
    for (int i = 0; i < 10; i++) {
        ledger.addEntry(("entry-" + i).getBytes());
    }
    cacheManager.mlFactoryMBean.refreshStats(1, TimeUnit.SECONDS);
    assertEquals(cacheManager.mlFactoryMBean.getCacheUsedSize(), 70);
    assertEquals(cacheManager.mlFactoryMBean.getCacheHitsRate(), 0.0);
    assertEquals(cacheManager.mlFactoryMBean.getCacheMissesRate(), 0.0);
    assertEquals(cacheManager.mlFactoryMBean.getCacheHitsThroughput(), 0.0);
    assertEquals(cacheManager.mlFactoryMBean.getNumberOfCacheEvictions(), 0);
    List<Entry> entries = c1.readEntries(10);
    assertEquals(entries.size(), 10);
    entries.forEach(e -> e.release());
    cacheManager.mlFactoryMBean.refreshStats(1, TimeUnit.SECONDS);
    assertEquals(cacheManager.mlFactoryMBean.getCacheUsedSize(), 70);
    assertEquals(cacheManager.mlFactoryMBean.getCacheHitsRate(), 10.0);
    assertEquals(cacheManager.mlFactoryMBean.getCacheMissesRate(), 0.0);
    assertEquals(cacheManager.mlFactoryMBean.getCacheHitsThroughput(), 70.0);
    assertEquals(cacheManager.mlFactoryMBean.getNumberOfCacheEvictions(), 0);
    ledger.deactivateCursor(c1);
    cacheManager.mlFactoryMBean.refreshStats(1, TimeUnit.SECONDS);
    assertEquals(cacheManager.mlFactoryMBean.getCacheUsedSize(), 70);
    assertEquals(cacheManager.mlFactoryMBean.getCacheHitsRate(), 0.0);
    assertEquals(cacheManager.mlFactoryMBean.getCacheMissesRate(), 0.0);
    assertEquals(cacheManager.mlFactoryMBean.getCacheHitsThroughput(), 0.0);
    assertEquals(cacheManager.mlFactoryMBean.getNumberOfCacheEvictions(), 0);
    entries = c2.readEntries(10);
    assertEquals(entries.size(), 10);
    entries.forEach(e -> e.release());
    cacheManager.mlFactoryMBean.refreshStats(1, TimeUnit.SECONDS);
    assertEquals(cacheManager.mlFactoryMBean.getCacheUsedSize(), 70);
    assertEquals(cacheManager.mlFactoryMBean.getCacheHitsRate(), 10.0);
    assertEquals(cacheManager.mlFactoryMBean.getCacheMissesRate(), 0.0);
    assertEquals(cacheManager.mlFactoryMBean.getCacheHitsThroughput(), 70.0);
    assertEquals(cacheManager.mlFactoryMBean.getNumberOfCacheEvictions(), 0);
    PositionImpl pos = (PositionImpl) entries.get(entries.size() - 1).getPosition();
    c2.setReadPosition(pos);
    ledger.discardEntriesFromCache(c2, pos);
    cacheManager.mlFactoryMBean.refreshStats(1, TimeUnit.SECONDS);
    assertEquals(cacheManager.mlFactoryMBean.getCacheUsedSize(), 0);
    assertEquals(cacheManager.mlFactoryMBean.getCacheHitsRate(), 0.0);
    assertEquals(cacheManager.mlFactoryMBean.getCacheMissesRate(), 0.0);
    assertEquals(cacheManager.mlFactoryMBean.getCacheHitsThroughput(), 0.0);
    assertEquals(cacheManager.mlFactoryMBean.getNumberOfCacheEvictions(), 0);
}
Also used : Entry(org.apache.bookkeeper.mledger.Entry) ManagedLedgerFactoryConfig(org.apache.bookkeeper.mledger.ManagedLedgerFactoryConfig) Test(org.testng.annotations.Test)

Example 2 with Entry

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

the class EntryCacheTest method testReadMissingAfter.

@Test(timeOut = 5000)
void testReadMissingAfter() throws Exception {
    LedgerHandle lh = getLedgerHandle();
    when(lh.getId()).thenReturn((long) 0);
    EntryCacheManager cacheManager = factory.getEntryCacheManager();
    EntryCache entryCache = cacheManager.getEntryCache(ml);
    byte[] data = new byte[10];
    for (int i = 0; i < 8; i++) {
        entryCache.insert(new EntryImpl(0, i, data));
    }
    final CountDownLatch counter = new CountDownLatch(1);
    entryCache.asyncReadEntry(lh, 0, 9, false, new ReadEntriesCallback() {

        public void readEntriesComplete(List<Entry> entries, Object ctx) {
            assertEquals(entries.size(), 10);
            counter.countDown();
        }

        public void readEntriesFailed(ManagedLedgerException exception, Object ctx) {
            Assert.fail("should not have failed");
        }
    }, null);
    counter.await();
}
Also used : ReadEntriesCallback(org.apache.bookkeeper.mledger.AsyncCallbacks.ReadEntriesCallback) Entry(org.apache.bookkeeper.mledger.Entry) LedgerEntry(org.apache.bookkeeper.client.LedgerEntry) ManagedLedgerException(org.apache.bookkeeper.mledger.ManagedLedgerException) LedgerHandle(org.apache.bookkeeper.client.LedgerHandle) CountDownLatch(java.util.concurrent.CountDownLatch) Test(org.testng.annotations.Test)

Example 3 with Entry

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

the class EntryCacheTest method testReadMissingBefore.

@Test(timeOut = 5000)
void testReadMissingBefore() throws Exception {
    LedgerHandle lh = getLedgerHandle();
    when(lh.getId()).thenReturn((long) 0);
    EntryCacheManager cacheManager = factory.getEntryCacheManager();
    EntryCache entryCache = cacheManager.getEntryCache(ml);
    byte[] data = new byte[10];
    for (int i = 3; i < 10; i++) {
        entryCache.insert(new EntryImpl(0, i, data));
    }
    final CountDownLatch counter = new CountDownLatch(1);
    entryCache.asyncReadEntry(lh, 0, 9, false, new ReadEntriesCallback() {

        public void readEntriesComplete(List<Entry> entries, Object ctx) {
            assertEquals(entries.size(), 10);
            counter.countDown();
        }

        public void readEntriesFailed(ManagedLedgerException exception, Object ctx) {
            Assert.fail("should not have failed");
        }
    }, null);
    counter.await();
}
Also used : ReadEntriesCallback(org.apache.bookkeeper.mledger.AsyncCallbacks.ReadEntriesCallback) Entry(org.apache.bookkeeper.mledger.Entry) LedgerEntry(org.apache.bookkeeper.client.LedgerEntry) ManagedLedgerException(org.apache.bookkeeper.mledger.ManagedLedgerException) LedgerHandle(org.apache.bookkeeper.client.LedgerHandle) CountDownLatch(java.util.concurrent.CountDownLatch) Test(org.testng.annotations.Test)

Example 4 with Entry

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

the class EntryCacheTest method testReadMissingMiddle.

@Test(timeOut = 5000)
void testReadMissingMiddle() throws Exception {
    LedgerHandle lh = getLedgerHandle();
    when(lh.getId()).thenReturn((long) 0);
    EntryCacheManager cacheManager = factory.getEntryCacheManager();
    EntryCache entryCache = cacheManager.getEntryCache(ml);
    byte[] data = new byte[10];
    entryCache.insert(new EntryImpl(0, 0, data));
    entryCache.insert(new EntryImpl(0, 1, data));
    entryCache.insert(new EntryImpl(0, 8, data));
    entryCache.insert(new EntryImpl(0, 9, data));
    final CountDownLatch counter = new CountDownLatch(1);
    entryCache.asyncReadEntry(lh, 0, 9, false, new ReadEntriesCallback() {

        public void readEntriesComplete(List<Entry> entries, Object ctx) {
            assertEquals(entries.size(), 10);
            counter.countDown();
        }

        public void readEntriesFailed(ManagedLedgerException exception, Object ctx) {
            Assert.fail("should not have failed");
        }
    }, null);
    counter.await();
}
Also used : ReadEntriesCallback(org.apache.bookkeeper.mledger.AsyncCallbacks.ReadEntriesCallback) Entry(org.apache.bookkeeper.mledger.Entry) LedgerEntry(org.apache.bookkeeper.client.LedgerEntry) ManagedLedgerException(org.apache.bookkeeper.mledger.ManagedLedgerException) LedgerHandle(org.apache.bookkeeper.client.LedgerHandle) CountDownLatch(java.util.concurrent.CountDownLatch) Test(org.testng.annotations.Test)

Example 5 with Entry

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

the class ManagedCursorConcurrencyTest method testConcurrentIndividualDeletesWithGetNthEntry.

@Test(timeOut = 30000)
public void testConcurrentIndividualDeletesWithGetNthEntry() throws Exception {
    ManagedLedger ledger = factory.open("my_test_ledger", new ManagedLedgerConfig().setMaxEntriesPerLedger(100).setThrottleMarkDelete(0.5));
    final ManagedCursor cursor = ledger.openCursor("c1");
    final int N = 1000;
    final List<Position> addedEntries = Lists.newArrayListWithExpectedSize(N);
    for (int i = 0; i < N; i++) {
        Position pos = ledger.addEntry("entry".getBytes());
        addedEntries.add(pos);
    }
    final int deleteEntries = 100;
    final CountDownLatch counter = new CountDownLatch(deleteEntries);
    final AtomicBoolean gotException = new AtomicBoolean(false);
    final AtomicInteger iteration = new AtomicInteger(0);
    for (int i = 0; i < deleteEntries; i++) {
        executor.submit(safeRun(() -> {
            try {
                cursor.asyncDelete(addedEntries.get(iteration.getAndIncrement()), new DeleteCallback() {

                    @Override
                    public void deleteComplete(Object ctx) {
                    // Ok
                    }

                    @Override
                    public void deleteFailed(ManagedLedgerException exception, Object ctx) {
                        exception.printStackTrace();
                        gotException.set(true);
                    }
                }, null);
            } catch (Exception e) {
                e.printStackTrace();
                gotException.set(true);
            } finally {
                counter.countDown();
            }
        }));
    }
    counter.await();
    final int readEntries = N - deleteEntries;
    final CountDownLatch readCounter = new CountDownLatch(readEntries);
    final AtomicInteger successReadEntries = new AtomicInteger(0);
    for (int i = 1; i <= readEntries; i++) {
        try {
            cursor.asyncGetNthEntry(i, IndividualDeletedEntries.Exclude, new ReadEntryCallback() {

                @Override
                public void readEntryComplete(Entry entry, Object ctx) {
                    successReadEntries.getAndIncrement();
                    entry.release();
                    readCounter.countDown();
                }

                @Override
                public void readEntryFailed(ManagedLedgerException exception, Object ctx) {
                    exception.printStackTrace();
                    gotException.set(true);
                }
            }, null);
        } catch (Exception e) {
            e.printStackTrace();
            gotException.set(true);
        }
    }
    readCounter.await();
    assertFalse(gotException.get());
    assertEquals(successReadEntries.get(), readEntries);
}
Also used : ReadEntryCallback(org.apache.bookkeeper.mledger.AsyncCallbacks.ReadEntryCallback) Position(org.apache.bookkeeper.mledger.Position) ManagedLedger(org.apache.bookkeeper.mledger.ManagedLedger) CountDownLatch(java.util.concurrent.CountDownLatch) ManagedLedgerException(org.apache.bookkeeper.mledger.ManagedLedgerException) ManagedCursor(org.apache.bookkeeper.mledger.ManagedCursor) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) ManagedLedgerException(org.apache.bookkeeper.mledger.ManagedLedgerException) Entry(org.apache.bookkeeper.mledger.Entry) DeleteCallback(org.apache.bookkeeper.mledger.AsyncCallbacks.DeleteCallback) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) ManagedLedgerConfig(org.apache.bookkeeper.mledger.ManagedLedgerConfig) Test(org.testng.annotations.Test)

Aggregations

Entry (org.apache.bookkeeper.mledger.Entry)228 Test (org.testng.annotations.Test)191 ManagedCursor (org.apache.bookkeeper.mledger.ManagedCursor)167 ManagedLedger (org.apache.bookkeeper.mledger.ManagedLedger)157 ManagedLedgerException (org.apache.bookkeeper.mledger.ManagedLedgerException)114 ManagedLedgerConfig (org.apache.bookkeeper.mledger.ManagedLedgerConfig)111 Position (org.apache.bookkeeper.mledger.Position)109 CountDownLatch (java.util.concurrent.CountDownLatch)96 ReadEntriesCallback (org.apache.bookkeeper.mledger.AsyncCallbacks.ReadEntriesCallback)78 LedgerEntry (org.apache.bookkeeper.client.LedgerEntry)77 List (java.util.List)67 ManagedLedgerFactoryConfig (org.apache.bookkeeper.mledger.ManagedLedgerFactoryConfig)63 BKException (org.apache.bookkeeper.client.BKException)60 ManagedLedgerFactory (org.apache.bookkeeper.mledger.ManagedLedgerFactory)60 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)59 AddEntryCallback (org.apache.bookkeeper.mledger.AsyncCallbacks.AddEntryCallback)59 Lists (com.google.common.collect.Lists)57 TimeUnit (java.util.concurrent.TimeUnit)57 AtomicReference (java.util.concurrent.atomic.AtomicReference)56 ArrayList (java.util.ArrayList)55