You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by vj...@apache.org on 2020/04/30 08:41:29 UTC
[hbase] branch branch-2 updated: HBASE-22710 Wrong result in one case of scan that use raw and version… (#767)
This is an automated email from the ASF dual-hosted git repository.
vjasani pushed a commit to branch branch-2
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/branch-2 by this push:
new a6aea72 HBASE-22710 Wrong result in one case of scan that use raw and version… (#767)
a6aea72 is described below
commit a6aea729c5dcda6ea1e566df7d5e27e144f9bb79
Author: bsglz <18...@qq.com>
AuthorDate: Thu Apr 30 16:21:37 2020 +0800
HBASE-22710 Wrong result in one case of scan that use raw and version… (#767)
Signed-off-by: stack <st...@apache.org>
Signed-off-by: Duo Zhang <zh...@apache.org>
Signed-off-by: Viraj Jasani <vj...@apache.org>
---
.../querymatcher/ScanQueryMatcher.java | 3 ++-
.../hbase/regionserver/TestStoreScanner.java | 30 ++++++++++++++++++++++
2 files changed, 32 insertions(+), 1 deletion(-)
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.java
index c164afd..96d3bab 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.java
@@ -372,10 +372,11 @@ public abstract class ScanQueryMatcher implements ShipperListener {
if (userScan != null) {
if (userScan.isRaw()) {
resultMaxVersion = userScan.getMaxVersions();
+ maxVersionToCheck = userScan.hasFilter() ? Integer.MAX_VALUE : resultMaxVersion;
} else {
resultMaxVersion = Math.min(userScan.getMaxVersions(), scanInfo.getMaxVersions());
+ maxVersionToCheck = userScan.hasFilter() ? scanInfo.getMaxVersions() : resultMaxVersion;
}
- maxVersionToCheck = userScan.hasFilter() ? scanInfo.getMaxVersions() : resultMaxVersion;
}
DeleteTracker deleteTracker;
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestStoreScanner.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestStoreScanner.java
index 23c9fb1..4c9531f 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestStoreScanner.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestStoreScanner.java
@@ -36,6 +36,7 @@ import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellComparator;
import org.apache.hadoop.hbase.CellUtil;
+import org.apache.hadoop.hbase.CompareOperator;
import org.apache.hadoop.hbase.HBaseClassTestRule;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HBaseTestingUtility;
@@ -45,7 +46,10 @@ import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.PrivateCellUtil;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.Scan;
+import org.apache.hadoop.hbase.filter.BinaryComparator;
import org.apache.hadoop.hbase.filter.ColumnCountGetFilter;
+import org.apache.hadoop.hbase.filter.Filter;
+import org.apache.hadoop.hbase.filter.QualifierFilter;
import org.apache.hadoop.hbase.testclassification.RegionServerTests;
import org.apache.hadoop.hbase.testclassification.SmallTests;
import org.apache.hadoop.hbase.util.Bytes;
@@ -967,4 +971,30 @@ public class TestStoreScanner {
assertFalse(storeScanner.isScanUsePread());
}
}
+
+ @Test
+ public void testReadVersionWithRawAndFilter() throws IOException {
+ ScanInfo scanInfo = new ScanInfo(CONF, CF, 0, 1, Long.MAX_VALUE,
+ KeepDeletedCells.FALSE, HConstants.DEFAULT_BLOCKSIZE, 0
+ , CellComparator.getInstance(), false);
+ KeyValue [] kvs = new KeyValue[] {
+ create("R1", "cf", "a", 3, KeyValue.Type.Put, "dont-care"),
+ create("R1", "cf", "a", 2, KeyValue.Type.Put, "dont-care"),
+ create("R1", "cf", "a", 1, KeyValue.Type.Put, "dont-care")
+ };
+ List<KeyValueScanner> scanners = Arrays.asList(
+ new KeyValueScanner[]{
+ new KeyValueScanFixture(CellComparator.getInstance(), kvs)
+ });
+
+ BinaryComparator comp = new BinaryComparator(Bytes.toBytes("a"));
+ Filter filter = new QualifierFilter(CompareOperator.EQUAL, comp);
+ Scan scanSpec = new Scan().withStartRow(Bytes.toBytes("R1")).readVersions(2).setRaw(true);
+ scanSpec.setFilter(filter);
+ try (StoreScanner scan = new StoreScanner(scanSpec, scanInfo, null, scanners)) {
+ List<Cell> results = new ArrayList<>();
+ assertEquals(true, scan.next(results));
+ assertEquals(2, results.size());
+ }
+ }
}