Repository: ambari Updated Branches: refs/heads/branch-2.6 5b7f5316a -> a6e87b8ed
AMBARI-22007 - Addition of service component after patching a service still keeps the component at base version (jonathanhurley) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/a6e87b8e Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/a6e87b8e Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/a6e87b8e Branch: refs/heads/branch-2.6 Commit: a6e87b8ed3c75f66e8ba400f06afa164210d8aae Parents: 5b7f531 Author: Jonathan Hurley <jhur...@hortonworks.com> Authored: Wed Sep 20 16:59:48 2017 -0400 Committer: Jonathan Hurley <jhur...@hortonworks.com> Committed: Wed Sep 20 16:59:48 2017 -0400 ---------------------------------------------------------------------- .../ambari/server/agent/CommandRepository.java | 28 +++++++++++++++ .../AmbariCustomCommandExecutionHelper.java | 1 + .../RepositoryVersionResourceProvider.java | 6 ++-- .../DistributeRepositoriesActionListener.java | 1 + .../listeners/upgrade/StackVersionListener.java | 1 + .../orm/entities/RepositoryVersionEntity.java | 37 ++++++++++++++++++++ .../stack/upgrade/RepositoryVersionHelper.java | 1 + .../server/upgrade/UpgradeCatalog260.java | 29 +++++++++++++-- .../main/resources/Ambari-DDL-Derby-CREATE.sql | 1 + .../main/resources/Ambari-DDL-MySQL-CREATE.sql | 1 + .../main/resources/Ambari-DDL-Oracle-CREATE.sql | 1 + .../resources/Ambari-DDL-Postgres-CREATE.sql | 1 + .../resources/Ambari-DDL-SQLAnywhere-CREATE.sql | 1 + .../resources/Ambari-DDL-SQLServer-CREATE.sql | 1 + .../upgrade/StackVersionListenerTest.java | 5 +++ .../server/upgrade/UpgradeCatalog260Test.java | 21 +++++++---- .../src/test/python/TestVersionSelectUtil.py | 14 ++++---- 17 files changed, 133 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/a6e87b8e/ambari-server/src/main/java/org/apache/ambari/server/agent/CommandRepository.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/agent/CommandRepository.java b/ambari-server/src/main/java/org/apache/ambari/server/agent/CommandRepository.java index 1351713..301f475 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/agent/CommandRepository.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/agent/CommandRepository.java @@ -46,6 +46,13 @@ public class CommandRepository { private String m_stackName; /** + * {@code true} if Ambari believes that this repository has reported back it's + * version after distribution. + */ + @SerializedName("resolved") + private boolean m_resolved; + + /** * @param version the repo version */ public void setRepositoryVersion(String version) { @@ -119,6 +126,27 @@ public class CommandRepository { } /** + * Gets whether this repository has been marked as having its version + * resolved. + * + * @return {@code true} if this repository has been confirmed to have the + * right version. + */ + public boolean isResolved() { + return m_resolved; + } + + /** + * Gets whether this repository has had its version resolved. + * + * @param resolved + * {@code true} to mark this repository as being resolved. + */ + public void setResolved(boolean resolved) { + m_resolved = resolved; + } + + /** * Minimal information required to generate repo files on the agent. These are copies * of the repository objects from repo versions that can be changed for URL overrides, etc. */ http://git-wip-us.apache.org/repos/asf/ambari/blob/a6e87b8e/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java index 3c15d92..2b2144c 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java @@ -1284,6 +1284,7 @@ public class AmbariCustomCommandExecutionHelper { public Void apply(RepositoryVersionEntity rve) { command.setRepositoryVersionId(rve.getId()); command.setRepositoryVersion(rve.getVersion()); + command.setResolved(rve.isResolved()); command.setStackName(rve.getStackName()); // !!! a repository version entity has all the repos worked out. We shouldn't use http://git-wip-us.apache.org/repos/asf/ambari/blob/a6e87b8e/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProvider.java index e1da813..73336ae 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProvider.java @@ -87,6 +87,7 @@ public class RepositoryVersionResourceProvider extends AbstractAuthorizedResourc public static final String REPOSITORY_VERSION_REPOSITORY_VERSION_PROPERTY_ID = PropertyHelper.getPropertyId("RepositoryVersions", "repository_version"); public static final String REPOSITORY_VERSION_DISPLAY_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("RepositoryVersions", "display_name"); public static final String REPOSITORY_VERSION_HIDDEN_PROPERTY_ID = PropertyHelper.getPropertyId("RepositoryVersions", "hidden"); + public static final String REPOSITORY_VERSION_RESOLVED_PROPERTY_ID = PropertyHelper.getPropertyId("RepositoryVersions", "resolved"); public static final String SUBRESOURCE_OPERATING_SYSTEMS_PROPERTY_ID = new OperatingSystemResourceDefinition().getPluralName(); public static final String SUBRESOURCE_REPOSITORIES_PROPERTY_ID = new RepositoryResourceDefinition().getPluralName(); @@ -121,7 +122,8 @@ public class RepositoryVersionResourceProvider extends AbstractAuthorizedResourc REPOSITORY_VERSION_PARENT_ID, REPOSITORY_VERSION_HAS_CHILDREN, REPOSITORY_VERSION_AVAILABLE_SERVICES, - REPOSITORY_VERSION_STACK_SERVICES); + REPOSITORY_VERSION_STACK_SERVICES, + REPOSITORY_VERSION_RESOLVED_PROPERTY_ID); @SuppressWarnings("serial") public static Map<Type, String> keyPropertyIds = new ImmutableMap.Builder<Type, String>() @@ -257,7 +259,7 @@ public class RepositoryVersionResourceProvider extends AbstractAuthorizedResourc setResourceProperty(resource, REPOSITORY_VERSION_HIDDEN_PROPERTY_ID, entity.isHidden(), requestedIds); setResourceProperty(resource, REPOSITORY_VERSION_REPOSITORY_VERSION_PROPERTY_ID, entity.getVersion(), requestedIds); setResourceProperty(resource, REPOSITORY_VERSION_TYPE_PROPERTY_ID, entity.getType(), requestedIds); - + setResourceProperty(resource, REPOSITORY_VERSION_RESOLVED_PROPERTY_ID, entity.isResolved(), requestedIds); setResourceProperty(resource, REPOSITORY_VERSION_PARENT_ID, entity.getParentId(), requestedIds); List<RepositoryVersionEntity> children = entity.getChildren(); http://git-wip-us.apache.org/repos/asf/ambari/blob/a6e87b8e/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/DistributeRepositoriesActionListener.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/DistributeRepositoriesActionListener.java b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/DistributeRepositoriesActionListener.java index aa29894..376e20d 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/DistributeRepositoriesActionListener.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/DistributeRepositoriesActionListener.java @@ -124,6 +124,7 @@ public class DistributeRepositoriesActionListener { if (null != repoVersion && StringUtils.isNotBlank(actualVersion)) { if (!StringUtils.equals(repoVersion.getVersion(), actualVersion)) { repoVersion.setVersion(actualVersion); + repoVersion.setResolved(true); repoVersionDAO.merge(repoVersion); repositoryVersion = actualVersion; } http://git-wip-us.apache.org/repos/asf/ambari/blob/a6e87b8e/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java index b812476..0ce64bf 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java @@ -99,6 +99,7 @@ public class StackVersionListener { String currentRepoVersion = rve.getVersion(); if (!StringUtils.equals(currentRepoVersion, newVersion)) { rve.setVersion(newVersion); + rve.setResolved(true); repositoryVersionDAO.merge(rve); } } http://git-wip-us.apache.org/repos/asf/ambari/blob/a6e87b8e/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java index 72269f0..072863d 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java @@ -146,6 +146,16 @@ public class RepositoryVersionEntity { @Column(name = "hidden", nullable = false, insertable = true, updatable = true) private short isHidden = 0; + /** + * Repositories can't be trusted until they have been deployed and we've + * detected their actual version. Most of the time, things match up, but + * editing a VDF could causes the version to be misrepresented. Once we have + * received the correct version of the repository (normally after it's been + * installed), then we can set this flag to {@code true}. + */ + @Column(name = "resolved", nullable = false) + private short resolved = 0; + @ManyToOne @JoinColumn(name = "parent_id") private RepositoryVersionEntity parent; @@ -216,6 +226,13 @@ public class RepositoryVersionEntity { return version; } + /** + * Sets the version on this repository version entity. If the version is + * confirmed as correct, then the called should also set + * {@link #setResolved(boolean)}. + * + * @param version + */ public void setVersion(String version) { this.version = version; } @@ -473,4 +490,24 @@ public class RepositoryVersionEntity { this.isHidden = (short) (isHidden ? 1 : 0); } + /** + * Gets whether this repository has been installed and has reported back its + * actual version. + * + * @return {@code true} if the version for this repository can be trusted, + * {@code false} otherwise. + */ + public boolean isResolved() { + return resolved == 1; + } + + /** + * Sets whether this repository has been installed and has reported back its + * actual version. + * + * @param resolved + */ + public void setResolved(boolean resolved) { + this.resolved = resolved ? (short) 1 : (short) 0; + } } http://git-wip-us.apache.org/repos/asf/ambari/blob/a6e87b8e/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/RepositoryVersionHelper.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/RepositoryVersionHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/RepositoryVersionHelper.java index 3ab28e9..1c62a86 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/RepositoryVersionHelper.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/RepositoryVersionHelper.java @@ -320,6 +320,7 @@ public class RepositoryVersionHelper { commandRepo.setRepositories(osEntity.getOsType(), osEntity.getRepositories()); commandRepo.setRepositoryVersion(repoVersion.getVersion()); commandRepo.setRepositoryVersionId(repoVersion.getId()); + commandRepo.setResolved(repoVersion.isResolved()); commandRepo.setStackName(repoVersion.getStackId().getStackName()); if (!osEntity.isAmbariManagedRepos()) { http://git-wip-us.apache.org/repos/asf/ambari/blob/a6e87b8e/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog260.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog260.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog260.java index afd3d1d..8d1816d 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog260.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog260.java @@ -32,8 +32,10 @@ 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.dao.ArtifactDAO; +import org.apache.ambari.server.orm.dao.RepositoryVersionDAO; import org.apache.ambari.server.orm.entities.ArtifactEntity; import org.apache.ambari.server.orm.entities.ClusterConfigEntity; +import org.apache.ambari.server.orm.entities.RepositoryVersionEntity; import org.apache.ambari.server.state.Cluster; import org.apache.ambari.server.state.Clusters; import org.apache.ambari.server.state.Config; @@ -78,6 +80,7 @@ public class UpgradeCatalog260 extends AbstractUpgradeCatalog { public static final String REPO_VERSION_TABLE = "repo_version"; public static final String REPO_VERSION_ID_COLUMN = "repo_version_id"; + public static final String REPO_VERSION_RESOLVED_COLUMN = "resolved"; public static final String REPO_VERSION_HIDDEN_COLUMN = "hidden"; public static final String HOST_COMPONENT_DESIRED_STATE_TABLE = "hostcomponentdesiredstate"; @@ -381,14 +384,20 @@ public class UpgradeCatalog260 extends AbstractUpgradeCatalog { } /** - * Updates {@value #REPO_VERSION_TABLE} table. Adds - * {@value #REPO_VERSION_HIDDEN_COLUMN} column. + * Updates {@value #REPO_VERSION_TABLE} table. Adds the following columns: + * <ul> + * <li>{@value #REPO_VERSION_HIDDEN_COLUMN} + * <li>{@value #REPO_VERSION_RESOLVED_COLUMN} + * </ul> * * @throws java.sql.SQLException */ private void updateRepositoryVersionTable() throws SQLException { dbAccessor.addColumn(REPO_VERSION_TABLE, new DBAccessor.DBColumnInfo(REPO_VERSION_HIDDEN_COLUMN, Short.class, null, 0, false)); + + dbAccessor.addColumn(REPO_VERSION_TABLE, + new DBAccessor.DBColumnInfo(REPO_VERSION_RESOLVED_COLUMN, Short.class, null, 0, false)); } /** @@ -410,6 +419,7 @@ public class UpgradeCatalog260 extends AbstractUpgradeCatalog { updateKerberosDescriptorArtifacts(); updateAmsConfigs(); updateHDFSWidgetDefinition(); + updateExistingRepositoriesToBeResolved(); } /** @@ -599,4 +609,19 @@ public class UpgradeCatalog260 extends AbstractUpgradeCatalog { updateWidgetDefinitionsForService("HDFS", widgetMap, sectionLayoutMap); } + + /** + * Sets all existing repository versions to be resolved (we have to assume + * that they are good since they've been using them to run stuff). + * + * @throws AmbariException + */ + protected void updateExistingRepositoriesToBeResolved() throws AmbariException { + RepositoryVersionDAO repositoryVersionDAO = injector.getInstance(RepositoryVersionDAO.class); + List<RepositoryVersionEntity> repositoryVersions = repositoryVersionDAO.findAll(); + for (RepositoryVersionEntity repositoryVersion : repositoryVersions) { + repositoryVersion.setResolved(true); + repositoryVersionDAO.merge(repositoryVersion); + } + } } http://git-wip-us.apache.org/repos/asf/ambari/blob/a6e87b8e/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql index 796d9b2..4f78e82 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql @@ -155,6 +155,7 @@ CREATE TABLE repo_version ( repositories VARCHAR(3000) NOT NULL, repo_type VARCHAR(255) DEFAULT 'STANDARD' NOT NULL, hidden SMALLINT NOT NULL DEFAULT 0, + resolved SMALLINT NOT NULL DEFAULT 0, version_url VARCHAR(1024), version_xml CLOB, version_xsd VARCHAR(512), http://git-wip-us.apache.org/repos/asf/ambari/blob/a6e87b8e/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 c002601..2287b01 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql @@ -175,6 +175,7 @@ CREATE TABLE repo_version ( repositories MEDIUMTEXT NOT NULL, repo_type VARCHAR(255) DEFAULT 'STANDARD' NOT NULL, hidden SMALLINT NOT NULL DEFAULT 0, + resolved TINYINT(1) NOT NULL DEFAULT 0, version_url VARCHAR(1024), version_xml MEDIUMTEXT, version_xsd VARCHAR(512), http://git-wip-us.apache.org/repos/asf/ambari/blob/a6e87b8e/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 d78c1c7..6e7a295 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql @@ -156,6 +156,7 @@ CREATE TABLE repo_version ( repositories CLOB NOT NULL, repo_type VARCHAR2(255) DEFAULT 'STANDARD' NOT NULL, hidden NUMBER(1) DEFAULT 0 NOT NULL, + resolved NUMBER(1) DEFAULT 0 NOT NULL, version_url VARCHAR(1024), version_xml CLOB, version_xsd VARCHAR(512), http://git-wip-us.apache.org/repos/asf/ambari/blob/a6e87b8e/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 90f1397..a50d4c9 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql @@ -159,6 +159,7 @@ CREATE TABLE repo_version ( version_xml TEXT, version_xsd VARCHAR(512), parent_id BIGINT, + resolved SMALLINT NOT NULL DEFAULT 0, CONSTRAINT PK_repo_version PRIMARY KEY (repo_version_id), CONSTRAINT FK_repoversion_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id), CONSTRAINT UQ_repo_version_display_name UNIQUE (display_name), http://git-wip-us.apache.org/repos/asf/ambari/blob/a6e87b8e/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 c4bb763..619f96e 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql @@ -154,6 +154,7 @@ CREATE TABLE repo_version ( repositories TEXT NOT NULL, repo_type VARCHAR(255) DEFAULT 'STANDARD' NOT NULL, hidden SMALLINT NOT NULL DEFAULT 0, + resolved BIT NOT NULL DEFAULT 0, version_url VARCHAR(1024), version_xml TEXT, version_xsd VARCHAR(512), http://git-wip-us.apache.org/repos/asf/ambari/blob/a6e87b8e/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 9f7aa91..937bd88 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql @@ -168,6 +168,7 @@ CREATE TABLE repo_version ( repositories VARCHAR(MAX) NOT NULL, repo_type VARCHAR(255) DEFAULT 'STANDARD' NOT NULL, hidden SMALLINT NOT NULL DEFAULT 0, + resolved BIT NOT NULL DEFAULT 0, version_url VARCHAR(1024), version_xml VARCHAR(MAX), version_xsd VARCHAR(512), http://git-wip-us.apache.org/repos/asf/ambari/blob/a6e87b8e/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListenerTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListenerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListenerTest.java index cd8b499..6548c08 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListenerTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListenerTest.java @@ -306,6 +306,11 @@ public class StackVersionListenerTest extends EasyMockSupport { RepositoryVersionDAO dao = createNiceMock(RepositoryVersionDAO.class); RepositoryVersionEntity entity = createNiceMock(RepositoryVersionEntity.class); expect(entity.getVersion()).andReturn("2.4.0.0").once(); + + // when the version gets reported back, we set this repo to resolved + entity.setResolved(true); + expectLastCall().once(); + expect(dao.findByPK(1L)).andReturn(entity).once(); expect(dao.merge(entity)).andReturn(entity).once(); http://git-wip-us.apache.org/repos/asf/ambari/blob/a6e87b8e/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog260Test.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog260Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog260Test.java index ddff0e9..5891b41 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog260Test.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog260Test.java @@ -49,8 +49,6 @@ import java.util.Set; import javax.persistence.EntityManager; -import com.google.common.collect.Maps; -import com.google.inject.AbstractModule; import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.actionmanager.ActionManager; import org.apache.ambari.server.api.services.AmbariMetaInfo; @@ -93,7 +91,9 @@ import org.junit.Test; import org.junit.rules.TemporaryFolder; import org.junit.runner.RunWith; +import com.google.common.collect.Maps; import com.google.gson.Gson; +import com.google.inject.AbstractModule; import com.google.inject.Binder; import com.google.inject.Guice; import com.google.inject.Injector; @@ -219,7 +219,8 @@ public class UpgradeCatalog260Test { expectDropStaleTables(); Capture<DBColumnInfo> repoVersionHiddenColumnCapture = newCapture(); - expectUpdateRepositoryVersionTableTable(repoVersionHiddenColumnCapture); + Capture<DBColumnInfo> repoVersionResolvedColumnCapture = newCapture(); + expectUpdateRepositoryVersionTableTable(repoVersionHiddenColumnCapture, repoVersionResolvedColumnCapture); Capture<DBColumnInfo> unapped = newCapture(); expectRenameServiceDeletedColumn(unapped); @@ -248,7 +249,7 @@ public class UpgradeCatalog260Test { verifyAddSelectedCollumsToClusterconfigTable(selectedColumnInfo, selectedmappingColumnInfo, selectedTimestampColumnInfo, createTimestampColumnInfo); verifyUpdateUpgradeTable(rvid, orchestration, revertAllowed); verifyCreateUpgradeHistoryTable(columns); - verifyUpdateRepositoryVersionTableTable(repoVersionHiddenColumnCapture); + verifyUpdateRepositoryVersionTableTable(repoVersionHiddenColumnCapture, repoVersionResolvedColumnCapture); } public void expectDropStaleTables() throws SQLException { @@ -581,16 +582,24 @@ public class UpgradeCatalog260Test { * @param hiddenColumnCapture * @throws SQLException */ - public void expectUpdateRepositoryVersionTableTable(Capture<DBColumnInfo> hiddenColumnCapture) throws SQLException { + public void expectUpdateRepositoryVersionTableTable(Capture<DBColumnInfo> hiddenColumnCapture, + Capture<DBColumnInfo> repoVersionResolvedColumnCapture) throws SQLException { dbAccessor.addColumn(eq(UpgradeCatalog260.REPO_VERSION_TABLE), capture(hiddenColumnCapture)); + dbAccessor.addColumn(eq(UpgradeCatalog260.REPO_VERSION_TABLE), capture(repoVersionResolvedColumnCapture)); expectLastCall().once(); } - public void verifyUpdateRepositoryVersionTableTable(Capture<DBColumnInfo> hiddenColumnCapture) { + public void verifyUpdateRepositoryVersionTableTable(Capture<DBColumnInfo> hiddenColumnCapture, + Capture<DBColumnInfo> resolvedColumnCapture) { DBColumnInfo hiddenColumn = hiddenColumnCapture.getValue(); Assert.assertEquals(0, hiddenColumn.getDefaultValue()); Assert.assertEquals(UpgradeCatalog260.REPO_VERSION_HIDDEN_COLUMN, hiddenColumn.getName()); Assert.assertEquals(false, hiddenColumn.isNullable()); + + DBColumnInfo resolvedColumn = resolvedColumnCapture.getValue(); + Assert.assertEquals(0, resolvedColumn.getDefaultValue()); + Assert.assertEquals(UpgradeCatalog260.REPO_VERSION_RESOLVED_COLUMN, resolvedColumn.getName()); + Assert.assertEquals(false, resolvedColumn.isNullable()); } @Test http://git-wip-us.apache.org/repos/asf/ambari/blob/a6e87b8e/ambari-server/src/test/python/TestVersionSelectUtil.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/python/TestVersionSelectUtil.py b/ambari-server/src/test/python/TestVersionSelectUtil.py index 38798e2..c19ad79 100644 --- a/ambari-server/src/test/python/TestVersionSelectUtil.py +++ b/ambari-server/src/test/python/TestVersionSelectUtil.py @@ -40,7 +40,7 @@ class TestVersionSelectUtil(TestCase): @patch("resource_management.core.shell.call") @patch('os.path.exists') @patch("resource_management.libraries.functions.stack_tools.get_stack_tool") - def test_get_component_version(self, get_stack_tool_mock, os_path_exists_mock, call_mock, open_mock): + def test_get_component_version_from_symlink(self, get_stack_tool_mock, os_path_exists_mock, call_mock, open_mock): stack_expected_version = "2.2.1.0-2175" # Mock classes for reading from a file @@ -79,21 +79,21 @@ class TestVersionSelectUtil(TestCase): call_mock.side_effect = [(0, "value will come from MagicFile"), ] * 3 # Missing stack name - version = self.module.get_component_version(None, "hadoop-hdfs-datanode") + version = self.module.get_component_version_from_symlink(None, "hadoop-hdfs-datanode") self.assertEquals(version, None) # Missing component name - version = self.module.get_component_version("HDP", None) + version = self.module.get_component_version_from_symlink("HDP", None) self.assertEquals(version, None) # Invalid stack name - version = self.module.get_component_version("StackDoesNotExist", "hadoop-hdfs-datanode") + version = self.module.get_component_version_from_symlink("StackDoesNotExist", "hadoop-hdfs-datanode") self.assertEquals(version, None) # Invalid component name - version = self.module.get_component_version("HDP", "hadoop-nonexistent-component-name") + version = self.module.get_component_version_from_symlink("HDP", "hadoop-nonexistent-component-name") self.assertEquals(version, None) # Pass - version = self.module.get_component_version("HDP", "hadoop-hdfs-namenode") + version = self.module.get_component_version_from_symlink("HDP", "hadoop-hdfs-namenode") self.assertEquals(version, stack_expected_version) - version = self.module.get_component_version("HDP", "hadoop-hdfs-datanode") + version = self.module.get_component_version_from_symlink("HDP", "hadoop-hdfs-datanode") self.assertEquals(version, stack_expected_version)