From 149b87a0595a2fe22cfd7a2024e2a1edec4d7ec4 Mon Sep 17 00:00:00 2001 From: Guanghao Zhang Date: Thu, 20 Dec 2018 11:03:54 +0800 Subject: [PATCH] HBASE-21618 Scan with the same startRow(inclusive=true) and stopRow(inclusive=false) returns one result --- .../hadoop/hbase/shaded/protobuf/ProtobufUtil.java | 4 +-- .../hbase/client/TestScannersFromClientSide.java | 32 ++++++++++++++++++++++ 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java index cf4c831..fea81f1 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java @@ -1081,9 +1081,7 @@ public final class ProtobufUtil { if (!scan.includeStartRow()) { scanBuilder.setIncludeStartRow(false); } - if (scan.includeStopRow()) { - scanBuilder.setIncludeStopRow(true); - } + scanBuilder.setIncludeStopRow(scan.includeStopRow()); if (scan.getReadType() != Scan.ReadType.DEFAULT) { scanBuilder.setReadType(toReadType(scan.getReadType())); } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestScannersFromClientSide.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestScannersFromClientSide.java index 5e8d107..6d95d44 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestScannersFromClientSide.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestScannersFromClientSide.java @@ -22,6 +22,7 @@ import static org.apache.hadoop.hbase.ipc.RpcClient.DEFAULT_CODEC_CLASS; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -897,4 +898,35 @@ public class TestScannersFromClientSide { } } } + + @Test + public void testScanWithSameStartRowStopRow() throws IOException { + TableName tableName = TableName.valueOf(name.getMethodName()); + try (Table table = TEST_UTIL.createTable(tableName, FAMILY)) { + table.put(new Put(ROW).addColumn(FAMILY, QUALIFIER, VALUE)); + + Scan scan = new Scan().withStartRow(ROW, true).withStopRow(ROW, true); + try (ResultScanner scanner = table.getScanner(scan)) { + Result result = scanner.next(); + assertArrayEquals(ROW, result.getRow()); + assertArrayEquals(VALUE, result.getValue(FAMILY, QUALIFIER)); + assertNull(scanner.next()); + } + + scan = new Scan().withStartRow(ROW, true).withStopRow(ROW, false); + try (ResultScanner scanner = table.getScanner(scan)) { + assertNull(scanner.next()); + } + + scan = new Scan().withStartRow(ROW, false).withStopRow(ROW, false); + try (ResultScanner scanner = table.getScanner(scan)) { + assertNull(scanner.next()); + } + + scan = new Scan().withStartRow(ROW, false).withStopRow(ROW, true); + try (ResultScanner scanner = table.getScanner(scan)) { + assertNull(scanner.next()); + } + } + } } -- 2.7.4