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

Reply via email to