FAQ
Author: kevinwilfong
Date: Mon Oct 1 18:14:02 2012
New Revision: 1392491

URL: http://svn.apache.org/viewvc?rev=1392491&view=rev
Log:
HIVE-3484. RetryingRawStore logic needs to be significantly reworked to support retries within transactions (Jean Xu via kevinwilfong)

Added:
hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/IHMSHandler.java
hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreInit.java
hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/RetryingHMSHandler.java
Modified:
hive/trunk/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
hive/trunk/conf/hive-default.xml.template
hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java
hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/RetryingRawStore.java

Modified: hive/trunk/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
URL: http://svn.apache.org/viewvc/hive/trunk/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java?rev=1392491&r1=1392490&r2=1392491&view=diff
==============================================================================
--- hive/trunk/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java (original)
+++ hive/trunk/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java Mon Oct 1 18:14:02 2012
@@ -131,6 +131,9 @@ public class HiveConf extends Configurat
HiveConf.ConfVars.METASTORE_PART_INHERIT_TBL_PROPS,
HiveConf.ConfVars.METASTORE_BATCH_RETRIEVE_TABLE_PARTITION_MAX,
HiveConf.ConfVars.METASTORE_PRE_EVENT_LISTENERS,
+ HiveConf.ConfVars.HMSHANDLERATTEMPTS,
+ HiveConf.ConfVars.HMSHANDLERINTERVAL,
+ HiveConf.ConfVars.HMSHANDLERFORCERELOADCONF,
};

