From d0a457a5d20cc430eb57482f86555b1b63119f45 Mon Sep 17 00:00:00 2001 From: Joseph Hwang Date: Fri, 29 Jul 2016 13:21:50 -0700 Subject: [PATCH] Addendum HBASE-16209 Added in a ExponentialBackOffPolicy so that we spread out the timing of open region retries in AssignmentManager. --- .../hadoop/hbase/master/AssignmentManager.java | 27 ++++++++++++++-------- .../hbase/master/handler/ClosedRegionHandler.java | 2 +- 2 files changed, 18 insertions(+), 11 deletions(-) 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 73b8a5e..d045da6 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 @@ -91,6 +91,7 @@ import org.apache.hadoop.hbase.master.handler.OpenedRegionHandler; import org.apache.hadoop.hbase.protobuf.generated.RegionServerStatusProtos.RegionStateTransition; import org.apache.hadoop.hbase.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode; import org.apache.hadoop.hbase.protobuf.generated.ZooKeeperProtos; +import org.apache.hadoop.hbase.regionserver.HRegion; import org.apache.hadoop.hbase.regionserver.RegionAlreadyInTransitionException; import org.apache.hadoop.hbase.regionserver.RegionOpeningState; import org.apache.hadoop.hbase.regionserver.RegionServerAbortedException; @@ -3416,15 +3417,24 @@ public class AssignmentManager extends ZooKeeperListener { threadPoolExecutorService.submit(new AssignCallable(this, regionInfo, newPlan)); } - public void invokeAssignLater(HRegionInfo regionInfo, long sleepMillis) { - scheduledThreadPoolExecutor.schedule(new DelayedAssignCallable( - new AssignCallable(this, regionInfo, true)), sleepMillis, TimeUnit.MILLISECONDS); + public void invokeAssignLater(HRegionInfo regionInfo, boolean forceNewPlan, long sleepMillis) { + scheduledThreadPoolExecutor.schedule(new DelayedAssignCallable(new AssignCallable(this, + regionInfo, forceNewPlan)), + sleepMillis, TimeUnit.MILLISECONDS); } - public void invokeAssignLaterOnFailure(HRegionInfo regionInfo) { + public void invokeAssignLaterOnFailure(HRegionInfo regionInfo, boolean forceNewPlan) { long sleepTime = backoffPolicy.getBackoffTime(retryConfig, - failedOpenTracker.get(regionInfo.getEncodedName()).get()); - invokeAssignLater(regionInfo, sleepTime); + getRetrySleepTime(regionInfo.getEncodedName())); + invokeAssignLater(regionInfo, forceNewPlan, sleepTime); + } + + private int getRetrySleepTime(String regionName) { + if (failedOpenTracker.containsKey(regionName)) { + return failedOpenTracker.get(regionName).get(); + } else { + return 0; + } } void invokeUnAssign(HRegionInfo regionInfo) { @@ -3738,10 +3748,7 @@ public class AssignmentManager extends ZooKeeperListener { } catch (HBaseIOException e) { LOG.warn("Failed to get region plan", e); } - // Have the current thread sleep a bit before resubmitting the RPC request - long sleepTime = backoffPolicy.getBackoffTime(retryConfig, - failedOpenTracker.get(encodedName).get()); - invokeAssignLater(hri, sleepTime); + invokeAssignLaterOnFailure(hri, false); } } } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/ClosedRegionHandler.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/ClosedRegionHandler.java index 277ad64..b9192e2 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/ClosedRegionHandler.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/ClosedRegionHandler.java @@ -103,6 +103,6 @@ public class ClosedRegionHandler extends EventHandler implements TotesHRegionInf regionInfo, RegionState.State.CLOSED); // This below has to do w/ online enable/disable of a table assignmentManager.removeClosedRegion(regionInfo); - assignmentManager.invokeAssign(regionInfo, false); + assignmentManager.invokeAssignLaterOnFailure(regionInfo, false); } } -- 2.8.0-rc2