Parcourir la source

HADOOP-1560 NPE in MiniHBaseCluster on Windows

git-svn-id: https://svn.apache.org/repos/asf/lucene/hadoop/trunk@553080 13f79535-47bb-0310-9956-ffa450edef68
Jim Kellerman il y a 18 ans
Parent
commit
afc32c12ca

+ 1 - 0
src/contrib/hbase/CHANGES.txt

@@ -45,3 +45,4 @@ Trunk (unreleased changes)
  26. HADOOP-1543 [hbase] Add HClient.tableExists
  27. HADOOP-1519 [hbase] map/reduce interface for HBase
  28. HADOOP-1523 Hung region server waiting on write locks 
+ 29. HADOOP-1560 NPE in MiniHBaseCluster on Windows

+ 4 - 1
src/contrib/hbase/src/test/org/apache/hadoop/hbase/AbstractMergeTestBase.java

@@ -32,7 +32,7 @@ public abstract class AbstractMergeTestBase extends HBaseTestCase {
   protected HTableDescriptor desc;
   protected ImmutableBytesWritable value;
 
-  protected MiniDFSCluster dfsCluster;
+  protected MiniDFSCluster dfsCluster = null;
   protected FileSystem fs;
   protected Path dir;
 
@@ -104,6 +104,9 @@ public abstract class AbstractMergeTestBase extends HBaseTestCase {
       
     } catch(Throwable t) {
       t.printStackTrace();
+      if(dfsCluster != null) {
+        dfsCluster.shutdown();
+      }
       fail();
     }
   }

+ 15 - 9
src/contrib/hbase/src/test/org/apache/hadoop/hbase/MiniHBaseCluster.java

