blob: e2b591131b1bcdfe02bc79b4cebe9194f481d992 [file] [log] [blame]
/*
* 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.orm.entities.RepositoryVersionEntity;
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);
/**
* Time the Ambari Agent was started.
* ( Unix timestamp )
* @return the lastOnAgentStartRegistrationTime
*/
long getLastAgentStartTime();
/**
* @param lastAgentStartTime the lastAgentStartTime to set
*/
void setLastAgentStartTime(long lastAgentStartTime);
/**
* 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);
/**
* Set state of host's state machine.
* @param state
*/
void setStateMachineState(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;
void calculateHostStatus(Long clusterId) throws AmbariException;
/**
* Gets whether all host components whose desired repository version matches
* the repository version specified have reported the correct version and are
* no longer upgrading.
*
* @param repositoryVersion
* the repository version to check for (not {@code null}).
* @return {@code true} if all components on this host have checked in with
* the correct version if their desired repository matches the one
* specified.
*
* @throws AmbariException
*/
boolean isRepositoryVersionCorrect(RepositoryVersionEntity repositoryVersion)
throws AmbariException;
}