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:39 UTC
[3/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/a268d4cf
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/a268d4cf
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/a268d4cf
Branch: refs/heads/branch-1.1
Commit: a268d4cf5a5ed5ea298645d564e2ad96f82c2953
Parents: 8012383
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:49 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/a268d4cf/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 0d68382..d2e6d02 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
@@ -3846,18 +3846,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;
}
@@ -4378,7 +4392,6 @@ 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)));
@@ -4390,6 +4403,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;