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());
+    }
+  }
 }