Nirdosh Kumar Yadav created HBASE-30334:
-------------------------------------------

             Summary: MergeTableRegionsProcedure.rollbackState() is a no-op for 
MERGE_TABLE_REGIONS_CHECK_CLOSED_REGIONS; when the gate fails the parents stay 
CLOSED, producing an indefinite stuck RIT
                 Key: HBASE-30334
                 URL: https://issues.apache.org/jira/browse/HBASE-30334
             Project: HBase
          Issue Type: Bug
          Components: master
    Affects Versions: 2.5.10, 2.6.1
            Reporter: Nirdosh Kumar Yadav
            Assignee: Nirdosh Kumar Yadav


h4. {color:#172b4d}Problem Statement{color}

{color:#172b4d}When MergeTableRegionsProcedure fails at the 
MERGE_TABLE_REGIONS_CHECK_CLOSED_REGIONS state — e.g. because 
AssignmentManagerUtil.checkClosedRegion() throws "Recovered.edits are found in 
Region: … abort split/merge to prevent data loss" — the procedure framework 
unwinds through rollbackState(). The MERGE_TABLE_REGIONS_CHECK_CLOSED_REGIONS 
case is a bare break;, so the parents that were CLOSED during the prior forward 
step MERGE_TABLE_REGIONS_CLOSE_REGIONS are never re-opened. Both parent regions 
remain OFFLINE and the RIT can persist indefinitely until an operator 
intervenes.{color}

 
h4. Root Cause

MergeTableRegionsProcedure.rollbackState() at 
MergeTableRegionsProcedure.java:287-288:

 

case MERGE_TABLE_REGIONS_CHECK_CLOSED_REGIONS: break; // no-op — parents stay 
OFFLINE

The symmetric case in SplitTableRegionProcedure.rollbackState() at 
SplitTableRegionProcedure.java:386-388 handles this correctly:

 

case SPLIT_TABLE_REGIONS_CHECK_CLOSED_REGIONS: openParentRegion(env); // calls 
reopenRegionsForRollback break;

openParentRegion() (SplitTableRegionProcedure.java:644-648) delegates to the 
shared helper AssignmentManagerUtil.reopenRegionsForRollback() 
(AssignmentManagerUtil.java:283-290). The merge path is missing this call.
h4. Key Observations 
 * MergeTableRegionsProcedure pid=46990253 tripped checkClosedRegion at 
18:32:33.293 UTC on parent 112d9f08181e80aaae01e68c9229c3cb.
 * Rollback ran but did not re-open either parent (112d9f08… and 9e93ca76…), 
leaving both OFFLINE.
 * The parents held an xlock preventing any fresh ASSIGN procedures from making 
progress.
 * Stuck RIT lasted 48 minutes (18:32:33 → 19:21:29) on the OpenTSDB critical 
tier; only operator intervention (fresh ASSIGN procedures pid=47001645/47001646 
after HMaster failover) cleared it.

h4. Proposed Solution
{code:java}
/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/MergeTableRegionsProcedure.java
 

@@ line 287 case MERGE_TABLE_REGIONS_CHECK_CLOSED_REGIONS: 
openParentRegions(env); 
break;  {code}
 

The helper AssignmentManagerUtil.reopenRegionsForRollback() is already 
exercised by SplitTableRegionProcedure under production load, so risk is 
minimal. 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to