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

Split operation without split key incorrectly finds the middle key in off-by-one error

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s: 0.94.1, 0.94.2, 0.94.3, 0.95.2
    • Fix Version/s: 0.94.4, 0.95.0
    • Component/s: HFile, io
    • Labels:
      None
    • Hadoop Flags:
      Reviewed

      Description

      I took a deeper look into issues I was having using region splitting when specifying a region (but not a key for splitting).

      The midkey calculation is off by one and when there are 2 rows, will pick the 0th one. This causes the firstkey to be the same as midkey and the split will fail. Removing the -1 causes it work correctly, as per the test I've added.

      Looking into the code here is what goes on:

      1. Split takes the largest storefile
      2. It puts all the keys into a 2-dimensional array called blockKeys[][]. Key i resides as blockKeys[i]
      3. Getting the middle root-level index should yield the key in the middle of the storefile
      4. In step 3, we see that there is a possible erroneous (-1) to adjust for the 0-offset indexing.
      5. In a result with where there are only 2 blockKeys, this yields the 0th block key.
      6. Unfortunately, this is the same block key that 'firstKey' will be.
      7. This yields the result in HStore.java:1873 ("cannot split because midkey is the same as first or last row")
      8. Removing the -1 solves the problem (in this case).

        Attachments

        1. HBASE-7342-v1.patch
          4 kB
          Aleksandr Shulman
        2. HBASE-7342-v2.patch
          4 kB
          Aleksandr Shulman
        3. 7342-trunk-v3.txt
          4 kB
          Ted Yu
        4. 7342-0.94.txt
          3 kB
          Ted Yu

          Activity

            People

            • Assignee:
              aleksshulman Aleksandr Shulman
              Reporter:
              aleksshulman Aleksandr Shulman
            • Votes:
              0 Vote for this issue
              Watchers:
              8 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: