http://git-wip-us.apache.org/repos/asf/ambari/blob/366f6ca9/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java ---------------------------------------------------------------------- diff --cc ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java index 4f57881,455814a..6118229 --- 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 @@@ -130,9 -107,8 +132,10 @@@ import org.apache.ambari.server.control import org.apache.ambari.server.controller.metrics.MetricsCollectorHAManager; import org.apache.ambari.server.controller.metrics.timeline.cache.TimelineMetricCacheProvider; import org.apache.ambari.server.controller.spi.Resource; + import org.apache.ambari.server.controller.spi.SystemException; import org.apache.ambari.server.customactions.ActionDefinition; +import org.apache.ambari.server.events.MetadataUpdateEvent; +import org.apache.ambari.server.events.TopologyUpdateEvent; import org.apache.ambari.server.events.publishers.AmbariEventPublisher; import org.apache.ambari.server.metadata.ActionMetadata; import org.apache.ambari.server.metadata.RoleCommandOrder; @@@ -353,26 -325,8 +358,29 @@@ public class AmbariManagementController protected OsFamily osFamily; @Inject + private TopologyDeleteFormer topologyDeleteFormer; + + @Inject + private AmbariCustomCommandExecutionHelper ambariCustomCommandExecutionHelper; + + @Inject + private Provider<TopologyHolder> m_topologyHolder; + + @Inject + private Provider<MetadataHolder> m_metadataHolder; + + @Inject + private Provider<AgentConfigsHolder> m_agentConfigsHolder; + + @Inject + private Provider<HostLevelParamsHolder> m_hostLevelParamsHolder; + + @Inject + private ServiceComponentDesiredStateDAO serviceComponentDesiredStateDAO; + ++ @Inject + private RepositoryVersionHelper repoVersionHelper; + /** * The KerberosHelper to help setup for enabling for disabling Kerberos */ @@@ -2595,7 -2469,12 +2610,8 @@@ } StageUtils.useAmbariJdkInCommandParams(commandParams, configs); - String repoInfo; - try { - repoInfo = repoVersionHelper.getRepoInfo(cluster, component, host); - } catch (SystemException e) { - throw new AmbariException("", e); - } ++ // TODO add TODO to ambariMetaInfo.getRepoInfoString + String repoInfo = ambariMetaInfo.getRepoInfoString(cluster, component, host); if (LOG.isDebugEnabled()) { LOG.debug("Sending repo information to agent, hostname={}, clusterName={}, stackInfo={}, repoInfo={}", scHost.getHostName(), clusterName, stackId.getStackId(), repoInfo); @@@ -2665,9 -2572,9 +2681,10 @@@ execCmd.setRoleParams(roleParams); execCmd.setCommandParams(commandParams); + execCmd.setRepositoryFile(ambariMetaInfo.getCommandRepository(cluster, component, host)); + execCmdWrapper.setVersions(cluster); - if (execCmd.getConfigurationTags().containsKey("cluster-env")) { + if ((execCmd != null) && (execCmd.getConfigurationTags().containsKey("cluster-env"))) { LOG.debug("AmbariManagementControllerImpl.createHostAction: created ExecutionCommand for host {}, role {}, roleCommand {}, and command ID {}, with cluster-env tags {}", execCmd.getHostname(), execCmd.getRole(), execCmd.getRoleCommand(), execCmd.getCommandId(), execCmd.getConfigurationTags().get("cluster-env").get("tag")); } @@@ -5802,259 -5649,4 +5767,259 @@@ return QuickLinkVisibilityControllerFactory.get(quickLinkProfileJson); } + /** + * Collects metadata info about clusters for agent. + * @return metadata info about clusters + * @throws AmbariException + */ + public MetadataUpdateEvent getClustersMetadata() throws AmbariException { + TreeMap<String, MetadataCluster> metadataClusters = new TreeMap<>(); + + for (Cluster cl : clusters.getClusters().values()) { + StackId stackId = cl.getDesiredStackVersion(); + + SecurityType securityType = cl.getSecurityType(); + + TreeMap<String, MetadataServiceInfo> serviceLevelParams = new TreeMap<>(); + Collection<ServiceInfo> servicesInfo = ambariMetaInfo.getServices(stackId.getStackName(), + stackId.getStackVersion()).values(); + for (ServiceInfo serviceInfo : servicesInfo) { + Long statusCommandTimeout = null; + if (serviceInfo.getCommandScript() != null) { + statusCommandTimeout = new Long (ambariCustomCommandExecutionHelper.getStatusCommandTimeout(serviceInfo)); + } + + String servicePackageFolder = serviceInfo.getServicePackageFolder(); + + serviceLevelParams.put(serviceInfo.getName(), + new MetadataServiceInfo(serviceInfo.getVersion(), + serviceInfo.isCredentialStoreEnabled(), + statusCommandTimeout, + servicePackageFolder)); + } + + MetadataCluster metadataCluster = new MetadataCluster(securityType, + serviceLevelParams, + getMetadataClusterLevelParams(cl, stackId)); + metadataClusters.put(Long.toString(cl.getClusterId()), metadataCluster); + } + + MetadataUpdateEvent metadataUpdateEvent = new MetadataUpdateEvent(metadataClusters, + getMetadataAmbariLevelParams()); + return metadataUpdateEvent; + } + + public MetadataUpdateEvent getClusterMetadata(Cluster cl) throws AmbariException { + TreeMap<String, MetadataCluster> metadataClusters = new TreeMap<>(); + StackId stackId = cl.getDesiredStackVersion(); + + SecurityType securityType = cl.getSecurityType(); + + TreeMap<String, MetadataServiceInfo> serviceLevelParams = new TreeMap<>(); + Collection<ServiceInfo> servicesInfo = ambariMetaInfo.getServices(stackId.getStackName(), + stackId.getStackVersion()).values(); + for (ServiceInfo serviceInfo : servicesInfo) { + Long statusCommandTimeout = null; + if (serviceInfo.getCommandScript() != null) { + statusCommandTimeout = new Long(ambariCustomCommandExecutionHelper.getStatusCommandTimeout(serviceInfo)); + } + + String servicePackageFolder = serviceInfo.getServicePackageFolder(); + + serviceLevelParams.put(serviceInfo.getName(), + new MetadataServiceInfo(serviceInfo.getVersion(), + serviceInfo.isCredentialStoreEnabled(), + statusCommandTimeout, + servicePackageFolder)); + } + + MetadataCluster metadataCluster = new MetadataCluster(securityType, + serviceLevelParams, + getMetadataClusterLevelParams(cl, stackId)); + metadataClusters.put(Long.toString(cl.getClusterId()), metadataCluster); + + MetadataUpdateEvent metadataUpdateEvent = new MetadataUpdateEvent(metadataClusters, + null); + return metadataUpdateEvent; + } + + public MetadataUpdateEvent getClusterMetadataOnConfigsUpdate(Cluster cl) throws AmbariException { + TreeMap<String, MetadataCluster> metadataClusters = new TreeMap<>(); + StackId stackId = cl.getDesiredStackVersion(); + + MetadataCluster metadataCluster = new MetadataCluster(null, + new TreeMap<>(), + getMetadataClusterLevelConfigsParams(cl, stackId)); + metadataClusters.put(Long.toString(cl.getClusterId()), metadataCluster); + + MetadataUpdateEvent metadataUpdateEvent = new MetadataUpdateEvent(metadataClusters, + null); + return metadataUpdateEvent; + } + + private String getClientsToUpdateConfigs(ComponentInfo componentInfo) { + List<String> clientsToUpdateConfigsList = componentInfo.getClientsToUpdateConfigs(); + if (clientsToUpdateConfigsList == null) { + clientsToUpdateConfigsList = new ArrayList<>(); + clientsToUpdateConfigsList.add("*"); + } + return gson.toJson(clientsToUpdateConfigsList); + } + + private Boolean getUnlimitedKeyJCERequirement(ComponentInfo componentInfo, SecurityType clusterSecurityType) { + UnlimitedKeyJCERequirement unlimitedKeyJCERequirement = componentInfo.getUnlimitedKeyJCERequired(); + // Ensure that the unlimited key requirement is set. If null, the default value should be used. + if(unlimitedKeyJCERequirement == null) { + unlimitedKeyJCERequirement = UnlimitedKeyJCERequirement.DEFAULT; + } + + return (UnlimitedKeyJCERequirement.ALWAYS == unlimitedKeyJCERequirement) || + ((UnlimitedKeyJCERequirement.KERBEROS_ENABLED == unlimitedKeyJCERequirement) && + (clusterSecurityType == SecurityType.KERBEROS)); + + } + + //TODO will be a need to change to multi-instance usage + public TreeMap<String, String> getTopologyComponentLevelParams(StackId stackId, String serviceName, String componentName, + SecurityType clusterSecurityType) throws AmbariException { + ComponentInfo componentInfo = ambariMetaInfo.getComponent( + stackId.getStackName(), stackId.getStackVersion(), + serviceName, componentName); + + TreeMap<String, String> statusCommandParams = new TreeMap<>(); + statusCommandParams.put(ExecutionCommand.KeyNames.CLIENTS_TO_UPDATE_CONFIGS, + getClientsToUpdateConfigs(componentInfo)); + statusCommandParams.put(ExecutionCommand.KeyNames.UNLIMITED_KEY_JCE_REQUIRED, + Boolean.toString(getUnlimitedKeyJCERequirement(componentInfo, clusterSecurityType))); + return statusCommandParams; + } + + //TODO will be a need to change to multi-instance usage + public TreeMap<String, String> getTopologyCommandParams(StackId stackId, String serviceName, String componentName) throws AmbariException { + ServiceInfo serviceInfo = ambariMetaInfo.getService(stackId.getStackName(), + stackId.getStackVersion(), serviceName); + ComponentInfo componentInfo = ambariMetaInfo.getComponent( + stackId.getStackName(), stackId.getStackVersion(), + serviceName, componentName); + + String scriptName = null; + String scriptCommandTimeout = ""; + CommandScriptDefinition script = componentInfo.getCommandScript(); + if (serviceInfo.getSchemaVersion().equals(AmbariMetaInfo.SCHEMA_VERSION_2)) { + if (script != null) { + scriptName = script.getScript(); + if (script.getTimeout() > 0) { + scriptCommandTimeout = String.valueOf(script.getTimeout()); + } + } else { + String message = String.format("Component %s of service %s has not " + + "command script defined", componentName, serviceName); + throw new AmbariException(message); + } + } + String agentDefaultCommandTimeout = configs.getDefaultAgentTaskTimeout(false); + String actualTimeout = (!scriptCommandTimeout.equals("") ? scriptCommandTimeout : agentDefaultCommandTimeout); + + TreeMap<String, String> commandParams = new TreeMap<>(); + commandParams.put(COMMAND_TIMEOUT, actualTimeout); + commandParams.put(SCRIPT, scriptName); + commandParams.put(SCRIPT_TYPE, script.getScriptType().toString()); + return commandParams; + } + + public TreeMap<String, String> getMetadataClusterLevelParams(Cluster cluster, StackId stackId) throws AmbariException { + TreeMap<String, String> clusterLevelParams = new TreeMap<>(); + clusterLevelParams.put(STACK_NAME, stackId.getStackName()); + clusterLevelParams.put(STACK_VERSION, stackId.getStackVersion()); + + Map<String, DesiredConfig> desiredConfigs = cluster.getDesiredConfigs(); + if (MapUtils.isNotEmpty(desiredConfigs)) { + + Set<String> userSet = configHelper.getPropertyValuesWithPropertyType(stackId, PropertyType.USER, cluster, desiredConfigs); + String userList = gson.toJson(userSet); + clusterLevelParams.put(USER_LIST, userList); + + //Create a user_group mapping and send it as part of the hostLevelParams + Map<String, Set<String>> userGroupsMap = configHelper.createUserGroupsMap( + stackId, cluster, desiredConfigs); + String userGroups = gson.toJson(userGroupsMap); + clusterLevelParams.put(USER_GROUPS, userGroups); + + Set<String> groupSet = configHelper.getPropertyValuesWithPropertyType(stackId, PropertyType.GROUP, cluster, desiredConfigs); + String groupList = gson.toJson(groupSet); + clusterLevelParams.put(GROUP_LIST, groupList); + } + Set<String> notManagedHdfsPathSet = configHelper.getPropertyValuesWithPropertyType(stackId, + PropertyType.NOT_MANAGED_HDFS_PATH, cluster, desiredConfigs); + String notManagedHdfsPathList = gson.toJson(notManagedHdfsPathSet); + clusterLevelParams.put(NOT_MANAGED_HDFS_PATH_LIST, notManagedHdfsPathList); + + clusterLevelParams.put(CLUSTER_NAME, cluster.getClusterName()); + + StackInfo stackInfo = ambariMetaInfo.getStack(stackId.getStackName(), stackId.getStackVersion()); - clusterLevelParams.put(HOOKS_FOLDER, StackManager.DEFAULT_HOOKS_FOLDER); ++ clusterLevelParams.put(HOOKS_FOLDER, configs.getProperty(Configuration.HOOKS_FOLDER)); + + return clusterLevelParams; + } + + public TreeMap<String, String> getMetadataClusterLevelConfigsParams(Cluster cluster, StackId stackId) throws AmbariException { + TreeMap<String, String> clusterLevelParams = new TreeMap<>(); + + Map<String, DesiredConfig> desiredConfigs = cluster.getDesiredConfigs(); + if (MapUtils.isNotEmpty(desiredConfigs)) { + + Set<String> userSet = configHelper.getPropertyValuesWithPropertyType(stackId, PropertyType.USER, cluster, desiredConfigs); + String userList = gson.toJson(userSet); + clusterLevelParams.put(USER_LIST, userList); + + //Create a user_group mapping and send it as part of the hostLevelParams + Map<String, Set<String>> userGroupsMap = configHelper.createUserGroupsMap( + stackId, cluster, desiredConfigs); + String userGroups = gson.toJson(userGroupsMap); + clusterLevelParams.put(USER_GROUPS, userGroups); + + Set<String> groupSet = configHelper.getPropertyValuesWithPropertyType(stackId, PropertyType.GROUP, cluster, desiredConfigs); + String groupList = gson.toJson(groupSet); + clusterLevelParams.put(GROUP_LIST, groupList); + } + Set<String> notManagedHdfsPathSet = configHelper.getPropertyValuesWithPropertyType(stackId, + PropertyType.NOT_MANAGED_HDFS_PATH, cluster, desiredConfigs); + String notManagedHdfsPathList = gson.toJson(notManagedHdfsPathSet); + clusterLevelParams.put(NOT_MANAGED_HDFS_PATH_LIST, notManagedHdfsPathList); + + return clusterLevelParams; + } + + public TreeMap<String, String> getMetadataAmbariLevelParams() throws AmbariException { + TreeMap<String, String> clusterLevelParams = new TreeMap<>(); + clusterLevelParams.put(JDK_LOCATION, getJdkResourceUrl()); + clusterLevelParams.put(JAVA_HOME, getJavaHome()); + clusterLevelParams.put(JAVA_VERSION, String.valueOf(configs.getJavaVersion())); + clusterLevelParams.put(JDK_NAME, getJDKName()); + clusterLevelParams.put(JCE_NAME, getJCEName()); + clusterLevelParams.put(DB_NAME, getServerDB()); + clusterLevelParams.put(MYSQL_JDBC_URL, getMysqljdbcUrl()); + clusterLevelParams.put(ORACLE_JDBC_URL, getOjdbcUrl()); + clusterLevelParams.put(DB_DRIVER_FILENAME, configs.getMySQLJarName()); + clusterLevelParams.putAll(getRcaParameters()); + clusterLevelParams.put(HOST_SYS_PREPPED, configs.areHostsSysPrepped()); + clusterLevelParams.put(AGENT_STACK_RETRY_ON_UNAVAILABILITY, configs.isAgentStackRetryOnInstallEnabled()); + clusterLevelParams.put(AGENT_STACK_RETRY_COUNT, configs.getAgentStackRetryOnInstallCount()); + + 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/366f6ca9/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/366f6ca9/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/366f6ca9/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertDefinitionResourceProvider.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/366f6ca9/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/366f6ca9/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java ---------------------------------------------------------------------- diff --cc ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java index 99ecd76,482e5d2..759ec82 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java @@@ -60,12 -60,12 +60,14 @@@ import org.apache.ambari.server.state.S import org.apache.ambari.server.state.ServiceComponentHost; import org.apache.ambari.server.state.StackId; import org.apache.ambari.server.state.State; +import org.apache.ambari.server.topology.TopologyDeleteFormer; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.Validate; + import org.slf4j.Logger; + import org.slf4j.LoggerFactory; import com.google.common.collect.Sets; +import com.google.inject.Inject; import com.google.inject.assistedinject.Assisted; import com.google.inject.assistedinject.AssistedInject; import com.google.inject.persist.Transactional; http://git-wip-us.apache.org/repos/asf/ambari/blob/366f6ca9/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java ---------------------------------------------------------------------- diff --cc ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java index 5cc360f,5c740f1..519794e --- 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 @@@ -1034,12 -956,9 +1030,12 @@@ public class HostResourceProvider exten } } clusters.publishHostsDeletion(allClustersWithHosts, hostNames); + TopologyUpdateEvent topologyUpdateEvent = new TopologyUpdateEvent(topologyUpdates, + TopologyUpdateEvent.EventType.DELETE); + topologyHolder.updateData(topologyUpdateEvent); } - private void validateHostInDeleteFriendlyState(HostRequest hostRequest, Clusters clusters, boolean forceDelete) throws AmbariException { + private void validateHostInDeleteFriendlyState(HostRequest hostRequest, Clusters clusters) throws AmbariException { Set<String> clusterNamesForHost = new HashSet<>(); String hostName = hostRequest.getHostname(); if (null != hostRequest.getClusterName()) { http://git-wip-us.apache.org/repos/asf/ambari/blob/366f6ca9/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/366f6ca9/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/366f6ca9/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/DefaultServiceCalculatedState.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/366f6ca9/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/FlumeServiceCalculatedState.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/366f6ca9/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/HBaseServiceCalculatedState.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/366f6ca9/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/HDFSServiceCalculatedState.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/366f6ca9/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/HiveServiceCalculatedState.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/366f6ca9/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/OozieServiceCalculatedState.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/366f6ca9/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/state/YARNServiceCalculatedState.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/366f6ca9/ambari-server/src/main/java/org/apache/ambari/server/events/AmbariEvent.java ---------------------------------------------------------------------- diff --cc ambari-server/src/main/java/org/apache/ambari/server/events/AmbariEvent.java index 47c83e7,0ece73b..5f410f5 --- a/ambari-server/src/main/java/org/apache/ambari/server/events/AmbariEvent.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/events/AmbariEvent.java @@@ -143,19 -143,10 +143,24 @@@ public abstract class AmbariEvent USER_CREATED, /** + * Host status has been changed. + */ + HOST_STATUS_CHANGE, + + /** + * Host state has been changed. + */ + HOST_STATE_CHANGE, + + /** + * Received new heartbeat with host info. + */ - HOST_HEARTBEAT_UPDATED; ++ HOST_HEARTBEAT_UPDATED, ++ ++ /** + * Ambari configuration changed event; + */ + AMBARI_CONFIGURATION_CHANGED; - } /** http://git-wip-us.apache.org/repos/asf/ambari/blob/366f6ca9/ambari-server/src/main/java/org/apache/ambari/server/events/ServiceComponentUninstalledEvent.java ---------------------------------------------------------------------- diff --cc ambari-server/src/main/java/org/apache/ambari/server/events/ServiceComponentUninstalledEvent.java index 3e4d6a2,b91135f..b4ae216 --- a/ambari-server/src/main/java/org/apache/ambari/server/events/ServiceComponentUninstalledEvent.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/events/ServiceComponentUninstalledEvent.java @@@ -27,11 -27,21 +27,12 @@@ public class ServiceComponentUninstalle private final String m_componentName; private final String m_hostName; private final boolean m_recoveryEnabled; + private final boolean masterComponent; + private final Long m_hostId; - /** - * Constructor. - * - * @param clusterId - * @param stackName - * @param stackVersion - * @param serviceName - * @param componentName - * @param hostName - */ public ServiceComponentUninstalledEvent(long clusterId, String stackName, String stackVersion, String serviceName, String componentName, - String hostName, boolean recoveryEnabled, boolean masterComponent) { - String hostName, boolean recoveryEnabled, Long hostId) { ++ String hostName, boolean recoveryEnabled, boolean masterComponent, Long hostId) { super(AmbariEventType.SERVICE_COMPONENT_UNINSTALLED_SUCCESS, clusterId, stackName, stackVersion, serviceName); @@@ -39,7 -49,7 +40,8 @@@ m_componentName = componentName; m_hostName = hostName; m_recoveryEnabled = recoveryEnabled; + this.masterComponent = masterComponent; + m_hostId = hostId; } /** @@@ -63,10 -73,10 +65,14 @@@ return m_recoveryEnabled; } + public boolean isMasterComponent() { + return masterComponent; + } + + public Long getHostId() { + return m_hostId; + } + /** * {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ambari/blob/366f6ca9/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/alerts/AlertReceivedListener.java ---------------------------------------------------------------------- diff --cc ambari-server/src/main/java/org/apache/ambari/server/events/listeners/alerts/AlertReceivedListener.java index 33f172c,7198814..5aba046 --- a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/alerts/AlertReceivedListener.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/alerts/AlertReceivedListener.java @@@ -26,11 -24,10 +26,11 @@@ import java.util.concurrent.locks.Lock import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.EagerSingleton; +import org.apache.ambari.server.api.query.render.AlertSummaryGroupedRenderer; import org.apache.ambari.server.configuration.Configuration; import org.apache.ambari.server.controller.MaintenanceStateHelper; - import org.apache.ambari.server.controller.RootServiceResponseFactory.Components; - import org.apache.ambari.server.controller.RootServiceResponseFactory.Services; + import org.apache.ambari.server.controller.RootComponent; + import org.apache.ambari.server.controller.RootService; import org.apache.ambari.server.events.AlertEvent; import org.apache.ambari.server.events.AlertReceivedEvent; import org.apache.ambari.server.events.AlertStateChangeEvent; http://git-wip-us.apache.org/repos/asf/ambari/blob/366f6ca9/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/AlertDefinitionDAO.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/366f6ca9/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/366f6ca9/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/366f6ca9/ambari-server/src/main/java/org/apache/ambari/server/state/alert/AlertDefinitionHash.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/366f6ca9/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java ---------------------------------------------------------------------- diff --cc ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java index bbbb613,8f5e4f4..b634fb2 --- 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 @@@ -58,9 -57,8 +58,9 @@@ import org.apache.ambari.server.control import org.apache.ambari.server.controller.ClusterResponse; import org.apache.ambari.server.controller.ConfigurationResponse; import org.apache.ambari.server.controller.MaintenanceStateHelper; - import org.apache.ambari.server.controller.RootServiceResponseFactory.Services; + import org.apache.ambari.server.controller.RootService; import org.apache.ambari.server.controller.ServiceConfigVersionResponse; +import org.apache.ambari.server.controller.internal.DeleteHostComponentStatusMetaData; import org.apache.ambari.server.events.AmbariEvent.AmbariEventType; import org.apache.ambari.server.events.ClusterConfigChangedEvent; import org.apache.ambari.server.events.ClusterEvent; http://git-wip-us.apache.org/repos/asf/ambari/blob/366f6ca9/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ClusterGrouping.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/366f6ca9/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java ---------------------------------------------------------------------- diff --cc ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java index 22bcfc7,e30c2ce..ef7d471 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java @@@ -21,14 -21,11 +21,14 @@@ package org.apache.ambari.server.state. import java.text.MessageFormat; import java.util.Collections; import java.util.HashMap; -import java.util.List; +import java.util.HashSet; - import java.util.List; ++ import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.TreeMap; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; @@@ -1387,15 -1280,9 +1387,15 @@@ public class ServiceComponentHostImpl i ServiceComponentUninstalledEvent event = new ServiceComponentUninstalledEvent( clusterId, stackName, stackVersion, serviceName, componentName, - hostName, recoveryEnabled, masterComponent); - hostName, recoveryEnabled, host.getHostId()); ++ hostName, recoveryEnabled, masterComponent, host.getHostId()); eventPublisher.publish(event); + deleteMetaData.addDeletedHostComponent(componentName, + serviceName, + hostName, + getHost().getHostId(), + Long.toString(clusterId), + version); } } http://git-wip-us.apache.org/repos/asf/ambari/blob/366f6ca9/ambari-server/src/main/java/org/apache/ambari/server/topology/AmbariContext.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/366f6ca9/ambari-server/src/main/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalog.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/366f6ca9/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog300.java ---------------------------------------------------------------------- diff --cc ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog300.java index be6b960,2de6095..1ee1679 --- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog300.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog300.java @@@ -47,7 -45,7 +47,8 @@@ import org.apache.ambari.server.state.C import org.apache.ambari.server.state.Clusters; import org.apache.ambari.server.state.Config; import org.apache.ambari.server.state.ConfigHelper; + import org.apache.commons.collections.MapUtils; +import org.apache.ambari.server.state.State; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@@ -68,15 -66,10 +69,11 @@@ public class UpgradeCatalog300 extends protected static final String STAGE_DISPLAY_STATUS_COLUMN = "display_status"; protected static final String REQUEST_TABLE = "request"; protected static final String REQUEST_DISPLAY_STATUS_COLUMN = "display_status"; - protected static final String CLUSTER_CONFIG_TABLE = "clusterconfig"; - protected static final String CLUSTER_CONFIG_SELECTED_COLUMN = "selected"; - protected static final String CLUSTER_CONFIG_SELECTED_TIMESTAMP_COLUMN = "selected_timestamp"; protected static final String HOST_ROLE_COMMAND_TABLE = "host_role_command"; protected static final String HRC_OPS_DISPLAY_NAME_COLUMN = "ops_display_name"; - protected static final String COMPONENT_TABLE = "servicecomponentdesiredstate"; protected static final String COMPONENT_DESIRED_STATE_TABLE = "hostcomponentdesiredstate"; protected static final String COMPONENT_STATE_TABLE = "hostcomponentstate"; + protected static final String COMPONENT_LAST_STATE_COLUMN = "last_live_state"; protected static final String SERVICE_DESIRED_STATE_TABLE = "servicedesiredstate"; protected static final String SECURITY_STATE_COLUMN = "security_state"; @@@ -126,7 -123,7 +127,8 @@@ updateStageTable(); addOpsDisplayNameColumnToHostRoleCommand(); removeSecurityState(); + addAmbariConfigurationTable(); + addHostComponentLastStateTable(); } protected void updateStageTable() throws SQLException { @@@ -138,11 -135,16 +140,21 @@@ new DBAccessor.DBColumnInfo(REQUEST_DISPLAY_STATUS_COLUMN, String.class, 255, HostRoleStatus.PENDING, false)); } + protected void addAmbariConfigurationTable() throws SQLException { + List<DBAccessor.DBColumnInfo> columns = new ArrayList<>(); + columns.add(new DBAccessor.DBColumnInfo(AMBARI_CONFIGURATION_CATEGORY_NAME_COLUMN, String.class, 100, null, false)); + columns.add(new DBAccessor.DBColumnInfo(AMBARI_CONFIGURATION_PROPERTY_NAME_COLUMN, String.class, 100, null, false)); + columns.add(new DBAccessor.DBColumnInfo(AMBARI_CONFIGURATION_PROPERTY_VALUE_COLUMN, String.class, 255, null, true)); + + dbAccessor.createTable(AMBARI_CONFIGURATION_TABLE, columns); + dbAccessor.addPKConstraint(AMBARI_CONFIGURATION_TABLE, "PK_ambari_configuration", AMBARI_CONFIGURATION_CATEGORY_NAME_COLUMN, AMBARI_CONFIGURATION_PROPERTY_NAME_COLUMN); + } + + protected void addHostComponentLastStateTable() throws SQLException { + dbAccessor.addColumn(COMPONENT_STATE_TABLE, + new DBAccessor.DBColumnInfo(COMPONENT_LAST_STATE_COLUMN, String.class, 255, State.UNKNOWN, true)); + } + /** * {@inheritDoc} */ @@@ -159,7 -161,7 +171,8 @@@ showHcatDeletedUserMessage(); setStatusOfStagesAndRequests(); updateLogSearchConfigs(); + updateKerberosConfigurations(); + updateHostComponentLastStateTable(); } protected void showHcatDeletedUserMessage() { @@@ -358,21 -360,27 +371,45 @@@ } } + protected void updateKerberosConfigurations() throws AmbariException { + AmbariManagementController ambariManagementController = injector.getInstance(AmbariManagementController.class); + Clusters clusters = ambariManagementController.getClusters(); + if (clusters != null) { + Map<String, Cluster> clusterMap = clusters.getClusters(); + + if (!MapUtils.isEmpty(clusterMap)) { + for (Cluster cluster : clusterMap.values()) { + Config config = cluster.getDesiredConfigByType("kerberos-env"); + + if (config != null) { + Map<String, String> properties = config.getProperties(); + if (properties.containsKey("group")) { + // Covert kerberos-env/group to kerberos-env/ipa_user_group + updateConfigurationPropertiesForCluster(cluster, "kerberos-env", + Collections.singletonMap("ipa_user_group", properties.get("group")), Collections.singleton("group"), + true, false); + } + } + } + } + } + } ++ + protected void updateHostComponentLastStateTable() throws SQLException { + executeInTransaction(new Runnable() { + @Override + public void run() { + try { + HostComponentStateDAO hostComponentStateDAO = injector.getInstance(HostComponentStateDAO.class); + List<HostComponentStateEntity> hostComponentStateEntities = hostComponentStateDAO.findAll(); + for (HostComponentStateEntity hostComponentStateEntity : hostComponentStateEntities) { + hostComponentStateEntity.setLastLiveState(hostComponentStateEntity.getCurrentState()); + hostComponentStateDAO.merge(hostComponentStateEntity); + } + } catch (Exception e) { + LOG.warn("Setting status for stages and Requests threw exception. ", e); + } + } + }); + } } http://git-wip-us.apache.org/repos/asf/ambari/blob/366f6ca9/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java ----------------------------------------------------------------------
