Hey, With Bookkeeper-833 Bug ( https://github.com/apache/bookkeeper/commit/da1a2fa6b19ddcdba68834147bf6afbe5bf90cbf), entryLogId in EntryLogger is capped at Int.MAX, so preallocatedLogId rolls over to 0 after reaching Int.MAX. In EntryLogger.flushRotatedLogs we set "leastUnflushedLogId = flushedLogId + 1;", so it makes leastUnflushedLogId also to roll over. But this affects the GarbageCollectorThread.extractMetaFromEntryLogs logic. This method extracts EntryLogMetadata from the newly rotated entrylogs, but when rollover happens this logic seems to be broken
in GarbageCollectorThread.java protected Map<Long, EntryLogMetadata> extractMetaFromEntryLogs(Map<Long, EntryLogMetadata> entryLogMetaMap) { // Extract it for every entry log except for the current one. // Entry Log ID's are just a long value that starts at 0 and increments // by 1 when the log fills up and we roll to a new one. long curLogId = entryLogger.getLeastUnflushedLogId(); <------when rollover happens, this will start from 1 boolean hasExceptionWhenScan = false; for (long entryLogId = scannedLogId; entryLogId < curLogId; entryLogId++) { <------- because of "entryLogId < curLogId" condition it will skip the newly rotated logs Thanks, Charan