.../org/apache/hadoop/hbase/regionserver/CompactingMemStore.java | 7 +++++++ .../org/apache/hadoop/hbase/regionserver/MemStoreCompactor.java | 1 + 2 files changed, 8 insertions(+) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CompactingMemStore.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CompactingMemStore.java index 7aaece6..c44661d 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CompactingMemStore.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CompactingMemStore.java @@ -199,6 +199,10 @@ public class CompactingMemStore extends AbstractMemStore { this.inMemoryFlushInProgress.set(inMemoryFlushInProgress); } + public void setAllowCompaction(boolean allowCompaction) { + this.allowCompaction.set(allowCompaction); + } + public void swapCompactedSegments(VersionedSegmentsList versionedList, ImmutableSegment result) { pipeline.swap(versionedList, result); } @@ -284,7 +288,10 @@ public class CompactingMemStore extends AbstractMemStore { inMemoryFlushInProgress.set(true); // Speculative compaction execution, may be interrupted if flush is forced while // compaction is in progress + allowCompaction.set(false); compactor.startCompaction(); + } else { + LOG.info("Compaction already in prgoress. Cannot start concurrent compaction."); } } catch (IOException e) { LOG.warn("Unable to run memstore compaction. region " diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreCompactor.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreCompactor.java index 88e067e..c9c9a7a 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreCompactor.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreCompactor.java @@ -143,6 +143,7 @@ class MemStoreCompactor { } finally { releaseResources(); compactingMemStore.setInMemoryFlushInProgress(false); + compactingMemStore.setAllowCompaction(true); } }