/**
@@ -257,9 +260,18 @@ public class HiveConf extends Configurat
METASTOREINTERVAL("hive.metastore.ds.retry.interval", 1000),
// Whether to force reloading of the metastore configuration (including
// the connection URL, before the next metastore query that accesses the
- // datastore. Once reloaded, the this value is reset to false. Used for
+ // datastore. Once reloaded, this value is reset to false. Used for
// testing only.
METASTOREFORCERELOADCONF("hive.metastore.force.reload.conf", false),
+ // Number of attempts to retry connecting after there is a JDO datastore err
+ HMSHANDLERATTEMPTS("hive.hmshandler.retry.attempts", 1),
+ // Number of miliseconds to wait between attepting
+ HMSHANDLERINTERVAL("hive.hmshandler.retry.interval", 1000),
+ // Whether to force reloading of the HMSHandler configuration (including
+ // the connection URL, before the next metastore query that accesses the
+ // datastore. Once reloaded, this value is reset to false. Used for
+ // testing only.
+ HMSHANDLERFORCERELOADCONF("hive.hmshandler.force.reload.conf", false),
METASTORESERVERMINTHREADS("hive.metastore.server.min.threads", 200),
METASTORESERVERMAXTHREADS("hive.metastore.server.max.threads", 100000),
METASTORE_TCP_KEEP_ALIVE("hive.metastore.server.tcp.keepalive", true),

Modified: hive/trunk/conf/hive-default.xml.template
URL: http://svn.apache.org/viewvc/hive/trunk/conf/hive-default.xml.template?rev=1392491&r1=1392490&r2=1392491&view=diff
==============================================================================
--- hive/trunk/conf/hive-default.xml.template (original)
+++ hive/trunk/conf/hive-default.xml.template Mon Oct 1 18:14:02 2012
@@ -1465,5 +1465,17 @@
</description>
</property>

+<property>
+ <name>hive.hmshandler.retry.attempts</name>
+ <value>1</value>
+ <description>The number of times to retry a HMSHandler call if there were a connection error</description>
+</property>
+
+<property>
+ <name>hive.hmshandler.retry.interval</name>
+ <value>1000</value>
+ <description>The number of miliseconds between HMSHandler retry attempts</description>
+</property>
+
</configuration>


Modified: hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
URL: http://svn.apache.org/viewvc/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java?rev=1392491&r1=1392490&r2=1392491&view=diff
==============================================================================
--- hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java (original)
+++ hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java Mon Oct 1 18:14:02 2012
@@ -166,7 +166,7 @@ public class HiveMetaStore extends Thrif
}

public static class HMSHandler extends FacebookBase implements
- ThriftHiveMetastore.Iface {
+ IHMSHandler {
public static final Log LOG = HiveMetaStore.LOG;
private static boolean createDefaultDB = false;
private String rawStoreClassName;
@@ -342,6 +342,14 @@ public class HiveMetaStore extends Thrif
return threadLocalId.get() + ": " + s;
}

+ public void setConf(Configuration conf) {
+ threadLocalConf.set(conf);
+ RawStore ms = threadLocalMS.get();
+ if (ms != null) {
+ ms.setConf(conf);
+ }
+ }
+
private Configuration getConf() {
Configuration conf = threadLocalConf.get();
if (conf == null) {
@@ -366,7 +374,6 @@ public class HiveMetaStore extends Thrif
threadLocalMS.set(ms);
ms = threadLocalMS.get();
}
-
return ms;
}

@@ -3185,6 +3192,10 @@ public class HiveMetaStore extends Thrif
}
}

+ public static IHMSHandler newHMSHandler(String name, HiveConf hiveConf) throws MetaException {
+ return RetryingHMSHandler.getProxy(hiveConf, name);
+ }
+

/**
* Discard a current delegation token.
@@ -3377,12 +3388,12 @@ public class HiveMetaStore extends Thrif
// start delegation token manager
saslServer.startDelegationTokenSecretManager(conf);
transFactory = saslServer.createTransportFactory();
- processor = saslServer.wrapProcessor(new ThriftHiveMetastore.Processor<HMSHandler>(
- new HMSHandler("new db based metaserver", conf)));
+ processor = saslServer.wrapProcessor(new ThriftHiveMetastore.Processor<IHMSHandler>(
+ newHMSHandler("new db based metaserver", conf)));
LOG.info("Starting DB backed MetaStore Server in Secure Mode");
} else {
// we are in unsecure mode.
- HMSHandler handler = new HMSHandler("new db based metaserver", conf);
+ IHMSHandler handler = newHMSHandler("new db based metaserver", conf);

if (conf.getBoolVar(ConfVars.METASTORE_EXECUTE_SET_UGI)) {
transFactory = useFramedTransport ?
@@ -3390,12 +3401,12 @@ public class HiveMetaStore extends Thrif
new TUGIContainingTransport.Factory())
: new TUGIContainingTransport.Factory();

- processor = new TUGIBasedProcessor<HMSHandler>(handler);
+ processor = new TUGIBasedProcessor<IHMSHandler>(handler);
LOG.info("Starting DB backed MetaStore Server with SetUGI enabled");
} else {
transFactory = useFramedTransport ?
new TFramedTransport.Factory() : new TTransportFactory();
- processor = new TSetIpAddressProcessor<HMSHandler>(handler);
+ processor = new TSetIpAddressProcessor<IHMSHandler>(handler);
LOG.info("Starting DB backed MetaStore Server");
}
}

Modified: hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java
URL: http://svn.apache.org/viewvc/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java?rev=1392491&r1=1392490&r2=1392491&view=diff
==============================================================================
--- hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java (original)
+++ hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java Mon Oct 1 18:14:02 2012
@@ -113,7 +113,7 @@ public class HiveMetaStoreClient impleme
if (localMetaStore) {
// instantiate the metastore server handler directly instead of connecting
// through the network
- client = new HiveMetaStore.HMSHandler("hive client", conf);
+ client = HiveMetaStore.newHMSHandler("hive client", conf);
isConnected = true;
return;
}

Added: hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/IHMSHandler.java
URL: http://svn.apache.org/viewvc/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/IHMSHandler.java?rev=1392491&view=auto
==============================================================================
--- hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/IHMSHandler.java (added)
+++ hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/IHMSHandler.java Mon Oct 1 18:14:02 2012
@@ -0,0 +1,27 @@
+/**
+ * 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 org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hive.metastore.api.ThriftHiveMetastore;
+
+public interface IHMSHandler extends ThriftHiveMetastore.Iface {
+
+ public abstract void setConf(Configuration conf);
+}

Added: hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreInit.java
URL: http://svn.apache.org/viewvc/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreInit.java?rev=1392491&view=auto
==============================================================================
--- hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreInit.java (added)
+++ hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreInit.java Mon Oct 1 18:14:02 2012
@@ -0,0 +1,107 @@
+/**
+ * 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 org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hive.common.JavaUtils;
+import org.apache.hadoop.hive.conf.HiveConf;
+import org.apache.hadoop.hive.metastore.api.MetaException;
+import org.apache.hadoop.hive.metastore.hooks.JDOConnectionURLHook;
+import org.apache.hadoop.util.ReflectionUtils;
+
+/**
+ * MetaStoreInit defines functions to init/update MetaStore connection url.
+ *
+ */
+public class MetaStoreInit {
+
+ private static final Log LOG = LogFactory.getLog(MetaStoreInit.class);
+
+ static class MetaStoreInitData {
+ JDOConnectionURLHook urlHook = null;
+ String urlHookClassName = "";
+ }
+
+ /**
+ * Updates the connection URL in hiveConf using the hook
+ *
+ * @return true if a new connection URL was loaded into the thread local
+ * configuration
+ */
+ static boolean updateConnectionURL(HiveConf hiveConf, Configuration conf,
+ String badUrl, MetaStoreInitData updateData)
+ throws MetaException {
+ String connectUrl = null;
+ String currentUrl = MetaStoreInit.getConnectionURL(conf);
+ try {
+ // We always call init because the hook name in the configuration could
+ // have changed.
+ MetaStoreInit.initConnectionUrlHook(hiveConf, updateData);
+ if (updateData.urlHook != null) {
+ if (badUrl != null) {
+ updateData.urlHook.notifyBadConnectionUrl(badUrl);
+ }
+ connectUrl = updateData.urlHook.getJdoConnectionUrl(hiveConf);
+ }
+ } catch (Exception e) {
+ LOG.error("Exception while getting connection URL from the hook: " +
+ e);
+ }
+
+ if (connectUrl != null && !connectUrl.equals(currentUrl)) {
+ LOG.error(
+ String.format("Overriding %s with %s",
+ HiveConf.ConfVars.METASTORECONNECTURLKEY.toString(),
+ connectUrl));
+ conf.set(HiveConf.ConfVars.METASTORECONNECTURLKEY.toString(),
+ connectUrl);
+ return true;
+ }
+ return false;
+ }
+
+ static String getConnectionURL(Configuration conf) {
+ return conf.get(
+ HiveConf.ConfVars.METASTORECONNECTURLKEY.toString(), "");
+ }
+
+ // Multiple threads could try to initialize at the same time.
+ synchronized private static void initConnectionUrlHook(HiveConf hiveConf,
+ MetaStoreInitData updateData) throws ClassNotFoundException {
+
+ String className =
+ hiveConf.get(HiveConf.ConfVars.METASTORECONNECTURLHOOK.toString(), "").trim();
+ if (className.equals("")) {
+ updateData.urlHookClassName = "";
+ updateData.urlHook = null;
+ return;
+ }
+ boolean urlHookChanged = !updateData.urlHookClassName.equals(className);
+ if (updateData.urlHook == null || urlHookChanged) {
+ updateData.urlHookClassName = className.trim();
+
+ Class<?> urlHookClass = Class.forName(updateData.urlHookClassName, true,
+ JavaUtils.getClassLoader());
+ updateData.urlHook = (JDOConnectionURLHook) ReflectionUtils.newInstance(urlHookClass, null);
+ }
+ return;
+ }
+}

