Uploaded image for project: 'HBase'
  1. HBase
  2. HBASE-12767

Fix a StoreFileScanner NPE in reverse scan flow

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 1.0.0, 0.98.9, 2.0.0
    • 1.0.0, 0.98.10, 1.1.0
    • regionserver, Scanners
    • None
    • Reviewed

    Description

      we observed a NPE in our internal 0.94 branch prd env:

      ERROR org.apache.hadoop.hbase.regionserver.HRegionServer: Failed openScanner
      java.lang.NullPointerException
      at org.apache.hadoop.hbase.regionserver.StoreFileScanner.seekToPreviousRow(StoreFileScanner.java:409)
      at org.apache.hadoop.hbase.regionserver.StoreFileScanner.backwardSeek(StoreFileScanner.java:467)
      at org.apache.hadoop.hbase.regionserver.ReversedStoreScanner.seekScanners(ReversedStoreScanner.java:78)
      at org.apache.hadoop.hbase.regionserver.StoreScanner.<init>(StoreScanner.java:154)
      at org.apache.hadoop.hbase.regionserver.ReversedStoreScanner.<init>(ReversedStoreScanner.java:49)
      at org.apache.hadoop.hbase.regionserver.Store.getScanner(Store.java:2216)
      at org.apache.hadoop.hbase.regionserver.HRegion$RegionScannerImpl.<init>(HRegion.java:3984)
      at org.apache.hadoop.hbase.regionserver.ReversedRegionScannerImpl.<init>(ReversedRegionScannerImpl.java:43)
      at org.apache.hadoop.hbase.regionserver.HRegion.instantiateRegionScanner(HRegion.java:1851)
      at org.apache.hadoop.hbase.regionserver.HRegion.getScanner(HRegion.java:1837)
      at org.apache.hadoop.hbase.regionserver.HRegion.getScanner(HRegion.java:1812)
      at org.apache.hadoop.hbase.regionserver.HRegionServer.internalOpenScanner(HRegionServer.java:2752)
      at org.apache.hadoop.hbase.regionserver.HRegionServer.openScanner(HRegionServer.java:2715)

      After tracing, it turned out a boundary bug at HalfStoreFileReader. If we have a reverse scan request at "bottom" part, once the start row >= the last row at bottom part, the NPE will be encourtered, since we will invoke "next()", and "atEnd = true" will be called in HalfStoreFileReader, then when we want to do "seekBefore" or other sth in StoreFileScanner, StoreFileScanner.cur will call:

            public Cell getKeyValue() {
              if (atEnd) return null;
      

      The fix is simple, we need to reset the "atEnd" flag once seekBefore op is successful. You can undo my HalfStoreFileReader change and run the new added case to see NPE.
      ps: I also found some cases in TestHRegion missing the "@Test" annotation, so fix them in the same patch as well.

      Attachments

        1. HBASE-12767.txt
          7 kB
          Liang Xie

        Activity

          People

            xieliang007 Liang Xie
            xieliang007 Liang Xie
            Votes:
            0 Vote for this issue
            Watchers:
            6 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: