/** * 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); } }
try { if (closed) { cb.openComplete(BKException.Code.ClientClosedException, null, ctx); return;
try { if (closed) { cb.openComplete(BKException.Code.ClientClosedException, null, ctx); return;
private void open(OpenCallback cb) { final int validateRc = validate(); if (Code.OK != validateRc) { cb.openComplete(validateRc, null, null); return; } LedgerOpenOp op = new LedgerOpenOp(bk, bk.getClientCtx().getClientStats(), ledgerId, fromApiDigestType(digestType), password, cb, null); ReentrantReadWriteLock closeLock = bk.getCloseLock(); closeLock.readLock().lock(); try { if (bk.isClosed()) { cb.openComplete(BKException.Code.ClientClosedException, null, null); return; } if (recovery) { op.initiate(); } else { op.initiateWithoutRecovery(); } } finally { closeLock.readLock().unlock(); } } }
void openComplete(int rc, LedgerHandle lh) { if (BKException.Code.OK != rc) { openOpLogger.registerFailedEvent(MathUtils.elapsedNanos(startTime), TimeUnit.NANOSECONDS); } else { openOpLogger.registerSuccessfulEvent(MathUtils.elapsedNanos(startTime), TimeUnit.NANOSECONDS); } cb.openComplete(rc, lh, ctx); }
@Override public void asyncOpenLedger(long lId, DigestType digestType, byte[] passwd, OpenCallback cb, Object ctx) { getProgrammedFailure().thenComposeAsync((res) -> { PulsarMockLedgerHandle lh = ledgers.get(lId); if (lh == null) { return FutureUtils.exception(new BKException.BKNoSuchLedgerExistsException()); } else if (lh.digest != digestType) { return FutureUtils.exception(new BKException.BKDigestMatchException()); } else if (!Arrays.equals(lh.passwd, passwd)) { return FutureUtils.exception(new BKException.BKUnauthorizedAccessException()); } else { return FutureUtils.value(lh); } }, executor).whenCompleteAsync((ledger, exception) -> { if (exception != null) { cb.openComplete(getExceptionCode(exception), null, ctx); } else { cb.openComplete(BKException.Code.OK, ledger, ctx); } }, executor); }