Return-Path: X-Original-To: apmail-ambari-commits-archive@www.apache.org Delivered-To: apmail-ambari-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 47B0218881 for ; Tue, 16 Feb 2016 18:30:08 +0000 (UTC) Received: (qmail 72541 invoked by uid 500); 16 Feb 2016 18:30:07 -0000 Delivered-To: apmail-ambari-commits-archive@ambari.apache.org Received: (qmail 72414 invoked by uid 500); 16 Feb 2016 18:30:07 -0000 Mailing-List: contact commits-help@ambari.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: ambari-dev@ambari.apache.org Delivered-To: mailing list commits@ambari.apache.org Received: (qmail 72214 invoked by uid 99); 16 Feb 2016 18:30:07 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 16 Feb 2016 18:30:07 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id F075EE0A1B; Tue, 16 Feb 2016 18:30:06 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: jonathanhurley@apache.org To: commits@ambari.apache.org Date: Tue, 16 Feb 2016 18:30:29 -0000 Message-Id: <4cd08eb1b607422d8212716d0d36bb82@git.apache.org> In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [24/50] [abbrv] ambari git commit: AMBARI-14772. Added ability to set rack information in the add host template (Laszlo Puskas via rlevas) AMBARI-14772. Added ability to set rack information in the add host template (Laszlo Puskas via rlevas) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/9d8675ad Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/9d8675ad Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/9d8675ad Branch: refs/heads/branch-dev-patch-upgrade Commit: 9d8675ade510fa9617a48fa761cd7a829c40ef0b Parents: 0a9a3aa Author: Laszlo Puskas Authored: Fri Feb 12 11:35:32 2016 -0500 Committer: Robert Levas Committed: Fri Feb 12 11:35:44 2016 -0500 ---------------------------------------------------------------------- .../internal/HostResourceProvider.java | 12 ++++- .../internal/ScaleClusterRequest.java | 28 +++++++++-- .../server/topology/ClusterTopologyImpl.java | 51 +++++++++++++------- 3 files changed, 67 insertions(+), 24 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/9d8675ad/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java index da73f15..6251f07 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java @@ -145,6 +145,11 @@ public class HostResourceProvider extends AbstractControllerResourceProvider { public static final String HOST_PREDICATE_PROPERTY_ID = PropertyHelper.getPropertyId(null, "host_predicate"); + //todo use the same json structure for cluster host addition (cluster template and upscale) + public static final String HOST_RACK_INFO_NO_CATEGORY_PROPERTY_ID = + PropertyHelper.getPropertyId(null, "rack_info"); + + private static Set pkPropertyIds = new HashSet(Arrays.asList(new String[]{ HOST_NAME_PROPERTY_ID})); @@ -354,6 +359,7 @@ public class HostResourceProvider extends AbstractControllerResourceProvider { //todo: constants baseUnsupported.remove(HOST_COUNT_PROPERTY_ID); baseUnsupported.remove(HOST_PREDICATE_PROPERTY_ID); + baseUnsupported.remove(HOST_RACK_INFO_NO_CATEGORY_PROPERTY_ID); return checkConfigPropertyIds(baseUnsupported, "Hosts"); } @@ -406,7 +412,11 @@ public class HostResourceProvider extends AbstractControllerResourceProvider { (String) properties.get(HOST_CLUSTER_NAME_PROPERTY_ID), null); hostRequest.setPublicHostName((String) properties.get(HOST_PUBLIC_NAME_PROPERTY_ID)); - hostRequest.setRackInfo((String) properties.get(HOST_RACK_INFO_PROPERTY_ID)); + + String rackInfo = (String) ((null != properties.get(HOST_RACK_INFO_PROPERTY_ID))? properties.get(HOST_RACK_INFO_PROPERTY_ID): + properties.get(HOST_RACK_INFO_NO_CATEGORY_PROPERTY_ID)); + + hostRequest.setRackInfo(rackInfo); hostRequest.setBlueprintName((String) properties.get(BLUEPRINT_PROPERTY_ID)); hostRequest.setHostGroupName((String) properties.get(HOSTGROUP_PROPERTY_ID)); http://git-wip-us.apache.org/repos/asf/ambari/blob/9d8675ad/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ScaleClusterRequest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ScaleClusterRequest.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ScaleClusterRequest.java index d784f1d..b5d2f9d 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ScaleClusterRequest.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ScaleClusterRequest.java @@ -19,6 +19,11 @@ package org.apache.ambari.server.controller.internal; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Set; + import org.apache.ambari.server.api.predicate.InvalidQueryException; import org.apache.ambari.server.stack.NoSuchStackException; import org.apache.ambari.server.topology.Blueprint; @@ -26,17 +31,16 @@ import org.apache.ambari.server.topology.Configuration; import org.apache.ambari.server.topology.HostGroupInfo; import org.apache.ambari.server.topology.InvalidTopologyTemplateException; import org.apache.ambari.server.topology.TopologyValidator; - -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Set; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * A request for a scaling an existing cluster. */ public class ScaleClusterRequest extends BaseClusterRequest { + private static final Logger LOGGER = LoggerFactory.getLogger(ScaleClusterRequest.class); + /** * cluster name */ @@ -175,9 +179,23 @@ public class ScaleClusterRequest extends BaseClusterRequest { throw new InvalidTopologyTemplateException("Invalid host group specified in request: " + hgName); } hostGroupInfo.addHost(hostName); + hostGroupInfo.addHostRackInfo(hostName, processRackInfo(properties)); + } + } + + private String processRackInfo(Map properties) { + String rackInfo = null; + if (properties.containsKey(HostResourceProvider.HOST_RACK_INFO_PROPERTY_ID)) { + rackInfo = (String) properties.get(HostResourceProvider.HOST_RACK_INFO_PROPERTY_ID); + } else if (properties.containsKey(HostResourceProvider.HOST_RACK_INFO_NO_CATEGORY_PROPERTY_ID)) { + rackInfo = (String) properties.get(HostResourceProvider.HOST_RACK_INFO_NO_CATEGORY_PROPERTY_ID); + } else { + LOGGER.debug("No rack info provided"); } + return rackInfo; } + /** * Parse blueprint. * http://git-wip-us.apache.org/repos/asf/ambari/blob/9d8675ad/ambari-server/src/main/java/org/apache/ambari/server/topology/ClusterTopologyImpl.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/topology/ClusterTopologyImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/topology/ClusterTopologyImpl.java index 05dc504..af716a0 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/topology/ClusterTopologyImpl.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/topology/ClusterTopologyImpl.java @@ -19,12 +19,6 @@ package org.apache.ambari.server.topology; -import org.apache.ambari.server.AmbariException; -import org.apache.ambari.server.controller.RequestStatusResponse; -import org.apache.ambari.server.controller.internal.ProvisionAction; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -33,6 +27,12 @@ import java.util.List; import java.util.Map; import java.util.Set; +import org.apache.ambari.server.AmbariException; +import org.apache.ambari.server.controller.RequestStatusResponse; +import org.apache.ambari.server.controller.internal.ProvisionAction; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * Represents a cluster topology. * Topology includes the the associated blueprint, cluster configuration and hostgroup -> host mapping. @@ -280,40 +280,44 @@ public class ClusterTopologyImpl implements ClusterTopology { return ambariContext; } - private void registerHostGroupInfo(Map groupInfoMap) throws InvalidTopologyException { - checkForDuplicateHosts(groupInfoMap); - for (HostGroupInfo hostGroupInfo : groupInfoMap.values() ) { - String hostGroupName = hostGroupInfo.getHostGroupName(); + private void registerHostGroupInfo(Map requestedHostGroupInfoMap) throws InvalidTopologyException { + LOG.debug("Registering requested host group information for {} hostgroups", requestedHostGroupInfoMap.size()); + checkForDuplicateHosts(requestedHostGroupInfoMap); + + for (HostGroupInfo requestedHostGroupInfo : requestedHostGroupInfoMap.values()) { + String hostGroupName = requestedHostGroupInfo.getHostGroupName(); + //todo: doesn't support using a different blueprint for update (scaling) HostGroup baseHostGroup = getBlueprint().getHostGroup(hostGroupName); + if (baseHostGroup == null) { throw new IllegalArgumentException("Invalid host_group specified: " + hostGroupName + ". All request host groups must have a corresponding host group in the specified blueprint"); } //todo: split into two methods - HostGroupInfo existingHostGroupInfo = hostGroupInfoMap.get(hostGroupName); - if (existingHostGroupInfo == null) { + HostGroupInfo currentHostGroupInfo = hostGroupInfoMap.get(hostGroupName); + if (currentHostGroupInfo == null) { // blueprint host group config Configuration bpHostGroupConfig = baseHostGroup.getConfiguration(); // parent config is BP host group config but with parent set to topology cluster scoped config Configuration parentConfiguration = new Configuration(bpHostGroupConfig.getProperties(), bpHostGroupConfig.getAttributes(), getConfiguration()); - hostGroupInfo.getConfiguration().setParentConfiguration(parentConfiguration); - hostGroupInfoMap.put(hostGroupName, hostGroupInfo); + requestedHostGroupInfo.getConfiguration().setParentConfiguration(parentConfiguration); + hostGroupInfoMap.put(hostGroupName, requestedHostGroupInfo); } else { // Update. Either add hosts or increment request count - if (! hostGroupInfo.getHostNames().isEmpty()) { + if (!requestedHostGroupInfo.getHostNames().isEmpty()) { try { // this validates that hosts aren't already registered with groups - addHostsToTopology(hostGroupInfo); + addHostsToTopology(requestedHostGroupInfo); } catch (NoSuchHostGroupException e) { //todo throw new InvalidTopologyException("Attempted to add hosts to unknown host group: " + hostGroupName); } } else { - existingHostGroupInfo.setRequestedCount( - existingHostGroupInfo.getRequestedHostCount() + hostGroupInfo.getRequestedHostCount()); + currentHostGroupInfo.setRequestedCount( + currentHostGroupInfo.getRequestedHostCount() + requestedHostGroupInfo.getRequestedHostCount()); } //todo: throw exception in case where request attempts to modify HG configuration in scaling operation } @@ -322,10 +326,21 @@ public class ClusterTopologyImpl implements ClusterTopology { private void addHostsToTopology(HostGroupInfo hostGroupInfo) throws InvalidTopologyException, NoSuchHostGroupException { for (String host: hostGroupInfo.getHostNames()) { + registerRackInfo(hostGroupInfo, host); addHostToTopology(hostGroupInfo.getHostGroupName(), host); } } + private void registerRackInfo(HostGroupInfo hostGroupInfo, String host) { + synchronized (hostGroupInfoMap) { + HostGroupInfo cachedHGI = hostGroupInfoMap.get(hostGroupInfo.getHostGroupName()); + if (null != cachedHGI) { + cachedHGI.addHostRackInfo(host, hostGroupInfo.getHostRackInfo().get(host)); + } + } + } + + private void checkForDuplicateHosts(Map groupInfoMap) throws InvalidTopologyException { Set hosts = new HashSet(); Set duplicates = new HashSet();