Skip to content

Commit b810c9b

Browse files
authored
HBASE-22710 Wrong result in one case of scan that use raw and version… (#767)
Signed-off-by: stack <stack@apache.org> Signed-off-by: Duo Zhang <zhangduo@apache.org> Signed-off-by: Viraj Jasani <vjasani@apache.org>
1 parent e26a2b5 commit b810c9b

2 files changed

Lines changed: 32 additions & 1 deletion

File tree

hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -372,10 +372,11 @@ protected static Pair<DeleteTracker, ColumnTracker> getTrackers(RegionCoprocesso
372372
if (userScan != null) {
373373
if (userScan.isRaw()) {
374374
resultMaxVersion = userScan.getMaxVersions();
375+
maxVersionToCheck = userScan.hasFilter() ? Integer.MAX_VALUE : resultMaxVersion;
375376
} else {
376377
resultMaxVersion = Math.min(userScan.getMaxVersions(), scanInfo.getMaxVersions());
378+
maxVersionToCheck = userScan.hasFilter() ? scanInfo.getMaxVersions() : resultMaxVersion;
377379
}
378-
maxVersionToCheck = userScan.hasFilter() ? scanInfo.getMaxVersions() : resultMaxVersion;
379380
}
380381

381382
DeleteTracker deleteTracker;

hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestStoreScanner.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.apache.hadoop.hbase.CellBuilderType;
3737
import org.apache.hadoop.hbase.CellComparator;
3838
import org.apache.hadoop.hbase.CellUtil;
39+
import org.apache.hadoop.hbase.CompareOperator;
3940
import org.apache.hadoop.hbase.ExtendedCellBuilderFactory;
4041
import org.apache.hadoop.hbase.HBaseClassTestRule;
4142
import org.apache.hadoop.hbase.HBaseConfiguration;
@@ -46,7 +47,10 @@
4647
import org.apache.hadoop.hbase.PrivateCellUtil;
4748
import org.apache.hadoop.hbase.client.Get;
4849
import org.apache.hadoop.hbase.client.Scan;
50+
import org.apache.hadoop.hbase.filter.BinaryComparator;
4951
import org.apache.hadoop.hbase.filter.ColumnCountGetFilter;
52+
import org.apache.hadoop.hbase.filter.Filter;
53+
import org.apache.hadoop.hbase.filter.QualifierFilter;
5054
import org.apache.hadoop.hbase.testclassification.RegionServerTests;
5155
import org.apache.hadoop.hbase.testclassification.SmallTests;
5256
import org.apache.hadoop.hbase.util.Bytes;
@@ -1022,4 +1026,30 @@ public void testPreadNotEnabledForCompactionStoreScanners() throws Exception {
10221026
assertFalse(storeScanner.isScanUsePread());
10231027
}
10241028
}
1029+
1030+
@Test
1031+
public void testReadVersionWithRawAndFilter() throws IOException {
1032+
ScanInfo scanInfo = new ScanInfo(CONF, CF, 0, 1, Long.MAX_VALUE,
1033+
KeepDeletedCells.FALSE, HConstants.DEFAULT_BLOCKSIZE, 0
1034+
, CellComparator.getInstance(), false);
1035+
KeyValue [] kvs = new KeyValue[] {
1036+
create("R1", "cf", "a", 3, KeyValue.Type.Put, "dont-care"),
1037+
create("R1", "cf", "a", 2, KeyValue.Type.Put, "dont-care"),
1038+
create("R1", "cf", "a", 1, KeyValue.Type.Put, "dont-care")
1039+
};
1040+
List<KeyValueScanner> scanners = Arrays.asList(
1041+
new KeyValueScanner[]{
1042+
new KeyValueScanFixture(CellComparator.getInstance(), kvs)
1043+
});
1044+
1045+
BinaryComparator comp = new BinaryComparator(Bytes.toBytes("a"));
1046+
Filter filter = new QualifierFilter(CompareOperator.EQUAL, comp);
1047+
Scan scanSpec = new Scan().withStartRow(Bytes.toBytes("R1")).readVersions(2).setRaw(true);
1048+
scanSpec.setFilter(filter);
1049+
try (StoreScanner scan = new StoreScanner(scanSpec, scanInfo, null, scanners)) {
1050+
List<Cell> results = new ArrayList<>();
1051+
assertEquals(true, scan.next(results));
1052+
assertEquals(2, results.size());
1053+
}
1054+
}
10251055
}

0 commit comments

Comments
 (0)