@@ -37,8 +37,8 @@ public class MiniHBaseCluster implements HConstants {
   private MiniDFSCluster cluster;
   private FileSystem fs;
   private Path parentdir;
-  private HMaster master;
-  private Thread masterThread;
+  private HMaster master = null;
+  private Thread masterThread = null;
   List<HRegionServer> regionServers;
   List<Thread> regionThreads;
   private boolean deleteOnExit = true;
@@ -83,6 +83,8 @@ public class MiniHBaseCluster implements HConstants {
 
     this.conf = conf;
     this.cluster = dfsCluster;
+    this.regionServers = new ArrayList<HRegionServer>(nRegionNodes);
+    this.regionThreads = new ArrayList<Thread>(nRegionNodes);
     init(nRegionNodes);
   }
 
@@ -102,6 +104,8 @@ public class MiniHBaseCluster implements HConstants {
   throws IOException {
     this.conf = conf;
     this.deleteOnExit = deleteOnExit;
+    this.regionServers = new ArrayList<HRegionServer>(nRegionNodes);
+    this.regionThreads = new ArrayList<Thread>(nRegionNodes);
 
     if (miniHdfsFilesystem) {
       try {
@@ -167,8 +171,6 @@ public class MiniHBaseCluster implements HConstants {
 
   private void startRegionServers(final int nRegionNodes)
   throws IOException {
-    this.regionServers = new ArrayList<HRegionServer>(nRegionNodes);
-    this.regionThreads = new ArrayList<Thread>(nRegionNodes);    
     for(int i = 0; i < nRegionNodes; i++) {
       startRegionServer();
     }
@@ -239,7 +241,9 @@ public class MiniHBaseCluster implements HConstants {
     for(HRegionServer hsr: this.regionServers) {
       hsr.stop();
     }
-    master.shutdown();
+    if(master != null) {
+      master.shutdown();
+    }
     for(Thread t: this.regionThreads) {
       if (t.isAlive()) {
         try {
@@ -249,11 +253,13 @@ public class MiniHBaseCluster implements HConstants {
         }
       }
     }
-    try {
-      masterThread.join();
+    if (masterThread != null) {
+      try {
+        masterThread.join();
 
-    } catch(InterruptedException e) {
-      // continue
+      } catch(InterruptedException e) {
+        // continue
+      }
     }
     LOG.info("HBase Cluster shutdown complete");
 

+ 4 - 0
src/contrib/hbase/src/test/org/apache/hadoop/hbase/TestHRegion.java

@@ -61,6 +61,9 @@ public class TestHRegion extends HBaseTestCase implements RegionUnavailableListe
       cleanup();
       
     } catch(Exception e) {
+      if(cluster != null) {
+        cluster.shutdown();
+      }
       e.printStackTrace();
       fail();
     }
@@ -798,6 +801,7 @@ public class TestHRegion extends HBaseTestCase implements RegionUnavailableListe
     // Shut down the mini cluster
 
     cluster.shutdown();
+    cluster = null;
 
     // Delete all the DFS files
 

+ 0 - 3
src/contrib/hbase/src/test/org/apache/hadoop/hbase/TestScanner.java

@@ -260,9 +260,6 @@ public class TestScanner extends HBaseTestCase {
       throw e;
       
     } finally {
-      if(fs != null) {
-        fs.close();
-      }
       if(cluster != null) {
         cluster.shutdown();
       }

+ 33 - 26
src/contrib/hbase/src/test/org/apache/hadoop/hbase/TestTableMapReduce.java

@@ -75,39 +75,46 @@ public class TestTableMapReduce extends HBaseTestCase {
     desc.addFamily(new HColumnDescriptor(OUTPUT_COLUMN));
     
     dfsCluster = new MiniDFSCluster(conf, 1, true, (String[])null);
-    fs = dfsCluster.getFileSystem();
-    dir = new Path("/hbase");
-    fs.mkdirs(dir);
+    try {
+      fs = dfsCluster.getFileSystem();
+      dir = new Path("/hbase");
+      fs.mkdirs(dir);
 
-    // create the root and meta regions and insert the data region into the meta
+      // create the root and meta regions and insert the data region into the meta
 
-    HRegion root = createNewHRegion(fs, dir, conf, HGlobals.rootTableDesc, 0L, null, null);
-    HRegion meta = createNewHRegion(fs, dir, conf, HGlobals.metaTableDesc, 1L, null, null);
-    HRegion.addRegionToMETA(root, meta);
+      HRegion root = createNewHRegion(fs, dir, conf, HGlobals.rootTableDesc, 0L, null, null);
+      HRegion meta = createNewHRegion(fs, dir, conf, HGlobals.metaTableDesc, 1L, null, null);
+      HRegion.addRegionToMETA(root, meta);
 
-    HRegion region = createNewHRegion(fs, dir, conf, desc, rand.nextLong(), null, null);
-    HRegion.addRegionToMETA(meta, region);
+      HRegion region = createNewHRegion(fs, dir, conf, desc, rand.nextLong(), null, null);
+      HRegion.addRegionToMETA(meta, region);
 
-    // insert some data into the test table
+      // insert some data into the test table
 
-    for(int i = 0; i < values.length; i++) {
-      long lockid = region.startUpdate(new Text("row_"
-          + String.format("%1$05d", i)));
+      for(int i = 0; i < values.length; i++) {
+        long lockid = region.startUpdate(new Text("row_"
+            + String.format("%1$05d", i)));
 
-      region.put(lockid, TEXT_INPUT_COLUMN, values[i]);
-      region.commit(lockid);
-    }
+        region.put(lockid, TEXT_INPUT_COLUMN, values[i]);
+        region.commit(lockid);
+      }
 
-    region.close();
-    region.getLog().closeAndDelete();
-    meta.close();
-    meta.getLog().closeAndDelete();
-    root.close();
-    root.getLog().closeAndDelete();
-  
-    // Start up HBase cluster
-    
-    hCluster = new MiniHBaseCluster(conf, 1, dfsCluster);
+      region.close();
+      region.getLog().closeAndDelete();
+      meta.close();
+      meta.getLog().closeAndDelete();
+      root.close();
+      root.getLog().closeAndDelete();
+
+      // Start up HBase cluster
+
+      hCluster = new MiniHBaseCluster(conf, 1, dfsCluster);
+      
+    } catch (Exception e) {
+      if (dfsCluster != null) {
+        dfsCluster.shutdown();
+      }
+    }
   }
 
   @Override