@Test(timeout = 60000) public void testOpenAndCloseLedger() throws Exception { LedgerHandle lh = bkc.get().createLedger(1, 1, 1, BookKeeper.DigestType.CRC32, conf.getBKDigestPW().getBytes(UTF_8)); LedgerHandleCache cache = LedgerHandleCache.newBuilder().bkc(bkc).conf(conf).build(); LogSegmentMetadata segment = new LogSegmentMetadata.LogSegmentMetadataBuilder( "/data", LogSegmentMetadata.LogSegmentMetadataVersion.VERSION_V5_SEQUENCE_ID, lh.getId(), 0L) .build(); LedgerDescriptor desc1 = cache.openLedger(segment, false); assertTrue(cache.handlesMap.containsKey(desc1)); LedgerHandleCache.RefCountedLedgerHandle refLh = cache.handlesMap.get(desc1); assertEquals(1, refLh.getRefCount()); cache.openLedger(segment, false); assertTrue(cache.handlesMap.containsKey(desc1)); assertEquals(2, refLh.getRefCount()); // close the ledger cache.closeLedger(desc1); assertTrue(cache.handlesMap.containsKey(desc1)); assertEquals(1, refLh.getRefCount()); cache.closeLedger(desc1); assertFalse(cache.handlesMap.containsKey(desc1)); assertEquals(0, refLh.getRefCount()); } }
private BKLogSegmentWriter createLogSegmentWriter(DistributedLogConfiguration conf, long logSegmentSequenceNumber, long startTxId, ZKDistributedLock lock) throws Exception { LedgerHandle lh = bkc.get().createLedger(3, 2, 2, BookKeeper.DigestType.CRC32, conf.getBKDigestPW().getBytes(UTF_8)); return new BKLogSegmentWriter( runtime.getMethodName(), runtime.getMethodName(), conf, LogSegmentMetadata.LEDGER_METADATA_CURRENT_LAYOUT_VERSION, new BKLogSegmentEntryWriter(lh), lock, startTxId, logSegmentSequenceNumber, scheduler, NullStatsLogger.INSTANCE, NullStatsLogger.INSTANCE, new AlertStatsLogger(NullStatsLogger.INSTANCE, "test"), PermitLimiter.NULL_PERMIT_LIMITER, new SettableFeatureProvider("", 0), ConfUtils.getConstDynConf(conf)); }
@Test(timeout = 60000, expected = BKException.ZKException.class) public void testOpenLedgerWhenZkClosed() throws Exception { ZooKeeperClient newZkc = TestZooKeeperClientBuilder.newBuilder() .name("zkc-openledger-when-zk-closed") .zkServers(zkServers) .build(); BookKeeperClient newBkc = BookKeeperClientBuilder.newBuilder() .name("bkc-openledger-when-zk-closed") .zkc(newZkc) .ledgersPath(ledgersPath) .dlConfig(conf) .build(); try { LedgerHandle lh = newBkc.get().createLedger(BookKeeper.DigestType.CRC32, "zkcClosed".getBytes(UTF_8)); lh.close(); newZkc.close(); LedgerHandleCache cache = LedgerHandleCache.newBuilder().bkc(newBkc).conf(conf).build(); // open ledger after zkc closed cache.openLedger(new LogSegmentMetadata.LogSegmentMetadataBuilder("", 2, lh.getId(), 1).setLogSegmentSequenceNo(lh.getId()).build(), false); } finally { newBkc.close(); } }
LedgerHandle lh = bkc.get().createLedger(conf.getEnsembleSize(), conf.getWriteQuorumSize(), conf.getAckQuorumSize(), BookKeeper.DigestType.CRC32, conf.getBKDigestPW().getBytes()); String inprogressZnodeName = writeHandler.inprogressZNodeName(lh.getId(), startTxID, logSegmentSeqNo);
LedgerHandle lh = bkc.get().createLedger(conf.getEnsembleSize(), conf.getWriteQuorumSize(), conf.getAckQuorumSize(), BookKeeper.DigestType.CRC32, conf.getBKDigestPW().getBytes()); String inprogressZnodeName = writeHandler.inprogressZNodeName(lh.getId(), startTxID, logSegmentSeqNo);
/** * Creates a new ledger. Default of 3 servers, and quorum of 2 servers. * * @param digestType * digest type, either MAC or CRC32 * @param passwd * password * @return a handle to the newly created ledger * @throws InterruptedException * @throws BKException */ public LedgerHandle createLedger(DigestType digestType, byte passwd[]) throws BKException, InterruptedException { return createLedger(3, 2, digestType, passwd); }
/** * Synchronous call to create ledger. Parameters match those of * {@link #asyncCreateLedger(int, int, DigestType, byte[], * AsyncCallback.CreateCallback, Object)} * * @param ensSize * @param qSize * @param digestType * @param passwd * @return a handle to the newly created ledger * @throws InterruptedException * @throws BKException */ public LedgerHandle createLedger(int ensSize, int qSize, DigestType digestType, byte passwd[]) throws InterruptedException, BKException { return createLedger(ensSize, qSize, qSize, digestType, passwd, Collections.emptyMap()); }
/** * Synchronous call to create ledger. Parameters match those of * {@link #asyncCreateLedger(int, int, DigestType, byte[], * AsyncCallback.CreateCallback, Object)} * * @param ensSize * @param writeQuorumSize * @param ackQuorumSize * @param digestType * @param passwd * @return a handle to the newly created ledger * @throws InterruptedException * @throws BKException */ public LedgerHandle createLedger(int ensSize, int writeQuorumSize, int ackQuorumSize, DigestType digestType, byte passwd[]) throws InterruptedException, BKException { return createLedger(ensSize, writeQuorumSize, ackQuorumSize, digestType, passwd, Collections.emptyMap()); }
private CommitFileWriter() throws LogNotAvailableException { try { Map<String, byte[]> metadata = new HashMap<>(); metadata.put("tablespaceuuid", tableSpaceUUID.getBytes(StandardCharsets.UTF_8)); metadata.put("tablespacename", tableSpaceName.getBytes(StandardCharsets.UTF_8)); metadata.put("leader", localNodeId.getBytes(StandardCharsets.UTF_8)); this.out = bookKeeper.createLedger(ensemble, writeQuorumSize, ackQuorumSize, BookKeeper.DigestType.CRC32C, sharedSecret.getBytes(StandardCharsets.UTF_8), metadata); this.ledgerId = this.out.getId(); lastLedgerId = ledgerId; lastSequenceNumber.set(-1); } catch (InterruptedException | BKException err) { throw new LogNotAvailableException(err); } }
LedgerHandle lh = null; try { lh = bk.createLedger(1, 1, DigestType.MAC, new byte[0]); LOG.info("Created ledger {}", lh.getId());
/** * Creates a new Ledger in BookKeeper. * * @return A LedgerHandle for the new ledger. * @throws DataLogNotAvailableException If BookKeeper is unavailable or the ledger could not be created because an * insufficient number of Bookies are available. The causing exception is wrapped * inside it. * @throws DurableDataLogException If another exception occurred. The causing exception is wrapped inside it. */ static LedgerHandle create(BookKeeper bookKeeper, BookKeeperConfig config) throws DurableDataLogException { try { return Exceptions.handleInterruptedCall(() -> bookKeeper.createLedger( config.getBkEnsembleSize(), config.getBkWriteQuorumSize(), config.getBkAckQuorumSize(), LEDGER_DIGEST_TYPE, config.getBKPassword())); } catch (BKException.BKNotEnoughBookiesException bkEx) { throw new DataLogNotAvailableException("Unable to create new BookKeeper Ledger.", bkEx); } catch (BKException bkEx) { throw new DurableDataLogException("Unable to create new BookKeeper Ledger.", bkEx); } }