diff --git a/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/cache/SharedEntryCacheImpl.java b/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/cache/SharedEntryCacheImpl.java index 9b08481bc7954..5db97f5ec17af 100644 --- a/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/cache/SharedEntryCacheImpl.java +++ b/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/cache/SharedEntryCacheImpl.java @@ -101,14 +101,19 @@ public void asyncReadEntry(ReadHandle lh, long firstEntry, long lastEntry, boole long totalCachedSize = entryCacheManager.getRange(ledgerId, firstEntry, lastEntry, cachedEntries); if (cachedEntries.size() == entriesToRead) { + final List entriesToReturn = Lists.newArrayListWithExpectedSize(entriesToRead); // All entries found in cache - entryCacheManager.getFactoryMBean().recordCacheHits(entriesToRead, totalCachedSize); + for (Entry entry : cachedEntries) { + entriesToReturn.add(EntryImpl.create((EntryImpl) entry)); + entry.release(); + } + // All entries found in cache + entryCacheManager.getFactoryMBean().recordCacheHits(entriesToReturn.size(), totalCachedSize); if (log.isDebugEnabled()) { log.debug("[{}] Ledger {} -- Found in cache entries: {}-{}", ml.getName(), ledgerId, firstEntry, lastEntry); } - - callback.readEntriesComplete(cachedEntries, ctx); + callback.readEntriesComplete(entriesToReturn, ctx); } else { if (!cachedEntries.isEmpty()) {