/** * Open the given ledger <i>ledgerDesc</i>. * * @param ledgerDesc * ledger description * @param callback * open callback. * @param ctx * callback context */ private void asyncOpenLedger(LedgerDescriptor ledgerDesc, AsyncCallback.OpenCallback callback, Object ctx) { try { if (!ledgerDesc.isFenced()) { bkc.get().asyncOpenLedgerNoRecovery(ledgerDesc.getLedgerId(), BookKeeper.DigestType.CRC32, digestpw.getBytes(UTF_8), callback, ctx); } else { bkc.get().asyncOpenLedger(ledgerDesc.getLedgerId(), BookKeeper.DigestType.CRC32, digestpw.getBytes(UTF_8), callback, ctx); } } catch (IOException ace) { // :) when we can't get bkc, it means bookie handle not available callback.openComplete(BKException.Code.BookieHandleNotAvailableException, null, ctx); } }
@Override public void readEntries( long ledgerID, long firstEntryID, long lastEntryID, BiConsumer<Integer, ArrayList<byte[]>> cb) { client.asyncOpenLedgerNoRecovery(ledgerID, BookKeeper.DigestType.CRC32, new byte[0], (rc, lh, ctx) -> { if (rc != 0) { cb.accept(rc, null); return; } System.out.format("Got handle for read %d -> %d on ledger %d%n", firstEntryID, lastEntryID, ledgerID); lh.asyncReadEntries(firstEntryID, lastEntryID, (rc1, lh1, seq, ctx1) -> { System.out.format("Read cb %d -> %d on ledger %d%n", firstEntryID, lastEntryID, ledgerID); ArrayList<byte[]> results = new ArrayList<>(); if (rc1 == 0) { while (seq.hasMoreElements()) { results.add(seq.nextElement().getEntry()); } System.out.format("About to close handle for read %d -> %d on ledger %d%n", firstEntryID, lastEntryID, ledgerID); } lh.asyncClose((rc2, lh2, ctx2) -> { System.out.format("Closed handle for read %d -> %d on ledger %d result %d%n", firstEntryID, lastEntryID, ledgerID, rc2); cb.accept(rc1 == 0 ? rc2 : rc1, results); }, null); }, null); }, null); } }
/** * Synchronous, unsafe open ledger call. * * @see #asyncOpenLedgerNoRecovery * @param lId * ledger identifier * @param digestType * digest type, either MAC or CRC32 * @param passwd * password * @return a handle to the open ledger * @throws InterruptedException * @throws BKException */ public LedgerHandle openLedgerNoRecovery(long lId, DigestType digestType, byte passwd[]) throws BKException, InterruptedException { CompletableFuture<LedgerHandle> future = new CompletableFuture<>(); SyncOpenCallback result = new SyncOpenCallback(future); /* * Calls async open ledger */ asyncOpenLedgerNoRecovery(lId, digestType, passwd, result, null); return SyncCallbackUtils.waitForResult(future); }
bk.asyncOpenLedgerNoRecovery( segment.getLogSegmentId(), BookKeeper.DigestType.CRC32,
@Override public CompletableFuture<LogSegmentEntryReader> openReader(LogSegmentMetadata segment, long startEntryId) { BookKeeper bk; try { bk = this.bkc.get(); } catch (IOException e) { return FutureUtils.exception(e); } OpenReaderRequest request = new OpenReaderRequest(segment, startEntryId); if (segment.isInProgress()) { bk.asyncOpenLedgerNoRecovery( segment.getLogSegmentId(), BookKeeper.DigestType.CRC32, passwd, this, request); } else { bk.asyncOpenLedger( segment.getLogSegmentId(), BookKeeper.DigestType.CRC32, passwd, this, request); } return request.openPromise; }