diff --git metastore/src/java/org/apache/hadoop/hive/metastore/RawStore.java metastore/src/java/org/apache/hadoop/hive/metastore/RawStore.java index bf2b5ed..5cf47d4 100644 --- metastore/src/java/org/apache/hadoop/hive/metastore/RawStore.java +++ metastore/src/java/org/apache/hadoop/hive/metastore/RawStore.java @@ -18,6 +18,10 @@ package org.apache.hadoop.hive.metastore; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; import java.util.List; import java.util.Map; @@ -51,6 +55,12 @@ public interface RawStore extends Configurable { + @Target(value = ElementType.METHOD) + @Retention(value = RetentionPolicy.RUNTIME) + public @interface CanNotRetry { + + } + public abstract void shutdown(); /** @@ -60,6 +70,7 @@ * @return an active transaction */ + @CanNotRetry public abstract boolean openTransaction(); /** @@ -68,11 +79,13 @@ * * @return true or false */ + @CanNotRetry public abstract boolean commitTransaction(); /** * Rolls back the current transaction if it is active */ + @CanNotRetry public abstract void rollbackTransaction(); public abstract void createDatabase(Database db) diff --git metastore/src/java/org/apache/hadoop/hive/metastore/RetryingRawStore.java metastore/src/java/org/apache/hadoop/hive/metastore/RetryingRawStore.java index e0c354f..dcf97ec 100644 --- metastore/src/java/org/apache/hadoop/hive/metastore/RetryingRawStore.java +++ metastore/src/java/org/apache/hadoop/hive/metastore/RetryingRawStore.java @@ -29,12 +29,10 @@ 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 @@ -46,7 +44,7 @@ private final RawStore base; private int retryInterval = 0; private int retryLimit = 0; - private MetaStoreInit.MetaStoreInitData metaStoreInitData = + private final MetaStoreInit.MetaStoreInitData metaStoreInitData = new MetaStoreInit.MetaStoreInitData(); private final int id; private final HiveConf hiveConf; @@ -132,12 +130,13 @@ public Object invoke(Object proxy, Method method, Object[] args) throws Throwabl // Due to reflection, the jdo exception is wrapped in // invocationTargetException caughtException = (javax.jdo.JDOException) e.getCause(); - } - else + } else { throw e.getCause(); + } } - if (retryCount >= retryLimit) { + if (retryCount >= retryLimit || + (method.getAnnotation(RawStore.CanNotRetry.class) != null)) { throw caughtException; }