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 2015/04/23 22:46:24 UTC
ambari git commit: AMBARI-10005. RU: desired stack must be cascaded
during upgrade (ncole)
Repository: ambari
Updated Branches:
refs/heads/trunk d8bff0381 -> aa3bd6e2b
AMBARI-10005. RU: desired stack must be cascaded during upgrade (ncole)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/aa3bd6e2
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/aa3bd6e2
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/aa3bd6e2
Branch: refs/heads/trunk
Commit: aa3bd6e2b4e19182cc99d870c0f30648738e16b6
Parents: d8bff03
Author: Nate Cole <nc...@hortonworks.com>
Authored: Thu Apr 23 14:30:20 2015 -0400
Committer: Nate Cole <nc...@hortonworks.com>
Committed: Thu Apr 23 16:45:53 2015 -0400
----------------------------------------------------------------------
.../ambari/server/agent/HeartBeatHandler.java | 1 +
.../internal/UpgradeResourceProvider.java | 76 +++++++++++---------
.../upgrades/FinalizeUpgradeAction.java | 8 ++-
.../org/apache/ambari/server/state/Cluster.java | 12 +++-
.../server/state/cluster/ClusterImpl.java | 21 ++++++
.../internal/UpgradeResourceProviderTest.java | 52 +++++++++++---
6 files changed, 126 insertions(+), 44 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/aa3bd6e2/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java b/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java
index 596525b..9bdc4b7 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java
@@ -772,6 +772,7 @@ public class HeartBeatHandler {
final String previousVersion = scHost.getVersion();
if (!StringUtils.equals(previousVersion, newVersion)) {
scHost.setVersion(newVersion);
+ scHost.setStackVersion(cluster.getDesiredStackVersion());
if (previousVersion != null && !previousVersion.equalsIgnoreCase(State.UNKNOWN.toString())) {
scHost.setUpgradeState(UpgradeState.COMPLETE);
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/aa3bd6e2/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 82b7307..730fba5 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
@@ -581,7 +581,7 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
entity.setRequestId(req.getId());
// !!! in case persist() starts creating tasks right away, square away the configs
- createConfigs(cluster, version);
+ createConfigs(cluster, version, direction);
req.persist();
@@ -597,7 +597,7 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
* @param version the version
* @throws AmbariException
*/
- private void createConfigs(Cluster cluster, String version) throws AmbariException {
+ private void createConfigs(Cluster cluster, String version, Direction direction) throws AmbariException {
RepositoryVersionEntity targetRve = s_repoVersionDAO.findMaxByVersion(version);
if (null == targetRve) {
LOG.info("Could not find version entity for {}; not setting new configs",
@@ -614,29 +614,16 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
ConfigHelper configHelper = getManagementController().getConfigHelper();
- Map<String, Map<String, String>> clusterConfigs = new HashMap<String, Map<String, String>>();
+ Map<String, Map<String, String>> clusterConfigs = null;
- // !!! stack
- Set<org.apache.ambari.server.state.PropertyInfo> pi = s_metaProvider.get().getStackProperties(newStack.getStackName(),
- newStack.getStackVersion());
+ if (direction == Direction.UPGRADE) {
- for (PropertyInfo stackProperty : pi) {
- String type = ConfigHelper.fileNameToConfigType(stackProperty.getFilename());
+ clusterConfigs = new HashMap<String, Map<String, String>>();
- if (!clusterConfigs.containsKey(type)) {
- clusterConfigs.put(type, new HashMap<String, String>());
- }
-
- clusterConfigs.get(type).put(stackProperty.getName(),
- stackProperty.getValue());
- }
-
- // !!! by service
- for (String serviceName : cluster.getServices().keySet()) {
- pi = s_metaProvider.get().getServiceProperties(newStack.getStackName(),
- newStack.getStackVersion(), serviceName);
+ // !!! stack
+ Set<org.apache.ambari.server.state.PropertyInfo> pi = s_metaProvider.get().getStackProperties(newStack.getStackName(),
+ newStack.getStackVersion());
- // !!! use new stack as the basis
for (PropertyInfo stackProperty : pi) {
String type = ConfigHelper.fileNameToConfigType(stackProperty.getFilename());
@@ -647,23 +634,46 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
clusterConfigs.get(type).put(stackProperty.getName(),
stackProperty.getValue());
}
- }
- // !!! upgrading the stack
- cluster.setDesiredStackVersion(
- new StackId(newStack.getStackName(), newStack.getStackVersion()));
+ // !!! by service
+ for (String serviceName : cluster.getServices().keySet()) {
+ pi = s_metaProvider.get().getServiceProperties(newStack.getStackName(),
+ newStack.getStackVersion(), serviceName);
+
+ // !!! use new stack as the basis
+ for (PropertyInfo stackProperty : pi) {
+ String type = ConfigHelper.fileNameToConfigType(stackProperty.getFilename());
+
+ if (!clusterConfigs.containsKey(type)) {
+ clusterConfigs.put(type, new HashMap<String, String>());
+ }
+
+ clusterConfigs.get(type).put(stackProperty.getName(),
+ stackProperty.getValue());
+ }
+ }
- // !!! overlay the currently defined values per type
- for (Map.Entry<String, Map<String, String>> entry : clusterConfigs.entrySet()) {
- Config config = cluster.getDesiredConfigByType(entry.getKey());
- if (null != config) {
- entry.getValue().putAll(config.getProperties());
+ // !!! overlay the currently defined values per type
+ for (Map.Entry<String, Map<String, String>> entry : clusterConfigs.entrySet()) {
+ Config config = cluster.getDesiredConfigByType(entry.getKey());
+ if (null != config) {
+ entry.getValue().putAll(config.getProperties());
+ }
}
+ } else {
+ // !!! remove configs
}
- configHelper.createConfigTypes(cluster, getManagementController(),
- clusterConfigs, getManagementController().getAuthName(),
- "Configuration created for Upgrade");
+ // !!! update the stack
+ cluster.setDesiredStackVersion(
+ new StackId(newStack.getStackName(), newStack.getStackVersion()), true);
+
+ // !!! configs must be created after setting the stack version
+ if (null != clusterConfigs) {
+ configHelper.createConfigTypes(cluster, getManagementController(),
+ clusterConfigs, getManagementController().getAuthName(),
+ "Configuration created for Upgrade");
+ }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/aa3bd6e2/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java
index d97ad61..49e241f 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java
@@ -356,7 +356,13 @@ public class FinalizeUpgradeAction extends AbstractServerAction {
ComponentInfo componentInfo = ambariMetaInfo.getComponent(targetStackId.getStackName(),
targetStackId.getStackVersion(), service.getName(), serviceComponent.getName());
- if (componentInfo.isVersionAdvertised()
+ if (!componentInfo.isVersionAdvertised()) {
+ StackId desired = serviceComponentHost.getDesiredStackVersion();
+ StackId actual = serviceComponentHost.getStackVersion();
+ if (!desired.equals(actual)) {
+ serviceComponentHost.setStackVersion(desired);
+ }
+ } else if (componentInfo.isVersionAdvertised()
&& !serviceComponentHost.getVersion().equals(desiredVersion)) {
errors.add(new InfoTuple(
service.getName(), serviceComponent.getName(), serviceComponentHost.getHostName()));
http://git-wip-us.apache.org/repos/asf/ambari/blob/aa3bd6e2/ambari-server/src/main/java/org/apache/ambari/server/state/Cluster.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/Cluster.java b/ambari-server/src/main/java/org/apache/ambari/server/state/Cluster.java
index 64fe765..855bb3f 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/Cluster.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/Cluster.java
@@ -122,6 +122,15 @@ public interface Cluster {
public void setDesiredStackVersion(StackId stackVersion) throws AmbariException;
/**
+ * Sets the desired stack version, optionally setting all owned services,
+ * components, and host components
+ * @param stackId the stack id
+ * @param cascade {@code true} to cascade the desired version
+ */
+ public void setDesiredStackVersion(StackId stackId, boolean cascade) throws AmbariException;
+
+
+ /**
* Get current stack version
* @return
*/
@@ -200,7 +209,7 @@ public interface Cluster {
/**
* Transition an existing cluster version from one state to another.
- *
+ *
* @param stackId
* Stack ID
* @param version
@@ -510,4 +519,5 @@ public interface Cluster {
* @return the map of session attributes for this cluster; never null
*/
public Map<String, Object> getSessionAttributes();
+
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/aa3bd6e2/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
index f62e3f3..2558de8 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
@@ -891,6 +891,11 @@ public class ClusterImpl implements Cluster {
@Override
public void setDesiredStackVersion(StackId stackId) throws AmbariException {
+ setDesiredStackVersion(stackId, false);
+ }
+
+ @Override
+ public void setDesiredStackVersion(StackId stackId, boolean cascade) throws AmbariException {
clusterGlobalLock.writeLock().lock();
try {
if (LOG.isDebugEnabled()) {
@@ -906,12 +911,28 @@ public class ClusterImpl implements Cluster {
clusterEntity.setDesiredStack(stackEntity);
clusterDAO.merge(clusterEntity);
+
+ if (cascade) {
+ for (Service service : getServices().values()) {
+ service.setDesiredStackVersion(stackId);
+
+ for (ServiceComponent sc : service.getServiceComponents().values()) {
+ sc.setDesiredStackVersion(stackId);
+
+ for (ServiceComponentHost sch : sc.getServiceComponentHosts().values()) {
+ sch.setDesiredStackVersion(stackId);
+ }
+ }
+ }
+ }
+
loadServiceConfigTypes();
} finally {
clusterGlobalLock.writeLock().unlock();
}
}
+
@Override
public StackId getCurrentStackVersion() {
clusterGlobalLock.readLock().lock();
http://git-wip-us.apache.org/repos/asf/ambari/blob/aa3bd6e2/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 5de2eac..d79f809 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
@@ -21,6 +21,7 @@ import static org.easymock.EasyMock.createNiceMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
@@ -145,7 +146,7 @@ public class UpgradeResourceProviderTest {
repoVersionEntity.setOperatingSystems("");
repoVersionEntity.setStack(stackEntity);
repoVersionEntity.setUpgradePackage("upgrade_test");
- repoVersionEntity.setVersion("2.2.2.1");
+ repoVersionEntity.setVersion("2.1.1.0");
repoVersionDao.create(repoVersionEntity);
repoVersionEntity = new RepositoryVersionEntity();
@@ -153,7 +154,7 @@ public class UpgradeResourceProviderTest {
repoVersionEntity.setOperatingSystems("");
repoVersionEntity.setStack(stackEntity);
repoVersionEntity.setUpgradePackage("upgrade_test");
- repoVersionEntity.setVersion("2.2.2.2");
+ repoVersionEntity.setVersion("2.1.1.1");
repoVersionDao.create(repoVersionEntity);
repoVersionEntity = new RepositoryVersionEntity();
@@ -192,11 +193,11 @@ public class UpgradeResourceProviderTest {
ServiceComponent component = service.addServiceComponent("ZOOKEEPER_SERVER");
ServiceComponentHost sch = component.addServiceComponentHost("h1");
- sch.setVersion("2.2.2.1");
+ sch.setVersion("2.1.1.0");
component = service.addServiceComponent("ZOOKEEPER_CLIENT");
sch = component.addServiceComponentHost("h1");
- sch.setVersion("2.2.2.1");
+ sch.setVersion("2.1.1.0");
}
@After
@@ -214,7 +215,7 @@ public class UpgradeResourceProviderTest {
Map<String, Object> requestProps = new HashMap<String, Object>();
requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
- requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.2.2.1");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.1.1.1");
ResourceProvider upgradeResourceProvider = createProvider(amc);
@@ -402,7 +403,7 @@ public class UpgradeResourceProviderTest {
Map<String, Object> requestProps = new HashMap<String, Object>();
requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
- requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.2.2.1");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.1.1.1");
Map<String, String> requestInfoProperties = new HashMap<String, String>();
requestInfoProperties.put(UpgradeResourceDefinition.DOWNGRADE_DIRECTIVE, "true");
@@ -424,7 +425,7 @@ public class UpgradeResourceProviderTest {
UpgradeGroupEntity group = upgradeGroups.get(1);
assertEquals("ZOOKEEPER", group.getName());
- assertEquals(3, group.getItems().size());
+ assertEquals(4, group.getItems().size());
}
@@ -435,7 +436,7 @@ public class UpgradeResourceProviderTest {
Map<String, Object> requestProps = new HashMap<String, Object>();
requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
- requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.2.2.1");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.1.1.1");
ResourceProvider upgradeResourceProvider = createProvider(amc);
@@ -458,7 +459,7 @@ public class UpgradeResourceProviderTest {
requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.2");
- requestProps.put(UpgradeResourceProvider.UPGRADE_FROM_VERSION, "2.2.2.1");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_FROM_VERSION, "2.1.1.0");
Map<String, String> requestInfoProperties = new HashMap<String, String>();
requestInfoProperties.put(UpgradeResourceDefinition.DOWNGRADE_DIRECTIVE, "true");
@@ -619,6 +620,20 @@ public class UpgradeResourceProviderTest {
@Test
public void testCreateCrossStackUpgrade() throws Exception {
Cluster cluster = clusters.getCluster("c1");
+ StackId oldStack = cluster.getDesiredStackVersion();
+
+ for (Service s : cluster.getServices().values()) {
+ assertEquals(oldStack, s.getDesiredStackVersion());
+
+ for (ServiceComponent sc : s.getServiceComponents().values()) {
+ assertEquals(oldStack, sc.getDesiredStackVersion());
+
+ for (ServiceComponentHost sch : sc.getServiceComponentHosts().values()) {
+ assertEquals(oldStack, sch.getDesiredStackVersion());
+ }
+ }
+ }
+
Config config = new ConfigImpl("zoo.cfg");
config.setProperties(new HashMap<String, String>() {{
@@ -655,6 +670,25 @@ public class UpgradeResourceProviderTest {
"Foo", item.getText());
assertTrue(cluster.getDesiredConfigs().containsKey("zoo.cfg"));
+
+ StackId newStack = cluster.getDesiredStackVersion();
+
+ assertFalse(oldStack.equals(newStack));
+
+ for (Service s : cluster.getServices().values()) {
+ assertEquals(newStack, s.getDesiredStackVersion());
+
+ for (ServiceComponent sc : s.getServiceComponents().values()) {
+ assertEquals(newStack, sc.getDesiredStackVersion());
+
+ for (ServiceComponentHost sch : sc.getServiceComponentHosts().values()) {
+ assertEquals(newStack, sch.getDesiredStackVersion());
+ }
+ }
+ }
+
+
+
}
/**