Repository: hbase
Updated Branches:
  refs/heads/0.98 ef9116336 -> 1ed735458
  refs/heads/branch-1 e01ee2fd1 -> e54826434
  refs/heads/branch-1.1 8012383d3 -> a268d4cf5
  refs/heads/branch-1.2 d6626eb6f -> c1701571d
  refs/heads/branch-1.3 66fbe9945 -> ca11c5870


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/1ed73545
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/1ed73545
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/1ed73545

Branch: refs/heads/0.98
Commit: 1ed735458e5e951cf62067c008219c1fdc784f0a
Parents: ef91163
Author: Andrew Purtell <apurt...@apache.org>
Authored: Mon Nov 14 12:28:19 2016 -0800
Committer: Andrew Purtell <apurt...@apache.org>
Committed: Mon Nov 14 17:14:24 2016 -0800

----------------------------------------------------------------------
 .../hadoop/hbase/master/AssignmentManager.java  | 36 +++++++++++++++-----
 1 file changed, 27 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/1ed73545/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 475d9ae..6100eda 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
@@ -3861,17 +3861,31 @@ 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 (isTableDisabledOrDisabling(p.getTable())) {
-        invokeUnAssign(a);
-        invokeUnAssign(b);
-      }
+    if (isTableDisabledOrDisabling(p.getTable())) {
+      invokeUnAssign(a);
+      invokeUnAssign(b);
     }
+
     return null;
   }
 
@@ -4249,11 +4263,15 @@ public class AssignmentManager extends 
ZooKeeperListener {
     case READY_TO_MERGE:
     case MERGE_PONR:
     case MERGED:
-    case MERGE_REVERTED:
       errorMsg = onRegionMerge(serverName, code, hri,
         HRegionInfo.convert(transition.getRegionInfo(1)),
         HRegionInfo.convert(transition.getRegionInfo(2)));
       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;

Reply via email to