You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ap...@apache.org on 2016/11/15 01:22:38 UTC

[2/5] hbase git commit: HBASE-17044 Fix merge failed before creating merged region leaves meta inconsistent

HBASE-17044 Fix merge failed before creating merged region leaves meta inconsistent


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

Branch: refs/heads/branch-1
Commit: e54826434e77637e10cac921bb7bf0d8cd8009f5
Parents: e01ee2f
Author: Andrew Purtell <ap...@apache.org>
Authored: Mon Nov 14 12:28:19 2016 -0800
Committer: Andrew Purtell <ap...@apache.org>
Committed: Mon Nov 14 17:14:48 2016 -0800

----------------------------------------------------------------------
 .../hadoop/hbase/master/AssignmentManager.java  | 38 ++++++++++++++------
 1 file changed, 28 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/e5482643/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
index 73b8a5e..72ca98c 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
@@ -3908,18 +3908,32 @@ public class AssignmentManager extends ZooKeeperListener {
         LOG.info("Failed to record merged region " + p.getShortNameToLog());
         return "Failed to record the merging in meta";
       }
-    } else {
-      mergingRegions.remove(encodedName);
-      regionOnline(a, sn);
-      regionOnline(b, sn);
+    }
+    return null;
+  }
+
+  private String onRegionMergeReverted(ServerName sn, TransitionCode code,
+	      final HRegionInfo p, final HRegionInfo a, final HRegionInfo b) {
+    RegionState rs_p = regionStates.getRegionState(p);
+    String encodedName = p.getEncodedName();
+    mergingRegions.remove(encodedName);
+
+    // Always bring the children back online. Even if they are not offline
+    // there's no harm in making them online again.
+    regionOnline(a, sn);
+    regionOnline(b, sn);
+
+    // Only offline the merging region if it is known to exist.
+    if (rs_p != null) {
       regionOffline(p);
+    }
 
-      if (getTableStateManager().isTableState(p.getTable(),
-          ZooKeeperProtos.Table.State.DISABLED, ZooKeeperProtos.Table.State.DISABLING)) {
-        invokeUnAssign(a);
-        invokeUnAssign(b);
-      }
+    if (getTableStateManager().isTableState(p.getTable(),
+        ZooKeeperProtos.Table.State.DISABLED, ZooKeeperProtos.Table.State.DISABLING)) {
+      invokeUnAssign(a);
+      invokeUnAssign(b);
     }
+
     return null;
   }
 
@@ -4458,7 +4472,6 @@ public class AssignmentManager extends ZooKeeperListener {
       break;
     case MERGE_PONR:
     case MERGED:
-    case MERGE_REVERTED:
       errorMsg = onRegionMerge(serverName, code, hri,
         HRegionInfo.convert(transition.getRegionInfo(1)),
         HRegionInfo.convert(transition.getRegionInfo(2)));
@@ -4470,6 +4483,11 @@ public class AssignmentManager extends ZooKeeperListener {
         }
       }
       break;
+    case MERGE_REVERTED:
+        errorMsg = onRegionMergeReverted(serverName, code, hri,
+                HRegionInfo.convert(transition.getRegionInfo(1)),
+                HRegionInfo.convert(transition.getRegionInfo(2)));
+      break;
 
     default:
       errorMsg = "Unexpected transition code " + code;