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 2016/02/19 14:53:02 UTC
ambari git commit: AMBARI-15097. Remove targeted orchestration for
patches (ncole)
Repository: ambari
Updated Branches:
refs/heads/branch-dev-patch-upgrade 4b5a250e7 -> 9873e6962
AMBARI-15097. Remove targeted orchestration for patches (ncole)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/9873e696
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/9873e696
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/9873e696
Branch: refs/heads/branch-dev-patch-upgrade
Commit: 9873e69624ca429446312dfdb736f8b3d3d572cf
Parents: 4b5a250
Author: Nate Cole <nc...@hortonworks.com>
Authored: Thu Feb 18 14:36:26 2016 -0500
Committer: Nate Cole <nc...@hortonworks.com>
Committed: Fri Feb 19 08:31:44 2016 -0500
----------------------------------------------------------------------
.../ambari/annotations/ExperimentalFeature.java | 7 +-
.../ClusterStackVersionResourceProvider.java | 27 +-------
.../internal/UpgradeResourceProvider.java | 32 +--------
.../ambari/server/state/UpgradeContext.java | 6 ++
.../state/repository/VersionDefinitionXml.java | 43 ++++++++----
.../src/main/resources/version_definition.xsd | 2 +-
...ClusterStackVersionResourceProviderTest.java | 6 +-
.../state/repository/VersionDefinitionTest.java | 22 ++++++
.../version_definition_test_all_services.xml | 73 ++++++++++++++++++++
9 files changed, 148 insertions(+), 70 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/9873e696/ambari-server/src/main/java/org/apache/ambari/annotations/ExperimentalFeature.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/annotations/ExperimentalFeature.java b/ambari-server/src/main/java/org/apache/ambari/annotations/ExperimentalFeature.java
index f29ed40..1d5ba0e 100644
--- a/ambari-server/src/main/java/org/apache/ambari/annotations/ExperimentalFeature.java
+++ b/ambari-server/src/main/java/org/apache/ambari/annotations/ExperimentalFeature.java
@@ -35,5 +35,10 @@ public enum ExperimentalFeature {
* The caching of current alert information in order to reduce overall load on
* the database by preventing frequent updates and JPA entity invalidation.
*/
- ALERT_CACHING
+ ALERT_CACHING,
+
+ /**
+ * Used for code that is targeted for patch upgrades
+ */
+ PATCH_UPGRADES
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/9873e696/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
index ce5606e..07e62b3 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
@@ -73,14 +73,11 @@ import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.ComponentInfo;
import org.apache.ambari.server.state.Host;
import org.apache.ambari.server.state.MaintenanceState;
-import org.apache.ambari.server.state.RepositoryType;
import org.apache.ambari.server.state.RepositoryVersionState;
import org.apache.ambari.server.state.ServiceComponentHost;
import org.apache.ambari.server.state.ServiceInfo;
import org.apache.ambari.server.state.ServiceOsSpecific;
import org.apache.ambari.server.state.StackId;
-import org.apache.ambari.server.state.repository.AvailableService;
-import org.apache.ambari.server.state.repository.VersionDefinitionXml;
import org.apache.ambari.server.utils.StageUtils;
import org.apache.commons.lang.StringUtils;
@@ -418,27 +415,9 @@ public class ClusterStackVersionResourceProvider extends AbstractControllerResou
// determine services for the repo
Set<String> serviceNames = new HashSet<>();
- if (RepositoryType.STANDARD != repoVersionEnt.getType() && null != repoVersionEnt.getVersionXsd()) {
- VersionDefinitionXml xml = null;
- try {
- xml = repoVersionEnt.getRepositoryXml();
-
- Collection<AvailableService> available = xml.getAvailableServices(
- ami.getStack(stackId.getStackName(), stackId.getStackVersion()));
-
- // check if the service is part of the cluster
- for (AvailableService as : available) {
- if (cluster.getServices().containsKey(as.getName())) {
- serviceNames.add(as.getName());
- }
- }
-
- } catch (Exception e) {
- String msg = String.format("Could not load repo xml for %s", repoVersionEnt.getDisplayName());
- LOG.error(msg, e);
- throw new SystemException (msg);
- }
- }
+
+ // !!! TODO for patch upgrades, we need to limit the serviceNames to those
+ // that are detailed for the repository
// Populate with commands for host
for (int i = 0; i < maxTasks && hostIterator.hasNext(); i++) {
http://git-wip-us.apache.org/repos/asf/ambari/blob/9873e696/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 33b496f..860ba88 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
@@ -24,7 +24,6 @@ import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.VERSION;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Collection;
import java.util.Collections;
import java.util.EnumSet;
import java.util.HashMap;
@@ -85,15 +84,12 @@ import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Config;
import org.apache.ambari.server.state.ConfigHelper;
import org.apache.ambari.server.state.DesiredConfig;
-import org.apache.ambari.server.state.RepositoryType;
import org.apache.ambari.server.state.ServiceInfo;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.StackInfo;
import org.apache.ambari.server.state.UpgradeContext;
import org.apache.ambari.server.state.UpgradeHelper;
import org.apache.ambari.server.state.UpgradeHelper.UpgradeGroupHolder;
-import org.apache.ambari.server.state.repository.AvailableService;
-import org.apache.ambari.server.state.repository.VersionDefinitionXml;
import org.apache.ambari.server.state.stack.ConfigUpgradePack;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
import org.apache.ambari.server.state.stack.UpgradePack;
@@ -718,31 +714,9 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
RepositoryVersionEntity targetRepositoryVersion = s_repoVersionDAO.findByStackNameAndVersion(
sourceStackId.getStackName(), version);
- EnumSet<RepositoryType> serviceAware = EnumSet.of(RepositoryType.PATCH, RepositoryType.SERVICE);
- if (serviceAware.contains(targetRepositoryVersion.getType())) {
-
- VersionDefinitionXml xml = null;
- StackInfo stackInfo = s_metaProvider.get().getStack(sourceStackId.getStackName(),
- sourceStackId.getStackVersion());
-
- try {
- xml = targetRepositoryVersion.getRepositoryXml();
- } catch (Exception e) {
- throw new AmbariException(String.format("Could not load repository definition for version %s", version));
- }
-
- if (null != xml) {
- Collection<AvailableService> services = xml.getAvailableServices(stackInfo);
-
- for (AvailableService available : services) {
- supportedServices.add(available.getName());
- }
-
- if (!services.isEmpty()) {
- scope = UpgradeScope.PARTIAL;
- }
- }
- }
+ // !!! TODO check the repo_version for patch-ness and restrict the context
+ // to those services that require it. Consult the version definition and add the
+ // service names to supportedServices
targetStackId = targetRepositoryVersion.getStackId();
break;
http://git-wip-us.apache.org/repos/asf/ambari/blob/9873e696/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java
index 49b2b45..2f616e7 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java
@@ -24,6 +24,8 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import org.apache.ambari.annotations.Experimental;
+import org.apache.ambari.annotations.ExperimentalFeature;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.stack.MasterHostResolver;
import org.apache.ambari.server.state.stack.upgrade.Direction;
@@ -364,6 +366,7 @@ public class UpgradeContext {
*
* @param services the set of specific services
*/
+ @Experimental(feature=ExperimentalFeature.PATCH_UPGRADES)
public void setSupportedServices(Set<String> services) {
m_supported = services;
}
@@ -374,6 +377,7 @@ public class UpgradeContext {
* @param serviceName the service name to check.
* @return {@code true} when the service is supported
*/
+ @Experimental(feature=ExperimentalFeature.PATCH_UPGRADES)
public boolean isServiceSupported(String serviceName) {
if (m_supported.isEmpty() || m_supported.contains(serviceName)) {
return true;
@@ -382,10 +386,12 @@ public class UpgradeContext {
return false;
}
+ @Experimental(feature=ExperimentalFeature.PATCH_UPGRADES)
public void setScope(UpgradeScope scope) {
m_scope = scope;
}
+ @Experimental(feature=ExperimentalFeature.PATCH_UPGRADES)
public boolean isScoped(UpgradeScope scope) {
return m_scope.isScoped(scope);
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/9873e696/ambari-server/src/main/java/org/apache/ambari/server/state/repository/VersionDefinitionXml.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/repository/VersionDefinitionXml.java b/ambari-server/src/main/java/org/apache/ambari/server/state/repository/VersionDefinitionXml.java
index a610bd0..93ac767 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/repository/VersionDefinitionXml.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/repository/VersionDefinitionXml.java
@@ -100,27 +100,21 @@ public class VersionDefinitionXml {
* @return a collection of AvailableServices used for web service consumption
*/
public Collection<AvailableService> getAvailableServices(StackInfo stack) {
- if (availableServices.isEmpty()) {
- return Collections.emptyList();
- }
-
if (null == availableMap) {
Map<String, ManifestService> manifests = buildManifest();
availableMap = new HashMap<>();
- for (AvailableServiceReference ref : availableServices) {
- ManifestService ms = manifests.get(ref.serviceIdReference);
- ServiceInfo service = stack.getService(ms.serviceName);
+ if (availableServices.isEmpty()) {
+ for (ManifestService ms : manifests.values()) {
+ addToAvailable(ms, stack, Collections.<String>emptySet());
+ }
- if (!availableMap.containsKey(ms.serviceName)) {
- String display = (null == service) ? ms.serviceName: service.getDisplayName();
+ } else {
+ for (AvailableServiceReference ref : availableServices) {
+ ManifestService ms = manifests.get(ref.serviceIdReference);
- availableMap.put(ms.serviceName, new AvailableService(ms.serviceName, display));
+ addToAvailable(ms, stack, ref.components);
}
-
- AvailableService as = availableMap.get(ms.serviceName);
- as.getVersions().add(new AvailableVersion(ms.version, ms.versionId,
- buildComponents(service, ref.components)));
}
}
@@ -128,6 +122,27 @@ public class VersionDefinitionXml {
}
/**
+ * Helper method to use a {@link ManifestService} to generate the available services structure
+ * @param ms the ManifestService instance
+ * @param stack the stack object
+ * @param components the set of components for the service
+ */
+ private void addToAvailable(ManifestService ms, StackInfo stack, Set<String> components) {
+ ServiceInfo service = stack.getService(ms.serviceName);
+
+ if (!availableMap.containsKey(ms.serviceName)) {
+ String display = (null == service) ? ms.serviceName: service.getDisplayName();
+
+ availableMap.put(ms.serviceName, new AvailableService(ms.serviceName, display));
+ }
+
+ AvailableService as = availableMap.get(ms.serviceName);
+ as.getVersions().add(new AvailableVersion(ms.version, ms.versionId,
+ buildComponents(service, components)));
+ }
+
+
+ /**
* @return the list of manifest services to a map for easier access.
*/
private Map<String, ManifestService> buildManifest() {
http://git-wip-us.apache.org/repos/asf/ambari/blob/9873e696/ambari-server/src/main/resources/version_definition.xsd
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/version_definition.xsd b/ambari-server/src/main/resources/version_definition.xsd
index 42035de..de0efd8 100644
--- a/ambari-server/src/main/resources/version_definition.xsd
+++ b/ambari-server/src/main/resources/version_definition.xsd
@@ -96,7 +96,7 @@
</xs:documentation>
</xs:annotation>
<xs:sequence>
- <xs:element name="service" maxOccurs="unbounded">
+ <xs:element name="service" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="component" minOccurs="0" maxOccurs="unbounded" />
http://git-wip-us.apache.org/repos/asf/ambari/blob/9873e696/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java
index c6d0c57..69ed9d7 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java
@@ -43,6 +43,8 @@ import java.util.Map;
import java.util.Properties;
import java.util.Set;
+import org.apache.ambari.annotations.Experimental;
+import org.apache.ambari.annotations.ExperimentalFeature;
import org.apache.ambari.server.Role;
import org.apache.ambari.server.actionmanager.ActionManager;
import org.apache.ambari.server.actionmanager.ExecutionCommandWrapper;
@@ -102,6 +104,7 @@ import org.easymock.IAnswer;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
import com.google.inject.AbstractModule;
@@ -355,7 +358,8 @@ public class ClusterStackVersionResourceProviderTest {
}
- @Test
+ @Experimental(feature=ExperimentalFeature.PATCH_UPGRADES)
+ @Ignore
public void testCreateResourcesForPatch() throws Exception {
Resource.Type type = Resource.Type.ClusterStackVersion;
http://git-wip-us.apache.org/repos/asf/ambari/blob/9873e696/ambari-server/src/test/java/org/apache/ambari/server/state/repository/VersionDefinitionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/repository/VersionDefinitionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/repository/VersionDefinitionTest.java
index 4ba5967..f2939c7 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/repository/VersionDefinitionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/repository/VersionDefinitionTest.java
@@ -23,6 +23,8 @@ import static org.junit.Assert.assertNotNull;
import java.io.File;
import org.apache.ambari.server.state.RepositoryType;
+import org.apache.ambari.server.state.ServiceInfo;
+import org.apache.ambari.server.state.StackInfo;
import org.apache.commons.io.FileUtils;
import org.junit.Test;
@@ -80,4 +82,24 @@ public class VersionDefinitionTest {
assertEquals("HDP", xml.repositoryInfo.getOses().get(0).getRepos().get(0).getRepoName());
}
+ @Test
+ public void testAllServices() throws Exception {
+
+ File f = new File("src/test/resources/version_definition_test_all_services.xml");
+
+ VersionDefinitionXml xml = VersionDefinitionXml.load(f.toURI().toURL());
+
+ StackInfo stack = new StackInfo() {
+ @Override
+ public ServiceInfo getService(String name) {
+ return null;
+ }
+ };
+
+ // the file does not define available services, which
+ assertEquals(4, xml.manifestServices.size());
+ assertEquals(3, xml.getAvailableServices(stack).size());
+ }
+
+
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/9873e696/ambari-server/src/test/resources/version_definition_test_all_services.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/resources/version_definition_test_all_services.xml b/ambari-server/src/test/resources/version_definition_test_all_services.xml
new file mode 100644
index 0000000..7557f7a
--- /dev/null
+++ b/ambari-server/src/test/resources/version_definition_test_all_services.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0"?>
+<!--
+ 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.
+-->
+
+<repository-version xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="version_definition.xsd">
+
+ <release>
+ <type>PATCH</type>
+ <stack-id>HDP-2.3</stack-id>
+ <version>2.3.4.1</version>
+ <build>1234</build>
+ <compatible-with>2.3.4.[1-9]</compatible-with>
+ <release-notes>http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.3.4/</release-notes>
+ </release>
+
+ <manifest>
+ <service id="HDFS-271" name="HDFS" version="2.7.1" version-id="10" />
+ <service id="HIVE-110" name="HIVE" version="1.1.0" />
+ <service id="HIVE-200" name="HIVE" version="2.0.0" />
+ <service id="HBASE-899" name="HBASE" version="8.9.9" />
+ </manifest>
+
+ <available-services />
+
+ <repository-info>
+ <os family="redhat6">
+ <repo>
+ <baseurl>http://public-repo-1.hortonworks.com/HDP/centos6/2.x/updates/2.3.0.0</baseurl>
+ <repoid>HDP-2.3</repoid>
+ <reponame>HDP</reponame>
+ </repo>
+ <repo>
+ <baseurl>http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6</baseurl>
+ <repoid>HDP-UTILS-1.1.0.20</repoid>
+ <reponame>HDP-UTILS</reponame>
+ </repo>
+ </os>
+ <os family="redhat7">
+ <repo>
+ <baseurl>http://public-repo-1.hortonworks.com/HDP/centos7/2.x/updates/2.3.0.0</baseurl>
+ <repoid>HDP-2.3</repoid>
+ <reponame>HDP</reponame>
+ </repo>
+ <repo>
+ <baseurl>http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos7</baseurl>
+ <repoid>HDP-UTILS-1.1.0.20</repoid>
+ <reponame>HDP-UTILS</reponame>
+ </repo>
+ </os>
+
+ </repository-info>
+
+ <upgrade>
+ <configuration type="hdfs-site">
+ <set key="foo" value="bar" />
+ </configuration>
+ </upgrade>
+</repository-version>