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");
+ }
+ }
+}