You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by yu...@apache.org on 2015/12/07 06:10:07 UTC
ambari git commit: Revert "AMBARI-14188. During Upgrade Topology
Manager Causes Ambari To Be Unresponsive With Infinite Loop (Sebastian Toader
via smohanty)"
Repository: ambari
Updated Branches:
refs/heads/branch-2.2 041d040d8 -> 302e3f21e
Revert "AMBARI-14188. During Upgrade Topology Manager Causes Ambari To Be Unresponsive With Infinite Loop (Sebastian Toader via smohanty)"
This reverts commit 041d040d805e1392b31ad9099982e96c00fa384a.
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/302e3f21
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/302e3f21
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/302e3f21
Branch: refs/heads/branch-2.2
Commit: 302e3f21e0b1401148b5490868a0e89a09495979
Parents: 041d040
Author: Yusaku Sako <yu...@hortonworks.com>
Authored: Sun Dec 6 21:04:43 2015 -0800
Committer: Yusaku Sako <yu...@hortonworks.com>
Committed: Sun Dec 6 21:04:43 2015 -0800
----------------------------------------------------------------------
.../org/apache/ambari/server/state/Cluster.java | 8 +-
.../ambari/server/state/DesiredConfig.java | 56 +---------
.../server/state/cluster/ClusterImpl.java | 57 ++--------
.../ambari/server/topology/AmbariContext.java | 49 +--------
.../ambari/server/topology/TopologyManager.java | 4 +-
.../ambari/server/state/DesiredConfigTest.java | 17 ---
.../server/topology/AmbariContextTest.java | 107 -------------------
7 files changed, 16 insertions(+), 282 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/302e3f21/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 e10c808..3aaa9a5 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
@@ -404,17 +404,11 @@ public interface Cluster {
*/
boolean isConfigTypeExists(String configType);
/**
- * Gets the active desired configurations for the cluster.
+ * Gets the desired configurations for the cluster.
* @return a map of type-to-configuration information.
*/
Map<String, DesiredConfig> getDesiredConfigs();
- /**
- * Gets all versions of the desired configurations for the cluster.
- * @return a map of type-to-configuration information.
- */
- Map<String, Set<DesiredConfig>> getAllDesiredConfigVersions();
-
/**
* Creates a cluster response based on the current cluster definition
http://git-wip-us.apache.org/repos/asf/ambari/blob/302e3f21/ambari-server/src/main/java/org/apache/ambari/server/state/DesiredConfig.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/DesiredConfig.java b/ambari-server/src/main/java/org/apache/ambari/server/state/DesiredConfig.java
index 80d05f7..0635284 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/DesiredConfig.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/DesiredConfig.java
@@ -20,8 +20,6 @@ package org.apache.ambari.server.state;
import java.util.ArrayList;
import java.util.List;
-import org.apache.commons.lang.builder.EqualsBuilder;
-import org.apache.commons.lang.builder.HashCodeBuilder;
import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.map.annotate.JsonSerialize;
import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion;
@@ -121,9 +119,9 @@ public class DesiredConfig {
* Used to represent an override on a host.
*/
//TODO include changes for config versions
- public final static class HostOverride {
- private final String hostName;
- private final String versionOverrideTag;
+ public static class HostOverride {
+ private String hostName;
+ private String versionOverrideTag;
/**
* @param name the host name
@@ -150,27 +148,6 @@ public class DesiredConfig {
return versionOverrideTag;
}
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
-
- if (o == null || getClass() != o.getClass()) return false;
-
- HostOverride that = (HostOverride) o;
-
- return new EqualsBuilder()
- .append(hostName, that.hostName)
- .append(versionOverrideTag, that.versionOverrideTag)
- .isEquals();
- }
-
- @Override
- public int hashCode() {
- return new HashCodeBuilder(17, 37)
- .append(hostName)
- .append(versionOverrideTag)
- .toHashCode();
- }
}
@Override
@@ -197,31 +174,4 @@ public class DesiredConfig {
return sb.toString();
}
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
-
- if (o == null || getClass() != o.getClass()) return false;
-
- DesiredConfig that = (DesiredConfig) o;
-
- return new EqualsBuilder()
- .append(tag, that.tag)
- .append(serviceName, that.serviceName)
- .append(user, that.user)
- .append(version, that.version)
- .append(hostOverrides, that.hostOverrides)
- .isEquals();
- }
-
- @Override
- public int hashCode() {
- return new HashCodeBuilder(17, 37)
- .append(tag)
- .append(serviceName)
- .append(user)
- .append(version)
- .append(hostOverrides)
- .toHashCode();
- }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/302e3f21/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 16f4120..a556db8 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
@@ -36,10 +36,8 @@ import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
-import javax.annotation.Nullable;
import javax.persistence.RollbackException;
-import com.google.common.collect.Maps;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.ConfigGroupNotFoundException;
import org.apache.ambari.server.DuplicateResourceException;
@@ -2094,50 +2092,16 @@ public class ClusterImpl implements Cluster {
}
}
- /**
- * Gets all versions of the desired configurations for the cluster.
- * @return a map of type-to-configuration information.
- */
- @Override
- public Map<String, Set<DesiredConfig>> getAllDesiredConfigVersions() {
- return getDesiredConfigs(true);
- }
-
- /**
- * Gets the active desired configurations for the cluster.
- * @return a map of type-to-configuration information.
- */
@Override
public Map<String, DesiredConfig> getDesiredConfigs() {
- Map<String, Set<DesiredConfig>> activeConfigsByType = getDesiredConfigs(false);
-
- return Maps.transformEntries(
- activeConfigsByType,
- new Maps.EntryTransformer<String, Set<DesiredConfig>, DesiredConfig>() {
- @Override
- public DesiredConfig transformEntry(@Nullable String key, @Nullable Set<DesiredConfig> value) {
- return value.iterator().next();
- }
- });
- }
-
-
- /**
- * Gets desired configurations for the cluster.
- * @param allVersions specifies if all versions of the desired configurations to be returned
- * or only the active ones. It is expected that there is one and only one active
- * desired configuration per config type.
- * @return a map of type-to-configuration information.
- */
- private Map<String, Set<DesiredConfig>> getDesiredConfigs(boolean allVersions) {
loadConfigurations();
clusterGlobalLock.readLock().lock();
try {
- Map<String, Set<DesiredConfig>> map = new HashMap<>();
- Collection<String> types = new HashSet<>();
+ Map<String, DesiredConfig> map = new HashMap<String, DesiredConfig>();
+ Collection<String> types = new HashSet<String>();
for (ClusterConfigMappingEntity e : clusterDAO.getClusterConfigMappingEntitiesByCluster(getClusterId())) {
- if (allVersions || e.isSelected() > 0) {
+ if (e.isSelected() > 0) {
DesiredConfig c = new DesiredConfig();
c.setServiceName(null);
c.setTag(e.getTag());
@@ -2149,13 +2113,7 @@ public class ClusterImpl implements Cluster {
}
c.setVersion(allConfigs.get(e.getType()).get(e.getTag()).getVersion());
- Set<DesiredConfig> configs = map.get(e.getType());
- if (configs == null)
- configs = new HashSet<>();
-
- configs.add(c);
-
- map.put(e.getType(), configs);
+ map.put(e.getType(), c);
types.add(e.getType());
}
}
@@ -2167,7 +2125,7 @@ public class ClusterImpl implements Cluster {
Map<String, List<HostConfigMapping>> hostMappingsByType = hostConfigMappingDAO.findSelectedHostsByTypes(
clusterEntity.getClusterId(), types);
- for (Entry<String, Set<DesiredConfig>> entry : map.entrySet()) {
+ for (Entry<String, DesiredConfig> entry : map.entrySet()) {
List<DesiredConfig.HostOverride> hostOverrides = new ArrayList<DesiredConfig.HostOverride>();
for (HostConfigMapping mappingEntity : hostMappingsByType.get(entry.getKey())) {
@@ -2179,9 +2137,7 @@ public class ClusterImpl implements Cluster {
hostOverrides.add(new DesiredConfig.HostOverride(
hostIdToName.get(mappingEntity.getHostId()), mappingEntity.getVersion()));
}
-
- for (DesiredConfig c: entry.getValue())
- c.setHostOverrides(hostOverrides);
+ entry.getValue().setHostOverrides(hostOverrides);
}
}
@@ -2192,7 +2148,6 @@ public class ClusterImpl implements Cluster {
}
-
@Override
public ServiceConfigVersionResponse createServiceConfigVersion(
String serviceName, String user, String note, ConfigGroup configGroup) {
http://git-wip-us.apache.org/repos/asf/ambari/blob/302e3f21/ambari-server/src/main/java/org/apache/ambari/server/topology/AmbariContext.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/topology/AmbariContext.java b/ambari-server/src/main/java/org/apache/ambari/server/topology/AmbariContext.java
index d9ac183..608e6ca 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/topology/AmbariContext.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/topology/AmbariContext.java
@@ -63,14 +63,11 @@ import org.slf4j.LoggerFactory;
import javax.inject.Inject;
import java.util.Collection;
import java.util.Collections;
-import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
-import java.util.SortedSet;
-import java.util.TreeSet;
import java.util.concurrent.Callable;
import java.util.concurrent.atomic.AtomicLong;
@@ -432,55 +429,17 @@ public class AmbariContext {
}
}
- /**
- * Verifies if the given cluster has at least one desired configuration transitioned through
- * TopologyManager.INITIAL -> .... -> TopologyManager.TOPOLOGY_RESOLVED -> ....
- * @param clusterId the identifier of the cluster to be checked
- * @return true if the cluster
- */
- public boolean isTopologyResolved(long clusterId) {
+ public boolean doesConfigurationWithTagExist(long clusterId, String tag) {
boolean isTopologyResolved = false;
try {
Cluster cluster = getController().getClusters().getClusterById(clusterId);
-
- // Check through the various cluster config versions that these transitioned through TopologyManager.INITIAL -> .... -> TopologyManager.TOPOLOGY_RESOLVED -> ....
- Map<String, Set<DesiredConfig>> allDesiredConfigsByType = cluster.getAllDesiredConfigVersions();
-
- for (String configType: allDesiredConfigsByType.keySet()) {
- Set<DesiredConfig> desiredConfigVersions = allDesiredConfigsByType.get(configType);
-
- SortedSet<DesiredConfig> desiredConfigsOrderedByVersion = new TreeSet<>(new Comparator<DesiredConfig>() {
- @Override
- public int compare(DesiredConfig o1, DesiredConfig o2) {
- if (o1.getVersion() < o2.getVersion())
- return -1;
-
- if (o1.getVersion() > o2.getVersion())
- return 1;
-
- return 0;
- }
- });
-
- desiredConfigsOrderedByVersion.addAll(desiredConfigVersions);
-
- int tagMatchState = 0; // 0 -> INITIAL -> tagMatchState = 1 -> TOPLOGY_RESOLVED -> tagMatchState = 2
-
- for (DesiredConfig config: desiredConfigsOrderedByVersion) {
- if (config.getTag().equals(TopologyManager.INITIAL_CONFIG_TAG) && tagMatchState == 0)
- tagMatchState = 1;
- else if (config.getTag().equals(TopologyManager.TOPOLOGY_RESOLVED_TAG) && tagMatchState == 1) {
- tagMatchState = 2;
- break;
- }
- }
-
- if (tagMatchState == 2) {
+ Collection<DesiredConfig> desiredConfigs = cluster.getDesiredConfigs().values();
+ for (DesiredConfig config : desiredConfigs) {
+ if (config.getTag().equals(tag)) {
isTopologyResolved = true;
break;
}
}
-
} catch (ClusterNotFoundException e) {
LOG.info("Attempted to determine if configuration is topology resolved for a non-existent cluster: {}",
clusterId);
http://git-wip-us.apache.org/repos/asf/ambari/blob/302e3f21/ambari-server/src/main/java/org/apache/ambari/server/topology/TopologyManager.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/topology/TopologyManager.java b/ambari-server/src/main/java/org/apache/ambari/server/topology/TopologyManager.java
index 960915f..9b6c9ad 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/topology/TopologyManager.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/topology/TopologyManager.java
@@ -640,7 +640,7 @@ public class TopologyManager {
if (!configChecked) {
configChecked = true;
- if (!ambariContext.isTopologyResolved(topology.getClusterId())) {
+ if (!ambariContext.doesConfigurationWithTagExist(topology.getClusterId(), TOPOLOGY_RESOLVED_TAG)) {
LOG.info("TopologyManager.replayRequests: no config with TOPOLOGY_RESOLVED found, adding cluster config request");
addClusterConfigRequest(topology, new ClusterConfigurationRequest(
ambariContext, topology, false, stackAdvisorBlueprintProcessor));
@@ -683,7 +683,7 @@ public class TopologyManager {
CLUSTER_CONFIG_TASK_MAX_TIME_IN_MILLIS_PROPERTY_NAME);
long timeout = 1000 * 60 * 30; // 30 minutes
- long delay = 1000; //ms
+ long delay = 100; //ms
if (timeoutStr != null) {
timeout = Long.parseLong(timeoutStr);
http://git-wip-us.apache.org/repos/asf/ambari/blob/302e3f21/ambari-server/src/test/java/org/apache/ambari/server/state/DesiredConfigTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/DesiredConfigTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/DesiredConfigTest.java
index e144e18..93e3f07 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/DesiredConfigTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/DesiredConfigTest.java
@@ -20,8 +20,6 @@ package org.apache.ambari.server.state;
import java.util.Arrays;
import java.util.List;
-import nl.jqno.equalsverifier.EqualsVerifier;
-import nl.jqno.equalsverifier.Warning;
import org.junit.Assert;
import org.junit.Test;
@@ -62,19 +60,4 @@ public class DesiredConfigTest {
Assert.assertEquals("Expected override version 'v1'", "v1", override.getVersionTag());
}
- @Test
- public void testEquals() throws Exception {
- EqualsVerifier.forClass(DesiredConfig.class)
- .usingGetClass()
- .suppress(Warning.NONFINAL_FIELDS)
- .verify();
- }
-
- @Test
- public void testHostOverride_Equals() throws Exception {
- EqualsVerifier.forClass(DesiredConfig.HostOverride.class)
- .usingGetClass()
- .verify();
- }
-
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/302e3f21/ambari-server/src/test/java/org/apache/ambari/server/topology/AmbariContextTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/topology/AmbariContextTest.java b/ambari-server/src/test/java/org/apache/ambari/server/topology/AmbariContextTest.java
index 1613d11..254d3a3 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/topology/AmbariContextTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/topology/AmbariContextTest.java
@@ -18,8 +18,6 @@
package org.apache.ambari.server.topology;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
import org.apache.ambari.server.controller.AmbariManagementController;
import org.apache.ambari.server.controller.ClusterRequest;
import org.apache.ambari.server.controller.ConfigGroupRequest;
@@ -70,7 +68,6 @@ import static org.easymock.EasyMock.reset;
import static org.easymock.EasyMock.verify;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.assertFalse;
/**
* AmbariContext unit tests
@@ -430,109 +427,5 @@ public class AmbariContextTest {
context.waitForConfigurationResolution(CLUSTER_NAME, testUpdatedConfigTypes);
}
- @Test
- public void testIsTopologyResolved_True() throws Exception {
-
- // Given
- DesiredConfig testHdfsDesiredConfig1 = new DesiredConfig();
- testHdfsDesiredConfig1.setTag(TopologyManager.INITIAL_CONFIG_TAG);
- testHdfsDesiredConfig1.setVersion(1L);
-
- DesiredConfig testHdfsDesiredConfig2 = new DesiredConfig();
- testHdfsDesiredConfig2.setTag(TopologyManager.TOPOLOGY_RESOLVED_TAG);
- testHdfsDesiredConfig2.setVersion(2L);
-
- DesiredConfig testHdfsDesiredConfig3 = new DesiredConfig();
- testHdfsDesiredConfig3.setTag("ver123");
- testHdfsDesiredConfig3.setVersion(3L);
-
- DesiredConfig testCoreSiteDesiredConfig = new DesiredConfig();
- testCoreSiteDesiredConfig.setTag("ver123");
- testCoreSiteDesiredConfig.setVersion(1L);
-
-
- Map<String, Set<DesiredConfig>> testDesiredConfigs = ImmutableMap.<String, Set<DesiredConfig>>builder()
- .put("hdfs-site", ImmutableSet.of(testHdfsDesiredConfig2, testHdfsDesiredConfig3, testHdfsDesiredConfig1))
- .put("core-site", ImmutableSet.of(testCoreSiteDesiredConfig))
- .build();
-
- expect(cluster.getAllDesiredConfigVersions()).andReturn(testDesiredConfigs).atLeastOnce();
-
- replayAll();
-
- // When
- boolean topologyResolved = context.isTopologyResolved(CLUSTER_ID);
-
- // Then
- assertTrue(topologyResolved);
- }
-
- @Test
- public void testIsTopologyResolved_WrongOrder_False() throws Exception {
-
- // Given
- DesiredConfig testHdfsDesiredConfig1 = new DesiredConfig();
- testHdfsDesiredConfig1.setTag(TopologyManager.INITIAL_CONFIG_TAG);
- testHdfsDesiredConfig1.setVersion(2L);
-
- DesiredConfig testHdfsDesiredConfig2 = new DesiredConfig();
- testHdfsDesiredConfig2.setTag(TopologyManager.TOPOLOGY_RESOLVED_TAG);
- testHdfsDesiredConfig2.setVersion(1L);
-
- DesiredConfig testHdfsDesiredConfig3 = new DesiredConfig();
- testHdfsDesiredConfig3.setTag("ver123");
- testHdfsDesiredConfig3.setVersion(3L);
-
- DesiredConfig testCoreSiteDesiredConfig = new DesiredConfig();
- testCoreSiteDesiredConfig.setTag("ver123");
- testCoreSiteDesiredConfig.setVersion(1L);
-
-
- Map<String, Set<DesiredConfig>> testDesiredConfigs = ImmutableMap.<String, Set<DesiredConfig>>builder()
- .put("hdfs-site", ImmutableSet.of(testHdfsDesiredConfig2, testHdfsDesiredConfig3, testHdfsDesiredConfig1))
- .put("core-site", ImmutableSet.of(testCoreSiteDesiredConfig))
- .build();
-
- expect(cluster.getAllDesiredConfigVersions()).andReturn(testDesiredConfigs).atLeastOnce();
-
- replayAll();
-
- // When
- boolean topologyResolved = context.isTopologyResolved(CLUSTER_ID);
-
- // Then due to INITIAL -> TOPOLOGY_RESOLVED not honored
- assertFalse(topologyResolved);
- }
-
- @Test
- public void testIsTopologyResolved_False() throws Exception {
-
- // Given
- DesiredConfig testHdfsDesiredConfig1 = new DesiredConfig();
- testHdfsDesiredConfig1.setTag("ver1222");
- testHdfsDesiredConfig1.setVersion(1L);
-
-
- DesiredConfig testCoreSiteDesiredConfig = new DesiredConfig();
- testCoreSiteDesiredConfig.setTag("ver123");
- testCoreSiteDesiredConfig.setVersion(1L);
-
-
- Map<String, Set<DesiredConfig>> testDesiredConfigs = ImmutableMap.<String, Set<DesiredConfig>>builder()
- .put("hdfs-site", ImmutableSet.of(testHdfsDesiredConfig1))
- .put("core-site", ImmutableSet.of(testCoreSiteDesiredConfig))
- .build();
-
- expect(cluster.getAllDesiredConfigVersions()).andReturn(testDesiredConfigs).atLeastOnce();
-
- replayAll();
-
- // When
- boolean topologyResolved = context.isTopologyResolved(CLUSTER_ID);
-
- // Then
- assertFalse(topologyResolved);
- }
-
}