You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by nk...@apache.org on 2013/01/04 11:29:44 UTC

svn commit: r1428776 - in /hbase/trunk/hbase-server/src: main/java/org/apache/hadoop/hbase/ main/java/org/apache/hadoop/hbase/regionserver/ main/java/org/apache/hadoop/hbase/util/ test/java/org/apache/hadoop/hbase/io/encoding/

Author: nkeywal
Date: Fri Jan  4 10:29:43 2013
New Revision: 1428776

URL: http://svn.apache.org/viewvc?rev=1428776&view=rev
Log:
HBASE-7475 TestUpgradeFromHFileV1ToEncoding.testUpgrade hangs

Modified:
    hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/HTableDescriptor.java
    hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CompactSplitThread.java
    hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/util/JVMClusterUtil.java
    hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/io/encoding/TestUpgradeFromHFileV1ToEncoding.java

Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/HTableDescriptor.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/HTableDescriptor.java?rev=1428776&r1=1428775&r2=1428776&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/HTableDescriptor.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/HTableDescriptor.java Fri Jan  4 10:29:43 2013
@@ -358,7 +358,7 @@ public class HTableDescriptor implements
     byte [] value = getValue(key);
     if (value != null) {
       // TODO: Make value be a boolean rather than String of boolean.
-      return Boolean.valueOf(Bytes.toString(value)).booleanValue();
+      return Boolean.valueOf(Bytes.toString(value));
     }
     return valueIfNull;
   }
@@ -618,12 +618,10 @@ public class HTableDescriptor implements
   /**
    * This get the class associated with the region split policy which 
    * determines when a region split should occur.  The class used by
-   * default is {@link org.apache.hadoop.hbase.regionserver.ConstantSizeRegionSplitPolicy}
-   * which split the region base on a constant {@link #getMaxFileSize()}
+   * default is defined in {@link org.apache.hadoop.hbase.regionserver.RegionSplitPolicy}
    * 
    * @return the class name of the region split policy for this table.
-   * If this returns null, the default constant size based split policy
-   * is used.
+   * If this returns null, the default split policy is used.
    */
    public String getRegionSplitPolicyClassName() {
     return getValue(SPLIT_POLICY);
@@ -998,7 +996,8 @@ public class HTableDescriptor implements
    * @see #getFamilies()
    */
   public HColumnDescriptor[] getColumnFamilies() {
-    return getFamilies().toArray(new HColumnDescriptor[0]);
+    Collection<HColumnDescriptor> hColumnDescriptors = getFamilies();
+    return hColumnDescriptors.toArray(new HColumnDescriptor[hColumnDescriptors.size()]);
   }
   
 
@@ -1256,7 +1255,7 @@ public class HTableDescriptor implements
     }
     int pblen = ProtobufUtil.lengthOfPBMagic();
     TableSchema.Builder builder = TableSchema.newBuilder();
-    TableSchema ts = null;
+    TableSchema ts;
     try {
       ts = builder.mergeFrom(bytes, pblen, bytes.length - pblen).build();
     } catch (InvalidProtocolBufferException e) {

Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CompactSplitThread.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CompactSplitThread.java?rev=1428776&r1=1428775&r2=1428776&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CompactSplitThread.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CompactSplitThread.java Fri Jan  4 10:29:43 2013
@@ -250,9 +250,9 @@ public class CompactSplitThread implemen
     while (!done) {
       try {
         done = t.awaitTermination(60, TimeUnit.SECONDS);
-        LOG.debug("Waiting for " + name + " to finish...");
+        LOG.info("Waiting for " + name + " to finish...");
       } catch (InterruptedException ie) {
-        LOG.debug("Interrupted waiting for " + name + " to finish...");
+        LOG.warn("Interrupted waiting for " + name + " to finish...");
       }
     }
   }

Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/util/JVMClusterUtil.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/util/JVMClusterUtil.java?rev=1428776&r1=1428775&r2=1428776&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/util/JVMClusterUtil.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/util/JVMClusterUtil.java Fri Jan  4 10:29:43 2013
@@ -237,28 +237,57 @@ public class JVMClusterUtil {
       // Do active after.
       if (activeMaster != null) activeMaster.master.shutdown();
     }
