Repository: hbase Updated Branches: refs/heads/master 62c84115e -> b972839ca
HBASE-16844 Procedure V2: DispatchMergingRegionsProcedure to use base class StateMachineProcedure for abort and rollback (Stephen Yuan Jiang) Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/b972839c Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/b972839c Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/b972839c Branch: refs/heads/master Commit: b972839ca159dc0f873a63e389b898270bf65a9b Parents: 62c8411 Author: Stephen Yuan Jiang <syuanjiang...@gmail.com> Authored: Fri Oct 14 14:09:35 2016 -0700 Committer: Stephen Yuan Jiang <syuanjiang...@gmail.com> Committed: Fri Oct 14 14:09:35 2016 -0700 ---------------------------------------------------------------------- .../org/apache/hadoop/hbase/client/Admin.java | 2 +- .../DispatchMergingRegionsProcedure.java | 25 ++++++++++---------- 2 files changed, 14 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/b972839c/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java ---------------------------------------------------------------------- diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java index 0f66834..34c00ce 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java @@ -915,7 +915,7 @@ public interface Admin extends Abortable, Closeable { * two adjacent regions * @throws IOException */ - public Future<Void> mergeRegionsAsync( + Future<Void> mergeRegionsAsync( final byte[] nameOfRegionA, final byte[] nameOfRegionB, final boolean forcible) throws IOException; http://git-wip-us.apache.org/repos/asf/hbase/blob/b972839c/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/DispatchMergingRegionsProcedure.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/DispatchMergingRegionsProcedure.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/DispatchMergingRegionsProcedure.java index 056c0f8..b1fd7ea 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/DispatchMergingRegionsProcedure.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/DispatchMergingRegionsProcedure.java @@ -153,13 +153,13 @@ public class DispatchMergingRegionsProcedure try { switch (state) { case DISPATCH_MERGING_REGIONS_POST_OPERATION: - break; // nothing to rollback case DISPATCH_MERGING_REGIONS_DO_MERGE_IN_RS: 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); - break; + // PONR + throw new UnsupportedOperationException(this + " unhandled state=" + state); case DISPATCH_MERGING_REGIONS_MOVE_REGION_TO_SAME_RS: break; // nothing to rollback case DISPATCH_MERGING_REGIONS_PRE_OPERATION: @@ -193,18 +193,19 @@ public class DispatchMergingRegionsProcedure return DispatchMergingRegionsState.DISPATCH_MERGING_REGIONS_PREPARE; } + /* + * Check whether we are in the state that can be rollback + */ @Override - protected void setNextState(DispatchMergingRegionsState state) { - if (aborted.get()) { - setAbortFailure("merge-table-regions", "abort requested"); - } else { - super.setNextState(state); + protected boolean isRollbackSupported(final DispatchMergingRegionsState state) { + switch (state) { + case DISPATCH_MERGING_REGIONS_POST_OPERATION: + case DISPATCH_MERGING_REGIONS_DO_MERGE_IN_RS: + // It is not safe to rollback if we reach to these states. + return false; + default: + break; } - } - - @Override - public boolean abort(final MasterProcedureEnv env) { - aborted.set(true); return true; }