Hey HBase-devs,
we have been going through hbase code to come up to speed.
One of the questions was regarding the commit semantics. Thumbing through
the RegionServer code that's appending to the wal:
syncWal -> HLog.sync -> addToSyncQueue ->syncDone.await()
and the log writer thread calls:
hflush(), syncDone.signalAll()
however hflush doesn't necessarily call a sync on the underlying log file:
if (this.forceSync ||
this.unflushedEntries.get() >= this.flushlogentries) { ... sync()
... }
so it seems that if forceSync is not true, the syncWal can unblock before a
sync is called (and forcesync seems to be only true for metaregion()).
are we missing something - or is there a bug here (the signalAll should be
conditional on hflush having actually flushed something).
thanks,
Joydeep