From 48cc24f4358540643a83cdca285022b7bc19cc5c Mon Sep 17 00:00:00 2001 From: Andrew Purtell Date: Thu, 4 Oct 2018 17:47:27 -0700 Subject: [PATCH] HBASE-21266 Not running balancer because processing dead regionservers, but empty dead rs list --- .../hadoop/hbase/master/DeadServer.java | 42 +++++++++++-------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/DeadServer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/DeadServer.java index c1b5180cb6..d9c5770197 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/DeadServer.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/DeadServer.java @@ -25,6 +25,8 @@ import org.apache.hadoop.hbase.ServerName; import org.apache.hadoop.hbase.util.EnvironmentEdgeManager; import org.apache.hadoop.hbase.util.Pair; +import com.google.common.base.Preconditions; + import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; @@ -35,6 +37,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.atomic.AtomicInteger; /** * Class to hold dead servers list and utility querying dead server list. @@ -56,12 +59,7 @@ public class DeadServer { /** * Number of dead servers currently being processed */ - private int numProcessing = 0; - - /** - * Whether a dead server is being processed currently. - */ - private boolean processing = false; + private AtomicInteger numProcessing = new AtomicInteger(); /** * A dead server that comes back alive has a different start code. The new start code should be @@ -99,7 +97,7 @@ public class DeadServer { * * @return true if any RS are being processed as dead */ - public synchronized boolean areDeadServersInProgress() { return processing; } + public synchronized boolean areDeadServersInProgress() { return numProcessing.get() > 0; } public synchronized Set copyServerNames() { Set clone = new HashSet(deadServers.size()); @@ -112,9 +110,12 @@ public class DeadServer { * @param sn the server name */ public synchronized void add(ServerName sn) { - processing = true; if (!deadServers.containsKey(sn)){ deadServers.put(sn, EnvironmentEdgeManager.currentTime()); + int n = numProcessing.incrementAndGet(); + if (LOG.isDebugEnabled()) { + LOG.debug("Added dead server " + sn + "; numProcessing=" + n); + } } } @@ -123,18 +124,22 @@ public class DeadServer { * @param sn ServerName for the dead server. */ public synchronized void notifyServer(ServerName sn) { - if (LOG.isDebugEnabled()) { LOG.debug("Started processing " + sn); } - processing = true; - numProcessing++; + if (LOG.isDebugEnabled()) { + LOG.debug("Started processing " + sn + "; numProcessing=" + numProcessing.get()); + } } + /** + * Complete processing for this dead server. + * @param sn ServerName for the dead server. + */ public synchronized void finish(ServerName sn) { - numProcessing--; - if (LOG.isDebugEnabled()) LOG.debug("Finished " + sn + "; numProcessing=" + numProcessing); - - assert numProcessing >= 0: "Number of dead servers in processing should always be non-negative"; - - if (numProcessing == 0) { processing = false; } + int n = numProcessing.decrementAndGet(); + if (LOG.isDebugEnabled()) { + LOG.debug("Finished " + sn + "; numProcessing=" + n); + } + Preconditions.checkState(n >= 0, + "Number of dead servers in processing should always be non-negative"); } public synchronized int size() { @@ -164,6 +169,9 @@ public class DeadServer { } sb.append(sn.toString()); } + sb.append(" (numProcessing="); + sb.append(numProcessing.get()); + sb.append(')'); return sb.toString(); } -- 2.19.0