diff --git metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java index 487d292..650c2ea 100644 --- metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java +++ metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java @@ -47,6 +47,8 @@ import java.util.concurrent.locks.ReentrantLock; import java.util.regex.Pattern; +import javax.jdo.JDOException; + import org.apache.commons.cli.OptionBuilder; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -521,15 +523,33 @@ private void createDefaultDB() throws MetaException { } try { createDefaultDB_core(getMS()); + } catch (JDOException e) { + LOG.warn("Retrying creating default database after error: " + e.getMessage(), e); + try { + createDefaultDB_core(getMS()); + } catch (InvalidObjectException e1) { + throw new MetaException(e1.getMessage()); + } } catch (InvalidObjectException e) { throw new MetaException(e.getMessage()); - } catch (MetaException e) { - throw e; - } + } } - + /** + * create default roles if they don't exist + * + * @throws MetaException + */ private void createDefaultRoles() throws MetaException { + try { + createDefaultRoles_core(); + } catch (JDOException e) { + LOG.warn("Retrying creating default roles after error: " + e.getMessage(), e); + createDefaultRoles_core(); + } + } + + private void createDefaultRoles_core() throws MetaException { if(defaultRolesCreated) { LOG.debug("Admin role already created previously."); @@ -573,7 +593,21 @@ private void createDefaultRoles() throws MetaException { defaultRolesCreated = true; } + /** + * add admin users if they don't exist + * + * @throws MetaException + */ private void addAdminUsers() throws MetaException { + try { + addAdminUsers_core(); + } catch (JDOException e) { + LOG.warn("Retrying adding admin users after error: " + e.getMessage(), e); + addAdminUsers_core(); + } + } + + private void addAdminUsers_core() throws MetaException { if(adminUsersAdded) { LOG.debug("Admin users already added.");