You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by nc...@apache.org on 2014/05/02 03:20:02 UTC
git commit: AMBARI-5653. Upgradestack only handles specific OSs
(ncole)
Repository: ambari
Updated Branches:
refs/heads/branch-1.6.0 6938e32e8 -> 673d788ff
AMBARI-5653. Upgradestack only handles specific OSs (ncole)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/673d788f
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/673d788f
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/673d788f
Branch: refs/heads/branch-1.6.0
Commit: 673d788ff42f8e94c36873b40811b00b0b6d1ec2
Parents: 6938e32
Author: Nate Cole <nc...@hortonworks.com>
Authored: Thu May 1 17:12:20 2014 -0400
Committer: Nate Cole <nc...@hortonworks.com>
Committed: Thu May 1 21:03:04 2014 -0400
----------------------------------------------------------------------
.../server/api/services/AmbariMetaInfo.java | 13 ++++-
.../server/state/stack/LatestRepoCallable.java | 23 --------
.../ambari/server/state/stack/OsFamily.java | 57 ++++++++++++++++++++
.../ambari/server/upgrade/StackUpgradeUtil.java | 48 +++++++++++++----
.../server/upgrade/StackUpgradeUtilTest.java | 24 ++++++++-
5 files changed, 130 insertions(+), 35 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/673d788f/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 61e2954..1d2e5cc 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
@@ -111,7 +111,7 @@ public class AmbariMetaInfo {
private final static Logger LOG = LoggerFactory.getLogger(AmbariMetaInfo.class);
private static final String REPOSITORY_FILE_NAME = "repoinfo.xml";
private static final String REPOSITORY_FOLDER_NAME = "repos";
- private static final String REPOSITORY_XML_PROPERTY_BASEURL = "baseurl";
+ public static final String REPOSITORY_XML_PROPERTY_BASEURL = "baseurl";
// all the supported OS'es
private static final List<String> ALL_SUPPORTED_OS = Arrays.asList(
"centos5", "redhat5", "centos6", "redhat6", "oraclelinux5",
@@ -895,7 +895,16 @@ public class AmbariMetaInfo {
return ALL_SUPPORTED_OS.contains(osType);
}
- private String generateRepoMetaKey(String stackName, String stackVersion,
+ /**
+ * Returns a suitable key for use with stack url overrides.
+ * @param stackName the stack name
+ * @param stackVersion the stack version
+ * @param osType the os
+ * @param repoId the repo id
+ * @param field the field name
+ * @return the key for any repo value override
+ */
+ public String generateRepoMetaKey(String stackName, String stackVersion,
String osType, String repoId, String field) {
StringBuilder sb = new StringBuilder("repo:/");
http://git-wip-us.apache.org/repos/asf/ambari/blob/673d788f/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 fda9fc9..f8847d9 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
@@ -148,28 +148,5 @@ public class LatestRepoCallable implements Callable<Void> {
return null;
}
-
- private enum OsFamily {
- REDHAT5("centos5", "redhat5", "oraclelinux5"),
- REDHAT6("centos6", "redhat6", "oraclelinux6"),
- SUSE11("suse11", "sles11"),
- UBUNTU12("ubuntu12");
-
- private String[] osTypes;
- private OsFamily(String... oses) {
- osTypes = oses;
- }
-
- private static String[] findTypes(String os) {
- for (OsFamily f : values()) {
- for (String t : f.osTypes) {
- if (t.equals(os)) {
- return f.osTypes;
- }
- }
- }
- return new String[0];
- }
- }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/673d788f/ambari-server/src/main/java/org/apache/ambari/server/state/stack/OsFamily.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/OsFamily.java b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/OsFamily.java
new file mode 100644
index 0000000..5c458a4
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/OsFamily.java
@@ -0,0 +1,57 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ambari.server.state.stack;
+
+public enum OsFamily {
+ REDHAT5("centos5", "redhat5", "oraclelinux5", "rhel5"),
+ REDHAT6("centos6", "redhat6", "oraclelinux6", "rhel6"),
+ SUSE11("suse11", "sles11"),
+ DEBIAN12("debian12", "ubuntu12");
+
+ private String[] osTypes;
+ private OsFamily(String... oses) {
+ osTypes = oses;
+ }
+
+ static String[] findTypes(String os) {
+ for (OsFamily f : values()) {
+ for (String t : f.osTypes) {
+ if (t.equals(os)) {
+ return f.osTypes;
+ }
+ }
+ }
+ return new String[0];
+ }
+
+ /**
+ * Finds the family for the specific os
+ * @param os the os
+ * @return the family, or <code>null</code> if not defined
+ */
+ public static OsFamily find(String os) {
+ for (OsFamily f : values()) {
+ for (String t : f.osTypes) {
+ if (t.equals(os)) {
+ return f;
+ }
+ }
+ }
+ return null;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/673d788f/ambari-server/src/main/java/org/apache/ambari/server/upgrade/StackUpgradeUtil.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/StackUpgradeUtil.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/StackUpgradeUtil.java
index 5f96326..bdce8a7 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/StackUpgradeUtil.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/StackUpgradeUtil.java
@@ -17,28 +17,27 @@
*/
package org.apache.ambari.server.upgrade;
-import java.net.URI;
import java.util.ArrayList;
-import java.util.HashSet;
import java.util.List;
-import java.util.Scanner;
-import java.util.Set;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.orm.dao.ClusterDAO;
import org.apache.ambari.server.orm.dao.ClusterStateDAO;
import org.apache.ambari.server.orm.dao.HostComponentDesiredStateDAO;
import org.apache.ambari.server.orm.dao.HostComponentStateDAO;
+import org.apache.ambari.server.orm.dao.MetainfoDAO;
import org.apache.ambari.server.orm.dao.ServiceComponentDesiredStateDAO;
import org.apache.ambari.server.orm.dao.ServiceDesiredStateDAO;
import org.apache.ambari.server.orm.entities.ClusterEntity;
import org.apache.ambari.server.orm.entities.ClusterStateEntity;
import org.apache.ambari.server.orm.entities.HostComponentDesiredStateEntity;
import org.apache.ambari.server.orm.entities.HostComponentStateEntity;
+import org.apache.ambari.server.orm.entities.MetainfoEntity;
import org.apache.ambari.server.orm.entities.ServiceComponentDesiredStateEntity;
import org.apache.ambari.server.orm.entities.ServiceDesiredStateEntity;
import org.apache.ambari.server.state.OperatingSystemInfo;
import org.apache.ambari.server.state.StackId;
+import org.apache.ambari.server.state.stack.OsFamily;
import com.google.gson.Gson;
import com.google.inject.Inject;
@@ -163,8 +162,6 @@ public class StackUpgradeUtil {
!repoUrl.startsWith("http"))
return;
- String server = repoUrl;
-
String[] oses = new String[0];
if (null != repoUrlOs) {
@@ -172,18 +169,51 @@ public class StackUpgradeUtil {
}
AmbariMetaInfo ami = injector.getInstance(AmbariMetaInfo.class);
+ MetainfoDAO metaDao = injector.getInstance(MetainfoDAO.class);
+
+ String stackRepoId = stackName + "-" + stackVersion;
if (0 == oses.length) {
// do them all
for (OperatingSystemInfo osi : ami.getOperatingSystems(stackName, stackVersion)) {
ami.updateRepoBaseURL(stackName, stackVersion, osi.getOsType(),
- stackName + "-" + stackVersion, server);
+ stackRepoId, repoUrl);
}
} else {
for (String os : oses) {
- ami.updateRepoBaseURL(stackName, stackVersion, os,
- stackName + "-" + stackVersion, server);
+
+ OsFamily family = OsFamily.find(os);
+ if (null != family) {
+ String key = ami.generateRepoMetaKey(stackName, stackVersion, os,
+ stackName + "-" + stackVersion, AmbariMetaInfo.REPOSITORY_XML_PROPERTY_BASEURL);
+
+ String familyKey = ami.generateRepoMetaKey(stackName, stackVersion,
+ family.name().toLowerCase(), stackRepoId, AmbariMetaInfo.REPOSITORY_XML_PROPERTY_BASEURL);
+
+ // need to use (for example) redhat6 if the os is centos6
+ MetainfoEntity entity = metaDao.findByKey(key);
+ if (null == entity) {
+ entity = new MetainfoEntity();
+ entity.setMetainfoName(key);
+ entity.setMetainfoValue(repoUrl);
+ metaDao.merge(entity);
+ } else {
+ entity.setMetainfoValue(repoUrl);
+ metaDao.merge(entity);
+ }
+
+ entity = metaDao.findByKey(familyKey);
+ if (null == entity) {
+ entity = new MetainfoEntity();
+ entity.setMetainfoName(familyKey);
+ entity.setMetainfoValue(repoUrl);
+ metaDao.merge(entity);
+ } else {
+ entity.setMetainfoValue(repoUrl);
+ metaDao.merge(entity);
+ }
+ }
}
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/673d788f/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 5cda29c..64de35d 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
@@ -98,7 +98,8 @@ public class StackUpgradeUtilTest {
entities = dao.findAll();
for (MetainfoEntity entity : entities) {
- Assert.assertTrue(entity.getMetainfoName().startsWith("repo:/HDP/1.3.0/centos6"));
+ Assert.assertTrue(entity.getMetainfoName().startsWith("repo:/HDP/1.3.0/centos6") ||
+ entity.getMetainfoName().startsWith("repo:/HDP/1.3.0/redhat6"));
Assert.assertEquals(localRepoUrl, entity.getMetainfoValue());
}
@@ -112,10 +113,31 @@ public class StackUpgradeUtilTest {
entities = dao.findAll();
for (MetainfoEntity entity : entities) {
Assert.assertTrue(entity.getMetainfoName().startsWith("repo:/HDP/1.3.0/centos6") ||
+ entity.getMetainfoName().startsWith("repo:/HDP/1.3.0/redhat6") ||
+ entity.getMetainfoName().startsWith("repo:/HDP/1.3.0/redhat5") ||
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");
+ entities = dao.findAll();
+ boolean foundCentos6 = false;
+ boolean foundRedhat6 = false;
+ for (MetainfoEntity entity : entities) {
+ if (-1 != entity.getMetainfoName().indexOf("centos6")) {
+ foundCentos6 = true;
+ Assert.assertEquals(localRepoUrl, entity.getMetainfoValue());
+ } else if (-1 != entity.getMetainfoName().indexOf("redhat6")) {
+ foundRedhat6 = true;
+ Assert.assertEquals(localRepoUrl, entity.getMetainfoValue());
+ } else {
+ Assert.assertFalse(localRepoUrl.equals(entity.getMetainfoValue()));
+ }
+ }
+ Assert.assertTrue(foundCentos6);
+ Assert.assertTrue(foundRedhat6);
}