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;

Reply via email to