Ted Yu created HBASE-20090:
------------------------------
Summary: Properly handle Preconditions check failure in
MemStoreFlusher$FlushHandler.run
Key: HBASE-20090
URL: https://issues.apache.org/jira/browse/HBASE-20090
Project: HBase
Issue Type: Bug
Reporter: Ted Yu
Here is the code in branch-2 :
{code}
try {
wakeupPending.set(false); // allow someone to wake us up again
fqe = flushQueue.poll(threadWakeFrequency, TimeUnit.MILLISECONDS);
if (fqe == null || fqe instanceof WakeupFlushThread) {
...
if (!flushOneForGlobalPressure()) {
...
FlushRegionEntry fre = (FlushRegionEntry) fqe;
if (!flushRegion(fre)) {
break;
...
} catch (Exception ex) {
LOG.error("Cache flusher failed for entry " + fqe, ex);
if (!server.checkFileSystem()) {
break;
}
}
{code}
Inside flushOneForGlobalPressure():
{code}
Preconditions.checkState(
(regionToFlush != null && regionToFlushSize > 0) ||
(bestRegionReplica != null && bestRegionReplicaSize > 0));
{code}
When the Preconditions check fails, IllegalStateException is caught by the
catch block shown above.
However, the fqe is not flushed, resulting in potential data loss.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)