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/15 00:34:50 UTC

svn commit: r1183536 - in /hbase/branches/0.89-fb: ./ src/main/java/org/apache/hadoop/hbase/util/ src/main/java/org/apache/hadoop/hbase/zookeeper/ src/main/resources/hbase-webapps/master/ src/test/java/org/apache/hadoop/hbase/zookeeper/

Author: nspiegelberg
Date: Fri Oct 14 22:34:49 2011
New Revision: 1183536

URL: http://svn.apache.org/viewvc?rev=1183536&view=rev
Log:
HBASE-4568 Make zk dump jsp response faster

Modified:
    hbase/branches/0.89-fb/pom.xml
    hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/util/RetryCounter.java
    hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/zookeeper/HQuorumPeer.java
    hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/zookeeper/RecoverableZooKeeper.java
    hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWrapper.java
    hbase/branches/0.89-fb/src/main/resources/hbase-webapps/master/zk.jsp
    hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/zookeeper/TestHQuorumPeer.java

Modified: hbase/branches/0.89-fb/pom.xml
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/pom.xml?rev=1183536&r1=1183535&r2=1183536&view=diff
==============================================================================
--- hbase/branches/0.89-fb/pom.xml (original)
+++ hbase/branches/0.89-fb/pom.xml Fri Oct 14 22:34:49 2011
@@ -445,7 +445,7 @@
     <junit.version>4.8.1</junit.version>
     <mockito-all.version>1.8.4</mockito-all.version>
     <log4j.version>1.2.15</log4j.version>
-    <zookeeper.version>3.3.1</zookeeper.version>
+    <zookeeper.version>3.3.3</zookeeper.version>
 
     <commons-httpclient.version>3.1</commons-httpclient.version>
     <commons-lang.version>2.5</commons-lang.version>
@@ -517,7 +517,7 @@
         <scope>test</scope>
       </dependency>
       <dependency>
-        <groupId>org.apache.hadoop</groupId>
+        <groupId>org.apache.zookeeper</groupId>
         <artifactId>zookeeper</artifactId>
         <version>${zookeeper.version}</version>
       </dependency>
@@ -622,7 +622,7 @@
     </dependency>
 
     <dependency>
-      <groupId>org.apache.hadoop</groupId>
+      <groupId>org.apache.zookeeper</groupId>
       <artifactId>zookeeper</artifactId>
     </dependency>
 

Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/util/RetryCounter.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/util/RetryCounter.java?rev=1183536&r1=1183535&r2=1183536&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/util/RetryCounter.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/util/RetryCounter.java Fri Oct 14 22:34:49 2011
@@ -2,12 +2,17 @@ package org.apache.hadoop.hbase.util;
 
 import java.util.concurrent.TimeUnit;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.hbase.zookeeper.RecoverableZooKeeper;
+
 public class RetryCounter {
+  private static final Log LOG = LogFactory.getLog(RetryCounter.class);
   private final int maxRetries;
   private int retriesRemaining;
   private final int retryIntervalMillis;
   private final TimeUnit timeUnit;
-
+  
   public RetryCounter(int maxRetries,
   int retryIntervalMillis, TimeUnit timeUnit) {
     this.maxRetries = maxRetries;
@@ -20,8 +25,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() {

Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/zookeeper/HQuorumPeer.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/zookeeper/HQuorumPeer.java?rev=1183536&r1=1183535&r2=1183536&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/zookeeper/HQuorumPeer.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/zookeeper/HQuorumPeer.java Fri Oct 14 22:34:49 2011
@@ -98,7 +98,7 @@ public class HQuorumPeer {
     return address.equals("localhost") || address.equals("127.0.0.1");
   }
 
-  private static void writeMyID(Properties properties) throws IOException {
+  static void writeMyID(Properties properties) throws IOException {
     long myId = -1;
 
     Configuration conf = HBaseConfiguration.create();

Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/zookeeper/RecoverableZooKeeper.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/zookeeper/RecoverableZooKeeper.java?rev=1183536&r1=1183535&r2=1183536&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/zookeeper/RecoverableZooKeeper.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/zookeeper/RecoverableZooKeeper.java Fri Oct 14 22:34:49 2011
@@ -117,8 +117,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;
@@ -155,8 +153,6 @@ public class RecoverableZooKeeper {
             throw e;
         }
       }
-      LOG.info("The "+retryCounter.getAttemptTimes()+" times to retry " +
-          "ZooKeeper after sleeping "+retryIntervalMillis+" ms");
       retryCounter.sleepUntilNextRetry();
       retryCounter.useRetry();
     }
@@ -192,8 +188,6 @@ public class RecoverableZooKeeper {
             throw e;
         }
       }
-      LOG.info("The "+retryCounter.getAttemptTimes()+" times to retry " +
-          "ZooKeeper after sleeping "+retryIntervalMillis+" ms");
       retryCounter.sleepUntilNextRetry();
       retryCounter.useRetry();
     }
@@ -229,8 +223,6 @@ public class RecoverableZooKeeper {
             throw e;
         }
       }
