AMBARI-21906. Consider Not Scheduling ConfigureAction Tasks During PATCH/MAINT Upgrades (ncole)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/a9d622ed Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/a9d622ed Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/a9d622ed Branch: refs/heads/feature-branch-AMBARI-21307 Commit: a9d622edb4daf207c225c3da017ad0912ce7cf81 Parents: 4fa4f80 Author: Nate Cole <nc...@hortonworks.com> Authored: Fri Sep 8 10:11:40 2017 -0400 Committer: Nate Cole <nc...@hortonworks.com> Committed: Fri Sep 8 10:11:40 2017 -0400 ---------------------------------------------------------------------- .../internal/UpgradeResourceProvider.java | 24 +- .../state/stack/upgrade/ConfigureTask.java | 3 + .../src/main/resources/upgrade-pack.xsd | 1 + .../AmbariManagementControllerTest.java | 2 +- .../internal/UpgradeResourceProviderTest.java | 108 ++++++++ .../server/state/stack/UpgradePackTest.java | 1 + .../upgrade_test_force_config_change.xml | 267 +++++++++++++++++++ .../version_definition_test_patch_config.xml | 55 ++++ 8 files changed, 456 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/a9d622ed/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 0ff21a2..52f66bc 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 @@ -731,11 +731,12 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider itemEntity.setText(wrapper.getText()); itemEntity.setTasks(wrapper.getTasksJson()); itemEntity.setHosts(wrapper.getHostsJson()); - itemEntities.add(itemEntity); injectVariables(configHelper, cluster, itemEntity); - makeServerSideStage(group, upgradeContext, effectiveRepositoryVersion, req, - itemEntity, (ServerSideActionTask) task, configUpgradePack); + if (makeServerSideStage(group, upgradeContext, effectiveRepositoryVersion, req, + itemEntity, (ServerSideActionTask) task, configUpgradePack)) { + itemEntities.add(itemEntity); + } } } } else { @@ -1184,7 +1185,7 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider * upgrade * @throws AmbariException */ - private void makeServerSideStage(UpgradeGroupHolder group, UpgradeContext context, + private boolean makeServerSideStage(UpgradeGroupHolder group, UpgradeContext context, RepositoryVersionEntity effectiveRepositoryVersion, RequestStageContainer request, UpgradeItemEntity entity, ServerSideActionTask task, ConfigUpgradePack configUpgradePack) throws AmbariException { @@ -1201,6 +1202,8 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider String itemDetail = entity.getText(); String stageText = StringUtils.abbreviate(entity.getText(), 255); + boolean process = true; + switch (task.getType()) { case SERVER_ACTION: case MANUAL: { @@ -1236,6 +1239,13 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider } case CONFIGURE: { ConfigureTask ct = (ConfigureTask) task; + + // !!! would prefer to do this in the sequence generator, but there's too many + // places to miss + if (context.getOrchestrationType().isRevertable() && !ct.supportsPatch) { + process = false; + } + Map<String, String> configurationChanges = ct.getConfigurationChanges(cluster, configUpgradePack); @@ -1266,6 +1276,10 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider break; } + if (!process) { + return false; + } + ActionExecutionContext actionContext = new ActionExecutionContext(cluster.getClusterName(), Role.AMBARI_SERVER_ACTION.toString(), Collections.emptyList(), commandParams); @@ -1303,6 +1317,8 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider context.isComponentFailureAutoSkipped()); request.addStages(Collections.singletonList(stage)); + + return true; } /** http://git-wip-us.apache.org/repos/asf/ambari/blob/a9d622ed/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ConfigureTask.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ConfigureTask.java b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ConfigureTask.java index 68dc63f..f88691d 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ConfigureTask.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ConfigureTask.java @@ -110,6 +110,9 @@ public class ConfigureTask extends ServerSideActionTask { @XmlAttribute(name = "id") public String id; + @XmlAttribute(name="supports-patch") + public boolean supportsPatch = false; + /** * {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ambari/blob/a9d622ed/ambari-server/src/main/resources/upgrade-pack.xsd ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/upgrade-pack.xsd b/ambari-server/src/main/resources/upgrade-pack.xsd index aa7ddd8..21606bd 100644 --- a/ambari-server/src/main/resources/upgrade-pack.xsd +++ b/ambari-server/src/main/resources/upgrade-pack.xsd @@ -331,6 +331,7 @@ <xs:extension base="abstract-server-task-type"> <xs:sequence /> <xs:attribute name="id" use="required"/> + <xs:attribute name="supports-patch" type="xs:boolean" /> </xs:extension> </xs:complexContent> </xs:complexType> http://git-wip-us.apache.org/repos/asf/ambari/blob/a9d622ed/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java index 9309abe..dea4870 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java @@ -6977,7 +6977,7 @@ public class AmbariManagementControllerTest { Assert.assertEquals(1, responsesWithParams.size()); StackVersionResponse resp = responsesWithParams.iterator().next(); assertNotNull(resp.getUpgradePacks()); - assertEquals(15, resp.getUpgradePacks().size()); + assertTrue(resp.getUpgradePacks().size() > 0); assertTrue(resp.getUpgradePacks().contains("upgrade_test")); } http://git-wip-us.apache.org/repos/asf/ambari/blob/a9d622ed/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java index 37a7b44..fea56d9 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java @@ -84,6 +84,7 @@ import org.apache.ambari.server.orm.entities.UpgradeHistoryEntity; import org.apache.ambari.server.orm.entities.UpgradeItemEntity; import org.apache.ambari.server.security.TestAuthenticationFactory; import org.apache.ambari.server.serveraction.upgrades.AutoSkipFailedSummaryAction; +import org.apache.ambari.server.serveraction.upgrades.ConfigureAction; import org.apache.ambari.server.state.Cluster; import org.apache.ambari.server.state.Clusters; import org.apache.ambari.server.state.Config; @@ -1733,6 +1734,113 @@ public class UpgradeResourceProviderTest extends EasyMockSupport { upgradeResourceProvider.createResources(request); } + @Test + public void testCreatePatchWithConfigChanges() throws Exception { + Cluster cluster = clusters.getCluster("c1"); + + File f = new File("src/test/resources/version_definition_test_patch_config.xml"); + repoVersionEntity2112.setType(RepositoryType.PATCH); + repoVersionEntity2112.setVersionXml(IOUtils.toString(new FileInputStream(f))); + repoVersionEntity2112.setVersionXsd("version_definition.xsd"); + repoVersionDao.merge(repoVersionEntity2112); + + List<UpgradeEntity> upgrades = upgradeDao.findUpgrades(cluster.getClusterId()); + assertEquals(0, upgrades.size()); + + Map<String, Object> requestProps = new HashMap<>(); + requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1"); + requestProps.put(UpgradeResourceProvider.UPGRADE_REPO_VERSION_ID, String.valueOf(repoVersionEntity2112.getId())); + requestProps.put(UpgradeResourceProvider.UPGRADE_PACK, "upgrade_test"); + requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_PREREQUISITE_CHECKS, "true"); + requestProps.put(UpgradeResourceProvider.UPGRADE_DIRECTION, Direction.UPGRADE.name()); + + // !!! test that a PATCH upgrade skips config changes + ResourceProvider upgradeResourceProvider = createProvider(amc); + + Request request = PropertyHelper.getCreateRequest(Collections.singleton(requestProps), null); + RequestStatus status = upgradeResourceProvider.createResources(request); + Set<Resource> resources = status.getAssociatedResources(); + assertEquals(1, resources.size()); + Long requestId = (Long) resources.iterator().next().getPropertyValue("Upgrade/request_id"); + assertNotNull(requestId); + + UpgradeEntity upgradeEntity = upgradeDao.findUpgradeByRequestId(requestId); + assertEquals(RepositoryType.PATCH, upgradeEntity.getOrchestration()); + + HostRoleCommandDAO hrcDAO = injector.getInstance(HostRoleCommandDAO.class); + List<HostRoleCommandEntity> commands = hrcDAO.findByRequest(upgradeEntity.getRequestId()); + + boolean foundConfigTask = false; + for (HostRoleCommandEntity command : commands) { + if (StringUtils.isNotBlank(command.getCustomCommandName()) && + command.getCustomCommandName().equals(ConfigureAction.class.getName())) { + foundConfigTask = true; + break; + } + } + assertFalse(foundConfigTask); + + // !!! test that a patch with a supported patch change gets picked up + cluster.setUpgradeEntity(null); + requestProps.put(UpgradeResourceProvider.UPGRADE_PACK, "upgrade_test_force_config_change"); + request = PropertyHelper.getCreateRequest(Collections.singleton(requestProps), null); + + status = upgradeResourceProvider.createResources(request); + resources = status.getAssociatedResources(); + assertEquals(1, resources.size()); + requestId = (Long) resources.iterator().next().getPropertyValue("Upgrade/request_id"); + assertNotNull(requestId); + + upgradeEntity = upgradeDao.findUpgradeByRequestId(requestId); + assertEquals(RepositoryType.PATCH, upgradeEntity.getOrchestration()); + + commands = hrcDAO.findByRequest(upgradeEntity.getRequestId()); + + foundConfigTask = false; + for (HostRoleCommandEntity command : commands) { + if (StringUtils.isNotBlank(command.getCustomCommandName()) && + command.getCustomCommandName().equals(ConfigureAction.class.getName())) { + foundConfigTask = true; + break; + } + } + assertTrue(foundConfigTask); + + + + // !!! test that a regular upgrade will pick up the config change + cluster.setUpgradeEntity(null); + repoVersionEntity2112.setType(RepositoryType.STANDARD); + repoVersionDao.merge(repoVersionEntity2112); + + requestProps.put(UpgradeResourceProvider.UPGRADE_PACK, "upgrade_test"); + request = PropertyHelper.getCreateRequest(Collections.singleton(requestProps), null); + + status = upgradeResourceProvider.createResources(request); + resources = status.getAssociatedResources(); + assertEquals(1, resources.size()); + requestId = (Long) resources.iterator().next().getPropertyValue("Upgrade/request_id"); + assertNotNull(requestId); + + upgradeEntity = upgradeDao.findUpgradeByRequestId(requestId); + assertEquals(RepositoryType.STANDARD, upgradeEntity.getOrchestration()); + + commands = hrcDAO.findByRequest(upgradeEntity.getRequestId()); + + foundConfigTask = false; + for (HostRoleCommandEntity command : commands) { + if (StringUtils.isNotBlank(command.getCustomCommandName()) && + command.getCustomCommandName().equals(ConfigureAction.class.getName())) { + foundConfigTask = true; + break; + } + } + assertTrue(foundConfigTask); + + } + + + private String parseSingleMessage(String msgStr){ JsonParser parser = new JsonParser(); JsonArray msgArray = (JsonArray) parser.parse(msgStr); http://git-wip-us.apache.org/repos/asf/ambari/blob/a9d622ed/ambari-server/src/test/java/org/apache/ambari/server/state/stack/UpgradePackTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/stack/UpgradePackTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/stack/UpgradePackTest.java index 616139c..0eac2be 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/state/stack/UpgradePackTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/state/stack/UpgradePackTest.java @@ -173,6 +173,7 @@ public class UpgradePackTest { ConfigureTask ct = (ConfigureTask) t; // check that the Configure task successfully parsed id assertEquals("hdp_2_1_1_nm_pre_upgrade", ct.getId()); + assertFalse(ct.supportsPatch); } @Test http://git-wip-us.apache.org/repos/asf/ambari/blob/a9d622ed/ambari-server/src/test/resources/stacks/HDP/2.1.1/upgrades/upgrade_test_force_config_change.xml ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/resources/stacks/HDP/2.1.1/upgrades/upgrade_test_force_config_change.xml b/ambari-server/src/test/resources/stacks/HDP/2.1.1/upgrades/upgrade_test_force_config_change.xml new file mode 100644 index 0000000..a438afc --- /dev/null +++ b/ambari-server/src/test/resources/stacks/HDP/2.1.1/upgrades/upgrade_test_force_config_change.xml @@ -0,0 +1,267 @@ +<?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. +--> +<upgrade xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="upgrade-pack.xsd"> + <target>2.2.*.*</target> + <target-stack>HDP-2.2.0</target-stack> + <type>ROLLING</type> + <prerequisite-checks> + <!-- List of additional pre-req checks to run in addition to the required pre-reqs --> + <check>org.apache.ambari.server.checks.HiveMultipleMetastoreCheck</check> + <check>org.apache.ambari.server.checks.MapReduce2JobHistoryStatePreservingCheck</check> + <check>org.apache.ambari.server.checks.SecondaryNamenodeDeletedCheck</check> + <check>org.apache.ambari.server.checks.ServicesMapReduceDistributedCacheCheck</check> + <check>org.apache.ambari.server.checks.ServicesNamenodeHighAvailabilityCheck</check> + <check>org.apache.ambari.server.checks.ServicesTezDistributedCacheCheck</check> + <check>org.apache.ambari.server.checks.ServicesYarnWorkPreservingCheck</check> + <check>org.apache.ambari.server.checks.YarnRMHighAvailabilityCheck</check> + <check>org.apache.ambari.server.checks.YarnTimelineServerStatePreservingCheck</check> + </prerequisite-checks> + + <order> + <group xsi:type="cluster" name="PRE_CLUSTER" title="Pre {{direction.text.proper}}"> + <execute-stage title="Confirm 1"> + <task xsi:type="manual"> + <message>Foo</message> + </task> + </execute-stage> + <execute-stage service="HDFS" component="NAMENODE" title="Pre Upgrade HIVE"> + <task xsi:type="manual"> + <message>Back stuff up.</message> + </task> + </execute-stage> + <execute-stage service="HDFS" component="NAMENODE" title="Finalize HDFS"> + <task xsi:type="execute"> + <script>foo</script> + <function>list</function> + </task> + </execute-stage> + <execute-stage title="Confirm 2"> + <task xsi:type="manual"> + <message>Foo</message> + </task> + </execute-stage> + </group> + + <group name="ZOOKEEPER" title="Zookeeper"> + <skippable>true</skippable> + <allow-retry>false</allow-retry> + <service name="ZOOKEEPER"> + <component>ZOOKEEPER_SERVER</component> + <component>ZOOKEEPER_CLIENT</component> + </service> + </group> + + <group name="CORE_MASTER" title="Core Masters"> + <service name="HDFS"> + <component>JOURNALNODE</component> + <component>NAMENODE</component> + </service> + <service name="YARN"> + <component>RESOURCEMANAGER</component> + </service> + </group> + + <group name="CORE_SLAVES" title="Core Slaves" xsi:type="colocated"> + <skippable>true</skippable> <!-- set skippable for test --> + <allow-retry>false</allow-retry> <!-- set no retry for test --> + <service name="HDFS"> + <component>DATANODE</component> + </service> + <service name="HBASE"> + <component>REGIONSERVER</component> + </service> + <service name="YARN"> + <component>NODEMANAGER</component> + </service> + + <batch> + <percent>20</percent> + <message>Please run additional tests on {{components}}</message> + </batch> + </group> + + <group name="HIVE" title="Hive"> + <skippable>true</skippable> + <service name="HIVE"> + <component>HIVE_METASTORE</component> + <component>HIVE_SERVER</component> + <component>WEBHCAT_SERVER</component> + </service> + </group> + + <group name="OOZIE" title="Oozie"> + <skippable>true</skippable> + <supports-auto-skip-failure>false</supports-auto-skip-failure> + <service-check>false</service-check> + <service name="OOZIE"> + <component>OOZIE_SERVER</component> + <component>OOZIE_CLIENT</component> + </service> + </group> + + <group xsi:type="cluster" name="POST_CLUSTER" title="Finalize {{direction.text.proper}}"> + <execute-stage title="Confirm Finalize"> + <task xsi:type="manual"> + <message>Please confirm you are ready to finalize</message> + </task> + </execute-stage> + <execute-stage service="HDFS" component="NAMENODE" title="Execute HDFS Finalize"> + <task xsi:type="execute"> + <script>foo</script> + <function>list</function> + </task> + </execute-stage> + <execute-stage title="Save Cluster State"> + <task xsi:type="server_action" class="org.apache.ambari.server.serveraction.upgrades.FinalizeUpgradeAction"> + </task> + </execute-stage> + </group> + + </order> + + + <processing> + <service name="ZOOKEEPER"> + <component name="ZOOKEEPER_SERVER"> + <pre-upgrade> + <task xsi:type="manual"> + <summary>SUMMARY OF PREPARE</summary> + <message>This is a manual task with a placeholder of {{foo/bar}}</message> + </task> + </pre-upgrade> + <pre-downgrade copy-upgrade="true" /> + <upgrade> + <task xsi:type="restart-task" timeout-config="upgrade.parameter.zk-server.timeout"/> + </upgrade> + <post-upgrade> + <task xsi:type="configure" id="hdp_2_1_1_zookeeper_new_config_type" supports-patch="true" /> + </post-upgrade> + <post-downgrade copy-upgrade="true" /> + </component> + </service> + + <service name="HDFS"> + <component name="NAMENODE"> + <pre-upgrade> + <task xsi:type="execute" hosts="master"> + <script>foo</script> + <function>list</function> + </task> + <task xsi:type="configure" id="hdp_2_1_1_nn_pre_upgrade" /> + <task xsi:type="manual"> + <message>{{direction.verb.proper}} your database</message> + </task> + </pre-upgrade> + <pre-downgrade copy-upgrade="true" /> + <upgrade> + <task xsi:type="restart-task" /> + </upgrade> + <post-upgrade> + <task xsi:type="execute"> + <script>foo</script> + <function>list</function> + </task> + </post-upgrade> + <post-downgrade copy-upgrade="true" /> + </component> + <component name="DATANODE"> + <pre-downgrade /> + <upgrade> + <task xsi:type="restart-task" /> + </upgrade> + <post-downgrade> + <task xsi:type="manual"> + <message>Manual Downgrade</message> + </task> + </post-downgrade> + </component> + </service> + + <service name="YARN"> + <component name="RESOURCEMANAGER"> + <pre-upgrade> + <task xsi:type="execute"> + <script>foo</script> + <function>list</function> + </task> + </pre-upgrade> + <pre-downgrade copy-upgrade="true" /> + <upgrade /> + </component> + <component name="NODEMANAGER"> + <pre-upgrade> + <task xsi:type="execute"> + <script>foo</script> + <function>list</function> + </task> + <task xsi:type="configure" id="hdp_2_1_1_nm_pre_upgrade"/> + </pre-upgrade> + <pre-downgrade copy-upgrade="true" /> + <upgrade /> + </component> + </service> + + <service name="HIVE"> + <component name="HIVE_SERVER"> + <pre-upgrade> + <task xsi:type="manual"> + <summary>HiveServer Port Availability</summary> + <message>The HiveServer port will now change to 10010 if hive is using a binary transfer mode or 10011 if hive is using an http transport mode. You can use "netstat -anp | grep 1001[01]" to determine if the port is available on each of following HiveServer host(s): {{hosts.all}}. If the port is not available, the process using it must be terminated.</message> + </task> + <task xsi:type="configure" id="hdp_2_1_1_hive_server_foo"/> + <task xsi:type="configure" id="hdp_2_1_1_hive_server_conditions"/> + <task xsi:type="configure" id="hdp_2_1_1_hive_server_conditions_skip"/> + <task xsi:type="configure" id="hdp_2_1_1_no_conditions_met"/> + </pre-upgrade> + <pre-downgrade copy-upgrade="true" /> + <upgrade /> + </component> + </service> + + <service name="OOZIE"> + <component name="OOZIE_SERVER"> + <pre-upgrade> + <!-- This is important, do not remove it since UpgradeHelperTest.java : + testUpgradeWithMultipleTasksWithMultipleHostTypes() asserts + that these tasks each run on their own stage. --> + <task xsi:type="execute" hosts="all" sequential="true"> + <summary>Shut down all Oozie servers</summary> + <script>scripts/oozie_server.py</script> + <function>stop</function> + </task> + + <task xsi:type="execute" hosts="any" sequential="true"> + <summary>Upgrading the Oozie database and creating a new sharelib</summary> + <script>scripts/oozie_server_upgrade.py</script> + <function>upgrade_oozie_database_and_sharelib</function> + </task> + </pre-upgrade> + <pre-downgrade copy-upgrade="true" /> + <upgrade> + <task xsi:type="restart-task" /> + </upgrade> + </component> + + <component name="OOZIE_CLIENT"> + <upgrade> + <task xsi:type="restart-task" /> + </upgrade> + </component> + </service> + </processing> +</upgrade> http://git-wip-us.apache.org/repos/asf/ambari/blob/a9d622ed/ambari-server/src/test/resources/version_definition_test_patch_config.xml ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/resources/version_definition_test_patch_config.xml b/ambari-server/src/test/resources/version_definition_test_patch_config.xml new file mode 100644 index 0000000..9260c5f --- /dev/null +++ b/ambari-server/src/test/resources/version_definition_test_patch_config.xml @@ -0,0 +1,55 @@ +<?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="ZOOKEEPER-346" name="ZOOKEEPER" version="3.4.6" /> + </manifest> + + <available-services> + <service idref="ZOOKEEPER-346" /> + </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> + <unique>true</unique> + </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> + <unique>false</unique> + </repo> + </os> + </repository-info> +</repository-version>