[ 
https://issues.apache.org/jira/browse/HBASE-8814?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

stack resolved HBASE-8814.
--------------------------

    Resolution: Fixed

This patch is back in in 0.94, 0.95, and trunk so resolving again.
                
> Possible NPE in split if a region has empty store files.
> --------------------------------------------------------
>
>                 Key: HBASE-8814
>                 URL: https://issues.apache.org/jira/browse/HBASE-8814
>             Project: HBase
>          Issue Type: Bug
>          Components: regionserver
>    Affects Versions: 0.94.8
>            Reporter: rajeshbabu
>            Assignee: rajeshbabu
>             Fix For: 0.98.0, 0.95.2, 0.94.10
>
>         Attachments: HBASE-8814_94.patch, HBASE-8814_94_v2.patch, 
> HBASE-8814_trunk_addendum.patch, HBASE-8814_trunk.patch, HBASE-8814_v2.patch
>
>
> {code}
> 2013-06-27 14:12:54,472 INFO  
> [RS:1;BLRY2R009039160:49833-splits-1372322572806] 
> regionserver.SplitRequest(92): Running rollback/cleanup of failed split of 
> testSplitShouldNotThrowNPEEvenARegionHasEmptySplitFiles,,1372322556662.276e00da1420119e2f91f3a4c4c41d78.;
>  java.util.concurrent.ExecutionException: java.lang.NullPointerException
> java.io.IOException: java.util.concurrent.ExecutionException: 
> java.lang.NullPointerException
>       at 
> org.apache.hadoop.hbase.regionserver.SplitTransaction.splitStoreFiles(SplitTransaction.java:602)
>       at 
> org.apache.hadoop.hbase.regionserver.SplitTransaction.createDaughters(SplitTransaction.java:297)
>       at 
> org.apache.hadoop.hbase.regionserver.SplitTransaction.execute(SplitTransaction.java:466)
>       at 
> org.apache.hadoop.hbase.regionserver.SplitRequest.run(SplitRequest.java:82)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>       at java.lang.Thread.run(Thread.java:662)
> Caused by: java.util.concurrent.ExecutionException: 
> java.lang.NullPointerException
>       at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222)
>       at java.util.concurrent.FutureTask.get(FutureTask.java:83)
>       at 
> org.apache.hadoop.hbase.regionserver.SplitTransaction.splitStoreFiles(SplitTransaction.java:596)
>       ... 6 more
> Caused by: java.lang.NullPointerException
>       at 
> org.apache.hadoop.hbase.regionserver.HRegionFileSystem.splitStoreFile(HRegionFileSystem.java:539)
>       at 
> org.apache.hadoop.hbase.regionserver.SplitTransaction.splitStoreFile(SplitTransaction.java:610)
>       at 
> org.apache.hadoop.hbase.regionserver.SplitTransaction.access$1(SplitTransaction.java:607)
>       at 
> org.apache.hadoop.hbase.regionserver.SplitTransaction$StoreFileSplitter.call(SplitTransaction.java:633)
>       at 
> org.apache.hadoop.hbase.regionserver.SplitTransaction$StoreFileSplitter.call(SplitTransaction.java:1)
>       at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
>       at java.util.concurrent.FutureTask.run(FutureTask.java:138)
>       ... 3 more
> {code}
> If a storefile is empty(can be because of puts and deletes) then first and 
> lastkey of the file will be empty. Then we will get first or last key as 
> null. Then we will end up in NPE when we will check splitkey in the range or 
> not.
> {code}
>     if (top) {
>       //check if larger than last key.
>       KeyValue splitKey = KeyValue.createFirstOnRow(splitRow);
>       byte[] lastKey = f.createReader().getLastKey();      
>       if (f.getReader().getComparator().compare(splitKey.getBuffer(), 
>           splitKey.getKeyOffset(), splitKey.getKeyLength(), lastKey, 0, 
> lastKey.length) > 0) {
>         return null;
>       }
>     } else {
>       //check if smaller than first key
>       KeyValue splitKey = KeyValue.createLastOnRow(splitRow);
>       byte[] firstKey = f.createReader().getFirstKey();
>       if (f.getReader().getComparator().compare(splitKey.getBuffer(), 
>           splitKey.getKeyOffset(), splitKey.getKeyLength(), firstKey, 0, 
> firstKey.length) < 0) {
>         return null;
>       }      
>     }
> {code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to