Repository: ambari Updated Branches: refs/heads/branch-2.1 22740e180 -> ff96ed451 refs/heads/trunk b234664cd -> c46d25398
AMBARI-12305. Ambari-server upgrade from 1.6.1 to 2.1.0 fails, dml update error (aonishuk) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/c46d2539 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/c46d2539 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/c46d2539 Branch: refs/heads/trunk Commit: c46d25398ea168a4e666cc380eae3b742d9cb6df Parents: b234664 Author: Andrew Onishuk <[email protected]> Authored: Tue Jul 7 11:37:14 2015 +0300 Committer: Andrew Onishuk <[email protected]> Committed: Tue Jul 7 11:37:14 2015 +0300 ---------------------------------------------------------------------- .../apache/ambari/server/orm/DBAccessor.java | 4 +- .../ambari/server/orm/DBAccessorImpl.java | 96 ++++++++++++++------ .../server/upgrade/UpgradeCatalog170.java | 84 ++++++----------- .../server/upgrade/UpgradeCatalog200.java | 8 +- .../server/upgrade/UpgradeCatalog210.java | 8 +- .../server/upgrade/UpgradeCatalog200Test.java | 4 +- .../server/upgrade/UpgradeCatalog210Test.java | 19 +++- 7 files changed, 124 insertions(+), 99 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/c46d2539/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessor.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessor.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessor.java index a5960a0..9104624 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessor.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessor.java @@ -464,7 +464,7 @@ public interface DBAccessor { * @return the string list of index names * @throws SQLException */ - //List<String> getIndexesList(String tableName, boolean unique) throws SQLException; + List<String> getIndexesList(String tableName, boolean unique) throws SQLException; /** * Check if index is already in scheme @@ -476,7 +476,7 @@ public interface DBAccessor { * name of the index to check * @return true if index present in the schema */ - //boolean tableHasIndex(String tableName, boolean unique, String indexName) throws SQLException; + boolean tableHasIndex(String tableName, boolean unique, String indexName) throws SQLException; /** * Gets the column's SQL type http://git-wip-us.apache.org/repos/asf/ambari/blob/c46d2539/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 3a1d237..ef65853 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 @@ -350,11 +350,23 @@ public class DBAccessorImpl implements DBAccessor { } @Override + public boolean tableHasIndex(String tableName, boolean unique, String indexName) throws SQLException{ + if (tableExists(tableName)){ + List<String> indexList = getIndexesList(tableName, false); + return (CustomStringUtils.containsCaseInsensitive(indexName, indexList)); + } + return false; + } + + @Override public void createIndex(String indexName, String tableName, String... columnNames) throws SQLException { - String query = dbmsHelper.getCreateIndexStatement(indexName, tableName, columnNames); - - executeQuery(query); + if (!tableHasIndex(tableName, false, indexName)) { + String query = dbmsHelper.getCreateIndexStatement(indexName, tableName, columnNames); + executeQuery(query); + } else { + LOG.info("Index {} already exist, skipping creation, table = {}", indexName, tableName); + } } @Override @@ -440,7 +452,7 @@ public class DBAccessorImpl implements DBAccessor { @Override public void addUniqueConstraint(String tableName, String constraintName, String... columnNames) throws SQLException { - if (!tableHasConstraint(tableName, constraintName)) { + if (!tableHasConstraint(tableName, constraintName) && tableHasColumn(tableName, columnNames)) { String query = dbmsHelper.getAddUniqueConstraintStatement(tableName, constraintName, columnNames); try { executeQuery(query); @@ -449,7 +461,7 @@ public class DBAccessorImpl implements DBAccessor { throw e; } } else { - LOG.info("Unique constraint {} already exists, skipping", constraintName); + LOG.info("Unique constraint {} already exists or columns {} not found, skipping", constraintName, StringUtils.join(columnNames, ", ")); } } @@ -457,7 +469,6 @@ public class DBAccessorImpl implements DBAccessor { public void addPKConstraint(String tableName, String constraintName, boolean ignoreErrors, String... columnName) throws SQLException { if (!tableHasPrimaryKey(tableName, null) && tableHasColumn(tableName, columnName)) { String query = dbmsHelper.getAddPrimaryKeyConstraintStatement(tableName, constraintName, columnName); - executeQuery(query, ignoreErrors); } else { LOG.warn("Primary constraint {} not altered to table {} as column {} not present or constraint already exists", @@ -861,7 +872,9 @@ public class DBAccessorImpl implements DBAccessor { return res; } - private ResultSetMetaData getColumnMetadata(String tableName, String columnName) throws SQLException { + @Override + public Class getColumnClass(String tableName, String columnName) + throws SQLException, ClassNotFoundException { // We doesn't require any actual result except metadata, so WHERE clause shouldn't match String query = String.format("SELECT %s FROM %s WHERE 1=2", convertObjectName(columnName), convertObjectName(tableName)); Statement statement = null; @@ -869,7 +882,7 @@ public class DBAccessorImpl implements DBAccessor { try { statement = getConnection().createStatement(); rs = statement.executeQuery(query); - return rs.getMetaData(); + return Class.forName(rs.getMetaData().getColumnClassName(1)); } finally { if (statement != null) { statement.close(); @@ -881,39 +894,46 @@ public class DBAccessorImpl implements DBAccessor { } @Override - public Class getColumnClass(String tableName, String columnName) - throws SQLException, ClassNotFoundException { - ResultSetMetaData rsmd = getColumnMetadata(tableName, columnName); - return Class.forName(rsmd.getColumnClassName(1)); - } - - @Override public boolean isColumnNullable(String tableName, String columnName) throws SQLException { - ResultSetMetaData rsmd = getColumnMetadata(tableName, columnName); - return !(rsmd.isNullable(1) == ResultSetMetaData.columnNoNulls); + // We doesn't require any actual result except metadata, so WHERE clause shouldn't match + String query = String.format("SELECT %s FROM %s WHERE 1=2", convertObjectName(columnName), convertObjectName(tableName)); + Statement statement = null; + ResultSet rs = null; + try { + statement = getConnection().createStatement(); + rs = statement.executeQuery(query); + return !(rs.getMetaData().isNullable(1) == ResultSetMetaData.columnNoNulls); + } finally { + if (statement != null) { + statement.close(); + } + if (rs != null) { + rs.close(); + } + } } @Override public void setColumnNullable(String tableName, DBAccessor.DBColumnInfo columnInfo, boolean nullable) throws SQLException { + String columnName = columnInfo.getName(); - String statement = dbmsHelper.getSetNullableStatement(tableName, columnInfo, nullable); - executeQuery(statement); + // if column is already in nullable state, we shouldn't do anything. This is important for Oracle + if (isColumnNullable(tableName, columnName) != nullable) { + String query = dbmsHelper.getSetNullableStatement(tableName, columnInfo, nullable); + executeQuery(query); + } else { + LOG.info("Column nullability property is not changed due to {} column from {} table is already in {} state, skipping", + columnName, tableName, (nullable) ? "nullable" : "not nullable"); + } } @Override public void setColumnNullable(String tableName, String columnName, boolean nullable) throws SQLException { try { - // if column is already in nullable state, we shouldn't do anything. This is important for Oracle - if (isColumnNullable(tableName, columnName) != nullable) { - Class columnClass = getColumnClass(tableName, columnName); - String query = dbmsHelper.getSetNullableStatement(tableName, new DBColumnInfo(columnName, columnClass), nullable); - executeQuery(query); - } else { - LOG.info("Column nullability property is not changed due to {} column from {} table is already in {} state, skipping", - columnName, tableName, (nullable) ? "nullable" : "not nullable"); - } + Class columnClass = getColumnClass(tableName, columnName); + setColumnNullable(tableName,new DBColumnInfo(columnName, columnClass), nullable); } catch (ClassNotFoundException e) { LOG.error("Could not modify table=[], column={}, error={}", tableName, columnName, e.getMessage()); } @@ -942,4 +962,24 @@ public class DBAccessorImpl implements DBAccessor { alterColumn(tableName, new DBColumnInfo(columnName, toType, null)); } + @Override + public List<String> getIndexesList(String tableName, boolean unique) + throws SQLException{ + ResultSet rs = getDatabaseMetaData().getIndexInfo(null, null, convertObjectName(tableName), unique, false); + List<String> indexList = new ArrayList<String>(); + if (rs != null){ + try{ + while (rs.next()) { + String indexName = rs.getString(convertObjectName("index_name")); + if (indexName != null) { // hack for Oracle database, as she could return null values + indexList.add(indexName); + } + } + }finally { + rs.close(); + } + } + return indexList; + } + } http://git-wip-us.apache.org/repos/asf/ambari/blob/c46d2539/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog170.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog170.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog170.java index 00e033b..c54039f 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog170.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog170.java @@ -96,6 +96,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.Date; import java.util.HashMap; @@ -429,37 +430,24 @@ public class UpgradeCatalog170 extends AbstractUpgradeCatalog { dbAccessor.addColumn("configgroup", new DBColumnInfo("service_name", String.class, 255)); - dbAccessor.executeQuery("INSERT INTO ambari_sequences(sequence_name, sequence_value) VALUES('alert_definition_id_seq', 0)", false); - - dbAccessor.executeQuery("INSERT INTO ambari_sequences(sequence_name, sequence_value) VALUES('alert_group_id_seq', 0)", false); - - dbAccessor.executeQuery("INSERT INTO ambari_sequences(sequence_name, sequence_value) VALUES('alert_target_id_seq', 0)", false); - - dbAccessor.executeQuery("INSERT INTO ambari_sequences(sequence_name, sequence_value) VALUES('alert_history_id_seq', 0)", false); - - dbAccessor.executeQuery("INSERT INTO ambari_sequences(sequence_name, sequence_value) VALUES('alert_notice_id_seq', 0)", false); - - dbAccessor.executeQuery("INSERT INTO ambari_sequences(sequence_name, sequence_value) VALUES('alert_current_id_seq', 0)", false); - - dbAccessor.executeQuery("INSERT INTO ambari_sequences(sequence_name, sequence_value) VALUES('group_id_seq', 1)", false); - - dbAccessor.executeQuery("INSERT INTO ambari_sequences(sequence_name, sequence_value) VALUES('member_id_seq', 1)", false); - - dbAccessor.executeQuery("INSERT INTO ambari_sequences(sequence_name, sequence_value) VALUES('resource_type_id_seq', 4)", false); - - dbAccessor.executeQuery("INSERT INTO ambari_sequences(sequence_name, sequence_value) VALUES('resource_id_seq', 2)", false); - - dbAccessor.executeQuery("INSERT INTO ambari_sequences(sequence_name, sequence_value) VALUES('principal_type_id_seq', 3)", false); - - dbAccessor.executeQuery("INSERT INTO ambari_sequences(sequence_name, sequence_value) VALUES('principal_id_seq', 2)", false); - - dbAccessor.executeQuery("INSERT INTO ambari_sequences(sequence_name, sequence_value) VALUES('permission_id_seq', 5)", false); - - dbAccessor.executeQuery("INSERT INTO ambari_sequences(sequence_name, sequence_value) VALUES('privilege_id_seq', 1)", false); - - dbAccessor.executeQuery("INSERT INTO ambari_sequences(sequence_name, sequence_value) VALUES('service_config_id_seq', 1)", false); - - dbAccessor.executeQuery("INSERT INTO ambari_sequences(sequence_name, sequence_value) VALUES('service_config_application_id_seq', 1)", false); + addSequences(Arrays.asList( + "alert_definition_id_seq", + "alert_group_id_seq", + "alert_target_id_seq", + "alert_history_id_seq", + "alert_notice_id_seq", + "alert_current_id_seq" + ), 0L, false); + addSequence("group_id_seq", 1L, false); + addSequence("member_id_seq", 1L, false); + addSequence("resource_type_id_seq", 4L, false); + addSequence("resource_id_seq", 2L, false); + addSequence("principal_type_id_seq", 3L, false); + addSequence("principal_id_seq", 2L, false); + addSequence("permission_id_seq", 5L, false); + addSequence("privilege_id_seq", 1L, false); + addSequence("service_config_id_seq", 1L, false); + addSequence("service_config_application_id_seq", 1L, false); long count = 1; @@ -484,7 +472,7 @@ public class UpgradeCatalog170 extends AbstractUpgradeCatalog { } } - dbAccessor.executeQuery("INSERT INTO ambari_sequences(sequence_name, sequence_value) VALUES('config_id_seq', " + count + ")", false); + addSequence("config_id_seq", count, false); dbAccessor.addFKConstraint("users", "FK_users_principal_id", "principal_id", "adminprincipal", "principal_id", true); dbAccessor.addFKConstraint("clusters", "FK_clusters_resource_id", "resource_id", "adminresource", "resource_id", true); @@ -499,9 +487,9 @@ public class UpgradeCatalog170 extends AbstractUpgradeCatalog { dbAccessor.addFKConstraint("members", "FK_members_user_id", "user_id", "users", "user_id", true); dbAccessor.addFKConstraint("members", "FK_members_group_id", "group_id", "groups", "group_id", true); - dbAccessor.executeQuery("ALTER TABLE groups ADD CONSTRAINT UNQ_groups_0 UNIQUE (group_name, ldap_group)"); - dbAccessor.executeQuery("ALTER TABLE members ADD CONSTRAINT UNQ_members_0 UNIQUE (group_id, user_id)"); - dbAccessor.executeQuery("ALTER TABLE adminpermission ADD CONSTRAINT UQ_perm_name_resource_type_id UNIQUE (permission_name, resource_type_id)"); + dbAccessor.addUniqueConstraint("groups", "UNQ_groups_0", "group_name", "ldap_group"); + dbAccessor.addUniqueConstraint("members", "UNQ_members_0", "group_id", "user_id"); + dbAccessor.addUniqueConstraint("adminpermission", "UQ_perm_name_resource_type_id", "permission_name", "resource_type_id"); } /** @@ -511,7 +499,7 @@ public class UpgradeCatalog170 extends AbstractUpgradeCatalog { private void addConfigAttributesColumn(String tableName) throws SQLException { final DatabaseType databaseType = configuration.getDatabaseType(); if (databaseType == DatabaseType.ORACLE) { - dbAccessor.executeQuery("ALTER TABLE " + tableName + " ADD config_attributes CLOB NULL"); + dbAccessor.addColumn(tableName, new DBColumnInfo("config_attributes", char[].class)); } else { DBColumnInfo clusterConfigAttributesColumn = new DBColumnInfo( "config_attributes", Character[].class, null, null, true); @@ -963,11 +951,7 @@ public class UpgradeCatalog170 extends AbstractUpgradeCatalog { "fk_alert_def_cluster_id", "cluster_id", "clusters", "cluster_id", false); - dbAccessor.executeQuery( - "ALTER TABLE " - + ALERT_TABLE_DEFINITION - + " ADD CONSTRAINT uni_alert_def_name UNIQUE (cluster_id,definition_name)", - false); + dbAccessor.addUniqueConstraint(ALERT_TABLE_DEFINITION, "uni_alert_def_name", "cluster_id", "definition_name"); // alert_history columns = new ArrayList<DBColumnInfo>(); @@ -1014,9 +998,7 @@ public class UpgradeCatalog170 extends AbstractUpgradeCatalog { "fk_alert_current_history_id", "history_id", ALERT_TABLE_HISTORY, "alert_id", false); - dbAccessor.executeQuery("ALTER TABLE " + ALERT_TABLE_CURRENT - + " ADD CONSTRAINT uni_alert_current_hist_id UNIQUE (history_id)", - false); + dbAccessor.addUniqueConstraint(ALERT_TABLE_CURRENT, "uni_alert_current_hist_id", "history_id"); // alert_group columns = new ArrayList<DBColumnInfo>(); @@ -1027,11 +1009,7 @@ public class UpgradeCatalog170 extends AbstractUpgradeCatalog { columns.add(new DBColumnInfo("service_name", String.class, 255, null, true)); dbAccessor.createTable(ALERT_TABLE_GROUP, columns, "group_id"); - dbAccessor.executeQuery( - "ALTER TABLE " - + ALERT_TABLE_GROUP - + " ADD CONSTRAINT uni_alert_group_name UNIQUE (cluster_id,group_name)", - false); + dbAccessor.addUniqueConstraint(ALERT_TABLE_GROUP, "uni_alert_group_name", "cluster_id", "group_name"); // alert_target columns = new ArrayList<DBColumnInfo>(); @@ -1042,9 +1020,7 @@ public class UpgradeCatalog170 extends AbstractUpgradeCatalog { columns.add(new DBColumnInfo("description", String.class, 1024, null, true)); dbAccessor.createTable(ALERT_TABLE_TARGET, columns, "target_id"); - dbAccessor.executeQuery("ALTER TABLE " + ALERT_TABLE_TARGET - + " ADD CONSTRAINT uni_alert_target_name UNIQUE (target_name)", - false); + dbAccessor.addUniqueConstraint(ALERT_TABLE_TARGET, "uni_alert_target_name", "target_name"); // alert_group_target columns = new ArrayList<DBColumnInfo>(); @@ -1092,9 +1068,7 @@ public class UpgradeCatalog170 extends AbstractUpgradeCatalog { dbAccessor.addFKConstraint(ALERT_TABLE_NOTICE, "fk_alert_notice_hist_id", "history_id", ALERT_TABLE_HISTORY, "alert_id", false); - dbAccessor.executeQuery("ALTER TABLE " + ALERT_TABLE_NOTICE - + " ADD CONSTRAINT uni_alert_notice_uuid UNIQUE (uuid)", false); - + dbAccessor.addUniqueConstraint(ALERT_TABLE_NOTICE, "uni_alert_notice_uuid", "uuid"); // Indexes dbAccessor.createIndex("idx_alert_history_def_id", ALERT_TABLE_HISTORY, "alert_definition_id"); http://git-wip-us.apache.org/repos/asf/ambari/blob/c46d2539/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog200.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog200.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog200.java index 1a9bfaa..2c9bf30 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog200.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog200.java @@ -241,7 +241,9 @@ public class UpgradeCatalog200 extends AbstractUpgradeCatalog { // Foreign Key Constraints dbAccessor.addFKConstraint("cluster_version", "FK_cluster_version_cluster_id", "cluster_id", "clusters", "cluster_id", false); dbAccessor.addFKConstraint("cluster_version", "FK_cluster_version_repovers_id", "repo_version_id", "repo_version", "repo_version_id", false); - dbAccessor.addFKConstraint("host_version", "FK_host_version_host_name", "host_name", "hosts", "host_name", false); + if (dbAccessor.tableHasColumn("host_version", "host_name")) { + dbAccessor.addFKConstraint("host_version", "FK_host_version_host_name", "host_name", "hosts", "host_name", false); + } dbAccessor.addFKConstraint("host_version", "FK_host_version_repovers_id", "repo_version_id", "repo_version", "repo_version_id", false); // New sequences @@ -305,7 +307,9 @@ public class UpgradeCatalog200 extends AbstractUpgradeCatalog { columns.add(new DBColumnInfo("principal_name", String.class, 255, null, false)); columns.add(new DBColumnInfo("host_name", String.class, 255, null, false)); dbAccessor.createTable(KERBEROS_PRINCIPAL_HOST_TABLE, columns, "principal_name", "host_name"); - dbAccessor.addFKConstraint(KERBEROS_PRINCIPAL_HOST_TABLE, "FK_krb_pr_host_hostname", "host_name", "hosts", "host_name", true, false); + if (dbAccessor.tableHasColumn(KERBEROS_PRINCIPAL_HOST_TABLE, "host_name")) { + dbAccessor.addFKConstraint(KERBEROS_PRINCIPAL_HOST_TABLE, "FK_krb_pr_host_hostname", "host_name", "hosts", "host_name", true, false); + } dbAccessor.addFKConstraint(KERBEROS_PRINCIPAL_HOST_TABLE, "FK_krb_pr_host_principalname", "principal_name", KERBEROS_PRINCIPAL_TABLE, "principal_name", true, false); } http://git-wip-us.apache.org/repos/asf/ambari/blob/c46d2539/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 eb1bab5..3d4d701 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 @@ -266,13 +266,6 @@ public class UpgradeCatalog210 extends AbstractUpgradeCatalog { ), 0L, false); } - /** - * {@inheritDoc} - */ - @Override - public void onPostUpgrade() throws AmbariException, SQLException { - cleanupStackUpdates(); - } private void executeAlertDDLUpdates() throws AmbariException, SQLException { //Fix latest_text column type to match for all DBMS @@ -982,6 +975,7 @@ public class UpgradeCatalog210 extends AbstractUpgradeCatalog { @Override protected void executePreDMLUpdates() throws AmbariException, SQLException { executeStackPreDMLUpdates(); + cleanupStackUpdates(); } /** http://git-wip-us.apache.org/repos/asf/ambari/blob/c46d2539/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java index f28fd8b..484c18d 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java @@ -169,7 +169,7 @@ public class UpgradeCatalog200Test { // Alert Definition dbAccessor.addColumn(eq("alert_definition"), - capture(alertDefinitionIgnoreColumnCapture)); + capture(alertDefinitionIgnoreColumnCapture)); dbAccessor.addColumn(eq("alert_definition"), capture(alertDefinitionDescriptionColumnCapture)); @@ -246,6 +246,8 @@ public class UpgradeCatalog200Test { dbAccessor.createTable(eq("kerberos_principal_host"), capture(kerberosPrincipalHostCapture), eq("principal_name"), eq("host_name")); + expect(dbAccessor.tableHasColumn("kerberos_principal_host", "host_name")).andReturn(true).atLeastOnce(); + dbAccessor.addFKConstraint(eq("kerberos_principal_host"), eq("FK_krb_pr_host_hostname"), eq("host_name"), eq("hosts"), eq("host_name"), eq(true), eq(false)); http://git-wip-us.apache.org/repos/asf/ambari/blob/c46d2539/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java index 4f96ce9..8708047 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java @@ -89,6 +89,7 @@ import com.google.inject.Injector; import com.google.inject.Module; import com.google.inject.Provider; import com.google.inject.persist.PersistService; +import org.powermock.api.easymock.PowerMock; /** * {@link org.apache.ambari.server.upgrade.UpgradeCatalog210} unit tests. @@ -170,16 +171,26 @@ public class UpgradeCatalog210Test { @Test public void testExecutePreDMLUpdates() throws Exception { Method executeStackPreDMLUpdates = UpgradeCatalog210.class.getDeclaredMethod("executeStackPreDMLUpdates"); + Method cleanupStackUpdates = UpgradeCatalog210.class.getDeclaredMethod("cleanupStackUpdates"); - UpgradeCatalog210 upgradeCatalog210 = createMockBuilder(UpgradeCatalog210.class) - .addMockedMethod( executeStackPreDMLUpdates) .createMock(); + final UpgradeCatalog210 upgradeCatalog210 = createMockBuilder(UpgradeCatalog210.class) + .addMockedMethod(executeStackPreDMLUpdates) + .addMockedMethod(cleanupStackUpdates).createMock(); + + final Injector mockInjector = Guice.createInjector(new AbstractModule() { + @Override + protected void configure() { + bind(UpgradeCatalog210.class).toInstance(upgradeCatalog210); + bind(DBAccessor.class).toInstance(createNiceMock(DBAccessor.class)); + bind(OsFamily.class).toInstance(createNiceMock(OsFamily.class)); + } + }); upgradeCatalog210.executeStackPreDMLUpdates(); expectLastCall().once(); replay(upgradeCatalog210); - - upgradeCatalog210.executePreDMLUpdates(); + mockInjector.getInstance(UpgradeCatalog210.class).executePreDMLUpdates(); verify(upgradeCatalog210); }
