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

Off by one bug in util.HMerge

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Not A Problem
    • 0.90.1
    • 0.94.0
    • util
    • None
    • NA

    Description

      It looks like there's an off by one bug in the OfflineMerger constructor in util.HMerge:

      InternalScanner rootScanner =
      root.getScanner(scan);

      try {
      List<KeyValue> results = new ArrayList<KeyValue>();
      while(rootScanner.next(results)) {
      for(KeyValue kv: results) {
      HRegionInfo info = Writables.getHRegionInfoOrNull(kv.getValue());
      if (info != null)

      { metaRegions.add(info); }

      }
      }
      } finally

      { ... }

      That call to InternalScanner.next() in the while condition returns true if there's another result after the one it just loaded into the out param. That is, after it reads the last row into the 'results' collection, it returns false and the loop exits with that last row unread. It probably wants to be structured more like this:

      final InternalScanner metaScanner = meta.getScanner(scan); List<KeyValue> results = Lists.newArrayList();

      while (true) {

      boolean hasMore = metaScanner.next(results);

      for (KeyValue kv : results) {
      HRegionInfo hri = Writables.getHRegionInfoOrNull(kv.getValue());
      if (hri != null)

      { regionInfo.add(hri); }

      }

      if (!hasMore)

      { break; }

      }

      The loop in util.HMerge is scanning ROOT for META regions. So this bug will only be hit when there is more than one region of META. Personally, I don't have any installations with more than one META region, and I'm not sure if anyone does, so this might be a moot point.

      Attachments

        Activity

          People

            Unassigned Unassigned
            prattrs Sandy Pratt
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: