[
https://issues.apache.org/jira/browse/BOOKKEEPER-685?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13768185#comment-13768185
]
Ivan Kelly commented on BOOKKEEPER-685:
---------------------------------------
{quote}the problem here is you set flush to false ahead of adding entry to
entry logger. the better way is to set flushed to false after you add something
to entry logger, no?{quote}
This should work, though there could be a problem if onRotateEntryLog runs
between the add and the set flushed, and then nothing more is added to the
bookie. The compaction would hang until something in added to the bookie. This
is a minor problem though. If the load is so low that compaction is hanging,
then compaction isn't really necessary.
Out of interest, why don't you want to notify the offset? I discovered this
problem when I was looking at forward porting BOOKKEEPER-664 to trunk. As we
don't flush before rotating in trunk, EntrylogListener needs a new call for
onEntryLogFlush() so that we can ensure the entry has hit disk before updating
the offset. I was thinking of perhaps using the offset as a parameter in
#onEntryLogFlush() so that I can see how many offsets I can flush.
> Race in compaction algorithm from BOOKKEEPER-664
> ------------------------------------------------
>
> Key: BOOKKEEPER-685
> URL: https://issues.apache.org/jira/browse/BOOKKEEPER-685
> Project: Bookkeeper
> Issue Type: Bug
> Reporter: Ivan Kelly
> Priority: Blocker
> Fix For: 4.2.2
>
>
> I discovered a race in the algorithm when I was forward porting to trunk.
> 1) Thread1: flushed.set(false)
> 2) Thread2: onRotateEntryLog() // flushed.set(true)
> 3) Thread1: entryLogger addEntry L123-E456
> 4) Thread1: offsets > max, waits for flushed, flushed is true(as set in 2),
> L123-E456 updated in ledger cache
> 5) T2: L123 flushed out of ledger cache
> 6) Crash
> This will possible lose 1 entry. I've only reasoned this, not observed it,
> but it can happen.
> The fix is pretty easy. EntryLoggerListener should notify with the point
> offset in the entry log it has synced as far as.
>
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira