/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.ambari.server.state; import java.util.List; import java.util.Map; import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.agent.AgentEnv; import org.apache.ambari.server.agent.DiskInfo; import org.apache.ambari.server.agent.HostInfo; import org.apache.ambari.server.agent.RecoveryReport; import org.apache.ambari.server.controller.HostResponse; import org.apache.ambari.server.orm.entities.HostEntity; import org.apache.ambari.server.orm.entities.HostVersionEntity; import org.apache.ambari.server.state.fsm.InvalidStateTransitionException; public interface Host extends Comparable { HostEntity getHostEntity(); /** * @return the hostName */ String getHostName(); /** * @return host id */ Long getHostId(); /** * @return the currentPingPort */ Integer getCurrentPingPort(); /** * @param currentPingPort the currentPingPort to set */ void setCurrentPingPort(Integer currentPingPort); /** * Gets the public-facing host name. */ void setPublicHostName(String hostName); /** * Sets the public-facing host name. */ String getPublicHostName(); /** * IPv4 assigned to the Host * @return the ip or null if no IPv4 interface */ String getIPv4(); /** * @param ip the ip to set */ void setIPv4(String ip); /** * IPv6 assigned to the Host * @return the ip or null if no IPv6 interface */ String getIPv6(); /** * @param ip the ip to set */ void setIPv6(String ip); /** * @return the cpuCount */ int getCpuCount(); /** * @param cpuCount the cpuCount to set */ void setCpuCount(int cpuCount); /** * @return the physical cpu cores */ int getPhCpuCount(); /** * @param phCpuCount the physical cpu cores to set */ void setPhCpuCount(int phCpuCount); /** * Get the Amount of physical memory for the Host. * @return the totalMemBytes */ long getTotalMemBytes(); /** * Set the Amount of physical memory for the Host. * @param totalMemBytes the totalMemBytes to set */ void setTotalMemBytes(long totalMemBytes); /** * Get the Amount of available memory for the Host. * In most cases, available should be same as total unless * the agent on the host is configured to not use all * available memory * @return the availableMemBytes */ long getAvailableMemBytes(); /** * Set the Amount of available memory for the Host. * @param availableMemBytes the availableMemBytes to set */ void setAvailableMemBytes(long availableMemBytes); /** * Get the OS Architecture. * i386, x86_64, etc. * @return the osArch */ String getOsArch(); /** * @param osArch the osArch to set */ void setOsArch(String osArch); /** * Get the General OS information. * uname -a, /etc/*-release dump * @return the osInfo */ String getOsInfo(); /** * @param osInfo the osInfo to set */ void setOsInfo(String osInfo); /** * Get the OS Type: RHEL6/CentOS6/... * Defined and match-able OS type * @return the osType */ String getOsType(); /** * Get the os Family: * redhat6: for centos6, rhel6, oraclelinux6 .. * ubuntu12 : for ubuntu12 * suse11: for sles11, suse11 .. * suse12: for suse12, sles12 .. * @return the osFamily */ String getOsFamily(); String getOSFamilyFromHostAttributes(Map<String, String> hostAttributes); /** * @param osType the osType to set */ void setOsType(String osType); /** * Get information on disks available on the host. * @return the disksInfo */ List<DiskInfo> getDisksInfo(); /** * @param disksInfo the disksInfo to set */ void setDisksInfo(List<DiskInfo> disksInfo); /** * @return the healthStatus */ HostHealthStatus getHealthStatus(); /** * Get detailed recovery report for the host * @return */ RecoveryReport getRecoveryReport(); /** * Set detailed recovery report for the host */ void setRecoveryReport(RecoveryReport recoveryReport); /** * @param healthStatus the healthStatus to set */ void setHealthStatus(HostHealthStatus healthStatus); /** * Get additional host attributes * For example, public/hostname/IP for AWS * @return the hostAttributes */ Map<String, String> getHostAttributes(); /** * @param hostAttributes the hostAttributes to set */ void setHostAttributes(Map<String, String> hostAttributes); /** * @return the rackInfo */ String getRackInfo(); /** * @param rackInfo the rackInfo to set */ void setRackInfo(String rackInfo); /** * Last time the host registered with the Ambari Server * ( Unix timestamp ) * @return the lastRegistrationTime */ long getLastRegistrationTime(); /** * @param lastRegistrationTime the lastRegistrationTime to set */ void setLastRegistrationTime(long lastRegistrationTime); /** * Last time the Ambari Server received a heartbeat from the Host * ( Unix timestamp ) * @return the lastHeartbeatTime */ long getLastHeartbeatTime(); /** * @param lastHeartbeatTime the lastHeartbeatTime to set */ void setLastHeartbeatTime(long lastHeartbeatTime); /** * Sets the latest agent environment that arrived in a heartbeat. */ void setLastAgentEnv(AgentEnv env); /** * Gets the latest agent environment that arrived in a heartbeat. */ AgentEnv getLastAgentEnv(); /** * Version of the Ambari Agent running on the host * @return the agentVersion */ AgentVersion getAgentVersion(); /** * @param agentVersion the agentVersion to set */ void setAgentVersion(AgentVersion agentVersion); /** * Get Current Host State * @return HostState */ HostState getState(); /** * Set the State of the Host * @param state Host State */ void setState(HostState state); /** * Get the prefix path of all logs * @return prefix */ String getPrefix(); /** * Set the prefix path of all logs of the host * @param prefix the prefix path to set */ void setPrefix(String prefix); /** * Send an event to the Host's StateMachine * @param event HostEvent * @throws InvalidStateTransitionException */ void handleEvent(HostEvent event) throws InvalidStateTransitionException; /** * Get time spent in the current state i.e. the time since last state change. * @return Time spent in current state. */ long getTimeInState(); /** * @param timeInState the timeInState to set */ void setTimeInState(long timeInState); /** * Get Current Host Status * @return String */ String getStatus(); /** * Set the Status of the Host * @param status Host Status */ void setStatus(String status); HostResponse convertToResponse(); void importHostInfo(HostInfo hostInfo); /** * Adds a desired configuration to the host instance. * @param clusterId the cluster id that the config applies to * @param selected <code>true</code> if the configuration is selected. Applies * only to remove the override, otherwise this value should always be <code>true</code>. * @param user the user making the change for audit purposes * @param config the configuration object * @return <code>true</code> if the config was added, or <code>false</code> * if the config is already set as the current */ boolean addDesiredConfig(long clusterId, boolean selected, String user, Config config); /** * Gets all the selected configurations for the host. * return a map of type-to-{@link DesiredConfig} instances. */ Map<String, DesiredConfig> getDesiredConfigs(long clusterId); /** * Get the desired configurations for the host including overrides * * @param cluster * @param clusterDesiredConfigs * the desired configurations for the cluster. Obtaining these can be * expensive and since this method operates on hosts, it could be * called 1,000's of times when generating host responses. Therefore, * the caller should build these once and pass them in. If * {@code null}, then this method will retrieve them at runtime, * incurring a performance penality. * @return * @throws AmbariException */ Map<String, HostConfig> getDesiredHostConfigs(Cluster cluster, Map<String, DesiredConfig> clusterDesiredConfigs) throws AmbariException; /** * Sets the maintenance state for the host. * @param clusterId the cluster id * @param state the state */ void setMaintenanceState(long clusterId, MaintenanceState state); /** * @param clusterId the cluster id * @return the maintenance state */ MaintenanceState getMaintenanceState(long clusterId); /** * Get all of the HostVersionEntity objects for the host. * @return */ List<HostVersionEntity> getAllHostVersions(); /** * Gets whether this host has components which advertise their version. * * @param stackId * the version of the stack to use when checking version * advertise-ability. * @return {@code true} if at least 1 component on this host advertises its * version. * @throws AmbariException * if there is a problem retrieving the component from the stack. * @see ComponentInfo#isVersionAdvertised() */ boolean hasComponentsAdvertisingVersions(StackId stackId) throws AmbariException; }