[
https://issues.apache.org/jira/browse/HBASE-15676?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15259418#comment-15259418
]
Matt Warhaftig commented on HBASE-15676:
----------------------------------------
{noformat}
"Have you thought about changing the encoding ( 0 -> -1 (0xff), 1 -> 0) so that
we can tell whether the mask has been preprocessed without introducing marker ?"
{noformat}
[~tedyu], thanks for the suggestion, that approach seems to work and is much
more elegant. Attached patch 'hbase-15676-v2.patch' uses new mask encoding of
0 -> -1 & 1 -> 2 in the FuzzyRowFilter constructor and then switches the mask
to needed values of -1 & 0 at filterKeyValue().
> FuzzyRowFilter fails and matches all the rows in the table if the mask
> consists of all 0s
> -----------------------------------------------------------------------------------------
>
> Key: HBASE-15676
> URL: https://issues.apache.org/jira/browse/HBASE-15676
> Project: HBase
> Issue Type: Bug
> Components: Filters
> Affects Versions: 2.0.0, 0.98.13, 1.0.2, 1.2.0, 1.1.1
> Reporter: Rohit Sinha
> Attachments: hbase-15676-v1.patch
>
>
> While using FuzzyRowFilter we noticed that if the mask array consists of all
> 0s (fixed) the FuzzyRowFilter matches all the rows in the table. We noticed
> this on HBase 1.1, 1.2 and higher.
> After some digging we suspect that this is because of isPreprocessedMask()
> check which is used in preprocessMask() which was added here:
> https://issues.apache.org/jira/browse/HBASE-13761
> If the mask consists of all 0s then the isPreprocessedMask() returns true and
> the preprocessing which responsible for changing 0s to -1 doesn't happen and
> hence all rows are matched in scan.
> This scenario can be tested in TestFuzzyRowFilterEndToEnd#testHBASE14782() If
> we change the
> byte[] fuzzyKey = Bytes.toBytesBinary("\\x00\\x00\\x044");
> byte[] mask = new byte[] {1,0,0,0};
> to
> byte[] fuzzyKey = Bytes.toBytesBinary("\\x9B\\x00\\x044e");
> byte[] mask = new byte[] {0,0,0,0,0};
> We expect one match but this will match all the rows in the table.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)