diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java index eece27a..ca22cbf 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java @@ -619,7 +619,9 @@ class MemStoreFlusher implements FlushRequester { return this.globalMemStoreLimit; } - interface FlushQueueEntry extends Delayed {} + interface FlushQueueEntry extends Delayed { + int getHashcode(); + } /** * Token to insert into the flush queue that ensures that the flusher does not sleep @@ -640,6 +642,10 @@ class MemStoreFlusher implements FlushRequester { return (this == obj); } + @Override + public int getHashcode() { + return 1; + } } /** @@ -666,6 +672,11 @@ class MemStoreFlusher implements FlushRequester { this.forceFlushAllStores = forceFlushAllStores; } + @Override + public int getHashcode() { + return region.hashCode(); + } + /** * @param maximumWait * @return True if we have been delayed > maximumWait milliseconds. @@ -709,8 +720,11 @@ class MemStoreFlusher implements FlushRequester { @Override public int compareTo(Delayed other) { - return Long.valueOf(getDelay(TimeUnit.MILLISECONDS) - + int ret = Long.valueOf(getDelay(TimeUnit.MILLISECONDS) - other.getDelay(TimeUnit.MILLISECONDS)).intValue(); + if (ret != 0) return ret; + FlushRegionEntry otherEntry = (FlushRegionEntry) other; + return getHashcode() - otherEntry.getHashcode(); } @Override