Repository: ambari Updated Branches: refs/heads/branch-3.0-perf dddce4dd3 -> f3e98bf7d
AMBARI-22261. Update format of server-agent /agents/host_level_params response according to changed repo_info mapping. (mpapirkovskyy) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/80354430 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/80354430 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/80354430 Branch: refs/heads/branch-3.0-perf Commit: 80354430213e6a55e2a3aa88aec4593f3fe83691 Parents: dddce4d Author: Myroslav Papirkovskyi <[email protected]> Authored: Thu Oct 12 18:04:24 2017 +0300 Committer: Myroslav Papirkovskyi <[email protected]> Committed: Wed Oct 18 13:56:26 2017 +0300 ---------------------------------------------------------------------- .../ambari/server/agent/CommandRepository.java | 29 +++++++++++++++ .../agent/stomp/HostLevelParamsHolder.java | 11 +++--- .../agent/stomp/dto/HostLevelParamsCluster.java | 20 +++++----- .../agent/stomp/dto/HostRepositories.java | 39 ++++++++++++++++++++ .../controller/AmbariManagementController.java | 3 ++ .../AmbariManagementControllerImpl.java | 26 +++++++++++++ .../internal/HostResourceProvider.java | 5 +-- .../ambari/server/state/ConfigHelper.java | 1 + 8 files changed, 117 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/80354430/ambari-server/src/main/java/org/apache/ambari/server/agent/CommandRepository.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/agent/CommandRepository.java b/ambari-server/src/main/java/org/apache/ambari/server/agent/CommandRepository.java index 301f475..aea8ff5 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/agent/CommandRepository.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/agent/CommandRepository.java @@ -25,6 +25,7 @@ import org.apache.ambari.server.orm.entities.RepositoryEntity; import org.apache.ambari.server.state.RepositoryInfo; import org.apache.commons.lang.builder.ToStringBuilder; +import com.fasterxml.jackson.annotation.JsonProperty; import com.google.gson.annotations.SerializedName; /** @@ -34,15 +35,19 @@ import com.google.gson.annotations.SerializedName; public class CommandRepository { @SerializedName("repositories") + @JsonProperty("repositories") private List<Repository> m_repositories = new ArrayList<>(); @SerializedName("repoVersion") + @JsonProperty("repoVersion") private String m_repoVersion; @SerializedName("repoVersionId") + @JsonProperty("repoVersionId") private long m_repoVersionId; @SerializedName("stackName") + @JsonProperty("stackName") private String m_stackName; /** @@ -125,6 +130,10 @@ public class CommandRepository { } } + public long getM_repoVersionId() { + return m_repoVersionId; + } + /** * Gets whether this repository has been marked as having its version * resolved. @@ -153,16 +162,20 @@ public class CommandRepository { public static class Repository { @SerializedName("baseUrl") + @JsonProperty("baseUrl") private String m_baseUrl; @SerializedName("repoId") + @JsonProperty("repoId") private String m_repoId; @SerializedName("ambariManaged") + @JsonProperty("ambariManaged") private boolean m_ambariManaged = true; @SerializedName("repoName") + @JsonProperty("repoName") private final String m_repoName; @SerializedName("distribution") @@ -172,6 +185,7 @@ public class CommandRepository { private final String m_components; @SerializedName("mirrorsList") + @JsonProperty("mirrorsList") private String m_mirrorsList; private transient String m_osType; @@ -244,4 +258,19 @@ public class CommandRepository { } } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + CommandRepository that = (CommandRepository) o; + + return m_repoVersionId == that.m_repoVersionId; + } + + @Override + public int hashCode() { + return (int) (m_repoVersionId ^ (m_repoVersionId >>> 32)); + } } http://git-wip-us.apache.org/repos/asf/ambari/blob/80354430/ambari-server/src/main/java/org/apache/ambari/server/agent/stomp/HostLevelParamsHolder.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/agent/stomp/HostLevelParamsHolder.java b/ambari-server/src/main/java/org/apache/ambari/server/agent/stomp/HostLevelParamsHolder.java index 7e02590..d2d8898 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/agent/stomp/HostLevelParamsHolder.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/agent/stomp/HostLevelParamsHolder.java @@ -22,13 +22,14 @@ import java.util.TreeMap; import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.agent.RecoveryConfigHelper; import org.apache.ambari.server.agent.stomp.dto.HostLevelParamsCluster; -import org.apache.ambari.server.api.services.AmbariMetaInfo; +import org.apache.ambari.server.controller.AmbariManagementController; import org.apache.ambari.server.events.HostLevelParamsUpdateEvent; import org.apache.ambari.server.state.Cluster; import org.apache.ambari.server.state.Clusters; import org.apache.ambari.server.state.Host; import com.google.inject.Inject; +import com.google.inject.Provider; import com.google.inject.Singleton; @Singleton @@ -38,25 +39,25 @@ public class HostLevelParamsHolder extends AgentHostDataHolder<HostLevelParamsUp private RecoveryConfigHelper recoveryConfigHelper; @Inject - private AmbariMetaInfo ambariMetaInfo; + private Clusters clusters; @Inject - private Clusters clusters; + private Provider<AmbariManagementController> m_ambariManagementController; @Override public HostLevelParamsUpdateEvent getCurrentData(Long hostId) throws AmbariException { TreeMap<String, HostLevelParamsCluster> hostLevelParamsClusters = new TreeMap<>(); Host host = clusters.getHostById(hostId); for (Cluster cl : clusters.getClustersForHost(host.getHostName())) { - //TODO fix repo info host param HostLevelParamsCluster hostLevelParamsCluster = new HostLevelParamsCluster( - null,//ambariMetaInfo.getRepoInfo(cl, host), + m_ambariManagementController.get().retrieveHostRepositories(cl, host), recoveryConfigHelper.getRecoveryConfig(cl.getClusterName(), host.getHostName())); hostLevelParamsClusters.put(Long.toString(cl.getClusterId()), hostLevelParamsCluster); } HostLevelParamsUpdateEvent hostLevelParamsUpdateEvent = new HostLevelParamsUpdateEvent(hostLevelParamsClusters); + hostLevelParamsUpdateEvent.setHostId(hostId); return hostLevelParamsUpdateEvent; } http://git-wip-us.apache.org/repos/asf/ambari/blob/80354430/ambari-server/src/main/java/org/apache/ambari/server/agent/stomp/dto/HostLevelParamsCluster.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/agent/stomp/dto/HostLevelParamsCluster.java b/ambari-server/src/main/java/org/apache/ambari/server/agent/stomp/dto/HostLevelParamsCluster.java index e4e28bf..5ca72e0 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/agent/stomp/dto/HostLevelParamsCluster.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/agent/stomp/dto/HostLevelParamsCluster.java @@ -17,30 +17,32 @@ */ package org.apache.ambari.server.agent.stomp.dto; -import java.util.List; import org.apache.ambari.server.agent.RecoveryConfig; -import org.apache.ambari.server.state.RepositoryInfo; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; @JsonInclude(JsonInclude.Include.NON_EMPTY) public class HostLevelParamsCluster { - private List<RepositoryInfo> repoInfo; + @JsonProperty("hostRepositories") + private HostRepositories hostRepositories; + + @JsonProperty("recoveryConfig") private RecoveryConfig recoveryConfig; - public HostLevelParamsCluster(List<RepositoryInfo> repoInfo, RecoveryConfig recoveryConfig) { - this.repoInfo = repoInfo; + public HostLevelParamsCluster(HostRepositories hostRepositories, RecoveryConfig recoveryConfig) { + this.hostRepositories = hostRepositories; this.recoveryConfig = recoveryConfig; } - public List<RepositoryInfo> getRepoInfo() { - return repoInfo; + public HostRepositories getHostRepositories() { + return hostRepositories; } - public void setRepoInfo(List<RepositoryInfo> repoInfo) { - this.repoInfo = repoInfo; + public void setHostRepositories(HostRepositories hostRepositories) { + this.hostRepositories = hostRepositories; } public RecoveryConfig getRecoveryConfig() { http://git-wip-us.apache.org/repos/asf/ambari/blob/80354430/ambari-server/src/main/java/org/apache/ambari/server/agent/stomp/dto/HostRepositories.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/agent/stomp/dto/HostRepositories.java b/ambari-server/src/main/java/org/apache/ambari/server/agent/stomp/dto/HostRepositories.java new file mode 100644 index 0000000..8d0cfb0 --- /dev/null +++ b/ambari-server/src/main/java/org/apache/ambari/server/agent/stomp/dto/HostRepositories.java @@ -0,0 +1,39 @@ +package org.apache.ambari.server.agent.stomp.dto; + +import java.util.Map; + +import org.apache.ambari.server.agent.CommandRepository; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; + +@JsonInclude(JsonInclude.Include.NON_EMPTY) +public class HostRepositories { + + @JsonProperty("commandRepos") + private Map<Long, CommandRepository> repositories; + + @JsonProperty("componentRepos") + private Map<String, Long> componentRepos; + + public HostRepositories(Map<Long, CommandRepository> repositories, Map<String, Long> componentRepos) { + this.repositories = repositories; + this.componentRepos = componentRepos; + } + + public Map<Long, CommandRepository> getRepositories() { + return repositories; + } + + public void setRepositories(Map<Long, CommandRepository> repositories) { + this.repositories = repositories; + } + + public Map<String, Long> getComponentRepos() { + return componentRepos; + } + + public void setComponentRepos(Map<String, Long> componentRepos) { + this.componentRepos = componentRepos; + } +} http://git-wip-us.apache.org/repos/asf/ambari/blob/80354430/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java index 4b37d00..98128ef 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java @@ -27,6 +27,7 @@ import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.RoleCommand; import org.apache.ambari.server.actionmanager.ActionManager; import org.apache.ambari.server.agent.ExecutionCommand; +import org.apache.ambari.server.agent.stomp.dto.HostRepositories; import org.apache.ambari.server.api.services.AmbariMetaInfo; import org.apache.ambari.server.api.services.LoggingService; import org.apache.ambari.server.controller.internal.DeleteStatusMetaData; @@ -49,6 +50,7 @@ import org.apache.ambari.server.state.Cluster; import org.apache.ambari.server.state.Clusters; import org.apache.ambari.server.state.Config; import org.apache.ambari.server.state.ConfigHelper; +import org.apache.ambari.server.state.Host; import org.apache.ambari.server.state.HostState; import org.apache.ambari.server.state.MaintenanceState; import org.apache.ambari.server.state.Service; @@ -918,5 +920,6 @@ public interface AmbariManagementController { void saveConfigGroupUpdate(ConfigGroupRequest configGroupRequest, ConfigGroupResponse configGroupResponse); + HostRepositories retrieveHostRepositories(Cluster cluster, Host host) throws AmbariException; } http://git-wip-us.apache.org/repos/asf/ambari/blob/80354430/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java index 9db5832..6a7f050 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java @@ -102,10 +102,13 @@ import org.apache.ambari.server.actionmanager.HostRoleCommand; import org.apache.ambari.server.actionmanager.RequestFactory; import org.apache.ambari.server.actionmanager.Stage; import org.apache.ambari.server.actionmanager.StageFactory; +import org.apache.ambari.server.agent.CommandRepository; import org.apache.ambari.server.agent.ExecutionCommand; import org.apache.ambari.server.agent.stomp.AgentConfigsHolder; +import org.apache.ambari.server.agent.stomp.HostLevelParamsHolder; import org.apache.ambari.server.agent.stomp.MetadataHolder; import org.apache.ambari.server.agent.stomp.TopologyHolder; +import org.apache.ambari.server.agent.stomp.dto.HostRepositories; import org.apache.ambari.server.agent.stomp.dto.MetadataCluster; import org.apache.ambari.server.agent.stomp.dto.MetadataServiceInfo; import org.apache.ambari.server.agent.stomp.dto.TopologyCluster; @@ -364,6 +367,9 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle private Provider<AgentConfigsHolder> m_agentConfigsHolder; @Inject + private Provider<HostLevelParamsHolder> m_hostLevelParamsHolder; + + @Inject private ServiceComponentDesiredStateDAO serviceComponentDesiredStateDAO; /** @@ -746,6 +752,7 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle private TopologyUpdateEvent getAddedComponentsTopologyEvent(Set<ServiceComponentHostRequest> requests) throws AmbariException { TreeMap<String, TopologyCluster> topologyUpdates = new TreeMap<>(); + Set<String> hostsToUpdate = new HashSet<>(); for (ServiceComponentHostRequest request : requests) { String serviceName = request.getServiceName(); String componentName = request.getComponentName(); @@ -754,6 +761,7 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle Service s = cluster.getService(serviceName); ServiceComponent sc = s.getServiceComponent(componentName); String hostName = request.getHostname(); + hostsToUpdate.add(hostName); Set<Long> hostIds = clusterHosts.stream() .filter(h -> hostName.equals(h.getHostName())) .map(h -> h.getHostId()).collect(Collectors.toSet()); @@ -790,6 +798,10 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle topologyUpdates.get(clusterId).addTopologyComponent(newComponent); } } + for (String hostName : hostsToUpdate) { + Host host = clusters.getHost(hostName); + m_hostLevelParamsHolder.get().updateData(m_hostLevelParamsHolder.get().getCurrentData(host.getHostId())); + } return new TopologyUpdateEvent(topologyUpdates, TopologyUpdateEvent.EventType.UPDATE); } @@ -6032,4 +6044,18 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle return clusterLevelParams; } + + @Override + public HostRepositories retrieveHostRepositories(Cluster cluster, Host host) throws AmbariException { + List<ServiceComponentHost> hostComponents = cluster.getServiceComponentHosts(host.getHostName()); + Map<Long, CommandRepository> hostRepositories = new HashMap<>(); + Map<String, Long> componentsRepos = new HashMap<>(); + for (ServiceComponentHost serviceComponentHost : hostComponents) { + CommandRepository commandRepository = ambariMetaInfo.getCommandRepository(cluster, + serviceComponentHost.getServiceComponent(), host); + hostRepositories.put(commandRepository.getM_repoVersionId(), commandRepository); + componentsRepos.put(serviceComponentHost.getServiceComponentName(), commandRepository.getM_repoVersionId()); + } + return new HostRepositories(hostRepositories, componentsRepos); + } } http://git-wip-us.apache.org/repos/asf/ambari/blob/80354430/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 1fd6697..5cc360f 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 @@ -535,10 +535,9 @@ public class HostResourceProvider extends AbstractControllerResourceProvider { addedHost.getHostName(), addedHost.getRackInfo(), addedHost.getIPv4())); - //TODO fix repo info param HostLevelParamsUpdateEvent hostLevelParamsUpdateEvent = new HostLevelParamsUpdateEvent(clusterId, new HostLevelParamsCluster( - null,//ambariMetaInfo.getRepoInfo(cl, addedHost), - recoveryConfigHelper.getRecoveryConfig(clusters.getCluster(hostRequest.getClusterName()).getClusterName(), + getManagementController().retrieveHostRepositories(cl, addedHost), + recoveryConfigHelper.getRecoveryConfig(cl.getClusterName(), addedHost.getHostName()) )); hostLevelParamsUpdateEvent.setHostId(addedHost.getHostId()); http://git-wip-us.apache.org/repos/asf/ambari/blob/80354430/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java index 0d1fd5f..ffd2414 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java @@ -1587,6 +1587,7 @@ public class ConfigHelper { } AgentConfigsUpdateEvent agentConfigsUpdateEvent = new AgentConfigsUpdateEvent(clustersConfigs); + agentConfigsUpdateEvent.setHostId(hostId); return agentConfigsUpdateEvent; }