Added: hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/RetryingHMSHandler.java
URL: http://svn.apache.org/viewvc/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/RetryingHMSHandler.java?rev=1392491&view=auto
==============================================================================
--- hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/RetryingHMSHandler.java (added)
+++ hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/RetryingHMSHandler.java Mon Oct 1 18:14:02 2012
@@ -0,0 +1,156 @@
+/**
+ * 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 java.lang.reflect.InvocationHandler;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+import java.lang.reflect.UndeclaredThrowableException;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hive.common.JavaUtils;
+import org.apache.hadoop.hive.common.classification.InterfaceAudience;
+import org.apache.hadoop.hive.common.classification.InterfaceStability;
+import org.apache.hadoop.hive.conf.HiveConf;
+import org.apache.hadoop.hive.metastore.api.MetaException;
+import org.apache.hadoop.hive.metastore.hooks.JDOConnectionURLHook;
+import org.apache.hadoop.util.ReflectionUtils;
+
+@interfaceaudience.private
+@interfacestability.evolving
+public class RetryingHMSHandler implements InvocationHandler {
+
+ private static final Log LOG = LogFactory.getLog(RetryingHMSHandler.class);
+
+ private final IHMSHandler base;
+ private MetaStoreInit.MetaStoreInitData metaStoreInitData =
+ new MetaStoreInit.MetaStoreInitData();
+ private final HiveConf hiveConf;
+
+ protected RetryingHMSHandler(HiveConf hiveConf, String name) throws MetaException {
+ this.hiveConf = hiveConf;
+
+ // This has to be called before initializing the instance of HMSHandler
+ init();
+
+ this.base = (IHMSHandler) new HiveMetaStore.HMSHandler(name, hiveConf);
+ }
+
+ public static IHMSHandler getProxy(HiveConf hiveConf, String name) throws MetaException {
+
+ RetryingHMSHandler handler = new RetryingHMSHandler(hiveConf, name);
+
+ return (IHMSHandler) Proxy.newProxyInstance(
+ RetryingHMSHandler.class.getClassLoader(),
+ new Class[] { IHMSHandler.class }, handler);
+ }
+
+ private void init() throws MetaException {
+ // Using the hook on startup ensures that the hook always has priority
+ // over settings in *.xml. The thread local conf needs to be used because at this point
+ // it has already been initialized using hiveConf.
+ MetaStoreInit.updateConnectionURL(hiveConf, getConf(), null, metaStoreInitData);
+
+ }
+
+ private void initMS() {
+ base.setConf(getConf());
+ }
+
+ @Override
+ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+ Object ret = null;
+
+ boolean gotNewConnectUrl = false;
+ boolean reloadConf = HiveConf.getBoolVar(hiveConf,
+ HiveConf.ConfVars.HMSHANDLERFORCERELOADCONF);
+ int retryInterval = HiveConf.getIntVar(hiveConf,
+ HiveConf.ConfVars.HMSHANDLERINTERVAL);
+ int retryLimit = HiveConf.getIntVar(hiveConf,
+ HiveConf.ConfVars.HMSHANDLERATTEMPTS);
+
+ if (reloadConf) {
+ MetaStoreInit.updateConnectionURL(hiveConf, getConf(),
+ null, metaStoreInitData);
+ }
+
+ int retryCount = 0;
+ // Exception caughtException = null;
+ Throwable caughtException = null;
+ while (true) {
+ try {
+ if (reloadConf || gotNewConnectUrl) {
+ initMS();
+ }
+ ret = method.invoke(base, args);
+ break;
+ } catch (javax.jdo.JDOException e) {
+ caughtException = e;
+ } catch (UndeclaredThrowableException e) {
+ if (e.getCause() != null) {
+ if (e.getCause() instanceof javax.jdo.JDOException) {
+ // Due to reflection, the jdo exception is wrapped in
+ // invocationTargetException
+ caughtException = e.getCause();
+ }
+ else {
+ throw e.getCause();
+ }
+ }
+ else {
+ throw e;
+ }
+ } catch (InvocationTargetException e) {
+ if (e.getCause() instanceof javax.jdo.JDOException) {
+ // Due to reflection, the jdo exception is wrapped in
+ // invocationTargetException
+ caughtException = e.getCause();
+ }
+ else {
+ throw e.getCause();
+ }
+ }
+
+ if (retryCount >= retryLimit) {
+ throw caughtException;
+ }
+
+ assert (retryInterval >= 0);
+ retryCount++;
+ LOG.error(
+ String.format(
+ "JDO datastore error. Retrying HMSHandler " +
+ "after %d ms (attempt %d of %d)", retryInterval, retryCount, retryLimit));
+ Thread.sleep(retryInterval);
+ // If we have a connection error, the JDO connection URL hook might
+ // provide us with a new URL to access the datastore.
+ String lastUrl = MetaStoreInit.getConnectionURL(getConf());
+ gotNewConnectUrl = MetaStoreInit.updateConnectionURL(hiveConf, getConf(),
+ lastUrl, metaStoreInitData);
+ }
+ return ret;
+ }
+
+ public Configuration getConf() {
+ return hiveConf;
+ }
+}

Modified: hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/RetryingRawStore.java
URL: http://svn.apache.org/viewvc/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/RetryingRawStore.java?rev=1392491&r1=1392490&r2=1392491&view=diff
==============================================================================
--- hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/RetryingRawStore.java (original)
+++ hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/RetryingRawStore.java Mon Oct 1 18:14:02 2012
@@ -44,8 +44,8 @@ public class RetryingRawStore implements
private final RawStore base;
private int retryInterval = 0;
private int retryLimit = 0;
- private JDOConnectionURLHook urlHook = null;
- private String urlHookClassName = "";
+ private MetaStoreInit.MetaStoreInitData metaStoreInitData =
+ new MetaStoreInit.MetaStoreInitData();
private final int id;
private final HiveConf hiveConf;
private final Configuration conf; // thread local conf from HMS
@@ -82,7 +82,7 @@ public class RetryingRawStore implements
// Using the hook on startup ensures that the hook always has priority
// over settings in *.xml. The thread local conf needs to be used because at this point
// it has already been initialized using hiveConf.
- updateConnectionURL(getConf(), null);
+ MetaStoreInit.updateConnectionURL(hiveConf, getConf(), null, metaStoreInitData);
}

private void initMS() {
@@ -98,7 +98,7 @@ public class RetryingRawStore implements
HiveConf.ConfVars.METASTOREFORCERELOADCONF);

if (reloadConf) {
- updateConnectionURL(getConf(), null);
+ MetaStoreInit.updateConnectionURL(hiveConf, getConf(), null, metaStoreInitData);
}

int retryCount = 0;
@@ -138,76 +138,13 @@ public class RetryingRawStore implements
Thread.sleep(retryInterval);
// If we have a connection error, the JDO connection URL hook might
// provide us with a new URL to access the datastore.
- String lastUrl = getConnectionURL(getConf());
- gotNewConnectUrl = updateConnectionURL(getConf(), lastUrl);
+ String lastUrl = MetaStoreInit.getConnectionURL(getConf());
+ gotNewConnectUrl = MetaStoreInit.updateConnectionURL(hiveConf, getConf(),
+ lastUrl, metaStoreInitData);
}
return ret;
}

- /**
- * Updates the connection URL in hiveConf using the hook
- *
- * @return true if a new connection URL was loaded into the thread local
- * configuration
- */
- private boolean updateConnectionURL(Configuration conf, String badUrl)
- throws MetaException {
- String connectUrl = null;
- String currentUrl = getConnectionURL(conf);
- try {
- // We always call init because the hook name in the configuration could
- // have changed.
- initConnectionUrlHook();
- if (urlHook != null) {
- if (badUrl != null) {
- urlHook.notifyBadConnectionUrl(badUrl);
- }
- connectUrl = urlHook.getJdoConnectionUrl(hiveConf);
- }
- } catch (Exception e) {
- LOG.error("Exception while getting connection URL from the hook: " +
- e);
- }
-
- if (connectUrl != null && !connectUrl.equals(currentUrl)) {
- LOG.error(addPrefix(
- String.format("Overriding %s with %s",
- HiveConf.ConfVars.METASTORECONNECTURLKEY.toString(),
- connectUrl)));
- conf.set(HiveConf.ConfVars.METASTORECONNECTURLKEY.toString(),
- connectUrl);
- return true;
- }
- return false;
- }
-
- private static String getConnectionURL(Configuration conf) {
- return conf.get(
- HiveConf.ConfVars.METASTORECONNECTURLKEY.toString(), "");
- }
-
- // Multiple threads could try to initialize at the same time.
- synchronized private void initConnectionUrlHook()
- throws ClassNotFoundException {
-
- String className =
- hiveConf.get(HiveConf.ConfVars.METASTORECONNECTURLHOOK.toString(), "").trim();
- if (className.equals("")) {
- urlHookClassName = "";
- urlHook = null;
- return;
- }
- boolean urlHookChanged = !urlHookClassName.equals(className);
- if (urlHook == null || urlHookChanged) {
- urlHookClassName = className.trim();
-
- Class<?> urlHookClass = Class.forName(urlHookClassName, true,
- JavaUtils.getClassLoader());
- urlHook = (JDOConnectionURLHook) ReflectionUtils.newInstance(urlHookClass, null);
- }
- return;
- }
-
private String addPrefix(String s) {
return id + ": " + s;
}

Search Discussions

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupcommits @
categorieshive, hadoop
postedOct 1, '12 at 6:14p
activeOct 1, '12 at 6:14p
posts1
users1
websitehive.apache.org

1 user in discussion

Kevinwilfong: 1 post

People

Translate

site design / logo © 2022 Grokbase