[ 
https://issues.apache.org/jira/browse/HBASE-19851?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16366272#comment-16366272
 ] 

stack commented on HBASE-19851:
-------------------------------

I saw another version of this issue in nightly. We have reached one of the 
states below:

{code}
      case MERGE_TABLE_REGIONS_POST_OPERATION:
      case MERGE_TABLE_REGIONS_OPEN_MERGED_REGION:
      case MERGE_TABLE_REGIONS_POST_MERGE_COMMIT_OPERATION:
      case MERGE_TABLE_REGIONS_UPDATE_META:
        String msg = this + " We are in the " + state + " state."
            + " It is complicated to rollback the merge operation that region 
server is working on."
            + " Rollback is not supported and we should let the merge operation 
to complete";
        LOG.warn(msg);
        // PONR
        throw new UnsupportedOperationException(this + " unhandled state=" + 
state);
{code}

We throw the UnsupportedOperationException which then tickles a CODE-BUG 
warning in the framework which is its way of saying not-supposed-to-happen and 
it is right; the merge procedure is not complete.



{code}
2018-02-15 16:18:58,492 WARN  [PEWorker-1] 
assignment.MergeTableRegionsProcedure(311): Failed rollback attempt step 
MERGE_TABLE_REGIONS_UPDATE_META for merging the regions 
[dcd17e940fbb453cf6df1cee87b0cec7, 2b03bbfd418c9b3533bc2bb3cf6ce748] in table 
testRollbackAndDoubleExecution
java.lang.UnsupportedOperationException: pid=46, 
state=FAILED:MERGE_TABLE_REGIONS_UPDATE_META, 
exception=org.apache.hadoop.hbase.procedure2.ProcedureAbortedException via 
MergeTableRegionsProcedure:org.apache.hadoop.hbase.procedure2.ProcedureAbortedException:
 abort requested; MergeTableRegionsProcedure 
table=testRollbackAndDoubleExecution, 
regions=[dcd17e940fbb453cf6df1cee87b0cec7, 2b03bbfd418c9b3533bc2bb3cf6ce748], 
forcibly=false unhandled state=MERGE_TABLE_REGIONS_UPDATE_META
  at 
org.apache.hadoop.hbase.master.assignment.MergeTableRegionsProcedure.rollbackState(MergeTableRegionsProcedure.java:291)
  at 
org.apache.hadoop.hbase.master.assignment.MergeTableRegionsProcedure.rollbackState(MergeTableRegionsProcedure.java:78)
  at 
org.apache.hadoop.hbase.procedure2.StateMachineProcedure.rollback(StateMachineProcedure.java:199)
  at org.apache.hadoop.hbase.procedure2.Procedure.doRollback(Procedure.java:859)
  at 
org.apache.hadoop.hbase.procedure2.ProcedureExecutor.executeRollback(ProcedureExecutor.java:1356)
  at 
org.apache.hadoop.hbase.procedure2.ProcedureExecutor.executeRollback(ProcedureExecutor.java:1312)
  at 
org.apache.hadoop.hbase.procedure2.ProcedureExecutor.executeProcedure(ProcedureExecutor.java:1181)
  at 
org.apache.hadoop.hbase.procedure2.ProcedureExecutor.access$800(ProcedureExecutor.java:78)
  at 
org.apache.hadoop.hbase.procedure2.ProcedureExecutor$WorkerThread.run(ProcedureExecutor.java:1734)
2018-02-15 16:18:58,497 ERROR [PEWorker-1] helpers.MarkerIgnoringBase(159): 
CODE-BUG: Uncaught runtime exception for pid=46, 
state=FAILED:MERGE_TABLE_REGIONS_UPDATE_META, 
exception=org.apache.hadoop.hbase.procedure2.ProcedureAbortedException via 
MergeTableRegionsProcedure:org.apache.hadoop.hbase.procedure2.ProcedureAbortedException:
 abort requested; MergeTableRegionsProcedure 
table=testRollbackAndDoubleExecution, 
regions=[dcd17e940fbb453cf6df1cee87b0cec7, 2b03bbfd418c9b3533bc2bb3cf6ce748], 
forcibly=false
java.lang.UnsupportedOperationException: pid=46, 
state=FAILED:MERGE_TABLE_REGIONS_UPDATE_META, 
exception=org.apache.hadoop.hbase.procedure2.ProcedureAbortedException via 
MergeTableRegionsProcedure:org.apache.hadoop.hbase.procedure2.ProcedureAbortedException:
 abort requested; MergeTableRegionsProcedure 
table=testRollbackAndDoubleExecution, 
regions=[dcd17e940fbb453cf6df1cee87b0cec7, 2b03bbfd418c9b3533bc2bb3cf6ce748], 
forcibly=false unhandled state=MERGE_TABLE_REGIONS_UPDATE_META
  at 
org.apache.hadoop.hbase.master.assignment.MergeTableRegionsProcedure.rollbackState(MergeTableRegionsProcedure.java:291)
  at 
org.apache.hadoop.hbase.master.assignment.MergeTableRegionsProcedure.rollbackState(MergeTableRegionsProcedure.java:78)
  at 
org.apache.hadoop.hbase.procedure2.StateMachineProcedure.rollback(StateMachineProcedure.java:199)
  at org.apache.hadoop.hbase.procedure2.Procedure.doRollback(Procedure.java:859)
  at 
org.apache.hadoop.hbase.procedure2.ProcedureExecutor.executeRollback(ProcedureExecutor.java:1356)
  at 
org.apache.hadoop.hbase.procedure2.ProcedureExecutor.executeRollback(ProcedureExecutor.java:1312)
  at 
org.apache.hadoop.hbase.procedure2.ProcedureExecutor.executeProcedure(ProcedureExecutor.java:1181)
  at 
org.apache.hadoop.hbase.procedure2.ProcedureExecutor.access$800(ProcedureExecutor.java:78)
  at 
org.apache.hadoop.hbase.procedure2.ProcedureExecutor$WorkerThread.run(ProcedureExecutor.java:1734)
{code}


> ProcV2 framework's rollback() needs to maintain stack like execute()
> --------------------------------------------------------------------
>
>                 Key: HBASE-19851
>                 URL: https://issues.apache.org/jira/browse/HBASE-19851
>             Project: HBase
>          Issue Type: Improvement
>          Components: proc-v2
>    Affects Versions: 2.0.0-beta-1
>            Reporter: Umesh Agashe
>            Priority: Major
>             Fix For: 2.0.0
>
>
> Refer to HBASE-19839 and detailed description there. Bug showed up as a flaky 
> test TestMergeTableRegionsProcedure.testRollbackAndDoubleExecution(). In 
> short, when rollback() is called after step 5 
> (MERGE_TABLE_REGIONS_CLOSE_REGIONS), rollback of the procedure tries to 
> reassign two regions that are to be merged. It spawns 2 AssignProcedures and 
> don't wait on them to finish. Rollback should have ability to have 
> sub-procedures and separate proc stack.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to