incubator-bigtop-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From bm...@apache.org
Subject svn commit: r1292100 - /incubator/bigtop/trunk/bigtop-tests/test-artifacts/hbase/src/main/groovy/org/apache/bigtop/itest/hbase/system/TestRegionMover.java
Date Wed, 22 Feb 2012 00:59:04 GMT
Author: bmahe
Date: Wed Feb 22 00:59:04 2012
New Revision: 1292100

URL: http://svn.apache.org/viewvc?rev=1292100&view=rev
Log:
BIGTOP-411. Add TestRegionMover to HBase system tests
Contributed by Stephen Chu

Added:
    incubator/bigtop/trunk/bigtop-tests/test-artifacts/hbase/src/main/groovy/org/apache/bigtop/itest/hbase/system/TestRegionMover.java

Added: incubator/bigtop/trunk/bigtop-tests/test-artifacts/hbase/src/main/groovy/org/apache/bigtop/itest/hbase/system/TestRegionMover.java
URL: http://svn.apache.org/viewvc/incubator/bigtop/trunk/bigtop-tests/test-artifacts/hbase/src/main/groovy/org/apache/bigtop/itest/hbase/system/TestRegionMover.java?rev=1292100&view=auto
==============================================================================
--- incubator/bigtop/trunk/bigtop-tests/test-artifacts/hbase/src/main/groovy/org/apache/bigtop/itest/hbase/system/TestRegionMover.java
(added)
+++ incubator/bigtop/trunk/bigtop-tests/test-artifacts/hbase/src/main/groovy/org/apache/bigtop/itest/hbase/system/TestRegionMover.java
Wed Feb 22 00:59:04 2012
@@ -0,0 +1,127 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.bigtop.itest.hbase.system;
+
+import java.util.ArrayList;
+import java.util.StringTokenizer;
+
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+
+import org.apache.bigtop.itest.shell.Shell;
+
+/**
+ * This program unloads and reloads region servers and checks that
+ * regions do not get stuck in transition for too long. The region
+ * servers are specified by hostname.
+ * 
+ * Required arguments:
+ * -Dregionservers=<regionserver1>,<regionserver2>,...
+ *
+ * Optional arguments:
+ * -Dload.iterations=<number of times to unload and load the region servers>
+ * -Dtimeout.intervals=<number of times to wait for no regions in transition>
+ * -Dtimeout.ms=<milliseconds to wait before checking for regions in transition>
+ */
+public class TestRegionMover {
+  private static Shell sh = new Shell( "/bin/bash -s" );
+
+  // Commands to execute the region mover and get the detailed HBase status.
+  private static String load_regionserver =
+    "$HBASE_HOME/bin/hbase org.jruby.Main $HBASE_HOME/bin/region_mover.rb load ";
+  private static String unload_regionserver =
+    "$HBASE_HOME/bin/hbase org.jruby.Main $HBASE_HOME/bin/region_mover.rb unload ";
+  private static String hbase_status_detailed =
+    "echo \"status \'detailed\'\" | $HBASE_HOME/bin/hbase shell";
+
+  // Number of times we unload/load the region servers.
+  private static int load_iterations;
+  // Number of times we wait before we check the number of regions in transition.
+  private static int timeout_intervals;
+  // Number of milliseconds we wait during each interval.
+  private static int timeout_ms;
+
+  private static ArrayList<String> regionservers = new ArrayList<String>();
+
+  private static final String HBASE_HOME = System.getenv("HBASE_HOME");
+  static {
+    assertNotNull("HBASE_HOME has to be set to run this test", HBASE_HOME);
+  }
+
+  @BeforeClass
+  public static void setUp() throws InterruptedException {
+    String region_servers = System.getProperty("regionservers", null);
+    assertNotNull("Region server(s) must be specified to run this test",
+                  region_servers);
+    StringTokenizer st = new StringTokenizer(region_servers, ",");
+    while (st.hasMoreTokens()) {
+      regionservers.add(st.nextToken());
+    }
+    System.out.println("Region servers to load/unload:\n" + regionservers);
+
+    load_iterations = Integer.parseInt(System.getProperty("load.iterations", "10"));
+    timeout_intervals = Integer.parseInt(System.getProperty("timeout.intervals","20"));
+    timeout_ms = Integer.parseInt(System.getProperty("timeout.ms","20000"));
+  }
+
+  @AfterClass
+  public static void tearDown() {
+    // Cleanup
+  }
+
+  public static void waitForNoRegionsInTransition() throws InterruptedException {
+    for (int i = 0; i < timeout_intervals; i++) {
+      Thread.sleep(timeout_ms);
+      System.out.println("Wait interval: " + i);
+      sh.exec(hbase_status_detailed);
+      String status = sh.getOut().toString();
+      if(status.indexOf(" 0 regionsInTransition") != -1) {
+        System.out.println(" 0 regionsInTransition.");
+        return;
+      } else {
+        System.out.println("Regions still in transition");
+      }
+    }
+    fail("Timed out waiting for regions to be out of transition");
+  }
+
+  @Test
+  public void testRegionMover() throws InterruptedException {
+    System.out.println("Beginning unloading and loading of region servers " +
+                       load_iterations + " times each");
+    String cmd;
+    for (int i = 0; i < load_iterations; i++) {
+      for (String rs : regionservers) {
+        // Unload
+        cmd = unload_regionserver + rs;
+        System.out.println(cmd);
+        sh.exec(cmd);
+        waitForNoRegionsInTransition();
+        // Load
+        cmd = load_regionserver + rs;
+        System.out.println(cmd);
+        sh.exec(cmd);
+        waitForNoRegionsInTransition();
+      }
+    }
+  }
+}



Mime
View raw message