You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2017/07/31 21:25:21 UTC

[3/3] hbase git commit: HBASE-18261 Created RecoverMetaProcedure and used it from ServerCrashProcedure and HMaster.finishActiveMasterInitialization().

HBASE-18261 Created RecoverMetaProcedure and used it from ServerCrashProcedure and HMaster.finishActiveMasterInitialization().

This procedure can be used from any code before accessing meta, to initialize/ recover meta

Signed-off-by: Michael Stack <st...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/a5db120e
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/a5db120e
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/a5db120e

Branch: refs/heads/master
Commit: a5db120e6090faecb680f3f1e297f78e567ba3a3
Parents: 331a6cf
Author: Umesh Agashe <ua...@cloudera.com>
Authored: Fri Jun 23 14:44:28 2017 -0700
Committer: Michael Stack <st...@apache.org>
Committed: Mon Jul 31 14:25:03 2017 -0700

----------------------------------------------------------------------
 .../hbase/procedure2/StateMachineProcedure.java |   26 +
 .../generated/MasterProcedureProtos.java        | 1514 ++++++++++++++----
 .../src/main/protobuf/MasterProcedure.proto     |   11 +
 .../org/apache/hadoop/hbase/master/HMaster.java |   39 +-
 .../hbase/master/MasterMetaBootstrap.java       |   73 +-
 .../hadoop/hbase/master/MasterServices.java     |    7 +
 .../hadoop/hbase/master/MasterWalManager.java   |    2 +-
 .../master/assignment/AssignmentManager.java    |    2 +
 .../master/procedure/RecoverMetaProcedure.java  |  253 +++
 .../master/procedure/ServerCrashProcedure.java  |   56 +-
 .../hbase/master/MockNoopMasterServices.java    |    9 +-
 .../hbase/master/TestMasterNoCluster.java       |    2 +-
 .../MasterProcedureTestingUtility.java          |   11 +-
 .../procedure/TestServerCrashProcedure.java     |   28 +-
 14 files changed, 1564 insertions(+), 469 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/a5db120e/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/StateMachineProcedure.java
----------------------------------------------------------------------
diff --git a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/StateMachineProcedure.java b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/StateMachineProcedure.java
index becd9b7..5de5066 100644
--- a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/StateMachineProcedure.java
+++ b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/StateMachineProcedure.java
@@ -59,6 +59,20 @@ public abstract class StateMachineProcedure<TEnvironment, TState>
 
   private List<Procedure<TEnvironment>> subProcList = null;
 
+  protected final int getCycles() {
+    return cycles;
+  }
+
+  /**
+   * Cycles on same state. Good for figuring if we are stuck.
+   */
+  private int cycles = 0;
+
+  /**
+   * Ordinal of the previous state. So we can tell if we are progressing or not.
+   */
+  private int previousState;
+
   protected enum Flow {
     HAS_MORE_STATE,
     NO_MORE_STATE,
@@ -152,6 +166,18 @@ public abstract class StateMachineProcedure<TEnvironment, TState>
       if (stateCount == 0) {
         setNextState(getStateId(state));
       }
+
+      if (LOG.isTraceEnabled()) {
+        LOG.trace(state  + " " + this + "; cycles=" + this.cycles);
+      }
+      // Keep running count of cycles
+      if (getStateId(state) != this.previousState) {
+        this.previousState = getStateId(state);
+        this.cycles = 0;
+      } else {
+        this.cycles++;
+      }
+
       stateFlow = executeFromState(env, state);
       if (!hasMoreState()) setNextState(EOF_STATE);
       if (subProcList != null && !subProcList.isEmpty()) {