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