Charan this looks like an issue to me. Do we have a defect/issue opened?

On Fri, Oct 13, 2017 at 4:18 PM, Sijie Guo <guosi...@gmail.com> wrote:

> Charan,
>
> Didn't mean to say the logic is correct. I was just trying to point out
> the points that I remembered for checkpoint.
>
> I am currently traveling, so I don't have code available to check the
> sequence. I can check the logic when I am close to the laptop.
>
> Sijie
>
>
> On Oct 14, 2017 6:11 AM, "Charan Reddy G" <reddychara...@gmail.com> wrote:
>
> Hey Sijie,
>
> I'm not questioning the semantics of checkpoint or the optimization which
> was added with Bookkeeper-564. But my concern is are we sure, checkpoint
> logic/code is correct and "marker is only updated when all the entries
> added before are persisted.", in the case of SortedLedgerStorage. Can you
> please go through the scenario I mentioned in my email. From what I
> understood, if entryLog is rotated because of addEntry request from GC,
> then we set the 'currentMark' of journal as 'lastCheckpoint' in
> checkpointHolder. The entries added before this 'lastCheckpoint' are still
> in EntryMemTable. When next checkpoint happens, we are not actually
> persisting entries which were in EntryMemTable but we are marking
> 'lastCheckpoint' as LogMarkCheckpoint (in checkpointComplete method).
>
> Thanks,
> Charan
>
> On Fri, Oct 13, 2017 at 2:46 PM, Sijie Guo <guosi...@gmail.com> wrote:
>
> > The core of the checkpoint is:
> >
> > - marker is only updated when all the entries added before are persisted.
> > That means it doesn't affect correctness if entries added after are
> > flushed.
> >
> > - the flush in entry log files is just writing data to filesystem. The
> real
> > fsync happens after checkpoint. The separate is for performance
> > consideration.
> >
> >
> >
> > On Oct 12, 2017 11:34 PM, "Charan Reddy G" <reddychara...@gmail.com>
> > wrote:
> >
> > > Hey Sijie/IvanK,
> > >
> > > With
> > > https://github.com/apache/bookkeeper/commit/
> > d175ada58dcaf78f0a70b0ebebf489
> > > 255ae67b5f
> > > you introduced Bookkeeper-564 : Better checkpoint mechanism -
> Scheduling
> > > checkpoint only when rotating an entry log file.
> > >
> > > I'm trying to understand how it would work in the following scenario
> > > - using SortedLedgerStorage
> > > - since it is SortedLedgerStorage entries would be in EntryMemtable
> > > - GarbageCollectorThread.EntryLogScanner.process method calls
> > entryLogger
> > > .addEntry(ledgerId, entry)
> > > - in EntryLogger.addEntry method, lets say it comes to know it has
> > reached
> > > EntryLogLimit and creates NewLog
> > > -  since current active entrylog is rotated,
> > > EntryLogListener.onRotateEntryLog is called
> > > - which sets the currentMark of journal to checkpointHolder. Point to
> > note,
> > > that all the entries added to the Bookie are not added to entryLog yet,
> > > there are entries still in entrymemtable
> > > - lets say SyncThread tries to checkpoint at this instant
> > >
> > > now the concern is, in SortedLedgerStorage.checkpoint method, before
> > > calling super.checkpoint(checkpoint), it does memTable.flush(this,
> > > checkpoint); But memTable.flush would just add entries to the current
> > > active entrylog (BufferedLogChannel) and it doesn't guarantee
> > persistence.
> > > super(InterLeavedLedgerStorage).checkpoint will only flushRotatedLogs
> > > (persists) and finally mark the checkpointcomplete with
> 'lastcheckpoint',
> > > but the 'lastCheckpoint' in the checkpointHolder would also include the
> > > entries which were in Entrymemtable and are not actually persisted in
> the
> > > whole process. Is there issue in SortedLedgerStorage checkpoint logic?
> > >
> > >         @Override
> > >     public Checkpoint checkpoint(final Checkpoint checkpoint) throws
> > > IOException {
> > >         Checkpoint lastCheckpoint = checkpointHolder.
> > getLastCheckpoint();
> > >         // if checkpoint is less than last checkpoint, we don't need to
> > do
> > > checkpoint again.
> > >         if (lastCheckpoint.compareTo(checkpoint) > 0) {
> > >             return lastCheckpoint;
> > >         }
> > >         memTable.flush(this, checkpoint);
> > >         return super.checkpoint(checkpoint);
> > >     }
> > >
> > > Thanks,
> > > Charan
> > >
> >
>
>
>


-- 
Jvrao
---
First they ignore you, then they laugh at you, then they fight you, then
you win. - Mahatma Gandhi

Reply via email to