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 2013/01/27 19:50:49 UTC

svn commit: r1439138 - in /hive/trunk/metastore/src: java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java test/org/apache/hadoop/hive/metastore/TestMetaStoreListenersError.java

Author: hashutosh
Date: Sun Jan 27 18:50:49 2013
New Revision: 1439138

URL: http://svn.apache.org/viewvc?rev=1439138&view=rev
Log:
HIVE-3799 : Better error message if metalisteners or hookContext cannot be loaded/instantiated (Navis via Ashutosh Chauhan)

Added:
    hive/trunk/metastore/src/test/org/apache/hadoop/hive/metastore/TestMetaStoreListenersError.java
Modified:
    hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java

Modified: hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java
URL: http://svn.apache.org/viewvc/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java?rev=1439138&r1=1439137&r2=1439138&view=diff
==============================================================================
--- hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java (original)
+++ hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java Sun Jan 27 18:50:49 2013
@@ -21,6 +21,7 @@ package org.apache.hadoop.hive.metastore
 import java.io.File;
 import java.io.IOException;
 import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
 import java.net.InetSocketAddress;
 import java.net.ServerSocket;
 import java.net.Socket;
@@ -1048,9 +1049,12 @@ public class MetaStoreUtils {
             listenerImpl.trim(), true, JavaUtils.getClassLoader()).getConstructor(
                 Configuration.class).newInstance(conf);
         listeners.add(listener);
+      } catch (InvocationTargetException ie) {
+        throw new MetaException("Failed to instantiate listener named: "+
+            listenerImpl + ", reason: " + ie.getCause());
       } catch (Exception e) {
         throw new MetaException("Failed to instantiate listener named: "+
-            listenerImpl + e.toString());
+            listenerImpl + ", reason: " + e);
       }
     }
 

Added: hive/trunk/metastore/src/test/org/apache/hadoop/hive/metastore/TestMetaStoreListenersError.java
URL: http://svn.apache.org/viewvc/hive/trunk/metastore/src/test/org/apache/hadoop/hive/metastore/TestMetaStoreListenersError.java?rev=1439138&view=auto
==============================================================================
--- hive/trunk/metastore/src/test/org/apache/hadoop/hive/metastore/TestMetaStoreListenersError.java (added)
+++ hive/trunk/metastore/src/test/org/apache/hadoop/hive/metastore/TestMetaStoreListenersError.java Sun Jan 27 18:50:49 2013
@@ -0,0 +1,84 @@
+/**
+ * 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
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.hadoop.hive.metastore;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hive.metastore.api.MetaException;
+import org.apache.hadoop.hive.shims.ShimLoader;
+
+/**
+ * Test for unwrapping InvocationTargetException, which is thrown from
+ * constructor of listener class
+ */
+public class TestMetaStoreListenersError extends TestCase {
+
+  public void testInitListenerException() throws Throwable {
+
+    System.setProperty("hive.metastore.init.hooks", ErrorInitListener.class.getName());
+    int port = MetaStoreUtils.findFreePort();
+    try {
+      HiveMetaStore.startMetaStore(port, ShimLoader.getHadoopThriftAuthBridge());
+    } catch (Throwable throwable) {
+      Assert.assertEquals(MetaException.class, throwable.getClass());
+      Assert.assertEquals(
+          "Failed to instantiate listener named: " +
+              "org.apache.hadoop.hive.metastore.TestMetaStoreListenersError$ErrorInitListener, " +
+              "reason: java.lang.IllegalArgumentException: exception on constructor",
+          throwable.getMessage());
+    }
+  }
+
+  public void testEventListenerException() throws Throwable {
+
+    System.setProperty("hive.metastore.init.hooks", "");
+    System.setProperty("hive.metastore.event.listeners", ErrorEventListener.class.getName());
+    int port = MetaStoreUtils.findFreePort();
+    try {
+      HiveMetaStore.startMetaStore(port, ShimLoader.getHadoopThriftAuthBridge());
+    } catch (Throwable throwable) {
+      Assert.assertEquals(MetaException.class, throwable.getClass());
+      Assert.assertEquals(
+          "Failed to instantiate listener named: " +
+              "org.apache.hadoop.hive.metastore.TestMetaStoreListenersError$ErrorEventListener, " +
+              "reason: java.lang.IllegalArgumentException: exception on constructor",
+          throwable.getMessage());
+    }
+  }
+
+  public static class ErrorInitListener extends MetaStoreInitListener {
+
+    public ErrorInitListener(Configuration config) {
+      super(config);
+      throw new IllegalArgumentException("exception on constructor");
+    }
+
+    public void onInit(MetaStoreInitContext context) throws MetaException {
+    }
+  }
+
+  public static class ErrorEventListener extends MetaStoreEventListener {
+
+    public ErrorEventListener(Configuration config) {
+      super(config);
+      throw new IllegalArgumentException("exception on constructor");
+    }
+  }
+}