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/05/14 04:37:58 UTC

hbase git commit: Need to check server when doing ServerCrashProcedure; we had it but I removed it a few patches back... makes for SCPs stamping on each otehr failing ongoing assigns

Repository: hbase
Updated Branches:
  refs/heads/HBASE-14614 61ed02691 -> d43df0ed6


Need to check server when doing ServerCrashProcedure; we had it but I removed it a few patches back... makes for SCPs stamping on each otehr failing ongoing assigns


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

Branch: refs/heads/HBASE-14614
Commit: d43df0ed653b627e3bf1e1f40aa4aac1ae89f300
Parents: 61ed026
Author: Michael Stack <st...@apache.org>
Authored: Sat May 13 21:37:52 2017 -0700
Committer: Michael Stack <st...@apache.org>
Committed: Sat May 13 21:37:52 2017 -0700

----------------------------------------------------------------------
 .../hbase/master/assignment/AssignProcedure.java      |  8 ++++++++
 .../master/assignment/RegionTransitionProcedure.java  |  6 ++++++
 .../hbase/master/assignment/UnassignProcedure.java    |  5 +++++
 .../hbase/master/procedure/ServerCrashException.java  |  7 +++++--
 .../hbase/master/procedure/ServerCrashProcedure.java  | 14 ++++++++++++--
 5 files changed, 36 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/d43df0ed/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignProcedure.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignProcedure.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignProcedure.java
index 36f6f08..42ece16 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignProcedure.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignProcedure.java
@@ -327,4 +327,12 @@ public class AssignProcedure extends RegionTransitionProcedure {
     super.toStringClassDetails(sb);
     if (this.targetServer != null) sb.append(", target=").append(this.targetServer);
   }
+
+  @Override
+  public ServerName getServer(final MasterProcedureEnv env) {
+    RegionStateNode node =
+        env.getAssignmentManager().getRegionStates().getRegionNode(this.getRegionInfo());
+    if (node == null) return null;
+    return node.getRegionLocation();
+  }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/hbase/blob/d43df0ed/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.java
index 6dc809b..49124ea 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.java
@@ -372,4 +372,10 @@ public abstract class RegionTransitionProcedure
     // the client does not know about this procedure.
     return false;
   }
+
+  /**
+   * Used by ServerCrashProcedure to see if this Assign/Unassign needs processing.
+   * @return ServerName the Assign or Unassign is going against.
+   */
+  public abstract ServerName getServer(final MasterProcedureEnv env);
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/hbase/blob/d43df0ed/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.java
index a82a2f5..126718a 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.java
@@ -239,4 +239,9 @@ public class UnassignProcedure extends RegionTransitionProcedure {
     super.toStringClassDetails(sb);
     sb.append(", server=").append(this.destinationServer);
   }
+
+  @Override
+  public ServerName getServer(final MasterProcedureEnv env) {
+    return this.destinationServer;
+  }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/hbase/blob/d43df0ed/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ServerCrashException.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ServerCrashException.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ServerCrashException.java
index dd1874b..26aba9e 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ServerCrashException.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ServerCrashException.java
@@ -18,6 +18,7 @@
 package org.apache.hadoop.hbase.master.procedure;
 
 import org.apache.hadoop.hbase.HBaseIOException;
+import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.classification.InterfaceAudience;
 
 /**
@@ -28,16 +29,18 @@ import org.apache.hadoop.hbase.classification.InterfaceAudience;
 @SuppressWarnings("serial")
 public class ServerCrashException extends HBaseIOException {
   private final long procId;
+  private final ServerName serverName;
 
   /**
    * @param server The server that crashed.
    */
-  public ServerCrashException(long procId) {
+  public ServerCrashException(long procId, ServerName serverName) {
     this.procId = procId;
+    this.serverName = serverName;
   }
 
   @Override
   public String getMessage() {
-    return "Caused by ServerCrashProcedure pid=" + this.procId;
+    return "ServerCrashProcedure pid=" + this.procId + ", server=" + this.serverName;
   }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/hbase/blob/d43df0ed/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.java
index 3bd2c9e..71c6b89 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.java
@@ -413,11 +413,21 @@ implements ServerProcedureInterface {
       final HRegionInfo hri = it.next();
       RegionTransitionProcedure rtp = am.getRegionStates().getRegionTransitionProcedure(hri);
       if (rtp == null) continue;
+      // Make sure the RIT is against this crashed server. In the case where there are many
+      // processings of a crashed server -- backed up for whatever reason (slow WAL split) --
+      // then a previous SCP may have already failed an assign, etc., and it may have a new
+      // location target; DO NOT fail these else we make for assign flux.
+      ServerName rtpServerName = rtp.getServer(env);
+      if (rtpServerName == null) {
+        LOG.warn("RIT with ServerName null! " + rtp);
+        continue;
+      }
+      if (!rtpServerName.equals(this.serverName)) continue;
       LOG.info("pid=" + getProcId() + " found RIT " + rtp + "; " +
-      rtp.getRegionState(env).toShortString());
+        rtp.getRegionState(env).toShortString());
       // Notify RIT on server crash.
       if (sce == null) {
-        sce = new ServerCrashException(getProcId());
+        sce = new ServerCrashException(getProcId(), getServerName());
       }
       rtp.remoteCallFailed(env, this.serverName, sce);
       if (rtp instanceof AssignProcedure) {