You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ha...@apache.org on 2012/11/16 22:39:34 UTC

svn commit: r1410581 - in /hive/trunk/metastore/src/test/org/apache/hadoop/hive/metastore: TestHiveMetaStore.java TestMetaStoreEventListener.java

Author: hashutosh
Date: Fri Nov 16 21:39:33 2012
New Revision: 1410581

URL: http://svn.apache.org/viewvc?rev=1410581&view=rev
Log:
HIVE-3713 : Metastore: Sporadic unit test failures (Gunther Hagleitner via Ashutosh Chauhan)

Modified:
    hive/trunk/metastore/src/test/org/apache/hadoop/hive/metastore/TestHiveMetaStore.java
    hive/trunk/metastore/src/test/org/apache/hadoop/hive/metastore/TestMetaStoreEventListener.java

Modified: hive/trunk/metastore/src/test/org/apache/hadoop/hive/metastore/TestHiveMetaStore.java
URL: http://svn.apache.org/viewvc/hive/trunk/metastore/src/test/org/apache/hadoop/hive/metastore/TestHiveMetaStore.java?rev=1410581&r1=1410580&r2=1410581&view=diff
==============================================================================
--- hive/trunk/metastore/src/test/org/apache/hadoop/hive/metastore/TestHiveMetaStore.java (original)
+++ hive/trunk/metastore/src/test/org/apache/hadoop/hive/metastore/TestHiveMetaStore.java Fri Nov 16 21:39:33 2012
@@ -852,6 +852,53 @@ public abstract class TestHiveMetaStore 
     }
   }
 
