@Override public void run() { long lac = lh.getLastAddConfirmed(); while (null == entries) { try { entries = lh.readEntries(startEntryId, endEntryId); } catch (BKException bke) { logger.error("Encountered exceptions on reading [ {} - {} ] ",
@Test public void simpleTest() throws Exception { LedgerHandle ledger = bkc.createLedger(DigestType.MAC, SECRET.getBytes()); long ledgerId = ledger.getId(); log.info("Writing to ledger: {}", ledgerId); for (int i = 0; i < 10; i++) { String content = "entry-" + i; ledger.addEntry(content.getBytes(Encoding)); } ledger.close(); ledger = bkc.openLedger(ledgerId, DigestType.MAC, SECRET.getBytes()); Enumeration<LedgerEntry> entries = ledger.readEntries(0, 9); while (entries.hasMoreElements()) { LedgerEntry entry = entries.nextElement(); String content = new String(entry.getEntry(), Encoding); log.info("Entry {} lenght={} content='{}'", entry.getEntryId(), entry.getLength(), content); } ledger.close(); }
@Override public void asyncAddEntry(byte[] data, int offset, int length, AsyncCallback.AddCallback callback, Object ctx) { lh.asyncAddEntry(data, offset, length, callback, ctx); }
void asyncCloseCursorLedger(final AsyncCallbacks.CloseCallback callback, final Object ctx) { LedgerHandle lh = cursorLedger; ledger.mbean.startCursorLedgerCloseOp(); log.info("[{}] [{}] Closing metadata ledger {}", ledger.getName(), name, lh.getId()); lh.asyncClose(new CloseCallback() { @Override public void closeComplete(int rc, LedgerHandle lh, Object ctx) { ledger.mbean.endCursorLedgerCloseOp(); if (rc == BKException.Code.OK) { callback.closeComplete(ctx); } else { callback.closeFailed(createManagedLedgerException(rc), ctx); } } }, ctx); }
@Override protected int runCmd() throws Exception { LedgerHandle lh = getBookKeeperClient().get().openLedgerNoRecovery( getLedgerID(), BookKeeper.DigestType.CRC32, dlConf.getBKDigestPW().getBytes(UTF_8)); try { long lac = lh.readLastConfirmed(); System.out.println("LastAddConfirmed: " + lac); } finally { lh.close(); } return 0; }
LedgerHandle lh = getLedgerHandle(writer); LedgerHandle readLh = openLedgerNoRecovery(lh); assertTrue("Ledger " + lh.getId() + " should be closed", readLh.isClosed()); assertEquals("There should be two entries in ledger " + lh.getId(), 1L, readLh.getLastAddConfirmed());
private void listCandidates(List<Long> deletionCandidates, Context context) { for (long ledgerId : deletionCandidates) { try { val lh = context.bkAdmin.openLedgerNoRecovery(ledgerId); output("\tLedger %d: LAC=%d, Length=%d, Bookies=%d, Frags=%d.", ledgerId, lh.getLastAddConfirmed(), lh.getLength(), lh.getNumBookies(), lh.getNumFragments()); } catch (Exception ex) { output("Ledger %d: %s.", ledgerId, ex.getMessage()); } } }
long entriesInLedger = lh.getLastAddConfirmed() + 1; if (log.isDebugEnabled()) { log.debug("[{}] Ledger has been closed id={} entries={}", name, lh.getId(), entriesInLedger); LedgerInfo info = LedgerInfo.newBuilder().setLedgerId(lh.getId()).setEntries(entriesInLedger) .setSize(lh.getLength()).setTimestamp(clock.millis()).build(); ledgers.put(lh.getId(), info); } else { ledgers.remove(lh.getId()); mbean.startDataLedgerDeleteOp(); bookKeeper.asyncDeleteLedger(lh.getId(), (rc, ctx) -> { mbean.endDataLedgerDeleteOp(); log.info("[{}] Delete complete for empty ledger {}. rc={}", name, lh.getId(), rc); }, null);
log.debug("[{}] Closing current writing ledger {}", name, lh.getId()); lh.asyncClose((rc, lh1, ctx1) -> { if (log.isDebugEnabled()) { log.debug("[{}] Close complete for ledger {}: rc = {}", name, lh.getId(), rc); callback.terminateFailed(createManagedLedgerException(rc), ctx); } else { lastConfirmedEntry = new PositionImpl(lh.getId(), lh.getLastAddConfirmed());
@Override public void close() throws LogNotAvailableException { LedgerHandle _out = out; if (_out == null) { return; } try { LOGGER.log(Level.SEVERE, "Closing ledger " + _out.getId() + ", with LastAddConfirmed=" + _out.getLastAddConfirmed() + ", LastAddPushed=" + _out.getLastAddPushed() + " length=" + _out.getLength() + ", errorOccurred:" + errorOccurredDuringWrite); _out.close(); } catch (InterruptedException | BKException err) { throw new LogNotAvailableException(err); } finally { out = null; } }
public long getCursorLedger() { LedgerHandle lh = cursorLedger; return lh != null ? lh.getId() : -1; }
long lastEntryInLedger = lh.getLastAddConfirmed(); lh.asyncReadEntries(lastEntryInLedger, lastEntryInLedger, (rc1, lh1, seq, ctx1) -> { if (log.isDebugEnabled()) { log.debug("[{}} readComplete rc={} entryId={}", ledger.getName(), rc1, lh1.getLastAddConfirmed());
assertTrue("Ledger " + lh.getId() + " should not be closed", readLh.isClosed()); assertEquals("Only one entry is written for ledger " + lh.getId(), 0L, lh.getLastAddPushed()); assertEquals("Only one entry is written for ledger " + lh.getId(), 0L, readLh.getLastAddConfirmed());
List<BookieSocketAddress> curEnsemble = null; for (Map.Entry<Long, ? extends List<BookieSocketAddress>> e : lh .getLedgerMetadata().getAllEnsembles().entrySet()) { if (curEntryId != null) { Set<Integer> bookieIndexes = new HashSet<Integer>(); long lastEntry = lh.getLastAddConfirmed(); if (!lh.isClosed() && lastEntry < curEntryId) { lastEntry = curEntryId; final long entryToRead = curEntryId; final EntryExistsCallback eecb = new EntryExistsCallback(lh.getLedgerMetadata().getWriteQuorumSize(), new GenericCallback<Boolean>() { public void operationComplete(int rc, Boolean result) { DistributionSchedule.WriteSet writeSet = lh.getDistributionSchedule().getWriteSet(entryToRead); for (int i = 0; i < writeSet.size(); i++) { BookieSocketAddress addr = curEnsemble.get(writeSet.get(i)); bookieClient.readEntry(addr, lh.getId(), entryToRead, eecb, null, BookieProtocol.FLAG_NONE);
log.debug("[{}] Cursor {} Appending to ledger={} position={}", ledger.getName(), name, lh.getId(), position); lh.asyncAddEntry(pi.toByteArray(), (rc, lh1, entryId, ctx) -> { if (rc == BKException.Code.OK) { if (log.isDebugEnabled()) { log.debug("[{}] Updated cursor {} position {} in meta-ledger {}", ledger.getName(), name, position, lh1.getId()); } else { log.warn("[{}] Error updating cursor {} position {} in meta-ledger {}: {}", ledger.getName(), name, position, lh1.getId(), BKException.getMessage(rc));
@Override public void run() { try { for (int i = 0; i < numLedgers; i++) { pool.allocate(); ZKTransaction txn = newTxn(); LedgerHandle lh = FutureUtils.result(pool.tryObtain(txn, NULL_LISTENER)); FutureUtils.result(txn.execute()); lh.close(); allocatedLedgers.putIfAbsent(lh.getId(), lh); logger.info("[thread {}] allocate {}th ledger {}", new Object[] { tid, i, lh.getId() }); } } catch (Exception ioe) { numFailures.incrementAndGet(); } } };
static CompletableFuture<LedgerEntry> getLedgerEntry(LedgerHandle ledger, long entry) { final CompletableFuture<LedgerEntry> future = new CompletableFuture<>(); ledger.asyncReadEntries(entry, entry, (rc, handle, entries, ctx) -> { if (rc != BKException.Code.OK) { future.completeExceptionally(bkException("Failed to read entry", rc, ledger.getId(), entry)); } else { future.complete(entries.nextElement()); } }, null ); return future; }
public long getCursorLedgerLastEntry() { LedgerHandle lh = cursorLedger; return lh != null ? lh.getLastAddConfirmed() : -1; }
.setEntries(lh.getLastAddConfirmed() + 1).setSize(lh.getLength()) .setTimestamp(clock.millis()).build(); ledgers.put(id, info);
dlConf.getBKDigestPW().getBytes(UTF_8)); try { long lac = lh.readLastConfirmed(); segment = segment.mutator().setLastEntryId(lac).build(); if (printInprogressOnly && dumpEntries && lac >= 0) { Enumeration<LedgerEntry> entries = lh.readEntries(0L, lac); while (entries.hasMoreElements()) { LedgerEntry entry = entries.nextElement(); lh.close();