On Wed, May 3, 2017 at 4:16 AM, Charan Reddy G <reddychara...@gmail.com>
wrote:

>
> "The question is - is this really an issue? When roll over happen, it
> might cause an entry log file won't be garbage collected or compacted in
> this lifecycle of the bookie. But it doesn't actually impact correctness,
> right?"
>
> Yes it is not correctness issue. But the chances of those entrylogs
> getting garbage collected are very slim (even after Bookie restart).
> extractMetaFromEntryLogs will extract metadata from those entrylogs next
> time when entryLogger.getLeastUnflushedLogId() reaches close to Int.MAX
> but not rolled over again.
>

I agreed with this is an issue that we need to address. I am just trying to
clarify the severity of this issue.

- Sijie


>
> Thanks,
> Charan
>
>
> On Fri, Apr 28, 2017 at 12:11 AM, Enrico Olivelli <eolive...@gmail.com>
> wrote:
>
>> Il ven 28 apr 2017, 09:05 Sijie Guo <guosi...@gmail.com> ha scritto:
>>
>> > Hi Enrico,
>> >
>> > Let's try to figure things out in the email thread before create a JIRA.
>> >
>>
>> Got it, sorry
>> Enrico
>>
>> >
>> > - Sijie
>> >
>> > On Thu, Apr 27, 2017 at 11:43 PM, Enrico Olivelli <eolive...@gmail.com>
>> > wrote:
>> >
>> >> Thank you Charan,
>> >> Can you create a JIRA?
>> >> Do you already have a fix?
>> >>
>> >> Il ven 28 apr 2017, 00:27 Charan Reddy G <reddychara...@gmail.com> ha
>> >> scritto:
>> >>
>> >>> Hey,
>> >>>
>> >>> With Bookkeeper-833 Bug (
>> >>>
>> >>> https://github.com/apache/bookkeeper/commit/da1a2fa6b19ddcdb
>> a68834147bf6afbe5bf90cbf
>> >>> ),
>> >>> 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
>> >>>
>> >> --
>> >>
>> >>
>> >> -- Enrico Olivelli
>> >>
>> >
>> > --
>>
>>
>> -- Enrico Olivelli
>>
>
>

Reply via email to