Repository: hbase Updated Branches: refs/heads/branch-1 eb9978cc3 -> d0a2a0b14
HBASE-12901 Possible deadlock while onlining a region and get region plan for other region run parallel (Rajeshbabu Chintaguntla) Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/d0a2a0b1 Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/d0a2a0b1 Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/d0a2a0b1 Branch: refs/heads/branch-1 Commit: d0a2a0b145ccb2c071c9f8dc09d32aac8992e651 Parents: eb9978c Author: Enis Soztutar <e...@apache.org> Authored: Sat Jan 24 18:37:35 2015 -0800 Committer: Enis Soztutar <e...@apache.org> Committed: Sat Jan 24 18:37:35 2015 -0800 ---------------------------------------------------------------------- .../hadoop/hbase/master/AssignmentManager.java | 32 ++++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/d0a2a0b1/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 b95b50c..359e8ea 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 @@ -29,7 +29,6 @@ import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import java.util.NavigableMap; import java.util.Random; import java.util.Set; @@ -2371,8 +2370,17 @@ public class AssignmentManager extends ZooKeeperListener { || existingPlan.getDestination() == null || !destServers.contains(existingPlan.getDestination())) { newPlan = true; - randomPlan = new RegionPlan(region, null, - balancer.randomAssignment(region, destServers)); + } + } + + if (newPlan) { + ServerName destination = balancer.randomAssignment(region, destServers); + if (destination == null) { + LOG.warn("Can't find a destination for " + encodedName); + return null; + } + synchronized (this.regionPlans) { + randomPlan = new RegionPlan(region, null, destination); if (!region.isMetaTable() && shouldAssignRegionsWithFavoredNodes) { List<HRegionInfo> regions = new ArrayList<HRegionInfo>(1); regions.add(region); @@ -2384,20 +2392,12 @@ public class AssignmentManager extends ZooKeeperListener { } this.regionPlans.put(encodedName, randomPlan); } + LOG.debug("No previous transition plan found (or ignoring " + "an existing plan) for " + + region.getRegionNameAsString() + "; generated random plan=" + randomPlan + "; " + + destServers.size() + " (online=" + serverManager.getOnlineServers().size() + + ") available servers, forceNewPlan=" + forceNewPlan); + return randomPlan; } - - if (newPlan) { - if (randomPlan.getDestination() == null) { - LOG.warn("Can't find a destination for " + encodedName); - return null; - } - LOG.debug("No previous transition plan found (or ignoring " + - "an existing plan) for " + region.getRegionNameAsString() + - "; generated random plan=" + randomPlan + "; " + destServers.size() + - " (online=" + serverManager.getOnlineServers().size() + - ") available servers, forceNewPlan=" + forceNewPlan); - return randomPlan; - } LOG.debug("Using pre-existing plan for " + region.getRegionNameAsString() + "; plan=" + existingPlan); return existingPlan;