001/**
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements.  See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership.  The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License.  You may obtain a copy of the License at
009 *
010 *     http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018
019package org.apache.hadoop.yarn.api.records;
020
021import java.util.Set;
022
023import org.apache.hadoop.classification.InterfaceAudience.Private;
024import org.apache.hadoop.classification.InterfaceAudience.Public;
025import org.apache.hadoop.classification.InterfaceStability.Stable;
026import org.apache.hadoop.classification.InterfaceStability.Unstable;
027import org.apache.hadoop.yarn.api.ApplicationClientProtocol;
028import org.apache.hadoop.yarn.util.Records;
029
030/**
031 * {@code NodeReport} is a summary of runtime information of a node
032 * in the cluster.
033 * <p>
034 * It includes details such as:
035 * <ul>
036 *   <li>{@link NodeId} of the node.</li>
037 *   <li>HTTP Tracking URL of the node.</li>
038 *   <li>Rack name for the node.</li>
039 *   <li>Used {@link Resource} on the node.</li>
040 *   <li>Total available {@link Resource} of the node.</li>
041 *   <li>Number of running containers on the node.</li>
042 * </ul>
043 *
044 * @see ApplicationClientProtocol#getClusterNodes(org.apache.hadoop.yarn.api.protocolrecords.GetClusterNodesRequest)
045 */
046@Public
047@Stable
048public abstract class NodeReport {
049  
050  @Private
051  @Unstable
052  public static NodeReport newInstance(NodeId nodeId, NodeState nodeState,
053      String httpAddress, String rackName, Resource used, Resource capability,
054      int numContainers, String healthReport, long lastHealthReportTime) {
055    return newInstance(nodeId, nodeState, httpAddress, rackName, used,
056        capability, numContainers, healthReport, lastHealthReportTime, null);
057  }
058
059  @Private
060  @Unstable
061  public static NodeReport newInstance(NodeId nodeId, NodeState nodeState,
062      String httpAddress, String rackName, Resource used, Resource capability,
063      int numContainers, String healthReport, long lastHealthReportTime,
064      Set<String> nodeLabels) {
065    NodeReport nodeReport = Records.newRecord(NodeReport.class);
066    nodeReport.setNodeId(nodeId);
067    nodeReport.setNodeState(nodeState);
068    nodeReport.setHttpAddress(httpAddress);
069    nodeReport.setRackName(rackName);
070    nodeReport.setUsed(used);
071    nodeReport.setCapability(capability);
072    nodeReport.setNumContainers(numContainers);
073    nodeReport.setHealthReport(healthReport);
074    nodeReport.setLastHealthReportTime(lastHealthReportTime);
075    nodeReport.setNodeLabels(nodeLabels);
076    return nodeReport;
077  }
078
079  /**
080   * Get the <code>NodeId</code> of the node.
081   * @return <code>NodeId</code> of the node
082   */
083  @Public
084  @Stable
085  public abstract NodeId getNodeId();
086  
087  @Private
088  @Unstable
089  public abstract void setNodeId(NodeId nodeId);
090  
091  /**
092   * Get the <code>NodeState</code> of the node.
093   * @return <code>NodeState</code> of the node
094   */
095  @Public
096  @Stable
097  public abstract NodeState getNodeState();
098  
099  @Private
100  @Unstable
101  public abstract void setNodeState(NodeState nodeState);
102  
103  /**
104   * Get the <em>http address</em> of the node.
105   * @return <em>http address</em> of the node
106   */
107  @Public
108  @Stable
109  public abstract String getHttpAddress();
110  
111  @Private
112  @Unstable
113  public abstract void setHttpAddress(String httpAddress);
114  
115  /**
116   * Get the <em>rack name</em> for the node.
117   * @return <em>rack name</em> for the node
118   */
119  @Public
120  @Stable
121  public abstract String getRackName();
122  
123  @Private
124  @Unstable
125  public abstract void setRackName(String rackName);
126  
127  /**
128   * Get <em>used</em> <code>Resource</code> on the node.
129   * @return <em>used</em> <code>Resource</code> on the node
130   */
131  @Public
132  @Stable
133  public abstract Resource getUsed();
134  
135  @Private
136  @Unstable
137  public abstract void setUsed(Resource used);
138  
139  /**
140   * Get the <em>total</em> <code>Resource</code> on the node.
141   * @return <em>total</em> <code>Resource</code> on the node
142   */
143  @Public
144  @Stable
145  public abstract Resource getCapability();
146  
147  @Private
148  @Unstable
149  public abstract void setCapability(Resource capability);
150  
151  /**
152   * Get the <em>number of allocated containers</em> on the node.
153   * @return <em>number of allocated containers</em> on the node
154   */
155  @Private
156  @Unstable
157  public abstract int getNumContainers();
158  
159  @Private
160  @Unstable
161  public abstract void setNumContainers(int numContainers);
162  
163
164  /** 
165   * Get the <em>diagnostic health report</em> of the node.
166   * @return <em>diagnostic health report</em> of the node
167   */
168  @Public
169  @Stable
170  public abstract String getHealthReport();
171
172  @Private
173  @Unstable
174  public abstract void setHealthReport(String healthReport);
175
176  /**
177   * Get the <em>last timestamp</em> at which the health report was received.
178   * @return <em>last timestamp</em> at which the health report was received
179   */
180  @Public
181  @Stable
182  public abstract long getLastHealthReportTime();
183
184  @Private
185  @Unstable
186  public abstract void setLastHealthReportTime(long lastHealthReport);
187  
188  /**
189   * Get labels of this node
190   * @return labels of this node
191   */
192  @Public
193  @Stable
194  public abstract Set<String> getNodeLabels();
195  
196  @Private
197  @Unstable
198  public abstract void setNodeLabels(Set<String> nodeLabels);
199}