-      LOG.info("The "+retryCounter.getAttemptTimes()+" times to retry " +
-          "ZooKeeper after sleeping "+retryIntervalMillis+" ms");
       retryCounter.sleepUntilNextRetry();
       retryCounter.useRetry();
     }
@@ -266,8 +258,6 @@ public class RecoverableZooKeeper {
             throw e;
         }
       }
-      LOG.info("The "+retryCounter.getAttemptTimes()+" times to retry " +
-          "ZooKeeper after sleeping "+retryIntervalMillis+" ms");
       retryCounter.sleepUntilNextRetry();
       retryCounter.useRetry();
     }
@@ -305,8 +295,6 @@ public class RecoverableZooKeeper {
             throw e;
         }
       }
-      LOG.info("The "+retryCounter.getAttemptTimes()+" times to retry " +
-          "ZooKeeper after sleeping "+retryIntervalMillis+" ms");
       retryCounter.sleepUntilNextRetry();
       retryCounter.useRetry();
     }
@@ -344,8 +332,6 @@ public class RecoverableZooKeeper {
             throw e;
         }
       }
-      LOG.info("The "+retryCounter.getAttemptTimes()+" times to retry " +
-          "ZooKeeper after sleeping "+retryIntervalMillis+" ms");
       retryCounter.sleepUntilNextRetry();
       retryCounter.useRetry();
     }
@@ -405,8 +391,6 @@ public class RecoverableZooKeeper {
             throw e;
         }
       }
-      LOG.info("The "+retryCounter.getAttemptTimes()+" times to retry " +
-          "ZooKeeper after sleeping "+retryIntervalMillis+" ms");
       retryCounter.sleepUntilNextRetry();
       retryCounter.useRetry();
     }
@@ -494,8 +478,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;
@@ -535,8 +517,6 @@ public class RecoverableZooKeeper {
             throw e;
         }
       }
-      LOG.info("The "+retryCounter.getAttemptTimes()+" times to retry " +
-          "ZooKeeper after sleeping "+retryIntervalMillis+" ms");
       retryCounter.sleepUntilNextRetry();
       retryCounter.useRetry();
     }

Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWrapper.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWrapper.java?rev=1183536&r1=1183535&r2=1183536&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWrapper.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWrapper.java Fri Oct 14 22:34:49 2011
@@ -27,6 +27,7 @@ import java.io.PrintWriter;
 import java.io.InputStream;
 import java.io.ByteArrayInputStream;
 import java.io.DataInputStream;
+import java.net.InetSocketAddress;
 import java.net.Socket;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -145,6 +146,8 @@ public class ZooKeeperWrapper implements
   private Set<String> unassignedZNodesWatched = new HashSet<String>();
 
   private List<Watcher> listeners = Collections.synchronizedList(new ArrayList<Watcher>());
+  
+  private int zkDumpConnectionTimeOut;
 
   // return the singleton given the name of the instance
   public static ZooKeeperWrapper getInstance(Configuration conf, String name) {
@@ -204,8 +207,10 @@ public class ZooKeeperWrapper implements
     rgnsInTransitZNode  = getZNode(parentZNode, regionsInTransitZNodeName);
     masterElectionZNode = getZNode(parentZNode, masterAddressZNodeName);
     clusterStateZNode   = getZNode(parentZNode, stateZNodeName);
-    int retryNum = conf.getInt("zookeeper.connection.retry.num",3);
-    int retryFreq = conf.getInt("zookeeper.connection.retry.freq",1000);
+    int retryNum = conf.getInt("zookeeper.connection.retry.num", 6);
+    int retryFreq = conf.getInt("zookeeper.connection.retry.freq", 1000);
+    zkDumpConnectionTimeOut = conf.getInt("zookeeper.dump.connection.timeout", 
+        1000);
     connectToZk(retryNum,retryFreq);
   }
 
