ソースを参照

AMBARI-8096. 1.4.1 -> 1.7.0 upgrade throws exception. (mpapirkovskyy)

Myroslav Papirkovskyy 10 年 前
コミット
7ee4aed1fd

+ 1 - 1
ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessorImpl.java

@@ -567,7 +567,7 @@ public class DBAccessorImpl implements DBAccessor {
 
   @Override
   public void dropSequence(String sequenceName) throws SQLException {
-    executeQuery(dbmsHelper.getDropSequenceStatement(sequenceName));
+    executeQuery(dbmsHelper.getDropSequenceStatement(sequenceName), true);
   }
 
   @Override

+ 14 - 11
ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog150.java

@@ -64,6 +64,7 @@ import javax.persistence.criteria.*;
 
 import java.io.File;
 import java.io.IOException;
+import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
@@ -433,26 +434,28 @@ public class UpgradeCatalog150 extends AbstractUpgradeCatalog {
       }
     }
 
-
-    // TODO: Convert all possible native queries using Criteria builder
-
     // Sequences
     if (dbAccessor.tableExists("ambari_sequences")) {
       if (dbType.equals(Configuration.POSTGRES_DB_NAME)) {
+
+        ResultSet resultSet = dbAccessor.executeSelect("select * from ambari_sequences where sequence_name in " +
+            "('cluster_id_seq','user_id_seq','host_role_command_id_seq')");
+
         try {
-          dbAccessor.executeQuery(getPostgresSequenceUpgradeQuery());
-          // Deletes
-          dbAccessor.dropSequence("host_role_command_task_id_seq");
-          dbAccessor.dropSequence("users_user_id_seq");
-          dbAccessor.dropSequence("clusters_cluster_id_seq");
-        } catch (SQLException sql) {
-          LOG.warn("Sequence update threw exception. ", sql);
+          if (!resultSet.next()) {
+            dbAccessor.executeQuery(getPostgresSequenceUpgradeQuery(), true);
+            // Deletes
+            dbAccessor.dropSequence("host_role_command_task_id_seq");
+            dbAccessor.dropSequence("users_user_id_seq");
+            dbAccessor.dropSequence("clusters_cluster_id_seq");
+          }
+        } finally {
+          resultSet.close();
         }
       }
     }
 
     //add new sequences for config groups
-    //TODO evalate possibility to automatically wrap object names in DBAcessor
     String valueColumnName = "sequence_value";
 
     dbAccessor.executeQuery("INSERT INTO ambari_sequences(sequence_name, " + valueColumnName + ") " +