You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ns...@apache.org on 2011/10/11 04:02:37 UTC
svn commit: r1181370 -
/hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWrapper.java
Author: nspiegelberg
Date: Tue Oct 11 02:02:36 2011
New Revision: 1181370
URL: http://svn.apache.org/viewvc?rev=1181370&view=rev
Log:
Print additional information for unassigned regions
Summary:
Print additional information for unassigned regions in user web interface
(zk.jsp). This includes information about unassigned regions (encoded name,
status (UNASSIGNED/CLOSED/CLOSING/OPENED/OPENING/ etc.), time stamp and HMsg.
Test Plan:
Tested on local server
DiffCamp Revision: 153374
Reviewed By: kannan
CC: nspiegelberg, kannan, ageorgiev, hbase@lists
Revert Plan:
OK
Modified:
hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWrapper.java
Modified: hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWrapper.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWrapper.java?rev=1181370&r1=1181369&r2=1181370&view=diff
==============================================================================
--- hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWrapper.java (original)
+++ hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWrapper.java Tue Oct 11 02:02:36 2011
@@ -23,6 +23,9 @@ import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
+import java.io.InputStream;
+import java.io.ByteArrayInputStream;
+import java.io.DataInputStream;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Collections;
@@ -34,6 +37,9 @@ import java.util.Properties;
import java.util.Set;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
+import java.util.Calendar;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -42,6 +48,7 @@ import org.apache.hadoop.hbase.HConstant
import org.apache.hadoop.hbase.HServerAddress;
import org.apache.hadoop.hbase.HServerInfo;
import org.apache.hadoop.hbase.executor.HBaseEventHandler.HBaseEventType;
+import org.apache.hadoop.hbase.executor.RegionTransitionEventData;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
@@ -244,8 +251,20 @@ public class ZooKeeperWrapper implements
/** @return String dump of everything in ZooKeeper. */
@SuppressWarnings({"ConstantConditions"})
- public String dump() {
+ public String dump() throws IOException {
StringBuilder sb = new StringBuilder();
+
+ dumpRegionServers(sb);
+ dumpUnassignedRegions(sb);
+ dumpQuorumServers(sb);
+
+ return sb.toString();
+ }
+
+ /**
+ * Dump of master, root and region servers
+ */
+ private void dumpRegionServers(StringBuilder sb) {
sb.append("\nHBase tree in ZooKeeper is rooted at ").append(parentZNode);
sb.append("\n Cluster up? ").append(exists(clusterStateZNode, true));
sb.append("\n Master address: ").append(readMasterAddress(null));
@@ -254,6 +273,63 @@ public class ZooKeeperWrapper implements
for (HServerAddress address : scanRSDirectory()) {
sb.append("\n - ").append(address);
}
+ }
+
+ /**
+ * Dump the unassigned regions
+ */
+ private void dumpUnassignedRegions(StringBuilder sb) throws IOException {
+ sb.append("\n Unassigned regions:");
+
+ DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ Calendar calendar = Calendar.getInstance();
+ boolean noUnassigned = true;
+ // Get a list of all UNASSIGNED regions
+ List<String> nodes = this.listZnodes(rgnsInTransitZNode);
+ if(nodes != null) {
+ // For each unassigned region determine its state
+ // (UNASSIGNED/OFFLINE/CLOSING/CLOSED etc.)
+ // and its HMessage, which can contain additional info
+ for (String node : nodes) {
+ noUnassigned = false;
+ String path = joinPath(rgnsInTransitZNode, node);
+ byte[] data = null;
+ try {
+ data = readZNode(path, null);
+ } catch (IOException ioe) {
+ // This is expected, node has already been processed
+ continue;
+ }
+ // If there is no data for the region it is probably CLOSED?
+ if (data == null) {
+ sb.append("\n - " + node + " has null data[]");
+ }
+ // Otherwise attach the state to the name of the region
+ else {
+ RegionTransitionEventData rtData = new RegionTransitionEventData();
+ rtData.readFields(new DataInputStream(new ByteArrayInputStream(data)));
+
+ sb.append("\n - " + node);
+ sb.append(" (" + rtData.getHbEvent().toString() + ")");
+ sb.append(", from server: " + rtData.getRsName());
+ sb.append(", with timestamp: " + rtData.getTimeStamp());
+ calendar.setTimeInMillis(rtData.getTimeStamp());
+ sb.append(" (" + formatter.format(calendar.getTime()) + ")");
+ if (rtData.getHmsg() != null) {
+ sb.append("\n + Message: " + rtData.getHmsg().toString());
+ }
+ }
+ }
+ }
+ if (noUnassigned) {
+ sb.append("\n - No unassigned regions found.");
+ }
+ }
+
+ /**
+ * Dump the quorum server statistics.
+ */
+ private void dumpQuorumServers(StringBuilder sb) {
sb.append("\n Quorum Server Statistics:");
String[] servers = quorumServers.split(",");
for (String server : servers) {
@@ -267,7 +343,6 @@ public class ZooKeeperWrapper implements
sb.append("\n ERROR: ").append(e.getMessage());
}
}
- return sb.toString();
}
/**