void release(LedgerEntry entry) { if (null != entry) { entry.getEntryBuffer().release(); } }
synchronized LedgerEntry getEntry() { // retain reference for the caller this.entry.getEntryBuffer().retain(); return this.entry; }
synchronized void release() { if (null != this.entry) { this.entry.getEntryBuffer().release(); this.entry = null; } }
@SuppressWarnings("unchecked") @Override public void readComplete(int rc, LedgerHandle lh, Enumeration<LedgerEntry> entries, Object ctx) { CompletableFuture<List<Entry.Reader>> promise = (CompletableFuture<List<Entry.Reader>>) ctx; if (BKException.Code.OK == rc) { List<Entry.Reader> entryList = Lists.newArrayList(); while (entries.hasMoreElements()) { LedgerEntry entry = entries.nextElement(); try { entryList.add(processReadEntry(entry)); } catch (IOException ioe) { // release the buffers while (entries.hasMoreElements()) { LedgerEntry le = entries.nextElement(); le.getEntryBuffer().release(); } FutureUtils.completeExceptionally(promise, ioe); return; } finally { entry.getEntryBuffer().release(); } } FutureUtils.complete(promise, entryList); } else { FutureUtils.completeExceptionally(promise, new BKTransmitException("Failed to read entries :", rc)); } }
private static CompletableFuture<MessageIdData> readOneMessageId(LedgerHandle lh, long entryId) { CompletableFuture<MessageIdData> promise = new CompletableFuture<>(); lh.asyncReadEntries(entryId, entryId, (rc, _lh, seq, ctx) -> { if (rc != BKException.Code.OK) { promise.completeExceptionally(BKException.create(rc)); } else { try (RawMessage m = RawMessageImpl.deserializeFrom( seq.nextElement().getEntryBuffer())) { promise.complete(m.getMessageIdData()); } catch (NoSuchElementException e) { log.error("No such entry {} in ledger {}", entryId, lh.getId()); promise.completeExceptionally(e); } } }, null); return promise; }
public static EntryImpl create(LedgerEntry ledgerEntry) { EntryImpl entry = RECYCLER.get(); entry.ledgerId = ledgerEntry.getLedgerId(); entry.entryId = ledgerEntry.getEntryId(); entry.data = ledgerEntry.getEntryBuffer(); entry.data.retain(); entry.setRefCnt(1); return entry; }
public void readComplete(int rc, LedgerHandle lh, Enumeration<LedgerEntry> seq, Object bkctx) { if (rc != BKException.Code.OK) { callback.readEntriesFailed(new ManagedLedgerException(BKException.create(rc)), ctx); return; } List<Entry> entries = Lists.newArrayList(); long totalSize = 0; while (seq.hasMoreElements()) { // Insert the entries at the end of the list (they will be unsorted for now) LedgerEntry ledgerEntry = seq.nextElement(); EntryImpl entry = EntryImpl.create(ledgerEntry); ledgerEntry.getEntryBuffer().release(); entries.add(entry); totalSize += entry.getLength(); } mlFactoryMBean.recordCacheMiss(entries.size(), totalSize); ml.mbean.addReadEntriesSample(entries.size(), totalSize); callback.readEntriesComplete(entries, null); } }, null);
private static CompletableFuture<List<Entry>> readEntries(LedgerHandle lh, long from, long to) { CompletableFuture<Enumeration<LedgerEntry>> promise = new CompletableFuture<>(); lh.asyncReadEntries(from, to, (rc, _lh, seq, ctx) -> { if (rc != BKException.Code.OK) { promise.completeExceptionally(BKException.create(rc)); } else { promise.complete(seq); } }, null); return promise.thenApply( (seq) -> { List<Entry> entries = new ArrayList<Entry>(); while (seq.hasMoreElements()) { ByteBuf buf = seq.nextElement().getEntryBuffer(); try (RawMessage m = RawMessageImpl.deserializeFrom(buf)) { entries.add(EntryImpl.create(m.getMessageIdData().getLedgerId(), m.getMessageIdData().getEntryId(), m.getHeadersAndPayload())); } finally { buf.release(); } } return entries; }); }
private void simpleReadEntries(LedgerHandle lh, long fromEntryId, long untilEntryId) throws Exception { Enumeration<LedgerEntry> entries = lh.readEntries(fromEntryId, untilEntryId); long i = fromEntryId; System.out.println("Entries:"); while (entries.hasMoreElements()) { LedgerEntry entry = entries.nextElement(); System.out.println("\t" + i + "(eid=" + entry.getEntryId() + ")\t: "); Entry.Reader reader = Entry.newBuilder() .setLogSegmentInfo(0L, 0L) .setEntryId(entry.getEntryId()) .setEntry(entry.getEntryBuffer()) .setEnvelopeEntry(LogSegmentMetadata.supportsEnvelopedEntries(metadataVersion)) .buildReader(); entry.getEntryBuffer().release(); printEntry(reader); ++i; } }
public static LastConfirmedAndEntryImpl create(long lac, org.apache.bookkeeper.client.LedgerEntry entry) { LastConfirmedAndEntryImpl entryImpl = RECYCLER.get(); entryImpl.lac = lac; if (null == entry) { entryImpl.entry = null; } else { entryImpl.entry = LedgerEntryImpl.create( entry.getLedgerId(), entry.getEntryId(), entry.getLength(), entry.getEntryBuffer()); } return entryImpl; }
.setEntryId(lastEntry.getEntryId()) .setEnvelopeEntry(LogSegmentMetadata.supportsEnvelopedEntries(segment.getVersion())) .setEntry(lastEntry.getEntryBuffer()) .buildReader(); lastEntry.getEntryBuffer().release(); LogRecordWithDLSN record = reader.nextRecord(); LogRecordWithDLSN lastRecord = null;
Entry.Reader processReadEntry(LedgerEntry entry) throws IOException { return Entry.newBuilder() .setLogSegmentInfo(lssn, startSequenceId) .setEntryId(entry.getEntryId()) .setEnvelopeEntry(envelopeEntries) .deserializeRecordSet(deserializeRecordSet) .setEntry(entry.getEntryBuffer()) .buildReader(); }
Entry.Reader processReadEntry(LedgerEntry entry) throws IOException { return Entry.newBuilder() .setLogSegmentInfo(lssn, startSequenceId) .setEntryId(entry.getEntryId()) .setEnvelopeEntry(envelopeEntries) .deserializeRecordSet(deserializeRecordSet) .setEntry(entry.getEntryBuffer()) .buildReader(); }
ledgerEntry.getEntryBuffer().release();
ledgerEntry.getEntryBuffer().release();