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;
   }
 

Reply via email to