Repository: ambari Updated Branches: refs/heads/branch-2.1.2 c39cdb9f4 -> e8fbd17d9
AMBARI-13478 Upgrade path on ORA 1.6.1 -> 2.0.1 -> 2.1.1 (dsen) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/e8fbd17d Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/e8fbd17d Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/e8fbd17d Branch: refs/heads/branch-2.1.2 Commit: e8fbd17d9e018cdf10d2c10e53a7a336839764e6 Parents: c39cdb9 Author: Dmytro Sen <d...@apache.org> Authored: Thu Oct 22 20:53:26 2015 +0300 Committer: Dmytro Sen <d...@apache.org> Committed: Thu Oct 22 21:09:14 2015 +0300 ---------------------------------------------------------------------- .../ambari/server/orm/DBAccessorImpl.java | 26 ++++++++++++++++++-- .../server/upgrade/UpgradeCatalog210.java | 10 +++++++- .../ambari/server/orm/DBAccessorImplTest.java | 21 ++++++++++++++++ 3 files changed, 54 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/e8fbd17d/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessorImpl.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessorImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessorImpl.java index cd47252..abd05bc 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessorImpl.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessorImpl.java @@ -293,6 +293,27 @@ public class DBAccessorImpl implements DBAccessor { return false; } + public String getCheckedForeignKey(String tableName, String fkName) throws SQLException { + DatabaseMetaData metaData = getDatabaseMetaData(); + + ResultSet rs = metaData.getImportedKeys(null, null, convertObjectName(tableName)); + + if (rs != null) { + try { + while (rs.next()) { + if (StringUtils.equalsIgnoreCase(fkName, rs.getString("FK_NAME"))) { + return rs.getString("FK_NAME"); + } + } + } finally { + rs.close(); + } + } + + LOG.warn("FK {} not found for table {}", convertObjectName(fkName), convertObjectName(tableName)); + + return null; + } @Override public boolean tableHasForeignKey(String tableName, String refTableName, String columnName, String refColumnName) throws SQLException { @@ -747,8 +768,9 @@ public class DBAccessorImpl implements DBAccessor { @Override public void dropFKConstraint(String tableName, String constraintName, boolean ignoreFailure) throws SQLException { // ToDo: figure out if name of index and constraint differs - if (tableHasForeignKey(convertObjectName(tableName), constraintName)) { - String query = dbmsHelper.getDropFKConstraintStatement(tableName, constraintName); + String checkedConstraintName = getCheckedForeignKey(convertObjectName(tableName), constraintName); + if (checkedConstraintName != null) { + String query = dbmsHelper.getDropFKConstraintStatement(tableName, checkedConstraintName); executeQuery(query, ignoreFailure); } else { LOG.warn("Constraint {} from {} table not found, nothing to drop", constraintName, tableName); http://git-wip-us.apache.org/repos/asf/ambari/blob/e8fbd17d/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog210.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog210.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog210.java index 12a1f44..5ac521f 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog210.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog210.java @@ -485,6 +485,14 @@ public class UpgradeCatalog210 extends AbstractUpgradeCatalog { dbAccessor.dropFKConstraint(HOST_COMPONENT_DESIRED_STATE_TABLE, "hstcmpnntdesiredstatecmpnntnme"); dbAccessor.dropFKConstraint(SERVICE_CONFIG_HOSTS_TABLE, "FK_scvhosts_scv"); + //These FK's hasn't been deleted previously due to MySQL case sensitivity + if (databaseType == Configuration.DatabaseType.MYSQL) { + dbAccessor.dropFKConstraint(CONFIG_GROUP_HOST_MAPPING_TABLE, "FK_configgrouphostmapping_config_group_id"); + dbAccessor.dropFKConstraint(CLUSTER_HOST_MAPPING_TABLE, "FK_ClusterHostMapping_cluster_id"); + dbAccessor.dropFKConstraint(KERBEROS_PRINCIPAL_HOST_TABLE, "FK_kerberos_principal_host_principal_name"); + dbAccessor.dropFKConstraint(SERVICE_CONFIG_HOSTS_TABLE, "FK_serviceconfighosts_service_config_id"); + } + if (databaseType == Configuration.DatabaseType.DERBY) { for (String tableName : tablesWithHostNameInPK) { String constraintName = getDerbyTableConstraintName("p", tableName); @@ -1345,7 +1353,7 @@ public class UpgradeCatalog210 extends AbstractUpgradeCatalog { public void run() { EntityManager em = getEntityManagerProvider().get(); Query nativeQuery = em.createNativeQuery("UPDATE alert_definition SET alert_source=?1, hash=?2 WHERE " + - "definition_name=?3"); + "definition_name=?3"); nativeQuery.setParameter(1, source); nativeQuery.setParameter(2, newHash); nativeQuery.setParameter(3, alertName); http://git-wip-us.apache.org/repos/asf/ambari/blob/e8fbd17d/ambari-server/src/test/java/org/apache/ambari/server/orm/DBAccessorImplTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/DBAccessorImplTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/DBAccessorImplTest.java index 05856b3..c867c9f 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/orm/DBAccessorImplTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/DBAccessorImplTest.java @@ -320,6 +320,27 @@ public class DBAccessorImplTest { } @Test + public void testGetCheckedForeignKey() throws Exception { + String tableName = getFreeTableName(); + createMyTable(tableName); + + DBAccessorImpl dbAccessor = injector.getInstance(DBAccessorImpl.class); + + List<DBColumnInfo> columns = new ArrayList<DBColumnInfo>(); + columns.add(new DBColumnInfo("fid", Long.class, null, null, false)); + columns.add(new DBColumnInfo("fname", String.class, null, null, false)); + + String foreignTableName = getFreeTableName(); + dbAccessor.createTable(foreignTableName, columns, "fid"); + + Statement statement = dbAccessor.getConnection().createStatement(); + statement.execute("ALTER TABLE " + foreignTableName + " ADD CONSTRAINT FK_test1 FOREIGN KEY (fid) REFERENCES " + + tableName + " (id)"); + + Assert.assertEquals("FK_TEST1", dbAccessor.getCheckedForeignKey(foreignTableName, "fk_test1")); + } + + @Test public void testTableExists() throws Exception { DBAccessorImpl dbAccessor = injector.getInstance(DBAccessorImpl.class);