You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by dd...@apache.org on 2013/09/24 23:04:24 UTC
svn commit: r1526009 - in /hbase/trunk/hbase-server/src:
main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
test/java/org/apache/hadoop/hbase/master/TestMaster.java
test/java/org/apache/hadoop/hbase/master/TestZKBasedOpenCloseRegion.java
Author: ddas
Date: Tue Sep 24 21:04:24 2013
New Revision: 1526009
URL: http://svn.apache.org/r1526009
Log:
HBASE-9642. AM ZK Workers stuck doing 100% CPU on HashMap.put
Modified:
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java
hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestZKBasedOpenCloseRegion.java
Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java?rev=1526009&r1=1526008&r2=1526009&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java Tue Sep 24 21:04:24 2013
@@ -171,15 +171,13 @@ public class AssignmentManager extends Z
private final ExecutorService executorService;
// For unit tests, keep track of calls to ClosedRegionHandler
- private Map<HRegionInfo, AtomicBoolean> closedRegionHandlerCalled =
- new HashMap<HRegionInfo, AtomicBoolean>();
+ private Map<HRegionInfo, AtomicBoolean> closedRegionHandlerCalled = null;
// For unit tests, keep track of calls to OpenedRegionHandler
- private Map<HRegionInfo, AtomicBoolean> openedRegionHandlerCalled =
- new HashMap<HRegionInfo, AtomicBoolean>();
+ private Map<HRegionInfo, AtomicBoolean> openedRegionHandlerCalled = null;
// For unit tests, keep track of calls to SplitRegionHandler
- private AtomicBoolean splitRegionHandlerCalled = new AtomicBoolean(false);
+ private AtomicBoolean splitRegionHandlerCalled = null;
//Thread pool executor service for timeout monitor
private java.util.concurrent.ExecutorService threadPoolExecutorService;
@@ -883,7 +881,7 @@ public class AssignmentManager extends Z
}
// Run handler to do the rest of the SPLIT handling.
new SplitRegionHandler(server, this, regionState.getRegion(), sn, daughters).process();
- splitRegionHandlerCalled.set(true);
+ updateSplitHandlerTracker();
break;
case RS_ZK_REGION_MERGING:
@@ -951,7 +949,7 @@ public class AssignmentManager extends Z
if (regionState != null) {
removeClosedRegion(regionState.getRegion());
new ClosedRegionHandler(server, this, regionState.getRegion()).process();
- closedRegionHandlerCalled.put(regionState.getRegion(), new AtomicBoolean(true));
+ updateClosedRegionHandlerTracker(regionState.getRegion());
}
break;
@@ -1026,7 +1024,7 @@ public class AssignmentManager extends Z
failedOpenTracker.remove(encodedName); // reset the count, if any
new OpenedRegionHandler(
server, this, regionState.getRegion(), sn, expectedVersion).process();
- openedRegionHandlerCalled.put(regionState.getRegion(), new AtomicBoolean(true));
+ updateOpenedRegionHandlerTracker(regionState.getRegion());
}
break;
@@ -1064,6 +1062,31 @@ public class AssignmentManager extends Z
return splitRegionHandlerCalled.compareAndSet(true, false);
}
+ //For unit tests only
+ void initializeHandlerTrackers() {
+ closedRegionHandlerCalled = new HashMap<HRegionInfo, AtomicBoolean>();
+ openedRegionHandlerCalled = new HashMap<HRegionInfo, AtomicBoolean>();
+ splitRegionHandlerCalled = new AtomicBoolean(false);
+ }
+
+ void updateClosedRegionHandlerTracker(HRegionInfo hri) {
+ if (closedRegionHandlerCalled != null) { //only for unit tests this is true
+ closedRegionHandlerCalled.put(hri, new AtomicBoolean(true));
+ }
+ }
+
+ void updateOpenedRegionHandlerTracker(HRegionInfo hri) {
+ if (openedRegionHandlerCalled != null) { //only for unit tests this is true
+ openedRegionHandlerCalled.put(hri, new AtomicBoolean(true));
+ }
+ }
+
+ void updateSplitHandlerTracker() {
+ if (splitRegionHandlerCalled != null) { //only for unit tests this is true
+ splitRegionHandlerCalled.set(true);
+ }
+ }
+
/**
* @return Returns true if this RegionState is splittable; i.e. the
* RegionState is currently in splitting state or pending_close or
Modified: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java?rev=1526009&r1=1526008&r2=1526009&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java (original)
+++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java Tue Sep 24 21:04:24 2013
@@ -53,6 +53,7 @@ public class TestMaster {
// Start a cluster of two regionservers.
TEST_UTIL.startMiniCluster(2);
admin = TEST_UTIL.getHBaseAdmin();
+ TEST_UTIL.getHBaseCluster().getMaster().assignmentManager.initializeHandlerTrackers();
}
@AfterClass
Modified: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestZKBasedOpenCloseRegion.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestZKBasedOpenCloseRegion.java?rev=1526009&r1=1526008&r2=1526009&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestZKBasedOpenCloseRegion.java (original)
+++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestZKBasedOpenCloseRegion.java Tue Sep 24 21:04:24 2013
@@ -80,6 +80,7 @@ public class TestZKBasedOpenCloseRegion
waitUntilAllRegionsAssigned();
addToEachStartKey(countOfRegions);
t.close();
+ TEST_UTIL.getHBaseCluster().getMaster().assignmentManager.initializeHandlerTrackers();
}
@AfterClass public static void afterAllTests() throws Exception {