HBASE-1414 Add server status logging chore to ServerManager
git-svn-id: https://svn.apache.org/repos/asf/hadoop/hbase/trunk@774152 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
bf9a5aeb19
commit
8f472ec416
|
@ -229,7 +229,9 @@ Release 0.20.0 - Unreleased
|
||||||
HBASE-1405 Threads.shutdown has unnecessary branch
|
HBASE-1405 Threads.shutdown has unnecessary branch
|
||||||
HBASE-1407 Changing internal structure of ImmutableBytesWritable
|
HBASE-1407 Changing internal structure of ImmutableBytesWritable
|
||||||
contructor (Erik Holstad via Stack)
|
contructor (Erik Holstad via Stack)
|
||||||
HBASE-1345 Remove distributed mode from MiniZooKeeper (Nitay Joffe via Stack)
|
HBASE-1345 Remove distributed mode from MiniZooKeeper (Nitay Joffe via
|
||||||
|
Stack)
|
||||||
|
HBASE-1414 Add server status logging chore to ServerManager
|
||||||
|
|
||||||
OPTIMIZATIONS
|
OPTIMIZATIONS
|
||||||
|
|
||||||
|
|
|
@ -27,12 +27,14 @@ import java.util.Set;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
|
import org.apache.hadoop.hbase.Chore;
|
||||||
import org.apache.hadoop.hbase.HServerInfo;
|
import org.apache.hadoop.hbase.HServerInfo;
|
||||||
import org.apache.hadoop.hbase.HServerLoad;
|
import org.apache.hadoop.hbase.HServerLoad;
|
||||||
import org.apache.hadoop.hbase.HServerAddress;
|
import org.apache.hadoop.hbase.HServerAddress;
|
||||||
|
@ -93,25 +95,47 @@ class ServerManager implements HConstants {
|
||||||
|
|
||||||
protected HMaster master;
|
protected HMaster master;
|
||||||
|
|
||||||
// Last time we logged average load.
|
|
||||||
private volatile long lastLogOfAverageLaod = 0;
|
|
||||||
private final long loggingPeriodForAverageLoad;
|
|
||||||
|
|
||||||
/* The regionserver will not be assigned or asked close regions if it
|
/* The regionserver will not be assigned or asked close regions if it
|
||||||
* is currently opening >= this many regions.
|
* is currently opening >= this many regions.
|
||||||
*/
|
*/
|
||||||
private final int nobalancingCount;
|
private final int nobalancingCount;
|
||||||
|
|
||||||
|
class ServerMonitor extends Chore {
|
||||||
|
|
||||||
|
ServerMonitor(final int period, final AtomicBoolean stop) {
|
||||||
|
super(period, stop);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void chore() {
|
||||||
|
int numServers = serverAddressToServerInfo.size();
|
||||||
|
int numDeadServers = deadServers.size();
|
||||||
|
double averageLoad = getAverageLoad();
|
||||||
|
LOG.info(numServers + " region servers, " + numDeadServers +
|
||||||
|
" dead, average load " + averageLoad);
|
||||||
|
if (numDeadServers > 0) {
|
||||||
|
LOG.info("DEAD [");
|
||||||
|
for (String server: deadServers) {
|
||||||
|
LOG.info(" " + server);
|
||||||
|
}
|
||||||
|
LOG.info("]");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
ServerMonitor serverMonitorThread;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param master
|
* @param master
|
||||||
*/
|
*/
|
||||||
public ServerManager(HMaster master) {
|
public ServerManager(HMaster master) {
|
||||||
this.master = master;
|
this.master = master;
|
||||||
zooKeeperWrapper = master.getZooKeeperWrapper();
|
zooKeeperWrapper = master.getZooKeeperWrapper();
|
||||||
this.loggingPeriodForAverageLoad = master.getConfiguration().
|
|
||||||
getLong("hbase.master.avgload.logging.period", 60000);
|
|
||||||
this.nobalancingCount = master.getConfiguration().
|
this.nobalancingCount = master.getConfiguration().
|
||||||
getInt("hbase.regions.nobalancing.count", 4);
|
getInt("hbase.regions.nobalancing.count", 4);
|
||||||
|
serverMonitorThread = new ServerMonitor(master.metaRescanInterval,
|
||||||
|
master.shutdownRequested);
|
||||||
|
serverMonitorThread.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -621,14 +645,6 @@ class ServerManager implements HConstants {
|
||||||
totalLoad += load.getNumberOfRegions();
|
totalLoad += load.getNumberOfRegions();
|
||||||
}
|
}
|
||||||
averageLoad = Math.ceil((double)totalLoad / (double)numServers);
|
averageLoad = Math.ceil((double)totalLoad / (double)numServers);
|
||||||
// Only log on a period, not on every invocation of this method.
|
|
||||||
long now = System.currentTimeMillis();
|
|
||||||
if (LOG.isDebugEnabled() &&
|
|
||||||
(now > (this.loggingPeriodForAverageLoad + this.lastLogOfAverageLaod))) {
|
|
||||||
LOG.debug("Total Load: " + totalLoad + ", Num Servers: " + numServers
|
|
||||||
+ ", Avg Load: " + averageLoad);
|
|
||||||
this.lastLogOfAverageLaod = now;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return averageLoad;
|
return averageLoad;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue