[ https://issues.apache.org/jira/browse/HBASE-12583?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
rajeshbabu updated HBASE-12583: ------------------------------- Status: Patch Available (was: Open) Here is the patch skip the storefile range check in HRegionFileSystem#splitStoreFile [~stack] Actually I thought of adding special attribute for table to skip the check. But Ram suggested to this using RegionSplitPolicy so that it will be meaningful and clean. So I have done the same way. Please review. > 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: 2.0.0, 0.98.9, 0.99.2 > > Attachments: HBASE-12583.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)