@AfterMethod public void tearDown(Method method) throws Exception { LOG.info("@@@@@@@@@ stopping " + method); factory.shutdown(); factory = null; stopBookKeeper(); stopZooKeeper(); LOG.info("--------- stopped {}", method); }
@Test void notFound() throws Exception { try { factory.openReadOnlyCursor("notFound", PositionImpl.earliest, new ManagedLedgerConfig()); fail("Should have failed"); } catch (ManagedLedgerNotFoundException e) { // Expected } factory.shutdown(); }
@Test(timeOut = 20000) public void testReopenAndCleanup() throws Exception { ManagedLedger ledger = factory.open("my_test_ledger"); ledger.openCursor("c1"); ledger.addEntry("data".getBytes(Encoding)); ledger.close(); Thread.sleep(100); assertEquals(bkc.getLedgers().size(), 1); factory.shutdown(); factory = new ManagedLedgerFactoryImpl(bkc, bkc.getZkHandle()); ledger = factory.open("my_test_ledger"); ledger.openCursor("c1"); Thread.sleep(100); assertEquals(bkc.getLedgers().size(), 2); ledger.close(); factory.open("my_test_ledger", new ManagedLedgerConfig()).delete(); Thread.sleep(100); assertEquals(bkc.getLedgers().size(), 0); factory.shutdown(); }
factory.shutdown();
assertNotNull(res.get()); assertEquals(res.get().getClass(), ManagedLedgerAlreadyClosedException.class); factory.shutdown();
@Test(timeOut = 20000) public void simple() throws Exception { ManagedLedger ledger = factory.open("my_test_ledger"); assertEquals(ledger.getNumberOfEntries(), 0); assertEquals(ledger.getNumberOfActiveEntries(), 0); assertEquals(ledger.getTotalSize(), 0); ledger.addEntry("dummy-entry-1".getBytes(Encoding)); assertEquals(ledger.getNumberOfEntries(), 1); assertEquals(ledger.getNumberOfActiveEntries(), 0); assertEquals(ledger.getTotalSize(), "dummy-entry-1".getBytes(Encoding).length); ManagedCursor cursor = ledger.openCursor("c1"); assertEquals(cursor.hasMoreEntries(), false); assertEquals(cursor.getNumberOfEntries(), 0); assertEquals(cursor.getNumberOfEntriesInBacklog(), 0); assertEquals(cursor.readEntries(100), new ArrayList<Entry>()); ledger.addEntry("dummy-entry-2".getBytes(Encoding)); assertEquals(cursor.hasMoreEntries(), true); assertEquals(cursor.getNumberOfEntries(), 1); assertEquals(cursor.getNumberOfEntriesInBacklog(), 1); assertEquals(ledger.getNumberOfActiveEntries(), 1); List<Entry> entries = cursor.readEntries(100); assertEquals(entries.size(), 1); entries.forEach(e -> e.release()); entries = cursor.readEntries(100); assertEquals(entries.size(), 0); ledger.close(); factory.shutdown(); }
@Test(timeOut = 20000) public void closeAndReopen() throws Exception { ManagedLedger ledger = factory.open("my_test_ledger"); ledger.addEntry("dummy-entry-1".getBytes(Encoding)); ManagedCursor cursor = ledger.openCursor("c1"); ledger.addEntry("dummy-entry-2".getBytes(Encoding)); ledger.close(); log.info("Closing ledger and reopening"); // / Reopen the same managed-ledger ManagedLedgerFactoryImpl factory2 = new ManagedLedgerFactoryImpl(bkc, bkc.getZkHandle()); ledger = factory2.open("my_test_ledger"); cursor = ledger.openCursor("c1"); assertEquals(ledger.getNumberOfEntries(), 2); assertEquals(ledger.getTotalSize(), "dummy-entry-1".getBytes(Encoding).length * 2); List<Entry> entries = cursor.readEntries(100); assertEquals(entries.size(), 1); entries.forEach(e -> e.release()); ledger.close(); factory2.shutdown(); }
assertEquals(cacheManager.mlFactoryMBean.getNumberOfCacheEvictions(), 0); factory.shutdown();
@Test public void testChangeCrcType() throws Exception { ManagedLedgerFactoryImpl factory = new ManagedLedgerFactoryImpl(bkc, bkc.getZkHandle()); ManagedLedgerConfig config = new ManagedLedgerConfig(); config.setEnsembleSize(2).setAckQuorumSize(2).setMetadataEnsembleSize(2); config.setDigestType(DigestType.CRC32); ManagedLedger ledger = factory.open("my_test_ledger", config); ManagedCursor c1 = ledger.openCursor("c1"); ledger.addEntry("entry-0".getBytes()); ledger.addEntry("entry-1".getBytes()); ledger.addEntry("entry-2".getBytes()); ledger.close(); config.setDigestType(DigestType.CRC32C); ledger = factory.open("my_test_ledger", config); c1 = ledger.openCursor("c1"); ledger.addEntry("entry-3".getBytes()); assertEquals(c1.getNumberOfEntries(), 4); assertEquals(c1.getNumberOfEntriesInBacklog(), 4); List<Entry> entries = c1.readEntries(4); assertEquals(entries.size(), 4); for (int i = 0; i < 4; i++) { assertEquals(new String(entries.get(i).getData()), "entry-" + i); } factory.shutdown(); }
/** * When auto-replication is triggered, if there were no writes on the ML during the grace period, auto-replication * will close the ledger an re-replicate it. After that, the next write will get a FencedException. We should * recover from this condition by creating a new ledger and retrying the write. */ @Test public void ledgerFencedByAutoReplication() throws Exception { ManagedLedgerFactoryImpl factory = new ManagedLedgerFactoryImpl(bkc, bkc.getZkHandle()); ManagedLedgerConfig config = new ManagedLedgerConfig(); config.setEnsembleSize(2).setAckQuorumSize(2).setMetadataEnsembleSize(2); ManagedLedgerImpl ledger = (ManagedLedgerImpl) factory.open("my_test_ledger", config); ManagedCursor c1 = ledger.openCursor("c1"); PositionImpl p1 = (PositionImpl) ledger.addEntry("entry-1".getBytes()); // Trigger the closure of the data ledger bkc.openLedger(p1.getLedgerId(), BookKeeper.DigestType.CRC32C, new byte[] {}); ledger.addEntry("entry-2".getBytes()); assertEquals(2, c1.getNumberOfEntries()); assertEquals(2, c1.getNumberOfEntriesInBacklog()); PositionImpl p3 = (PositionImpl) ledger.addEntry("entry-3".getBytes()); // Now entry-2 should have been written before entry-3 assertEquals(3, c1.getNumberOfEntries()); assertEquals(3, c1.getNumberOfEntriesInBacklog()); assertTrue(p1.getLedgerId() != p3.getLedgerId()); factory.shutdown(); }