HBase
  1. HBase
  2. HBASE-5081

Distributed log splitting deleteNode races against splitLog retry

    Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 0.92.0, 0.94.0
    • Fix Version/s: 0.92.0
    • Component/s: wal
    • Labels:
      None
    • Hadoop Flags:
      Reviewed

      Description

      Recently, during 0.92 rc testing, we found distributed log splitting hangs there forever. Please see attached screen shot.
      I looked into it and here is what happened I think:

      1. One rs died, the servershutdownhandler found it out and started the distributed log splitting;
      2. All three tasks failed, so the three tasks were deleted, asynchronously;
      3. Servershutdownhandler retried the log splitting;
      4. During the retrial, it created these three tasks again, and put them in a hashmap (tasks);
      5. The asynchronously deletion in step 2 finally happened for one task, in the callback, it removed one
      task in the hashmap;
      6. One of the newly submitted tasks' zookeeper watcher found out that task is unassigned, and it is not
      in the hashmap, so it created a new orphan task.
      7. All three tasks failed, but that task created in step 6 is an orphan so the batch.err counter was one short,
      so the log splitting hangs there and keeps waiting for the last task to finish which is never going to happen.

      So I think the problem is step 2. The fix is to make deletion sync, instead of async, so that the retry will have
      a clean start.

      Async deleteNode will mess up with split log retrial. In extreme situation, if async deleteNode doesn't happen
      soon enough, some node created during the retrial could be deleted.

      deleteNode should be sync.

      1. 0001-HBASE-5081-jira-Distributed-log-splitting-deleteNode.patch
        38 kB
        Prakash Khemani
      2. 0001-HBASE-5081-jira-Distributed-log-splitting-deleteNode.patch
        34 kB
        Prakash Khemani
      3. 0001-HBASE-5081-jira-Distributed-log-splitting-deleteNode.patch
        33 kB
        Prakash Khemani
      4. 0001-HBASE-5081-jira-Distributed-log-splitting-deleteNode.patch
        32 kB
        Prakash Khemani
      5. 0001-HBASE-5081-jira-Distributed-log-splitting-deleteNode.patch
        29 kB
        Prakash Khemani
      6. 0001-HBASE-5081-jira-Distributed-log-splitting-deleteNode.patch
        29 kB
        Prakash Khemani
      7. 0001-HBASE-5081-jira-Distributed-log-splitting-deleteNode.patch
        29 kB
        Prakash Khemani
      8. 5081-deleteNode-with-while-loop.txt
        31 kB
        Ted Yu
      9. distributed_log_splitting_screen_shot2.png
        125 kB
        Jimmy Xiang
      10. distributed_log_splitting_screenshot3.png
        286 kB
        Jimmy Xiang
      11. distributed-log-splitting-screenshot.png
        58 kB
        Jimmy Xiang
      12. hbase-5081_patch_for_92_v4.txt
        2 kB
        Jimmy Xiang
      13. hbase-5081_patch_v5.txt
        2 kB
        Jimmy Xiang
      14. HBASE-5081-jira-Distributed-log-splitting-deleteNode.patch
        37 kB
        Ted Yu
      15. hbase-5081-patch-v6.txt
        2 kB
        Jimmy Xiang
      16. hbase-5081-patch-v7.txt
        4 kB
        Jimmy Xiang
      17. patch_for_92_v2.txt
        2 kB
        Jimmy Xiang
      18. patch_for_92_v3.txt
        2 kB
        Jimmy Xiang
      19. patch_for_92.txt
        1 kB
        Jimmy Xiang

        Issue Links

          Activity

            People

            • Assignee:
              Prakash Khemani
              Reporter:
              Jimmy Xiang
            • Votes:
              0 Vote for this issue
              Watchers:
              6 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development