HBASE-4568 Make zk dump jsp response faster
git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1183166 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
8d8dc87d0d
commit
fc5c533c59
|
@ -618,6 +618,7 @@ Release 0.92.0 - Unreleased
|
|||
and CF config (Mikhail Bautin)
|
||||
HBASE-4558 Refactor TestOpenedRegionHandler and TestOpenRegionHandler.(Ram)
|
||||
HBASE-4558 Addendum for TestMasterFailover (Ram) - Breaks the build
|
||||
HBASE-4568 Make zk dump jsp response faster
|
||||
|
||||
|
||||
TASKS
|
||||
|
|
|
@ -21,7 +21,11 @@ package org.apache.hadoop.hbase.util;
|
|||
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
public class RetryCounter {
|
||||
private static final Log LOG = LogFactory.getLog(RetryCounter.class);
|
||||
private final int maxRetries;
|
||||
private int retriesRemaining;
|
||||
private final int retryIntervalMillis;
|
||||
|
@ -39,8 +43,16 @@ public class RetryCounter {
|
|||
return maxRetries;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sleep for a exponentially back off time
|
||||
* @throws InterruptedException
|
||||
*/
|
||||
public void sleepUntilNextRetry() throws InterruptedException {
|
||||
timeUnit.sleep(retryIntervalMillis);
|
||||
int attempts = getAttemptTimes();
|
||||
long sleepTime = (long) (retryIntervalMillis * Math.pow(2, attempts));
|
||||
LOG.info("The " + attempts + " times to retry after sleeping " + sleepTime
|
||||
+ " ms");
|
||||
timeUnit.sleep(sleepTime);
|
||||
}
|
||||
|
||||
public boolean shouldRetry() {
|
||||
|
|
|
@ -132,8 +132,6 @@ public class RecoverableZooKeeper {
|
|||
throw e;
|
||||
}
|
||||
}
|
||||
LOG.info("The "+retryCounter.getAttemptTimes()+" times to retry " +
|
||||
"ZooKeeper after sleeping "+retryIntervalMillis+" ms");
|
||||
retryCounter.sleepUntilNextRetry();
|
||||
retryCounter.useRetry();
|
||||
isRetry = true;
|
||||
|
@ -170,8 +168,6 @@ public class RecoverableZooKeeper {
|
|||
throw e;
|
||||
}
|
||||
}
|
||||
LOG.info("The "+retryCounter.getAttemptTimes()+" times to retry " +
|
||||
"ZooKeeper after sleeping "+retryIntervalMillis+" ms");
|
||||
retryCounter.sleepUntilNextRetry();
|
||||
retryCounter.useRetry();
|
||||
}
|
||||
|
@ -207,8 +203,6 @@ public class RecoverableZooKeeper {
|
|||
throw e;
|
||||
}
|
||||
}
|
||||
LOG.info("The "+retryCounter.getAttemptTimes()+" times to retry " +
|
||||
"ZooKeeper after sleeping "+retryIntervalMillis+" ms");
|
||||
retryCounter.sleepUntilNextRetry();
|
||||
retryCounter.useRetry();
|
||||
}
|
||||
|
@ -244,8 +238,6 @@ public class RecoverableZooKeeper {
|
|||
throw e;
|
||||
}
|
||||
}
|
||||
LOG.info("The "+retryCounter.getAttemptTimes()+" times to retry " +
|
||||
"ZooKeeper after sleeping "+retryIntervalMillis+" ms");
|
||||
retryCounter.sleepUntilNextRetry();
|
||||
retryCounter.useRetry();
|
||||
}
|
||||
|
@ -281,8 +273,6 @@ public class RecoverableZooKeeper {
|
|||
throw e;
|
||||
}
|
||||
}
|
||||
LOG.info("The "+retryCounter.getAttemptTimes()+" times to retry " +
|
||||
"ZooKeeper after sleeping "+retryIntervalMillis+" ms");
|
||||
retryCounter.sleepUntilNextRetry();
|
||||
retryCounter.useRetry();
|
||||
}
|
||||
|
@ -319,9 +309,7 @@ public class RecoverableZooKeeper {
|
|||
default:
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
LOG.info("The "+retryCounter.getAttemptTimes()+" times to retry " +
|
||||
"ZooKeeper after sleeping "+retryIntervalMillis+" ms");
|
||||
}
|
||||
retryCounter.sleepUntilNextRetry();
|
||||
retryCounter.useRetry();
|
||||
}
|
||||
|
@ -359,8 +347,6 @@ public class RecoverableZooKeeper {
|
|||
throw e;
|
||||
}
|
||||
}
|
||||
LOG.info("The "+retryCounter.getAttemptTimes()+" times to retry " +
|
||||
"ZooKeeper after sleeping "+retryIntervalMillis+" ms");
|
||||
retryCounter.sleepUntilNextRetry();
|
||||
retryCounter.useRetry();
|
||||
}
|
||||
|
@ -419,8 +405,6 @@ public class RecoverableZooKeeper {
|
|||
throw e;
|
||||
}
|
||||
}
|
||||
LOG.info("The "+retryCounter.getAttemptTimes()+" times to retry " +
|
||||
"ZooKeeper after sleeping "+retryIntervalMillis+" ms");
|
||||
retryCounter.sleepUntilNextRetry();
|
||||
retryCounter.useRetry();
|
||||
}
|
||||
|
@ -509,8 +493,6 @@ public class RecoverableZooKeeper {
|
|||
throw e;
|
||||
}
|
||||
}
|
||||
LOG.info("The "+retryCounter.getAttemptTimes()+" times to retry " +
|
||||
"ZooKeeper after sleeping "+retryIntervalMillis+" ms");
|
||||
retryCounter.sleepUntilNextRetry();
|
||||
retryCounter.useRetry();
|
||||
isRetry = true;
|
||||
|
@ -550,8 +532,6 @@ public class RecoverableZooKeeper {
|
|||
throw e;
|
||||
}
|
||||
}
|
||||
LOG.info("The "+retryCounter.getAttemptTimes()+" times to retry " +
|
||||
"ZooKeeper after sleeping "+retryIntervalMillis+" ms");
|
||||
retryCounter.sleepUntilNextRetry();
|
||||
retryCounter.useRetry();
|
||||
}
|
||||
|
|
|
@ -23,6 +23,7 @@ import java.io.BufferedReader;
|
|||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.PrintWriter;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.Socket;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
@ -58,6 +59,7 @@ public class ZKUtil {
|
|||
|
||||
// TODO: Replace this with ZooKeeper constant when ZOOKEEPER-277 is resolved.
|
||||
private static final char ZNODE_PATH_SEPARATOR = '/';
|
||||
private static int zkDumpConnectionTimeOut;
|
||||
|
||||
/**
|
||||
* Creates a new connection to ZooKeeper, pulling settings and ensemble config
|
||||
|
@ -93,9 +95,11 @@ public class ZKUtil {
|
|||
LOG.debug(descriptor + " opening connection to ZooKeeper with ensemble (" +
|
||||
ensemble + ")");
|
||||
int retry = conf.getInt("zookeeper.recovery.retry", 3);
|
||||
int retryIntervalMillis =
|
||||
int retryIntervalMillis =
|
||||
conf.getInt("zookeeper.recovery.retry.intervalmill", 1000);
|
||||
return new RecoverableZooKeeper(ensemble, timeout, watcher,
|
||||
zkDumpConnectionTimeOut = conf.getInt("zookeeper.dump.connection.timeout",
|
||||
1000);
|
||||
return new RecoverableZooKeeper(ensemble, timeout, watcher,
|
||||
retry, retryIntervalMillis);
|
||||
}
|
||||
|
||||
|
@ -223,7 +227,7 @@ public class ZKUtil {
|
|||
if (exists) {
|
||||
LOG.debug(zkw.prefix("Set watcher on existing znode " + znode));
|
||||
} else {
|
||||
LOG.debug(zkw.prefix(znode+" does not exist. Watcher is set."));
|
||||
LOG.debug(zkw.prefix(znode+" does not exist. Watcher is set."));
|
||||
}
|
||||
return exists;
|
||||
} catch (KeeperException e) {
|
||||
|
@ -949,11 +953,11 @@ public class ZKUtil {
|
|||
try {
|
||||
sb.append("HBase is rooted at ").append(zkw.baseZNode);
|
||||
sb.append("\nMaster address: ").append(
|
||||
Bytes.toStringBinary(getData(zkw, zkw.masterAddressZNode)));
|
||||
Bytes.toStringBinary(getData(zkw, zkw.masterAddressZNode)));
|
||||
sb.append("\nRegion server holding ROOT: ").append(
|
||||
Bytes.toStringBinary(getData(zkw, zkw.rootServerZNode)));
|
||||
Bytes.toStringBinary(getData(zkw, zkw.rootServerZNode)));
|
||||
sb.append("\nRegion servers:");
|
||||
for (String child: listChildrenNoWatch(zkw, zkw.rsZNode)) {
|
||||
for (String child : listChildrenNoWatch(zkw, zkw.rsZNode)) {
|
||||
sb.append("\n ").append(child);
|
||||
}
|
||||
sb.append("\nQuorum Server Statistics:");
|
||||
|
@ -961,7 +965,13 @@ public class ZKUtil {
|
|||
for (String server : servers) {
|
||||
sb.append("\n ").append(server);
|
||||
try {
|
||||
String[] stat = getServerStats(server);
|
||||
String[] stat = getServerStats(server, ZKUtil.zkDumpConnectionTimeOut);
|
||||
|
||||
if (stat == null) {
|
||||
sb.append("[Error] invalid quorum server: " + server);
|
||||
break;
|
||||
}
|
||||
|
||||
for (String s : stat) {
|
||||
sb.append("\n ").append(s);
|
||||
}
|
||||
|
@ -969,25 +979,13 @@ public class ZKUtil {
|
|||
sb.append("\n ERROR: ").append(e.getMessage());
|
||||
}
|
||||
}
|
||||
} catch(KeeperException ke) {
|
||||
} catch (KeeperException ke) {
|
||||
sb.append("\nFATAL ZooKeeper Exception!\n");
|
||||
sb.append("\n" + ke.getMessage());
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the statistics from the given server. Uses a 1 minute timeout.
|
||||
*
|
||||
* @param server The server to get the statistics from.
|
||||
* @return The array of response strings.
|
||||
* @throws IOException When the socket communication fails.
|
||||
*/
|
||||
public static String[] getServerStats(String server)
|
||||
throws IOException {
|
||||
return getServerStats(server, 60 * 1000);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the statistics from the given server.
|
||||
*
|
||||
|
@ -999,8 +997,18 @@ public class ZKUtil {
|
|||
public static String[] getServerStats(String server, int timeout)
|
||||
throws IOException {
|
||||
String[] sp = server.split(":");
|
||||
Socket socket = new Socket(sp[0],
|
||||
sp.length > 1 ? Integer.parseInt(sp[1]) : 2181);
|
||||
if (sp == null || sp.length == 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
String host = sp[0];
|
||||
int port = sp.length > 1 ? Integer.parseInt(sp[1])
|
||||
: HConstants.DEFAULT_ZOOKEPER_CLIENT_PORT;
|
||||
|
||||
Socket socket = new Socket();
|
||||
InetSocketAddress sockAddr = new InetSocketAddress(host, port);
|
||||
socket.connect(sockAddr, timeout);
|
||||
|
||||
socket.setSoTimeout(timeout);
|
||||
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
|
||||
BufferedReader in = new BufferedReader(new InputStreamReader(
|
||||
|
|
|
@ -8,18 +8,15 @@
|
|||
import="org.apache.hadoop.hbase.zookeeper.ZKUtil"
|
||||
import="org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher"
|
||||
import="org.apache.hadoop.hbase.HBaseConfiguration"
|
||||
import="org.apache.hadoop.hbase.master.HMaster"
|
||||
import="org.apache.hadoop.hbase.master.HMaster"
|
||||
import="org.apache.hadoop.hbase.HConstants"%><%
|
||||
HMaster master = (HMaster)getServletContext().getAttribute(HMaster.MASTER);
|
||||
Configuration conf = master.getConfiguration();
|
||||
HBaseAdmin hbadmin = new HBaseAdmin(conf);
|
||||
HConnection connection = hbadmin.getConnection();
|
||||
ZooKeeperWatcher watcher = connection.getZooKeeperWatcher();
|
||||
ZooKeeperWatcher watcher = master.getZooKeeperWatcher();
|
||||
%>
|
||||
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
|
||||
<title>ZooKeeper Dump</title>
|
||||
|
@ -32,7 +29,6 @@
|
|||
<hr id="head_rule" />
|
||||
<pre>
|
||||
<%= ZKUtil.dump(watcher) %>
|
||||
<% HConnectionManager.deleteConnection(hbadmin.getConfiguration(), false); %>
|
||||
</pre>
|
||||
|
||||
</body>
|
||||
|
|
Loading…
Reference in New Issue