You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ec...@apache.org on 2012/10/22 19:09:58 UTC

svn commit: r1400956 - in /hbase/trunk/hbase-server/src: main/resources/hbase-webapps/master/table.jsp test/java/org/apache/hadoop/hbase/TestInfoServers.java

Author: eclark
Date: Mon Oct 22 17:09:58 2012
New Revision: 1400956

URL: http://svn.apache.org/viewvc?rev=1400956&view=rev
Log:
HBASE-6951 Allow the master info server to be started in a read only mode.

Modified:
    hbase/trunk/hbase-server/src/main/resources/hbase-webapps/master/table.jsp
    hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/TestInfoServers.java

Modified: hbase/trunk/hbase-server/src/main/resources/hbase-webapps/master/table.jsp
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/resources/hbase-webapps/master/table.jsp?rev=1400956&r1=1400955&r2=1400956&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/resources/hbase-webapps/master/table.jsp (original)
+++ hbase/trunk/hbase-server/src/main/resources/hbase-webapps/master/table.jsp Mon Oct 22 17:09:58 2012
@@ -42,6 +42,7 @@
   String tableHeader = "<h2>Table Regions</h2><table class=\"table table-striped\"><tr><th>Name</th><th>Region Server</th><th>Start Key</th><th>End Key</th><th>Requests</th></tr>";
   ServerName rl = master.getCatalogTracker().getRootLocation();
   boolean showFragmentation = conf.getBoolean("hbase.master.ui.fragmentation.enabled", false);
+  boolean readOnly = conf.getBoolean("hbase.master.ui.readonly", false);
   Map<String, Integer> frags = null;
   if (showFragmentation) {
       frags = FSUtils.getTableFragmentation(master);
@@ -62,7 +63,7 @@
 <%
   String action = request.getParameter("action");
   String key = request.getParameter("key");
-  if ( action != null ) {
+  if ( !readOnly && action != null ) {
 %>
   <head>
     <meta charset="utf-8">
@@ -320,6 +321,8 @@
 HConnectionManager.deleteConnection(hbadmin.getConfiguration(), false);
 %>
 
+
+<% if (!readOnly) { %>
 <p><hr><p>
 Actions:
 <p>
@@ -357,6 +360,7 @@ Actions:
 </center>
 <p>
 </div>
+<% } %>
 <%
 }
 %>

Modified: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/TestInfoServers.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/TestInfoServers.java?rev=1400956&r1=1400955&r2=1400956&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/TestInfoServers.java (original)
+++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/TestInfoServers.java Mon Oct 22 17:09:58 2012
@@ -27,6 +27,7 @@ import java.net.URL;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hbase.client.HTable;
+import org.apache.hadoop.hbase.util.Bytes;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -47,6 +48,9 @@ public class TestInfoServers {
     // Set them to ephemeral ports so they will start
     UTIL.getConfiguration().setInt(HConstants.MASTER_INFO_PORT, 0);
     UTIL.getConfiguration().setInt(HConstants.REGIONSERVER_INFO_PORT, 0);
+
+    //We need to make sure that the server can be started as read only.
+    UTIL.getConfiguration().setBoolean("hbase.master.ui.readonly", true);
     UTIL.startMiniCluster();
   }
 
@@ -63,12 +67,12 @@ public class TestInfoServers {
     // give the cluster time to start up
     new HTable(UTIL.getConfiguration(), ".META.").close();
     int port = UTIL.getHBaseCluster().getMaster().getInfoServer().getPort();
-    assertHasExpectedContent(new URL("http://localhost:" + port +
-      "/index.html"), "master-status");
+    assertContainsContent(new URL("http://localhost:" + port +
+        "/index.html"), "master-status");
     port = UTIL.getHBaseCluster().getRegionServerThreads().get(0).getRegionServer().
       getInfoServer().getPort();
-    assertHasExpectedContent(new URL("http://localhost:" + port +
-      "/index.html"), "rs-status");
+    assertContainsContent(new URL("http://localhost:" + port +
+        "/index.html"), "rs-status");
   }
 
   /**
@@ -83,17 +87,49 @@ public class TestInfoServers {
     // give the cluster time to start up
     new HTable(UTIL.getConfiguration(), ".META.").close();
     int port = UTIL.getHBaseCluster().getMaster().getInfoServer().getPort();
-    assertHasExpectedContent(new URL("http://localhost:" + port +
-      "/master-status"), "META");
+    assertContainsContent(new URL("http://localhost:" + port +
+        "/master-status"), "META");
     port = UTIL.getHBaseCluster().getRegionServerThreads().get(0).getRegionServer().
       getInfoServer().getPort();
-    assertHasExpectedContent(new URL("http://localhost:" + port +
-      "/rs-status"), "META");
+    assertContainsContent(new URL("http://localhost:" + port +
+        "/rs-status"), "META");
+  }
+
+  @Test
+  public void testMasterServerReadOnly() throws Exception {
+    String sTableName = "testMasterServerReadOnly";
+    byte[] tableName = Bytes.toBytes(sTableName);
+    byte[] cf = Bytes.toBytes("d");
+    UTIL.createTable(tableName, cf);
+    new HTable(UTIL.getConfiguration(), tableName).close();
+    int port = UTIL.getHBaseCluster().getMaster().getInfoServer().getPort();
+    assertDoesNotContainContent(
+      new URL("http://localhost:" + port + "/table.jsp?name=" + sTableName + "&action=split&key="),
+      "Table action request accepted");
+    assertDoesNotContainContent(
+      new URL("http://localhost:" + port + "/table.jsp?name=" + sTableName),
+      "Actions:");
   }
 
-  private void assertHasExpectedContent(final URL u, final String expected)
+  private void assertContainsContent(final URL u, final String expected)
   throws IOException {
     LOG.info("Testing " + u.toString() + " has " + expected);
+    String content = getUrlContent(u);
+    assertTrue("expected=" + expected + ", content=" + content,
+      content.contains(expected));
+  }
+
+
+
+  private void assertDoesNotContainContent(final URL u, final String expected)
+      throws IOException {
+    LOG.info("Testing " + u.toString() + " has " + expected);
+    String content = getUrlContent(u);
+    assertTrue("Does Not Contain =" + expected + ", content=" + content,
+        !content.contains(expected));
+  }
+
+  private String getUrlContent(URL u) throws IOException {
     java.net.URLConnection c = u.openConnection();
     c.connect();
     StringBuilder sb = new StringBuilder();
@@ -103,9 +139,6 @@ public class TestInfoServers {
       sb.append(new String(bytes, 0, read));
     }
     bis.close();
-    String content = sb.toString();
-    assertTrue("expected=" + expected + ", content=" + content,
-      content.contains(expected));
+    return sb.toString();
   }
-
 }