[
https://issues.apache.org/jira/browse/HBASE-12583?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14239460#comment-14239460
]
Anoop Sam John commented on HBASE-12583:
----------------------------------------
This is committed already?
minor comments in javadoc.
{quote}
In {@link HRegionFileSystem#splitStoreFile(org.apache.hadoop.hbase.HRegionInfo,
* String, StoreFile, byte[], boolean)}
{quote}
Pls correct the signature. Split policy at end. You will get javadoc warn here
But some use cases we may -> But in some use cases we may
even the split row not lies in the range -> even when
StoreRile range check -> StoreFile
or or not -> or not
This method can be used to whether -> This method can be used to decide,
whether
> Allow creating reference files even the split row not lies in the storefile
> range if required
> ---------------------------------------------------------------------------------------------
>
> Key: HBASE-12583
> URL: https://issues.apache.org/jira/browse/HBASE-12583
> Project: HBase
> Issue Type: Improvement
> Reporter: rajeshbabu
> Assignee: rajeshbabu
> Labels: Phoenix
> Fix For: 1.0.0, 2.0.0, 0.98.9
>
> Attachments: HBASE-12583.patch, HBASE-12583_98.patch,
> HBASE-12583_98_v2.patch, HBASE-12583_branch1.patch,
> HBASE-12583_branch1_v2.patch, HBASE-12583_v2.patch, HBASE-12583_v3.patch
>
>
> Currently in HRegionFileSystem#splitStoreFile we are not creating reference
> files if the split row not lies in the storefile range that means one of the
> child region doesn't have any data.
> {code}
> // Check whether the split row lies in the range of the store file
> // If it is outside the range, return directly.
> if (top) {
> //check if larger than last key.
> KeyValue splitKey = KeyValueUtil.createFirstOnRow(splitRow);
> byte[] lastKey = f.createReader().getLastKey();
> // If lastKey is null means storefile is empty.
> if (lastKey == null) return null;
> if (f.getReader().getComparator().compareFlatKey(splitKey.getBuffer(),
> splitKey.getKeyOffset(), splitKey.getKeyLength(), lastKey, 0,
> lastKey.length) > 0) {
> return null;
> }
> } else {
> //check if smaller than first key
> KeyValue splitKey = KeyValueUtil.createLastOnRow(splitRow);
> byte[] firstKey = f.createReader().getFirstKey();
> // If firstKey is null means storefile is empty.
> if (firstKey == null) return null;
> if (f.getReader().getComparator().compareFlatKey(splitKey.getBuffer(),
> splitKey.getKeyOffset(), splitKey.getKeyLength(), firstKey, 0,
> firstKey.length) < 0) {
> return null;
> }
> }
> {code}
> In some cases when split row should be compared with part of rowkey(in
> composite rowkey) mainly for secondary index tables we need to create
> reference files even when split row not lies in the storefile range so that
> they can be rewritten to it's child regions by some custom half store file
> reader which compare the part of row key with split row.
> The check of comparing split row with storefile range and returning directly
> can be avoided by having special boolean attribute in table descriptor when
> it set to true. Or else we can have coprocessor hooks so that in the hooks we
> can create the references and bypass.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)