Repository: ambari Updated Branches: refs/heads/trunk 16b2f928c -> 7bd1a2a3b
AMBARI-13458. Expose in the API whether downgrade is supported or not (dgrinenko via dlysnichenko) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/7bd1a2a3 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/7bd1a2a3 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/7bd1a2a3 Branch: refs/heads/trunk Commit: 7bd1a2a3ba0198111d0447b1ff8ec8cf364e9fef Parents: 16b2f92 Author: Lisnichenko Dmitro <[email protected]> Authored: Mon Oct 19 16:18:08 2015 +0300 Committer: Lisnichenko Dmitro <[email protected]> Committed: Mon Oct 19 16:18:08 2015 +0300 ---------------------------------------------------------------------- .../internal/UpgradeResourceProvider.java | 4 ++ .../server/orm/entities/UpgradeEntity.java | 15 +++++- .../ambari/server/state/stack/UpgradePack.java | 18 +++++++ .../server/upgrade/UpgradeCatalog213.java | 27 +++++++++- .../main/resources/Ambari-DDL-MySQL-CREATE.sql | 1 + .../main/resources/Ambari-DDL-Oracle-CREATE.sql | 1 + .../resources/Ambari-DDL-Postgres-CREATE.sql | 1 + .../Ambari-DDL-Postgres-EMBEDDED-CREATE.sql | 1 + .../resources/Ambari-DDL-SQLAnywhere-CREATE.sql | 1 + .../resources/Ambari-DDL-SQLServer-CREATE.sql | 1 + .../HDP/2.1/upgrades/nonrolling-upgrade-2.3.xml | 1 + .../ambari/server/orm/dao/UpgradeDAOTest.java | 4 ++ .../server/upgrade/UpgradeCatalog213Test.java | 56 +++++++++++++++++++- 13 files changed, 127 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/7bd1a2a3/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java index 3a52025..a1d2451 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java @@ -124,6 +124,7 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider protected static final String UPGRADE_FROM_VERSION = "Upgrade/from_version"; protected static final String UPGRADE_TO_VERSION = "Upgrade/to_version"; protected static final String UPGRADE_DIRECTION = "Upgrade/direction"; + protected static final String UPGRADE_DOWNGRADE_ALLOWED = "Upgrade/downgrade_allowed"; protected static final String UPGRADE_REQUEST_STATUS = "Upgrade/request_status"; protected static final String UPGRADE_ABORT_REASON = "Upgrade/abort_reason"; protected static final String UPGRADE_SKIP_PREREQUISITE_CHECKS = "Upgrade/skip_prerequisite_checks"; @@ -238,6 +239,7 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider PROPERTY_IDS.add(UPGRADE_FROM_VERSION); PROPERTY_IDS.add(UPGRADE_TO_VERSION); PROPERTY_IDS.add(UPGRADE_DIRECTION); + PROPERTY_IDS.add(UPGRADE_DOWNGRADE_ALLOWED); PROPERTY_IDS.add(UPGRADE_SKIP_FAILURES); PROPERTY_IDS.add(UPGRADE_SKIP_SC_FAILURES); PROPERTY_IDS.add(UPGRADE_SKIP_MANUAL_VERIFICATION); @@ -462,6 +464,7 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider setResourceProperty(resource, UPGRADE_FROM_VERSION, entity.getFromVersion(), requestedIds); setResourceProperty(resource, UPGRADE_TO_VERSION, entity.getToVersion(), requestedIds); setResourceProperty(resource, UPGRADE_DIRECTION, entity.getDirection(), requestedIds); + setResourceProperty(resource, UPGRADE_DOWNGRADE_ALLOWED, entity.isDowngradeAllowed(), requestedIds); return resource; } @@ -803,6 +806,7 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider entity.setDirection(direction); entity.setUpgradePackage(pack.getName()); entity.setUpgradeType(pack.getType()); + entity.setDowngradeAllowed(pack.isDowngradeAllowed()); req.getRequestStatusResponse(); http://git-wip-us.apache.org/repos/asf/ambari/blob/7bd1a2a3/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeEntity.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeEntity.java index ad9073a..297fc8d 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeEntity.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeEntity.java @@ -84,6 +84,9 @@ public class UpgradeEntity { @Enumerated(value = EnumType.STRING) private UpgradeType upgradeType; + @Column(name="downgrade_allowed", nullable = false) + private Integer downgrade_allowed = 1; + @OneToMany(mappedBy = "upgradeEntity", cascade = { CascadeType.ALL }) private List<UpgradeGroupEntity> upgradeGroupEntities; @@ -190,13 +193,23 @@ public class UpgradeEntity { } /** - * @return the upgrade type, such as rolling or non_rolling + * @return the upgrade type, such as rolling oNr non_rolling */ public UpgradeType getUpgradeType() { return upgradeType; } /** + * @return possibility to process downgrade + */ + public Boolean isDowngradeAllowed() { return downgrade_allowed != 0; } + + /** + * @param canDowngrade {@code true} to allow downgrade, {@code false} to disallow downgrade + */ + public void setDowngradeAllowed(boolean canDowngrade){ this.downgrade_allowed = (!canDowngrade ? 0 : 1); } + + /** * @param upgradeType the upgrade type to set */ public void setUpgradeType(UpgradeType upgradeType) { http://git-wip-us.apache.org/repos/asf/ambari/blob/7bd1a2a3/ambari-server/src/main/java/org/apache/ambari/server/state/stack/UpgradePack.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/UpgradePack.java b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/UpgradePack.java index 33dfc0a..7ef65e8 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/UpgradePack.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/UpgradePack.java @@ -82,6 +82,13 @@ public class UpgradePack { private boolean skipFailures = false; /** + * {@code true} to allow downgrade, {@code false} to disable downgrade. + * Tag is optional and can be {@code null}, use {@code isDowngradeAllowed} getter instead. + */ + @XmlElement(name = "downgrade-allowed", required = false) + private Boolean downgradeAllowed = null; + + /** * {@code true} to automatically skip service check failures. The default is * {@code false}. */ @@ -196,6 +203,17 @@ public class UpgradePack { return checked; } + /** + * @return {@code true} if upgrade pack supports downgrade or {@code false} if not. + * Default {@code true} + */ + public boolean isDowngradeAllowed(){ + if (downgradeAllowed != null) { + return downgradeAllowed; // if tag is present, just return exact value + } + return true; + } + public boolean canBeApplied(String targetVersion){ // check that upgrade pack can be applied to selected stack // converting 2.2.*.* -> 2\.2(\.\d+)?(\.\d+)?(-\d+)? http://git-wip-us.apache.org/repos/asf/ambari/blob/7bd1a2a3/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog213.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog213.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog213.java index 803e5f4..ed536cc 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog213.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog213.java @@ -25,9 +25,12 @@ import com.google.inject.Injector; import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.controller.AmbariManagementController; import org.apache.ambari.server.orm.DBAccessor; +import org.apache.ambari.server.orm.DBAccessor.DBColumnInfo; import org.apache.ambari.server.orm.dao.AlertDefinitionDAO; import org.apache.ambari.server.orm.dao.DaoUtils; +import org.apache.ambari.server.orm.dao.UpgradeDAO; import org.apache.ambari.server.orm.entities.AlertDefinitionEntity; +import org.apache.ambari.server.orm.entities.UpgradeEntity; import org.apache.ambari.server.state.Cluster; import org.apache.ambari.server.state.Clusters; import org.apache.ambari.server.state.Config; @@ -52,6 +55,7 @@ import java.util.UUID; */ public class UpgradeCatalog213 extends AbstractUpgradeCatalog { + private static final String UPGRADE_TABLE = "upgrade"; private static final String STORM_SITE = "storm-site"; private static final String HDFS_SITE_CONFIG = "hdfs-site"; private static final String KAFKA_BROKER = "kafka-broker"; @@ -67,7 +71,7 @@ public class UpgradeCatalog213 extends AbstractUpgradeCatalog { " ulimit -l {{datanode_max_locked_memory}}\n" + "fi\n" + "{% endif %};\n"; - + private static final String DOWNGRADE_ALLOWED_COLUMN = "downgrade_allowed"; private static final String KERBEROS_DESCRIPTOR_TABLE = "kerberos_descriptor"; private static final String KERBEROS_DESCRIPTOR_NAME_COLUMN = "kerberos_descriptor_name"; private static final String KERBEROS_DESCRIPTOR_COLUMN = "kerberos_descriptor"; @@ -77,7 +81,6 @@ public class UpgradeCatalog213 extends AbstractUpgradeCatalog { */ private static final Logger LOG = LoggerFactory.getLogger(UpgradeCatalog213.class); - @Inject DaoUtils daoUtils; @@ -121,9 +124,14 @@ public class UpgradeCatalog213 extends AbstractUpgradeCatalog { */ @Override protected void executeDDLUpdates() throws AmbariException, SQLException { + executeUpgradeDDLUpdates(); addKerberosDescriptorTable(); } + protected void executeUpgradeDDLUpdates() throws AmbariException, SQLException { + dbAccessor.addColumn(UPGRADE_TABLE, new DBColumnInfo(DOWNGRADE_ALLOWED_COLUMN, Short.class, 1, null, true)); + } + private void addKerberosDescriptorTable() throws SQLException { List<DBAccessor.DBColumnInfo> columns = new ArrayList<DBAccessor.DBColumnInfo>(); @@ -139,6 +147,21 @@ public class UpgradeCatalog213 extends AbstractUpgradeCatalog { */ @Override protected void executePreDMLUpdates() throws AmbariException, SQLException { + populateDowngradeAllowed(); + } + + protected void populateDowngradeAllowed() throws AmbariException, SQLException { + UpgradeDAO upgradeDAO = injector.getInstance(UpgradeDAO.class); + List<UpgradeEntity> upgrades = upgradeDAO.findAll(); + for (UpgradeEntity upgrade: upgrades){ + if (upgrade.isDowngradeAllowed() == null) { + upgrade.setDowngradeAllowed(true); + upgradeDAO.merge(upgrade); + LOG.info(String.format("Update upgrade id %s, upgrade pack %s from version %s to %s", + upgrade.getId(), upgrade.getUpgradePackage(), upgrade.getFromVersion(), upgrade.getToVersion())); + } + } + dbAccessor.setColumnNullable(UPGRADE_TABLE, DOWNGRADE_ALLOWED_COLUMN, false); } @Override http://git-wip-us.apache.org/repos/asf/ambari/blob/7bd1a2a3/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql index 031b3b1..40ec758 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql @@ -891,6 +891,7 @@ CREATE TABLE upgrade ( direction VARCHAR(255) DEFAULT 'UPGRADE' NOT NULL, upgrade_package VARCHAR(255) NOT NULL, upgrade_type VARCHAR(32) NOT NULL, + downgrade_allowed TINYINT(1) NOT NULL DEFAULT 1, PRIMARY KEY (upgrade_id), FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id), FOREIGN KEY (request_id) REFERENCES request(request_id) http://git-wip-us.apache.org/repos/asf/ambari/blob/7bd1a2a3/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql index 9021536..f07aadf 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql @@ -880,6 +880,7 @@ CREATE TABLE upgrade ( direction VARCHAR2(255) DEFAULT 'UPGRADE' NOT NULL, upgrade_package VARCHAR2(255) NOT NULL, upgrade_type VARCHAR2(32) NOT NULL, + downgrade_allowed NUMBER(1) DEFAULT 1 NOT NULL, PRIMARY KEY (upgrade_id), FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id), FOREIGN KEY (request_id) REFERENCES request(request_id) http://git-wip-us.apache.org/repos/asf/ambari/blob/7bd1a2a3/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql index 036ca15..697bf3e 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql @@ -882,6 +882,7 @@ CREATE TABLE upgrade ( direction VARCHAR(255) DEFAULT 'UPGRADE' NOT NULL, upgrade_package VARCHAR(255) NOT NULL, upgrade_type VARCHAR(32) NOT NULL, + downgrade_allowed SMALLINT DEFAULT 1 NOT NULL, PRIMARY KEY (upgrade_id), FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id), FOREIGN KEY (request_id) REFERENCES request(request_id) http://git-wip-us.apache.org/repos/asf/ambari/blob/7bd1a2a3/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql index 5f0b523..caf1e9b 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql @@ -974,6 +974,7 @@ CREATE TABLE ambari.upgrade ( direction VARCHAR(255) DEFAULT 'UPGRADE' NOT NULL, upgrade_package VARCHAR(255) NOT NULL, upgrade_type VARCHAR(32) NOT NULL, + downgrade_allowed SMALLINT DEFAULT 1 NOT NULL, PRIMARY KEY (upgrade_id), FOREIGN KEY (cluster_id) REFERENCES ambari.clusters(cluster_id), FOREIGN KEY (request_id) REFERENCES ambari.request(request_id) http://git-wip-us.apache.org/repos/asf/ambari/blob/7bd1a2a3/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql index 9293d4e..8d8a99c 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql @@ -879,6 +879,7 @@ CREATE TABLE upgrade ( from_version VARCHAR(255) DEFAULT '' NOT NULL, to_version VARCHAR(255) DEFAULT '' NOT NULL, direction VARCHAR(255) DEFAULT 'UPGRADE' NOT NULL, + downgrade_allowed BIT NOT NULL DEFAULT 1, PRIMARY KEY (upgrade_id), FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id), FOREIGN KEY (request_id) REFERENCES request(request_id) http://git-wip-us.apache.org/repos/asf/ambari/blob/7bd1a2a3/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql index ba74ff8..089c2c5 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql @@ -997,6 +997,7 @@ CREATE TABLE upgrade ( direction VARCHAR(255) DEFAULT 'UPGRADE' NOT NULL, upgrade_package VARCHAR(255) NOT NULL, upgrade_type VARCHAR(32) NOT NULL, + downgrade_allowed BIT NOT NULL DEFAULT 1, PRIMARY KEY CLUSTERED (upgrade_id), FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id), FOREIGN KEY (request_id) REFERENCES request(request_id) http://git-wip-us.apache.org/repos/asf/ambari/blob/7bd1a2a3/ambari-server/src/main/resources/stacks/HDP/2.1/upgrades/nonrolling-upgrade-2.3.xml ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/HDP/2.1/upgrades/nonrolling-upgrade-2.3.xml b/ambari-server/src/main/resources/stacks/HDP/2.1/upgrades/nonrolling-upgrade-2.3.xml index 603b1fd..daa1e08 100644 --- a/ambari-server/src/main/resources/stacks/HDP/2.1/upgrades/nonrolling-upgrade-2.3.xml +++ b/ambari-server/src/main/resources/stacks/HDP/2.1/upgrades/nonrolling-upgrade-2.3.xml @@ -21,6 +21,7 @@ <target>2.3.*.*</target> <target-stack>HDP-2.3</target-stack> <type>NON_ROLLING</type> + <downgrade-allowed>false</downgrade-allowed> <prerequisite-checks> </prerequisite-checks> <upgrade-path> http://git-wip-us.apache.org/repos/asf/ambari/blob/7bd1a2a3/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/UpgradeDAOTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/UpgradeDAOTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/UpgradeDAOTest.java index f6d1acf..f8f7973 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/UpgradeDAOTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/UpgradeDAOTest.java @@ -78,6 +78,7 @@ public class UpgradeDAOTest { entity.setToVersion(""); entity.setUpgradeType(UpgradeType.ROLLING); entity.setUpgradePackage("test-upgrade"); + entity.setDowngradeAllowed(true); UpgradeGroupEntity group = new UpgradeGroupEntity(); group.setName("group_name"); @@ -148,6 +149,7 @@ public class UpgradeDAOTest { entity1.setToVersion("2.3.0.0-4567"); entity1.setUpgradeType(UpgradeType.ROLLING); entity1.setUpgradePackage("test-upgrade"); + entity1.setDowngradeAllowed(true); dao.create(entity1); UpgradeEntity entity2 = new UpgradeEntity(); entity2.setId(22L); @@ -158,6 +160,7 @@ public class UpgradeDAOTest { entity2.setToVersion("2.2.0.0-1234"); entity2.setUpgradeType(UpgradeType.ROLLING); entity2.setUpgradePackage("test-upgrade"); + entity2.setDowngradeAllowed(true); dao.create(entity2); UpgradeEntity entity3 = new UpgradeEntity(); entity3.setId(33L); @@ -168,6 +171,7 @@ public class UpgradeDAOTest { entity3.setToVersion("2.3.1.1-4567"); entity3.setUpgradeType(UpgradeType.ROLLING); entity3.setUpgradePackage("test-upgrade"); + entity3.setDowngradeAllowed(true); dao.create(entity3); UpgradeEntity lastUpgradeForCluster = dao.findLastUpgradeForCluster(1); assertNotNull(lastUpgradeForCluster); http://git-wip-us.apache.org/repos/asf/ambari/blob/7bd1a2a3/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog213Test.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog213Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog213Test.java index 7a60b8c..24471bd 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog213Test.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog213Test.java @@ -63,6 +63,7 @@ import static org.easymock.EasyMock.capture; import static org.easymock.EasyMock.createMockBuilder; import static org.easymock.EasyMock.createNiceMock; import static org.easymock.EasyMock.createStrictMock; +import static org.easymock.EasyMock.eq; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.expectLastCall; import static org.easymock.EasyMock.replay; @@ -103,6 +104,27 @@ public class UpgradeCatalog213Test { } @Test + public void testExecuteUpgradeDDLUpdates() throws Exception{ + final DBAccessor dbAccessor = createNiceMock(DBAccessor.class); + + dbAccessor.addColumn(eq("upgrade"), anyObject(DBAccessor.DBColumnInfo.class)); + + replay(dbAccessor); + Module module = new Module() { + @Override + public void configure(Binder binder) { + binder.bind(DBAccessor.class).toInstance(dbAccessor); + binder.bind(OsFamily.class).toInstance(createNiceMock(OsFamily.class)); + } + }; + + Injector injector = Guice.createInjector(module); + UpgradeCatalog213 upgradeCatalog213 = injector.getInstance(UpgradeCatalog213.class); + upgradeCatalog213.executeUpgradeDDLUpdates(); + verify(dbAccessor); + } + + @Test public void testExecuteDMLUpdates() throws Exception { Method updateAMSConfigs = UpgradeCatalog213.class.getDeclaredMethod("updateAMSConfigs"); Method updateHDFSConfigs = UpgradeCatalog213.class.getDeclaredMethod("updateHDFSConfigs"); @@ -149,6 +171,31 @@ public class UpgradeCatalog213Test { } @Test + public void testPopulateDowngradeAllowed() throws Exception { + Method executeStackPreDMLUpdates = UpgradeCatalog213.class.getDeclaredMethod("populateDowngradeAllowed"); + + final UpgradeCatalog213 upgradeCatalog213 = createMockBuilder(UpgradeCatalog213.class) + .addMockedMethod(executeStackPreDMLUpdates).createMock(); + + final Injector mockInjector = Guice.createInjector(new AbstractModule() { + @Override + protected void configure() { + bind(UpgradeCatalog213.class).toInstance(upgradeCatalog213); + bind(DBAccessor.class).toInstance(createNiceMock(DBAccessor.class)); + bind(OsFamily.class).toInstance(createNiceMock(OsFamily.class)); + } + }); + + upgradeCatalog213.populateDowngradeAllowed(); + expectLastCall().once(); + + replay(upgradeCatalog213); + mockInjector.getInstance(UpgradeCatalog213.class).executePreDMLUpdates(); + + verify(upgradeCatalog213); + } + + @Test public void testUpdateStormSiteConfigs() throws Exception { EasyMockSupport easyMockSupport = new EasyMockSupport(); final AmbariManagementController mockAmbariManagementController = easyMockSupport.createNiceMock(AmbariManagementController.class); @@ -486,15 +533,22 @@ public class UpgradeCatalog213Test { Capture<String> capturedTableName = EasyMock.newCapture(); Capture<String> capturedPKColumn = EasyMock.newCapture(); Capture<List<DBAccessor.DBColumnInfo>> capturedColumns = EasyMock.newCapture(); + Capture<DBAccessor.DBColumnInfo> capturedColumn = EasyMock.newCapture(); EasyMock.expect(mockedInjector.getInstance(DaoUtils.class)).andReturn(mockedDaoUtils); mockedInjector.injectMembers(anyObject(UpgradeCatalog.class)); - EasyMock.expect(mockedConfiguration.getDatabaseType()).andReturn(Configuration.DatabaseType.POSTGRES).times(2); + EasyMock.expect(mockedConfiguration.getDatabaseType()).andReturn(Configuration.DatabaseType.POSTGRES).anyTimes(); EasyMock.expect(mockedConfiguration.getDatabaseUser()).andReturn("ambari"); EasyMock.expect(mockedConfiguration.getServerJDBCPostgresSchemaName()).andReturn("fo"); + mockedDbAccessor.executeQuery("ALTER SCHEMA fo OWNER TO \"ambari\";"); mockedDbAccessor.executeQuery("ALTER ROLE \"ambari\" SET search_path to 'fo';"); + + // executeUpgradeDDLUpdates + mockedDbAccessor.addColumn(eq("upgrade"), capture(capturedColumn)); + + // addKerberosDescriptorTable mockedDbAccessor.createTable(capture(capturedTableName), capture(capturedColumns), capture(capturedPKColumn)); mocksControl.replay();
