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)