Source:
<code>public ByteBuf getEntry(long ledgerId, long entryId) throws IOException { long startTime = MathUtils.nowInNano(); if (log.isDebugEnabled()) { log.debug("Get Entry: {}@{}", ledgerId, entryId); } if (entryId == BookieProtocol.LAST_ADD_CONFIRMED) { return getLastEntry(ledgerId); } writeCacheMutex.readLock().lock(); try { ByteBuf entry = writeCache.get(ledgerId, entryId); if (entry != null) { recordSuccessfulEvent(readCacheHitStats, startTime); recordSuccessfulEvent(readEntryStats, startTime); return entry; } entry = writeCacheBeingFlushed.get(ledgerId, entryId); if (entry != null) { recordSuccessfulEvent(readCacheHitStats, startTime); recordSuccessfulEvent(readEntryStats, startTime); return entry; } } finally { writeCacheMutex.readLock().unlock(); } ByteBuf entry = readCache.get(ledgerId, entryId); if (entry != null) { recordSuccessfulEvent(readCacheHitStats, startTime); recordSuccessfulEvent(readEntryStats, startTime); return entry; } try { long entryLocation = entryLocationIndex.getLocation(ledgerId, entryId); if (entryLocation == 0) { throw new NoEntryException(ledgerId, entryId); } entry = entryLogger.readEntry(ledgerId, entryId, entryLocation); readCache.put(ledgerId, entryId, entry); long nextEntryLocation = entryLocation + 4 + entry.readableBytes(); fillReadAheadCache(ledgerId, entryId + 1, nextEntryLocation); recordSuccessfulEvent(readCacheMissStats, startTime); recordSuccessfulEvent(readEntryStats, startTime); return entry; <START> } catch (NoEntryException e) { <END> recordFailedEvent(readEntryStats, startTime); throw e; } }</code><technical_language>this catch line 418</technical_language>

Target:
public ByteBuf getEntry(long ledgerId, long entryId) throws IOException { long startTime = MathUtils.nowInNano(); if (log.isDebugEnabled()) { log.debug("Get Entry: {}@{}", ledgerId, entryId); } if (entryId == BookieProtocol.LAST_ADD_CONFIRMED) { return getLastEntry(ledgerId); } writeCacheMutex.readLock().lock(); try { ByteBuf entry = writeCache.get(ledgerId, entryId); if (entry != null) { recordSuccessfulEvent(readCacheHitStats, startTime); recordSuccessfulEvent(readEntryStats, startTime); return entry; } entry = writeCacheBeingFlushed.get(ledgerId, entryId); if (entry != null) { recordSuccessfulEvent(readCacheHitStats, startTime); recordSuccessfulEvent(readEntryStats, startTime); return entry; } } finally { writeCacheMutex.readLock().unlock(); } ByteBuf entry = readCache.get(ledgerId, entryId); if (entry != null) { recordSuccessfulEvent(readCacheHitStats, startTime); recordSuccessfulEvent(readEntryStats, startTime); return entry; } long entryLocation; try { entryLocation = entryLocationIndex.getLocation(ledgerId, entryId); if (entryLocation == 0) { throw new NoEntryException(ledgerId, entryId); } entry = entryLogger.readEntry(ledgerId, entryId, entryLocation); } catch (NoEntryException e) { recordFailedEvent(readEntryStats, startTime); throw e; } readCache.put(ledgerId, entryId, entry); long nextEntryLocation = entryLocation + 4 + entry.readableBytes(); fillReadAheadCache(ledgerId, entryId + 1, nextEntryLocation); recordSuccessfulEvent(readCacheMissStats, startTime); recordSuccessfulEvent(readEntryStats, startTime); return entry; }