[ 
https://issues.apache.org/jira/browse/HBASE-5532?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13224955#comment-13224955
 ] 

terry zhang commented on HBASE-5532:
------------------------------------

yes,Nicolas. This is a race condition and we can use lock to avoid this issue. 
And now in the function toDetermines if Store should be split also didn't use 
lock to protect.

{code:title=Store.java|borderStyle=solid}
  /**
   * Determines if Store should be split
   * @return byte[] if store should be split, null otherwise.
   */
  public byte[] getSplitPoint() {
    this.lock.readLock().lock();
    try {
      // sanity checks
      if (this.storefiles.isEmpty()) {
        return null;
      }
 

 

        StoreFile.Reader r = sf.getReader(); * <= check if the reader is null*
        if (r == null) {
          LOG.warn("Storefile " + sf + " Reader is null");
          continue;
        }

        long size = r.length();
        if (size > maxSize) {
          // This is the largest one so far
          maxSize = size;
          largestSf = sf;
        }
      }

      StoreFile.Reader r = largestSf.getReader(); *<= check if the reader is 
null*
      if (r == null) {
        LOG.warn("Storefile " + largestSf + " Reader is null");
        return null;
      }
      // Get first, last, and mid keys.  Midkey is the key that starts block
      // in middle of hfile.  Has column and timestamp.  Need to return just
      // the row we want to split on as midkey.
      byte [] midkey = r.midkey();
     .....
    return null;
  }
{code} 




                
> get NPE during MajorCompactionChecker 
> --------------------------------------
>
>                 Key: HBASE-5532
>                 URL: https://issues.apache.org/jira/browse/HBASE-5532
>             Project: HBase
>          Issue Type: Bug
>          Components: regionserver
>            Reporter: terry zhang
>         Attachments: HBASE-5532.patch
>
>
> We found error log (NullPointerException) below on our online cluster:
> 2012-03-05 00:17:09,592 ERROR 
> org.apache.hadoop.hbase.regionserver.HRegionServer$MajorCompactionChecker: 
> Caught exception
> java.lang.NullPointerException
>         at 
> org.apache.hadoop.hbase.regionserver.Store.isMajorCompaction(Store.java:878)
>         at 
> org.apache.hadoop.hbase.regionserver.Store.isMajorCompaction(Store.java:857)
>         at 
> org.apache.hadoop.hbase.regionserver.HRegion.isMajorCompaction(HRegion.java:3017)
>         at 
> org.apache.hadoop.hbase.regionserver.HRegionServer$MajorCompactionChecker.chore(HRegionServer.java:1172)
>         at org.apache.hadoop.hbase.Chore.run(Chore.java:66)
> After Check the code we found although it already check whether store files 
> has null reader at the begin of the function(isMajorCompaction), but it still 
> has some possibility the reader is closed before it return(eg mini 
> compaction). So we need to check store file reader before we use it to avoid 
> this NPE

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to