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 2017/01/18 15:58:07 UTC
[34/50] [abbrv] ambari git commit: AMBARI-19596. ZKFC version shows
incorrect in DB tables upon downgrade (ncole)
AMBARI-19596. ZKFC version shows incorrect in DB tables upon downgrade (ncole)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/b2ba7ddc
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/b2ba7ddc
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/b2ba7ddc
Branch: refs/heads/branch-dev-patch-upgrade
Commit: b2ba7ddc8fe7380c49a39285f68918492cacf6f1
Parents: 4d44269
Author: Nate Cole <nc...@hortonworks.com>
Authored: Tue Jan 17 14:15:08 2017 -0500
Committer: Nate Cole <nc...@hortonworks.com>
Committed: Tue Jan 17 16:53:39 2017 -0500
----------------------------------------------------------------------
.../internal/UpgradeResourceProvider.java | 11 +++-
.../listeners/upgrade/StackVersionListener.java | 2 +-
.../ambari/server/state/UpgradeHelper.java | 44 +++++++++++--
.../internal/UpgradeResourceProviderTest.java | 69 +++++++++++++++++++-
.../HDP/2.1.1/services/STORM/metainfo.xml | 1 +
.../HDP/2.2.0/services/STORM/metainfo.xml | 37 +++++++++++
6 files changed, 153 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/b2ba7ddc/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 6f8ebb7..2ec43cf 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
@@ -37,6 +37,8 @@ import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import org.apache.ambari.annotations.Experimental;
+import org.apache.ambari.annotations.ExperimentalFeature;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.Role;
import org.apache.ambari.server.RoleCommand;
@@ -859,6 +861,7 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
// TODO: for now, all service components are transitioned to upgrading state
// TODO: When performing patch upgrade, we should only target supported services/components
// from upgrade pack
+ @Experimental(feature=ExperimentalFeature.PATCH_UPGRADES)
Set<Service> services = new HashSet<>(cluster.getServices().values());
Map<Service, Set<ServiceComponent>> targetComponents = new HashMap<>();
for (Service service: services) {
@@ -866,9 +869,11 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
new HashSet<>(service.getServiceComponents().values());
targetComponents.put(service, serviceComponents);
}
- // TODO: is there any extreme case when we need to set component upgrade state back to NONE
- // from IN_PROGRESS (e.g. canceled downgrade)
- s_upgradeHelper.putComponentsToUpgradingState(version, targetComponents);
+
+ // !!! determine which stack to check for component isAdvertised
+ StackId componentStack = upgradeContext.getDirection() == Direction.UPGRADE ?
+ upgradeContext.getTargetStackId() : upgradeContext.getOriginalStackId();
+ s_upgradeHelper.putComponentsToUpgradingState(version, targetComponents, componentStack);
for (UpgradeGroupHolder group : groups) {
boolean skippable = group.skippable;
http://git-wip-us.apache.org/repos/asf/ambari/blob/b2ba7ddc/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 f5a5b0c..3179bd4 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
@@ -58,7 +58,7 @@ public class StackVersionListener {
* Logger.
*/
private final static Logger LOG = LoggerFactory.getLogger(StackVersionListener.class);
- private static final String UNKNOWN_VERSION = State.UNKNOWN.toString();
+ public static final String UNKNOWN_VERSION = State.UNKNOWN.toString();
/**
* Used to prevent multiple threads from trying to create host alerts
http://git-wip-us.apache.org/repos/asf/ambari/blob/b2ba7ddc/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
index 52bf428..ee5451f 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
@@ -45,6 +45,7 @@ import org.apache.ambari.server.controller.spi.UnsupportedPropertyException;
import org.apache.ambari.server.controller.utilities.ClusterControllerHelper;
import org.apache.ambari.server.controller.utilities.PredicateBuilder;
import org.apache.ambari.server.controller.utilities.PropertyHelper;
+import org.apache.ambari.server.events.listeners.upgrade.StackVersionListener;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.stack.HostsType;
@@ -773,19 +774,50 @@ public class UpgradeHelper {
* desired version (like 2.2.1.0-1234) for upgrade
* @param targetServices
* targets for upgrade
+ * @param targetStack
+ * the target stack for the components. Express and Rolling upgrades determine
+ * the "correct" stack differently, so the component's desired stack id is not
+ * a reliable indicator.
*/
@Transactional
public void putComponentsToUpgradingState(String version,
- Map<Service, Set<ServiceComponent>> targetServices) throws AmbariException {
- // TODO: generalize method?
+ Map<Service, Set<ServiceComponent>> targetServices, StackId targetStack) throws AmbariException {
+
for (Map.Entry<Service, Set<ServiceComponent>> entry: targetServices.entrySet()) {
for (ServiceComponent serviceComponent: entry.getValue()) {
- if (serviceComponent.isVersionAdvertised()) {
- for (ServiceComponentHost serviceComponentHost: serviceComponent.getServiceComponentHosts().values()) {
- serviceComponentHost.setUpgradeState(UpgradeState.IN_PROGRESS);
+
+ boolean versionAdvertised = false;
+ try {
+ ComponentInfo ci = m_ambariMetaInfo.get().getComponent(targetStack.getStackName(),
+ targetStack.getStackVersion(), serviceComponent.getServiceName(),
+ serviceComponent.getName());
+
+ versionAdvertised = ci.isVersionAdvertised();
+ } catch (AmbariException e) {
+ LOG.warn("Component {}/{} doesn't exist for stack {}. Setting version to {}",
+ serviceComponent.getServiceName(), serviceComponent.getName(), targetStack,
+ StackVersionListener.UNKNOWN_VERSION);
+ }
+
+ UpgradeState upgradeState = UpgradeState.IN_PROGRESS;
+ String desiredVersion = version;
+
+ if (!versionAdvertised) {
+ upgradeState = UpgradeState.NONE;
+ desiredVersion = StackVersionListener.UNKNOWN_VERSION;
+ }
+
+ for (ServiceComponentHost serviceComponentHost: serviceComponent.getServiceComponentHosts().values()) {
+ serviceComponentHost.setUpgradeState(upgradeState);
+
+ // !!! if we aren't version advertised, but there IS a version, set it.
+ if (!versionAdvertised &&
+ !serviceComponentHost.getVersion().equals(StackVersionListener.UNKNOWN_VERSION)) {
+ serviceComponentHost.setVersion(StackVersionListener.UNKNOWN_VERSION);
}
- serviceComponent.setDesiredVersion(version);
}
+ serviceComponent.setDesiredVersion(desiredVersion);
+
}
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/b2ba7ddc/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 a702e6f..4d95e2b 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
@@ -96,6 +96,8 @@ import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.state.ServiceComponentHost;
import org.apache.ambari.server.state.StackId;
+import org.apache.ambari.server.state.UpgradeHelper;
+import org.apache.ambari.server.state.UpgradeState;
import org.apache.ambari.server.state.stack.UpgradePack;
import org.apache.ambari.server.state.stack.upgrade.Direction;
import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
@@ -1464,7 +1466,6 @@ public class UpgradeResourceProviderTest {
*/
@Test()
public void testCreateHostOrderedUpgradeThrowsExceptions() throws Exception {
- Cluster cluster = clusters.getCluster("c1");
Map<String, Object> requestProps = new HashMap<String, Object>();
requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
@@ -1509,6 +1510,72 @@ public class UpgradeResourceProviderTest {
upgradeResourceProvider.createResources(request);
}
+ /**
+ * Exercises that a component that goes from upgrade->downgrade that switches
+ * {@code versionAdvertised} between will go to UKNOWN. This exercises
+ * {@link UpgradeHelper#putComponentsToUpgradingState(String, Map, StackId)}
+ * @throws Exception
+ */
+ @Test
+ public void testCreateUpgradeDowngradeCycleAdvertisingVersion() throws Exception {
+ Cluster cluster = clusters.getCluster("c1");
+ Service service = cluster.addService("STORM");
+ service.setDesiredStackVersion(cluster.getDesiredStackVersion());
+
+ ServiceComponent component = service.addServiceComponent("DRPC_SERVER");
+ ServiceComponentHost sch = component.addServiceComponentHost("h1");
+ sch.setVersion("2.1.1.0");
+
+ ResourceProvider upgradeResourceProvider = createProvider(amc);
+
+ Map<String, Object> requestProps = new HashMap<>();
+ requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.2.0.0");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_PACK, "upgrade_test");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_PREREQUISITE_CHECKS, "true");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_FROM_VERSION, "2.1.1.0");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_DIRECTION, Direction.UPGRADE.name());
+
+ Map<String, String> requestInfoProperties = new HashMap<>();
+
+ Request request = PropertyHelper.getCreateRequest(Collections.singleton(requestProps), requestInfoProperties);
+
+ RequestStatus status = upgradeResourceProvider.createResources(request);
+ assertEquals(1, status.getAssociatedResources().size());
+
+ Resource r = status.getAssociatedResources().iterator().next();
+ String id = r.getPropertyValue("Upgrade/request_id").toString();
+
+ component = service.getServiceComponent("DRPC_SERVER");
+ assertNotNull(component);
+ assertEquals("2.2.0.0", component.getDesiredVersion());
+
+ ServiceComponentHost hostComponent = component.getServiceComponentHost("h1");
+ assertEquals(UpgradeState.IN_PROGRESS, hostComponent.getUpgradeState());
+
+ // !!! can't start a downgrade until cancelling the previous upgrade
+ abortUpgrade(Long.parseLong(id));
+
+ requestProps.clear();
+ requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.1.1.0");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_PACK, "upgrade_test");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_PREREQUISITE_CHECKS, "true");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_FROM_VERSION, "2.2.0.0");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_DIRECTION, Direction.DOWNGRADE.name());
+
+ request = PropertyHelper.getCreateRequest(Collections.singleton(requestProps), requestInfoProperties);
+ status = upgradeResourceProvider.createResources(request);
+
+ component = service.getServiceComponent("DRPC_SERVER");
+ assertNotNull(component);
+ assertEquals("UNKNOWN", component.getDesiredVersion());
+
+ hostComponent = component.getServiceComponentHost("h1");
+ assertEquals(UpgradeState.NONE, hostComponent.getUpgradeState());
+ assertEquals("UNKNOWN", hostComponent.getVersion());
+ }
+
private String parseSingleMessage(String msgStr){
JsonParser parser = new JsonParser();
http://git-wip-us.apache.org/repos/asf/ambari/blob/b2ba7ddc/ambari-server/src/test/resources/stacks/HDP/2.1.1/services/STORM/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/resources/stacks/HDP/2.1.1/services/STORM/metainfo.xml b/ambari-server/src/test/resources/stacks/HDP/2.1.1/services/STORM/metainfo.xml
index 79a3130..d63aa1b 100644
--- a/ambari-server/src/test/resources/stacks/HDP/2.1.1/services/STORM/metainfo.xml
+++ b/ambari-server/src/test/resources/stacks/HDP/2.1.1/services/STORM/metainfo.xml
@@ -72,6 +72,7 @@
<name>DRPC_SERVER</name>
<displayName>DRPC Server</displayName>
<category>MASTER</category>
+ <versionAdvertised>false</versionAdvertised>
<commandScript>
<script>scripts/drpc_server.py</script>
<scriptType>PYTHON</scriptType>
http://git-wip-us.apache.org/repos/asf/ambari/blob/b2ba7ddc/ambari-server/src/test/resources/stacks/HDP/2.2.0/services/STORM/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/resources/stacks/HDP/2.2.0/services/STORM/metainfo.xml b/ambari-server/src/test/resources/stacks/HDP/2.2.0/services/STORM/metainfo.xml
new file mode 100644
index 0000000..6075ba3
--- /dev/null
+++ b/ambari-server/src/test/resources/stacks/HDP/2.2.0/services/STORM/metainfo.xml
@@ -0,0 +1,37 @@
+<?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.
+-->
+
+<metainfo>
+ <schemaVersion>2.0</schemaVersion>
+ <services>
+ <service>
+ <name>STORM</name>
+ <comment>Apache Hadoop Stream processing framework</comment>
+ <version>0.9.0.1</version>
+ <components>
+
+ <component>
+ <name>DRPC_SERVER</name>
+ <displayName>DRPC Server</displayName>
+ <category>MASTER</category>
+ <versionAdvertised>true</versionAdvertised>
+ </component>
+ </components>
+ </service>
+ </services>
+</metainfo>
\ No newline at end of file