You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "Zheng Hu (JIRA)" <ji...@apache.org> on 2018/01/08 10:09:00 UTC
[jira] [Comment Edited] (HBASE-19729)
UserScanQueryMatcher#mergeFilterResponse should return
INCLUDE_AND_SEEK_NEXT_ROW when filterResponse is INCLUDE_AND_SEEK_NEXT_ROW
[ https://issues.apache.org/jira/browse/HBASE-19729?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16316011#comment-16316011 ]
Zheng Hu edited comment on HBASE-19729 at 1/8/18 10:08 AM:
-----------------------------------------------------------
BTW, after discussed with [~zghaobac] offline, we found another relative bug( following UT will be failed in our current code base):
{code}
public class TestScanWithFilterAndMaxVersion {
public final static HBaseTestingUtility UTIL = new HBaseTestingUtility();
public static TableName TABLE_NAME = TableName.valueOf("test");
public static byte[] ROW = Bytes.toBytes("r");
public static byte[] FAMILY = Bytes.toBytes("f");
public static byte[] QUALIFY = Bytes.toBytes("q");
public static byte[] VALUE = Bytes.toBytes("v");
@Test
public void test() throws Exception {
UTIL.startMiniCluster();
Table table = UTIL.createTable(TABLE_NAME, FAMILY, 4);
for (int i = 0; i < 4; i++) {
Put put = new Put(ROW);
put.addColumn(FAMILY, QUALIFY, VALUE);
table.put(put);
}
Scan scan = new Scan();
scan.addColumn(FAMILY, QUALIFY);
scan.setFilter(new QualifierFilter(CompareOperator.EQUAL, new BinaryComparator(QUALIFY)));
scan.readVersions(3);
try (ResultScanner scanner = table.getScanner(scan)) {
Result result = scanner.next();
Assert.assertEquals(3, result.size());
}
}
}
{code}
In short, when a scan with specific columns & filter to return INCLUDE* & specific version to read, the scanner may return cells more than the specific version.
Will fix this bug in this patch.
was (Author: openinx):
BTW, after discussed with [~zghaobac] offline, we found another relative bug:
{code}
public class TestScanWithFilterAndMaxVersion {
public final static HBaseTestingUtility UTIL = new HBaseTestingUtility();
public static TableName TABLE_NAME = TableName.valueOf("test");
public static byte[] ROW = Bytes.toBytes("r");
public static byte[] FAMILY = Bytes.toBytes("f");
public static byte[] QUALIFY = Bytes.toBytes("q");
public static byte[] VALUE = Bytes.toBytes("v");
@Test
public void test() throws Exception {
UTIL.startMiniCluster();
Table table = UTIL.createTable(TABLE_NAME, FAMILY, 4);
for (int i = 0; i < 4; i++) {
Put put = new Put(ROW);
put.addColumn(FAMILY, QUALIFY, VALUE);
table.put(put);
}
Scan scan = new Scan();
scan.addColumn(FAMILY, QUALIFY);
scan.setFilter(new QualifierFilter(CompareOperator.EQUAL, new BinaryComparator(QUALIFY)));
scan.readVersions(3);
try (ResultScanner scanner = table.getScanner(scan)) {
Result result = scanner.next();
Assert.assertEquals(3, result.size());
}
}
}
{code}
In short, when a scan with specific columns & filter to return INCLUDE* & specific version to read, the scanner may return cells more than the specific version.
Will fix this bug in this patch.
> UserScanQueryMatcher#mergeFilterResponse should return INCLUDE_AND_SEEK_NEXT_ROW when filterResponse is INCLUDE_AND_SEEK_NEXT_ROW
> ---------------------------------------------------------------------------------------------------------------------------------
>
> Key: HBASE-19729
> URL: https://issues.apache.org/jira/browse/HBASE-19729
> Project: HBase
> Issue Type: Bug
> Reporter: Zheng Hu
> Assignee: Zheng Hu
> Attachments: HBASE-19729.v1.patch
>
>
> As we've discussed in HBASE-19696
> https://issues.apache.org/jira/browse/HBASE-19696?focusedCommentId=16309644&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-16309644
> when (filterResponse, matchCode) = (INCLUDE_AND_SEEK_NEXT_ROW, INCLUDE) or
> (INCLUDE_AND_SEEK_NEXT_ROW, INCLUDE_AND_NEXT_COL) , we should return INCLUDE_AND_SEEK_NEXT_ROW as the merged match code.
> Will upload patches for all branches.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)