@@ -366,7 +371,7 @@ public class ZooKeeperWrapper implements
     for (String server : servers) {
       sb.append("\n    - ").append(server);
       try {
-        String[] stat = getServerStats(server);
+        String[] stat = getServerStats(server, this.zkDumpConnectionTimeOut);
         for (String s : stat) {
           sb.append("\n        ").append(s);
         }
@@ -377,18 +382,6 @@ public class ZooKeeperWrapper implements
   }
 
   /**
-   * 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 String[] getServerStats(String server)
-  throws IOException {
-    return getServerStats(server, 60 * 1000);
-  }
-
-  /**
    * Gets the statistics from the given server.
    *
    * @param server  The server to get the statistics from.
@@ -399,17 +392,24 @@ public class ZooKeeperWrapper implements
   public 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);
+    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(
       socket.getInputStream()));
     out.println("stat");
     out.flush();
+    
     ArrayList<String> res = new ArrayList<String>();
     while (true) {
-      String line = in.readLine();
+      String line = in.readLine();    
       if (line != null) res.add(line);
       else break;
     }

Modified: hbase/branches/0.89-fb/src/main/resources/hbase-webapps/master/zk.jsp
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/resources/hbase-webapps/master/zk.jsp?rev=1183536&r1=1183535&r2=1183536&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/resources/hbase-webapps/master/zk.jsp (original)
+++ hbase/branches/0.89-fb/src/main/resources/hbase-webapps/master/zk.jsp Fri Oct 14 22:34:49 2011
@@ -9,10 +9,7 @@
   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();
-  ZooKeeperWrapper wrapper = connection.getZooKeeperWrapper();
+  ZooKeeperWrapper wrapper = master.getZooKeeperWrapper();
 %>
 
 <?xml version="1.0" encoding="UTF-8" ?>

Modified: hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/zookeeper/TestHQuorumPeer.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/zookeeper/TestHQuorumPeer.java?rev=1183536&r1=1183535&r2=1183536&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/zookeeper/TestHQuorumPeer.java (original)
+++ hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/zookeeper/TestHQuorumPeer.java Fri Oct 14 22:34:49 2011
@@ -87,7 +87,11 @@ public class TestHQuorumPeer extends HBa
     String s =
       "dataDir=${hbase.tmp.dir}/zookeeper\n" +
       "clientPort=2181\n" +
-      "server.0=${hbase.master.hostname}:2888:3888\n";
+      "initLimit=2\n" +
+      "syncLimit=2\n" +
+      "server.0=${hbase.master.hostname}:2888:3888\n" +
+      "server.1=server1:2888:3888\n" +
+      "server.2=server2:2888:3888\n";
 
     System.setProperty("hbase.master.hostname", "localhost");
     InputStream is = new ByteArrayInputStream(s.getBytes());
@@ -96,14 +100,15 @@ public class TestHQuorumPeer extends HBa
     assertEquals(dataDir.toString(), properties.get("dataDir"));
     assertEquals(Integer.valueOf(2181), Integer.valueOf(properties.getProperty("clientPort")));
     assertEquals("localhost:2888:3888", properties.get("server.0"));
-
+    
+    HQuorumPeer.writeMyID(properties);
     QuorumPeerConfig config = new QuorumPeerConfig();
     config.parseProperties(properties);
 
     assertEquals(dataDir.toString(), config.getDataDir());
     assertEquals(2181, config.getClientPortAddress().getPort());
     Map<Long,QuorumServer> servers = config.getServers();
-    assertEquals(1, servers.size());
+    assertEquals(3, servers.size());
     assertTrue(servers.containsKey(Long.valueOf(0)));
     QuorumServer server = servers.get(Long.valueOf(0));
     assertEquals("localhost", server.addr.getHostName());