diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java index 665ed46..85fe9bc 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java @@ -25,8 +25,10 @@ import java.util.ArrayList; import java.util.List; import java.util.NavigableSet; import java.util.concurrent.CountDownLatch; +import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.locks.ReentrantLock; +import com.google.common.primitives.Longs; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.conf.Configuration; @@ -61,6 +63,8 @@ public class StoreScanner extends NonReversedNonLazyKeyValueScanner protected ScanQueryMatcher matcher; protected KeyValueHeap heap; protected boolean cacheBlocks; + protected static AtomicLong storeScannerSequence = new AtomicLong(0L); + protected long storeScannerID = -1L; protected int countPerRow = 0; protected int storeLimit = -1; @@ -130,7 +134,7 @@ public class StoreScanner extends NonReversedNonLazyKeyValueScanner this.now = EnvironmentEdgeManager.currentTime(); this.oldestUnexpiredTS = now - ttl; this.minVersions = minVersions; - + this.storeScannerID = storeScannerSequence.getAndIncrement(); if (store != null && ((HStore)store).getHRegion() != null && ((HStore)store).getHRegion().getBaseConf() != null) { Configuration conf = ((HStore) store).getHRegion().getBaseConf(); @@ -861,5 +865,19 @@ public class StoreScanner extends NonReversedNonLazyKeyValueScanner public Cell getNextIndexedKey() { return this.heap.getNextIndexedKey(); } + + @Override + public int hashCode() { + return Longs.hashCode(this.storeScannerID); + } + + @Override + public boolean equals(Object obj) { + if (obj != null) { + return ((StoreScanner) obj).storeScannerID == this.storeScannerID; + } + return false; + } + }