+    boolean noWait = false;
+    final long maxTime = System.currentTimeMillis() + 120 * 1000;
     if (regionservers != null) {
       for (RegionServerThread t : regionservers) {
-        if (t.isAlive()) {
+        t.getRegionServer().stop("Shutdown requested");
+      }
+      for (RegionServerThread t : regionservers) {
+        if (t.isAlive() && !noWait && System.currentTimeMillis() < maxTime) {
           try {
-            t.getRegionServer().stop("Shutdown requested");
-            t.join();
+            t.join(maxTime);
           } catch (InterruptedException e) {
-            // continue
+            LOG.info("Got InterruptedException on shutdown - " +
+                "not waiting anymore on region server ends", e);
+            noWait = true; // someone wants us to speed up.
+          }
+        }
+      }
+
+      // Let's try to interrupt the remaining threads if any.
+      for (int i = 0; i < 10; ++i) {
+        for (RegionServerThread t : regionservers) {
+          if (t.isAlive()) {
+            try {
+              t.join(10);
+            } catch (InterruptedException e) {
+              noWait = true;
+            }
+          }
+        }
+        for (RegionServerThread t : regionservers) {
+          if (t.isAlive()) {
+            t.interrupt();
           }
         }
       }
     }
+
+
+
     if (masters != null) {
       for (JVMClusterUtil.MasterThread t : masters) {
-        while (t.master.isAlive()) {
+        while (t.master.isAlive() && !noWait) {
           try {
             // The below has been replaced to debug sometime hangs on end of
             // tests.
             // this.master.join():
             Threads.threadDumpingIsAlive(t.master.getThread());
           } catch(InterruptedException e) {
-            // continue
+            LOG.info("Got InterruptedException on shutdown - " +
+                "not waiting anymore on master ends", e);
+            noWait = true;
           }
         }
       }
@@ -266,6 +295,10 @@ public class JVMClusterUtil {
     LOG.info("Shutdown of " +
       ((masters != null) ? masters.size() : "0") + " master(s) and " +
       ((regionservers != null) ? regionservers.size() : "0") +
-      " regionserver(s) complete");
+      " regionserver(s) " + (noWait ? "interrupted" : "complete"));
+
+    if (!noWait){
+      Thread.currentThread().interrupt();
+    }
   }
 }

Modified: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/io/encoding/TestUpgradeFromHFileV1ToEncoding.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/io/encoding/TestUpgradeFromHFileV1ToEncoding.java?rev=1428776&r1=1428775&r2=1428776&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/io/encoding/TestUpgradeFromHFileV1ToEncoding.java (original)
+++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/io/encoding/TestUpgradeFromHFileV1ToEncoding.java Fri Jan  4 10:29:43 2013
@@ -31,7 +31,9 @@ import org.apache.hadoop.hbase.HTableDes
 import org.apache.hadoop.hbase.LargeTests;
 import org.apache.hadoop.hbase.client.HBaseAdmin;
 import org.apache.hadoop.hbase.io.hfile.HFile;
+import org.apache.hadoop.hbase.regionserver.ConstantSizeRegionSplitPolicy;
 import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.hadoop.hbase.zookeeper.ZKAssign;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -72,6 +74,10 @@ public class TestUpgradeFromHFileV1ToEnc
   public void testUpgrade() throws Exception {
     int numBatches = 0;
     HTableDescriptor htd = new HTableDescriptor(TABLE);
+
+    // We don't want a split in this test.
+    htd.setValue(HTableDescriptor.SPLIT_POLICY, ConstantSizeRegionSplitPolicy.class.getName());
+    htd.setMaxFileSize(Long.MAX_VALUE);
     HColumnDescriptor hcd = new HColumnDescriptor(CF);
     htd.addFamily(hcd);
     HBaseAdmin admin = new HBaseAdmin(conf);