+  public void testDatabaseLocationWithPermissionProblems() throws Exception {
+
+    // Note: The following test will fail if you are running this test as root. Setting 
+    // permission to '0' on the database folder will not preclude root from being able 
+    // to create the necessary files.
+
+    if (System.getProperty("user.name").equals("root")) {
+      System.err.println("Skipping test because you are running as root!");
+      return;
+    }
+
+    silentDropDatabase(TEST_DB1_NAME);
+
+    Database db = new Database();
+    db.setName(TEST_DB1_NAME);
+    String dbLocation =
+      HiveConf.getVar(hiveConf, HiveConf.ConfVars.METASTOREWAREHOUSE) + "/test/_testDB_create_";
+    FileSystem fs = FileSystem.get(new Path(dbLocation).toUri(), hiveConf);
+    fs.mkdirs(
+              new Path(HiveConf.getVar(hiveConf, HiveConf.ConfVars.METASTOREWAREHOUSE) + "/test"),
+              new FsPermission((short) 0));
+    db.setLocationUri(dbLocation);
+
+
+    boolean createFailed = false;
+    try {
+      client.createDatabase(db);
+    } catch (MetaException cantCreateDB) {
+      createFailed = true;
+    } finally {
+      // Cleanup
+      if (!createFailed) {
+        try {
+          client.dropDatabase(TEST_DB1_NAME);
+        } catch(Exception e) {
+          System.err.println("Failed to remove database in cleanup: " + e.getMessage());
+        }
+      }
+
+      fs.setPermission(new Path(HiveConf.getVar(hiveConf, HiveConf.ConfVars.METASTOREWAREHOUSE) + "/test"),
+                       new FsPermission((short) 755));
+      fs.delete(new Path(HiveConf.getVar(hiveConf, HiveConf.ConfVars.METASTOREWAREHOUSE) + "/test"), true);
+    }
+
+    assertTrue("Database creation succeeded even with permission problem", createFailed);
+  }
+
   public void testDatabaseLocation() throws Throwable {
     try {
       // clear up any existing databases
@@ -874,24 +921,6 @@ public abstract class TestHiveMetaStore 
       client.dropDatabase(TEST_DB1_NAME);
       silentDropDatabase(TEST_DB1_NAME);
 
-      db = new Database();
-      db.setName(TEST_DB1_NAME);
-      dbLocation =
-          HiveConf.getVar(hiveConf, HiveConf.ConfVars.METASTOREWAREHOUSE) + "/test/_testDB_create_";
-      FileSystem fs = FileSystem.get(new Path(dbLocation).toUri(), hiveConf);
-      fs.mkdirs(
-          new Path(HiveConf.getVar(hiveConf, HiveConf.ConfVars.METASTOREWAREHOUSE) + "/test"),
-          new FsPermission((short) 0));
-      db.setLocationUri(dbLocation);
-
-      boolean createFailed = false;
-      try {
-        client.createDatabase(db);
-      } catch (MetaException cantCreateDB) {
-        createFailed = true;
-      }
-      assertTrue("Database creation succeeded even with permission problem", createFailed);
-
       boolean objectNotExist = false;
       try {
         client.getDatabase(TEST_DB1_NAME);
@@ -900,23 +929,16 @@ public abstract class TestHiveMetaStore 
       }
       assertTrue("Database " + TEST_DB1_NAME + " exists ", objectNotExist);
 
-      // Cleanup
-      fs.setPermission(
-          new Path(HiveConf.getVar(hiveConf, HiveConf.ConfVars.METASTOREWAREHOUSE) + "/test"),
-          new FsPermission((short) 755));
-      fs.delete(new Path(HiveConf.getVar(hiveConf, HiveConf.ConfVars.METASTOREWAREHOUSE) + "/test"), true);
-
-
       db = new Database();
       db.setName(TEST_DB1_NAME);
       dbLocation =
           HiveConf.getVar(hiveConf, HiveConf.ConfVars.METASTOREWAREHOUSE) + "/_testDB_file_";
-      fs = FileSystem.get(new Path(dbLocation).toUri(), hiveConf);
+      FileSystem fs = FileSystem.get(new Path(dbLocation).toUri(), hiveConf);
       fs.createNewFile(new Path(dbLocation));
       fs.deleteOnExit(new Path(dbLocation));
       db.setLocationUri(dbLocation);
 
-      createFailed = false;
+      boolean createFailed = false;
       try {
         client.createDatabase(db);
       } catch (MetaException cantCreateDB) {
@@ -2084,10 +2106,12 @@ public abstract class TestHiveMetaStore 
    * at least works correctly.
    */
   public void testSynchronized() throws Exception {
+    int currentNumberOfDbs = client.getAllDatabases().size(); 
+
     IMetaStoreClient synchronizedClient =
       HiveMetaStoreClient.newSynchronizedClient(client);
     List<String> databases = synchronizedClient.getAllDatabases();
-    assertEquals(1, databases.size());
+    assertEquals(currentNumberOfDbs, databases.size());
   }
 
   public void testTableFilter() throws Exception {

Modified: hive/trunk/metastore/src/test/org/apache/hadoop/hive/metastore/TestMetaStoreEventListener.java
URL: http://svn.apache.org/viewvc/hive/trunk/metastore/src/test/org/apache/hadoop/hive/metastore/TestMetaStoreEventListener.java?rev=1410581&r1=1410580&r2=1410581&view=diff
==============================================================================
--- hive/trunk/metastore/src/test/org/apache/hadoop/hive/metastore/TestMetaStoreEventListener.java (original)
+++ hive/trunk/metastore/src/test/org/apache/hadoop/hive/metastore/TestMetaStoreEventListener.java Fri Nov 16 21:39:33 2012
@@ -66,6 +66,10 @@ public class TestMetaStoreEventListener 
   private HiveMetaStoreClient msc;
   private Driver driver;
 
+  private static final String dbName = "tmpdb";
+  private static final String tblName = "tmptbl";
+  private static final String renamed = "tmptbl2";
+
   private static class RunMS implements Runnable {
 
     @Override
@@ -83,13 +87,16 @@ public class TestMetaStoreEventListener 
   protected void setUp() throws Exception {
 
     super.setUp();
+
     System.setProperty("hive.metastore.event.listeners",
         DummyListener.class.getName());
     System.setProperty("hive.metastore.pre.event.listeners",
         DummyPreListener.class.getName());
+
     Thread t = new Thread(new RunMS());
     t.start();
     Thread.sleep(40000);
+
     hiveConf = new HiveConf(this.getClass());
     hiveConf.setVar(HiveConf.ConfVars.METASTOREURIS, "thrift://localhost:" + msPort);
     hiveConf.setIntVar(HiveConf.ConfVars.METASTORETHRIFTRETRIES, 3);
@@ -99,6 +106,11 @@ public class TestMetaStoreEventListener 
     SessionState.start(new CliSessionState(hiveConf));
     msc = new HiveMetaStoreClient(hiveConf, null);
     driver = new Driver(hiveConf);
+
+    driver.run("drop database if exists " + dbName + " cascade");
+
+    DummyListener.notifyList.clear();
+    DummyPreListener.notifyList.clear();
   }
 
   @Override
@@ -184,9 +196,6 @@ public class TestMetaStoreEventListener 
   }
 
   public void testListener() throws Exception {
-    String dbName = "tmpdb";
-    String tblName = "tmptbl";
-    String renamed = "tmptbl2";
     int listSize = 0;
 
     List<ListenerEvent> notifyList = DummyListener.notifyList;