You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ma...@apache.org on 2017/02/09 07:36:55 UTC
ambari git commit: AMBARI-19866. Scale requests are failing after
removing services from original components of a hostgroup (magyari_sandor)
Repository: ambari
Updated Branches:
refs/heads/branch-2.5 66d6e3e95 -> 8bcbf3a5e
AMBARI-19866. Scale requests are failing after removing services from original components of a hostgroup (magyari_sandor)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/8bcbf3a5
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/8bcbf3a5
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/8bcbf3a5
Branch: refs/heads/branch-2.5
Commit: 8bcbf3a5e2e49920e09b65b3eebd6872f2420c3a
Parents: 66d6e3e
Author: Sandor Magyari <sm...@hortonworks.com>
Authored: Tue Feb 7 15:43:19 2017 +0100
Committer: Sandor Magyari <sm...@hortonworks.com>
Committed: Thu Feb 9 08:34:18 2017 +0100
----------------------------------------------------------------------
.../ambari/server/topology/AmbariContext.java | 36 +++++-----
.../server/topology/AmbariContextTest.java | 69 +++++++++++++++++++-
2 files changed, 87 insertions(+), 18 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/8bcbf3a5/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 5e887d4..adca3a3 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
@@ -186,7 +186,7 @@ public class AmbariContext {
});
} catch (AmbariException e) {
- e.printStackTrace();
+ LOG.error("Failed to create Cluster resource: ", e);
throw new RuntimeException("Failed to create Cluster resource: " + e, e);
}
}
@@ -231,14 +231,14 @@ public class AmbariContext {
new RequestImpl(null, Collections.singleton(installProps), null, null), predicate);
getServiceResourceProvider().updateResources(
- new RequestImpl(null, Collections.singleton(startProps), null, null), predicate);
+ new RequestImpl(null, Collections.singleton(startProps), null, null), predicate);
} catch (Exception e) {
// just log as this won't prevent cluster from being provisioned correctly
LOG.error("Unable to update state of services during cluster provision: " + e, e);
}
}
- public void createAmbariHostResources(long clusterId, String hostName, Map<String, Collection<String>> components) {
+ public void createAmbariHostResources(long clusterId, String hostName, Map<String, Collection<String>> components) {
Host host;
try {
host = getController().getClusters().getHost(hostName);
@@ -248,13 +248,14 @@ public class AmbariContext {
"Unable to obtain host instance '%s' when persisting host resources", hostName));
}
- String clusterName = null;
+ Cluster cluster = null;
try {
- clusterName = getClusterName(clusterId);
+ cluster = getController().getClusters().getClusterById(clusterId);
} catch (AmbariException e) {
- LOG.error("Cannot get cluster name for clusterId = " + clusterId, e);
+ LOG.error("Cannot get cluster for clusterId = " + clusterId, e);
throw new RuntimeException(e);
}
+ String clusterName = cluster.getClusterName();
Map<String, Object> properties = new HashMap<String, Object>();
properties.put(HostResourceProvider.HOST_CLUSTER_NAME_PROPERTY_ID, clusterName);
@@ -264,18 +265,23 @@ public class AmbariContext {
try {
getHostResourceProvider().createHosts(new RequestImpl(null, Collections.singleton(properties), null, null));
} catch (AmbariException e) {
- e.printStackTrace();
+ LOG.error("Unable to create host component resource for host {}", hostName, e);
throw new RuntimeException(String.format("Unable to create host resource for host '%s': %s",
hostName, e.toString()), e);
}
final Set<ServiceComponentHostRequest> requests = new HashSet<ServiceComponentHostRequest>();
+
for (Map.Entry<String, Collection<String>> entry : components.entrySet()) {
String service = entry.getKey();
for (String component : entry.getValue()) {
//todo: handle this in a generic manner. These checks are all over the code
- if (!component.equals("AMBARI_SERVER")) {
- requests.add(new ServiceComponentHostRequest(clusterName, service, component, hostName, null));
+ try {
+ if (cluster.getService(service) != null && !component.equals("AMBARI_SERVER")) {
+ requests.add(new ServiceComponentHostRequest(clusterName, service, component, hostName, null));
+ }
+ } catch(AmbariException se) {
+ LOG.warn("Service already deleted from cluster: {}", service);
}
}
}
@@ -288,7 +294,7 @@ public class AmbariContext {
}
});
} catch (AmbariException e) {
- e.printStackTrace();
+ LOG.error("Unable to create host component resource for host {}", hostName, e);
throw new RuntimeException(String.format("Unable to create host component resource for host '%s': %s",
hostName, e.toString()), e);
}
@@ -328,7 +334,7 @@ public class AmbariContext {
createConfigGroupsAndRegisterHost(topology, groupName);
}
} catch (Exception e) {
- e.printStackTrace();
+ LOG.error("Unable to register config group for host: ", e);
throw new RuntimeException("Unable to register config group for host: " + hostName);
}
}
@@ -392,7 +398,7 @@ public class AmbariContext {
}
});
} catch (AmbariException e) {
- e.printStackTrace();
+ LOG.error("Failed to set configurations on cluster: ", e);
throw new RuntimeException("Failed to set configurations on cluster: " + e, e);
}
}
@@ -436,7 +442,7 @@ public class AmbariContext {
// sleep before checking the config again
Thread.sleep(100);
} catch (InterruptedException e) {
- e.printStackTrace();
+ LOG.warn("sleep interrupted");
}
}
}
@@ -627,8 +633,6 @@ public class AmbariContext {
}
});
-
-
ConfigGroupRequest request = new ConfigGroupRequest(
null, clusterName, absoluteGroupName, service, "Host Group Configuration",
Sets.newHashSet(filteredGroupHosts), serviceConfigs);
@@ -640,7 +644,7 @@ public class AmbariContext {
try {
configGroupProvider.createResources(Collections.singleton(request));
} catch (Exception e) {
- e.printStackTrace();
+ LOG.error("Failed to create new configuration group: " + e);
throw new RuntimeException("Failed to create new configuration group: " + e, e);
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/8bcbf3a5/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 fac5185..e798a4c 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,6 +18,7 @@
package org.apache.ambari.server.topology;
+import static org.easymock.EasyMock.anyObject;
import static org.easymock.EasyMock.capture;
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.createNiceMock;
@@ -32,6 +33,7 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.lang.reflect.Field;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
@@ -43,6 +45,7 @@ import java.util.Set;
import org.apache.ambari.server.controller.AmbariManagementController;
import org.apache.ambari.server.controller.ClusterRequest;
import org.apache.ambari.server.controller.ConfigGroupRequest;
+import org.apache.ambari.server.controller.ServiceComponentHostRequest;
import org.apache.ambari.server.controller.ServiceComponentRequest;
import org.apache.ambari.server.controller.ServiceRequest;
import org.apache.ambari.server.controller.internal.ComponentResourceProvider;
@@ -113,6 +116,7 @@ public class AmbariContextTest {
private static final Host host1 = createNiceMock(Host.class);
private static final Host host2 = createNiceMock(Host.class);
private static final ConfigFactory configFactory = createNiceMock(ConfigFactory.class);
+ private static final Service mockService1 = createStrictMock(Service.class);
private static final Collection<String> blueprintServices = new HashSet<String>();
private static final Map<String, Service> clusterServices = new HashMap<String, Service>();
@@ -259,8 +263,8 @@ public class AmbariContextTest {
private void replayAll() {
replay(controller, clusterController, hostResourceProvider, serviceResourceProvider, componentResourceProvider,
- hostComponentResourceProvider, configGroupResourceProvider, topology, blueprint, stack, clusters,
- cluster, group1Info, configHelper, configGroup1, configGroup2, host1, host2, configFactory);
+ hostComponentResourceProvider, configGroupResourceProvider, topology, blueprint, stack, clusters,
+ cluster, group1Info, configHelper, configGroup1, configGroup2, host1, host2, configFactory);
}
@Test
@@ -352,6 +356,67 @@ public class AmbariContextTest {
}
@Test
+ public void testCreateAmbariHostResources() throws Exception {
+ // expectations
+ expect(cluster.getServices()).andReturn(clusterServices).anyTimes();
+
+ hostResourceProvider.createHosts(anyObject(Request.class));
+ expectLastCall().once();
+ expect(cluster.getService("service1")).andReturn(mockService1).times(2);
+ expect(cluster.getService("service2")).andReturn(mockService1).once();
+ Capture<Set<ServiceComponentHostRequest>> requestsCapture = EasyMock.newCapture();
+
+ controller.createHostComponents(capture(requestsCapture));
+ expectLastCall().once();
+
+ replayAll();
+
+ // test
+ Map<String, Collection<String>> componentsMap = new HashMap<>();
+ Collection<String> components = new ArrayList<>();
+ components.add("component1");
+ components.add("component2");
+ componentsMap.put("service1", components);
+ components = new ArrayList<>();
+ components.add("component3");
+ componentsMap.put("service2", components);
+
+ context.createAmbariHostResources(CLUSTER_ID, "host1", componentsMap);
+
+ assertEquals(requestsCapture.getValue().size(), 3);
+ }
+
+ @Test
+ public void testCreateAmbariHostResourcesWithMissingService() throws Exception {
+ // expectations
+ expect(cluster.getServices()).andReturn(clusterServices).anyTimes();
+
+ hostResourceProvider.createHosts(anyObject(Request.class));
+ expectLastCall().once();
+ expect(cluster.getService("service1")).andReturn(mockService1).times(2);
+ Capture<Set<ServiceComponentHostRequest>> requestsCapture = EasyMock.newCapture();
+
+ controller.createHostComponents(capture(requestsCapture));
+ expectLastCall().once();
+
+ replayAll();
+
+ // test
+ Map<String, Collection<String>> componentsMap = new HashMap<>();
+ Collection<String> components = new ArrayList<>();
+ components.add("component1");
+ components.add("component2");
+ componentsMap.put("service1", components);
+ components = new ArrayList<>();
+ components.add("component3");
+ componentsMap.put("service2", components);
+
+ context.createAmbariHostResources(CLUSTER_ID, "host1", componentsMap);
+
+ assertEquals(requestsCapture.getValue().size(), 2);
+ }
+
+ @Test
public void testRegisterHostWithConfigGroup_createNewConfigGroup() throws Exception {
// test specific expectations
expect(cluster.getConfigGroups()).andReturn(Collections.<Long, ConfigGroup>emptyMap()).once();