[ https://issues.apache.org/jira/browse/HBASE-12583?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14239926#comment-14239926 ]
Hudson commented on HBASE-12583: -------------------------------- FAILURE: Integrated in HBase-TRUNK #5895 (See [https://builds.apache.org/job/HBase-TRUNK/5895/]) HBASE-12583 Allow creating reference files even the split row not lies in the storefile range if required - Addendum(Rajeshbabu) (rajeshbabu: rev 53493ff5db40dd61eebbcb24a81ac57ff724274f) * hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.java > 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_addendum.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)