diff --git hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java index bfb9171..d06ed08 100644 --- hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java +++ hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java @@ -2294,6 +2294,15 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi long trxId = 0; MultiVersionConcurrencyControl.WriteEntry writeEntry = mvcc.begin(); + // wait for all in-progress transactions to commit to WAL before + // we can start the flush. This prevents + // uncommitted transactions from being written into HFiles. + // We have to block before we start the flush, otherwise keys that + // were removed via a rollbackMemstore could be written to Hfiles. + mvcc.completeAndWait(writeEntry); + // set writeEntry to null to prevent mvcc.complete from being called again inside finally + // block + writeEntry = null; try { try { if (wal != null) { @@ -2372,16 +2381,6 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi throw ioe; } } - - // wait for all in-progress transactions to commit to WAL before - // we can start the flush. This prevents - // uncommitted transactions from being written into HFiles. - // We have to block before we start the flush, otherwise keys that - // were removed via a rollbackMemstore could be written to Hfiles. - mvcc.completeAndWait(writeEntry); - // set writeEntry to null to prevent mvcc.complete from being called again inside finally - // block - writeEntry = null; } finally { if (writeEntry != null) { // In case of failure just mark current writeEntry as complete.