AMBARI-9247. Wrong stack version of Service installed (ncole)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/84bfe433 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/84bfe433 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/84bfe433 Branch: refs/heads/2.0-preview Commit: 84bfe4334531fd049281ee869128a09cac06f6ee Parents: 049b692 Author: Nate Cole <nc...@hortonworks.com> Authored: Wed Jan 21 15:05:10 2015 -0500 Committer: Yusaku Sako <yus...@hortonworks.com> Committed: Wed Jan 21 14:16:22 2015 -0800 ---------------------------------------------------------------------- .../server/api/services/AmbariMetaInfo.java | 8 ++-- .../apache/ambari/server/stack/StackModule.java | 13 ++++--- .../ambari/server/state/RepositoryInfo.java | 27 ++++++++++--- .../server/state/stack/LatestRepoCallable.java | 3 +- .../server/api/services/AmbariMetaInfoTest.java | 18 ++++++++- .../server/upgrade/StackUpgradeUtilTest.java | 40 ++++++++++---------- 6 files changed, 70 insertions(+), 39 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/84bfe433/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java index 1b7e2fe..897cf52 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java @@ -44,17 +44,17 @@ import org.apache.ambari.server.customactions.ActionDefinition; import org.apache.ambari.server.customactions.ActionDefinitionManager; import org.apache.ambari.server.events.AlertDefinitionRegistrationEvent; import org.apache.ambari.server.events.publishers.AmbariEventPublisher; +import org.apache.ambari.server.metadata.ActionMetadata; import org.apache.ambari.server.metadata.AgentAlertDefinitions; import org.apache.ambari.server.orm.dao.AlertDefinitionDAO; -import org.apache.ambari.server.metadata.ActionMetadata; import org.apache.ambari.server.orm.dao.MetainfoDAO; import org.apache.ambari.server.orm.entities.AlertDefinitionEntity; import org.apache.ambari.server.orm.entities.MetainfoEntity; import org.apache.ambari.server.stack.StackContext; import org.apache.ambari.server.stack.StackDirectory; +import org.apache.ambari.server.stack.StackManager; import org.apache.ambari.server.state.Cluster; import org.apache.ambari.server.state.Clusters; -import org.apache.ambari.server.stack.StackManager; import org.apache.ambari.server.state.ComponentInfo; import org.apache.ambari.server.state.DependencyInfo; import org.apache.ambari.server.state.OperatingSystemInfo; @@ -766,10 +766,12 @@ public class AmbariMetaInfo { entity.setMetainfoName(metaKey); entity.setMetainfoValue(newBaseUrl); - if (null != ri.getDefaultBaseUrl() && newBaseUrl.equals(ri.getDefaultBaseUrl())) { + // !!! need a way to remove + if (newBaseUrl.equals("")) { metaInfoDAO.remove(entity); } else { metaInfoDAO.merge(entity); + ri.setBaseUrlFromSaved(true); } } } http://git-wip-us.apache.org/repos/asf/ambari/blob/84bfe433/ambari-server/src/main/java/org/apache/ambari/server/stack/StackModule.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/stack/StackModule.java b/ambari-server/src/main/java/org/apache/ambari/server/stack/StackModule.java index 933f187..8da2ff9 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/stack/StackModule.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/stack/StackModule.java @@ -18,6 +18,12 @@ package org.apache.ambari.server.stack; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.api.services.AmbariMetaInfo; import org.apache.ambari.server.state.RepositoryInfo; @@ -29,12 +35,6 @@ import org.apache.ambari.server.state.stack.StackMetainfoXml; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - /** * Stack module which provides all functionality related to parsing and fully * resolving stacks from the stack definition. @@ -561,6 +561,7 @@ public class StackModule extends BaseModule<StackModule, StackInfo> { if (null != updatedUrl) { ri.setBaseUrl(updatedUrl); + ri.setBaseUrlFromSaved(true); } if (LOG.isDebugEnabled()) { http://git-wip-us.apache.org/repos/asf/ambari/blob/84bfe433/ambari-server/src/main/java/org/apache/ambari/server/state/RepositoryInfo.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/RepositoryInfo.java b/ambari-server/src/main/java/org/apache/ambari/server/state/RepositoryInfo.java index 5347682..29776ed 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/RepositoryInfo.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/state/RepositoryInfo.java @@ -28,6 +28,7 @@ public class RepositoryInfo { private String mirrorsList; private String defaultBaseUrl; private String latestBaseUrl; + private boolean baseSaved = false; /** * @return the baseUrl @@ -98,7 +99,7 @@ public class RepositoryInfo { public void setMirrorsList(String mirrorsList) { this.mirrorsList = mirrorsList; } - + /** * @return the default base url */ @@ -119,14 +120,28 @@ public class RepositoryInfo { public String getLatestBaseUrl() { return latestBaseUrl; } - + /** * @param url the latest determined base url */ public void setLatestBaseUrl(String url) { latestBaseUrl = url; - } - + } + + /** + * @return if the base url was from a saved value + */ + public boolean isBaseUrlFromSaved() { + return baseSaved; + } + + /** + * Sets if the base url was from a saved value + */ + public void setBaseUrlFromSaved(boolean saved) { + baseSaved = saved; + } + @Override public String toString() { return "[ repoInfo: " @@ -137,8 +152,8 @@ public class RepositoryInfo { + ", mirrorsList=" + mirrorsList + " ]"; } - - + + public RepositoryResponse convertToResponse() { return new RepositoryResponse(getBaseUrl(), getOsType(), getRepoId(), http://git-wip-us.apache.org/repos/asf/ambari/blob/84bfe433/ambari-server/src/main/java/org/apache/ambari/server/state/stack/LatestRepoCallable.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/LatestRepoCallable.java b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/LatestRepoCallable.java index 608637c..373be33 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/LatestRepoCallable.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/LatestRepoCallable.java @@ -126,8 +126,7 @@ public class LatestRepoCallable implements Callable<Void> { } ri.setLatestBaseUrl(baseUrl); - if (ri.getBaseUrl() != null - && ri.getBaseUrl().equals(ri.getDefaultBaseUrl())) { + if (ri.getBaseUrl() != null && !ri.isBaseUrlFromSaved()) { // Override baseUrl with the latestBaseUrl. ri.setBaseUrl(baseUrl); } http://git-wip-us.apache.org/repos/asf/ambari/blob/84bfe433/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java index 5579db3..c0ff4a6 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java @@ -42,7 +42,6 @@ import java.util.Set; import javax.persistence.EntityManager; import javax.xml.bind.JAXBException; -import com.google.gson.Gson; import junit.framework.Assert; import org.apache.ambari.server.AmbariException; @@ -82,6 +81,8 @@ import org.apache.ambari.server.state.stack.MetricDefinition; import org.apache.ambari.server.state.stack.OsFamily; import org.apache.commons.io.FileUtils; import org.apache.commons.lang.StringUtils; +import org.easymock.Capture; +import org.easymock.EasyMock; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -89,6 +90,7 @@ import org.junit.rules.TemporaryFolder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.gson.Gson; import com.google.inject.AbstractModule; import com.google.inject.Guice; import com.google.inject.Injector; @@ -116,7 +118,6 @@ public class AmbariMetaInfoTest { private static final String NON_EXT_VALUE = "XXX"; private static final int REPOS_CNT = 3; - private static final int STACKS_NAMES_CNT = 2; private static final int PROPERTIES_CNT = 62; private static final int OS_CNT = 4; @@ -272,9 +273,22 @@ public class AmbariMetaInfoTest { } } + Capture<MetainfoEntity> c = new Capture<MetainfoEntity>(); + + metainfoDAO = ambariMetaInfo.metaInfoDAO; + reset(metainfoDAO); + reset(entity); + expect(metainfoDAO.findByKey("repo:/HDP/2.1.1/redhat6/HDP-2.1.1:baseurl")).andReturn(entity).atLeastOnce(); + expect(metainfoDAO.merge(EasyMock.capture(c))).andReturn(entity).atLeastOnce(); + replay(metainfoDAO, entity); + // Reset the database with the original baseUrl ambariMetaInfo.updateRepoBaseURL(STACK_NAME_HDP, "2.1.1", "redhat6", HDP_REPO_ID, prevBaseUrl); + + assertEquals(prevBaseUrl, c.getValue().getMetainfoValue()); + assertTrue(repoInfo.isBaseUrlFromSaved()); + } @Test http://git-wip-us.apache.org/repos/asf/ambari/blob/84bfe433/ambari-server/src/test/java/org/apache/ambari/server/upgrade/StackUpgradeUtilTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/StackUpgradeUtilTest.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/StackUpgradeUtilTest.java index 64de35d..35650a1 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/StackUpgradeUtilTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/StackUpgradeUtilTest.java @@ -42,57 +42,57 @@ import com.google.inject.persist.PersistService; public class StackUpgradeUtilTest { private Injector injector; - + @Before public void setup() throws Exception { injector = Guice.createInjector(new InMemoryDefaultTestModule()); injector.getInstance(GuiceJpaInitializer.class); } - + @After public void teardown() throws Exception { injector.getInstance(PersistService.class).stop(); } - + private void reset(String stackName, String stackVersion) throws Exception { AmbariMetaInfo ami = injector.getInstance(AmbariMetaInfo.class); - + for (Entry<String, List<RepositoryInfo>> entry : ami.getRepository(stackName, stackVersion).entrySet()) { for (RepositoryInfo ri : entry.getValue()) { if (-1 == ri.getRepoId().indexOf("epel")) { ami.updateRepoBaseURL(stackName, stackVersion, - ri.getOsType(), ri.getRepoId(), ri.getDefaultBaseUrl()); + ri.getOsType(), ri.getRepoId(), ""); } } } - + } - + @Test public void testUpgradeStack() throws Exception { StackUpgradeUtil stackUpgradeUtil = injector.getInstance(StackUpgradeUtil.class); - + String stackName = "HDP"; String stackVersion = "1.3.0"; String localRepoUrl = "http://foo.bar"; - + // check updating all stackUpgradeUtil.updateLocalRepo(stackName, stackVersion, localRepoUrl, null); - + MetainfoDAO dao = injector.getInstance(MetainfoDAO.class); - + Collection<MetainfoEntity> entities = dao.findAll(); Assert.assertTrue(entities.size() > 0); - + for (MetainfoEntity entity : entities) { Assert.assertTrue(entity.getMetainfoName().startsWith("repo:/HDP/1.3.0/")); Assert.assertEquals(localRepoUrl, entity.getMetainfoValue()); } - + reset (stackName, stackVersion); entities = dao.findAll(); - Assert.assertTrue(0 == entities.size()); - + Assert.assertEquals(0, entities.size()); + // check updating only centos6 stackUpgradeUtil.updateLocalRepo(stackName, stackVersion, localRepoUrl, "centos6"); @@ -106,7 +106,7 @@ public class StackUpgradeUtilTest { reset (stackName, stackVersion); entities = dao.findAll(); Assert.assertTrue(0 == entities.size()); - + // check updating only centos6 and centos5 stackUpgradeUtil.updateLocalRepo(stackName, stackVersion, localRepoUrl, "centos6,centos5"); @@ -118,7 +118,7 @@ public class StackUpgradeUtilTest { entity.getMetainfoName().startsWith("repo:/HDP/1.3.0/centos5")); Assert.assertEquals(localRepoUrl, entity.getMetainfoValue()); } - + // verify that a change to centos6 also changes redhat6 localRepoUrl = "http://newfoo.bar"; stackUpgradeUtil.updateLocalRepo(stackName, stackVersion, localRepoUrl, "centos6"); @@ -138,8 +138,8 @@ public class StackUpgradeUtilTest { } Assert.assertTrue(foundCentos6); Assert.assertTrue(foundRedhat6); - + } - - + + }