You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "Ted Yu (JIRA)" <ji...@apache.org> on 2018/02/26 22:04:00 UTC
[jira] [Created] (HBASE-20090) Properly handle Preconditions check
failure in MemStoreFlusher$FlushHandler.run
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)