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)