<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
<!--
   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.
-->
<!-- Generated by the JDiff Javadoc doclet -->
<!-- (http://www.jdiff.org) -->
<!-- on Wed Apr 08 11:29:43 PDT 2015 -->

<api
  xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
  xsi:noNamespaceSchemaLocation='api.xsd'
  name="hadoop-yarn-api 2.6.0"
  jdversion="1.0.9">

<!--  Command line arguments =  -doclet org.apache.hadoop.classification.tools.ExcludePrivateAnnotationsJDiffDoclet -docletpath /Users/llu/hadoop2_6/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/target/hadoop-annotations.jar:/Users/llu/hadoop2_6/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/target/jdiff.jar -verbose -classpath /Users/llu/hadoop2_6/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/target/classes:/Users/llu/.m2/repository/commons-lang/commons-lang/2.6/commons-lang-2.6.jar:/Users/llu/.m2/repository/com/google/guava/guava/11.0.2/guava-11.0.2.jar:/Users/llu/.m2/repository/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9.jar:/Users/llu/.m2/repository/commons-logging/commons-logging/1.1.3/commons-logging-1.1.3.jar:/Users/llu/.m2/repository/org/apache/hadoop/hadoop-common/2.6.0/hadoop-common-2.6.0.jar:/Users/llu/.m2/repository/commons-cli/commons-cli/1.2/commons-cli-1.2.jar:/Users/llu/.m2/repository/org/apache/commons/commons-math3/3.1.1/commons-math3-3.1.1.jar:/Users/llu/.m2/repository/xmlenc/xmlenc/0.52/xmlenc-0.52.jar:/Users/llu/.m2/repository/commons-httpclient/commons-httpclient/3.1/commons-httpclient-3.1.jar:/Users/llu/.m2/repository/commons-codec/commons-codec/1.4/commons-codec-1.4.jar:/Users/llu/.m2/repository/commons-io/commons-io/2.4/commons-io-2.4.jar:/Users/llu/.m2/repository/commons-net/commons-net/3.1/commons-net-3.1.jar:/Users/llu/.m2/repository/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar:/Users/llu/.m2/repository/javax/servlet/servlet-api/2.5/servlet-api-2.5.jar:/Users/llu/.m2/repository/org/mortbay/jetty/jetty/6.1.26/jetty-6.1.26.jar:/Users/llu/.m2/repository/org/mortbay/jetty/jetty-util/6.1.26/jetty-util-6.1.26.jar:/Users/llu/.m2/repository/com/sun/jersey/jersey-core/1.9/jersey-core-1.9.jar:/Users/llu/.m2/repository/com/sun/jersey/jersey-json/1.9/jersey-json-1.9.jar:/Users/llu/.m2/repository/org/codehaus/jettison/jettison/1.1/jettison-1.1.jar:/Users/llu/.m2/repository/com/sun/xml/bind/jaxb-impl/2.2.3-1/jaxb-impl-2.2.3-1.jar:/Users/llu/.m2/repository/javax/xml/bind/jaxb-api/2.2.2/jaxb-api-2.2.2.jar:/Users/llu/.m2/repository/javax/xml/stream/stax-api/1.0-2/stax-api-1.0-2.jar:/Users/llu/.m2/repository/javax/activation/activation/1.1/activation-1.1.jar:/Users/llu/.m2/repository/org/codehaus/jackson/jackson-jaxrs/1.9.13/jackson-jaxrs-1.9.13.jar:/Users/llu/.m2/repository/org/codehaus/jackson/jackson-xc/1.9.13/jackson-xc-1.9.13.jar:/Users/llu/.m2/repository/com/sun/jersey/jersey-server/1.9/jersey-server-1.9.jar:/Users/llu/.m2/repository/asm/asm/3.2/asm-3.2.jar:/Users/llu/.m2/repository/javax/servlet/jsp/jsp-api/2.1/jsp-api-2.1.jar:/Users/llu/.m2/repository/log4j/log4j/1.2.17/log4j-1.2.17.jar:/Users/llu/.m2/repository/net/java/dev/jets3t/jets3t/0.9.0/jets3t-0.9.0.jar:/Users/llu/.m2/repository/org/apache/httpcomponents/httpclient/4.2.5/httpclient-4.2.5.jar:/Users/llu/.m2/repository/org/apache/httpcomponents/httpcore/4.2.5/httpcore-4.2.5.jar:/Users/llu/.m2/repository/com/jamesmurty/utils/java-xmlbuilder/0.4/java-xmlbuilder-0.4.jar:/Users/llu/.m2/repository/commons-configuration/commons-configuration/1.6/commons-configuration-1.6.jar:/Users/llu/.m2/repository/commons-digester/commons-digester/1.8/commons-digester-1.8.jar:/Users/llu/.m2/repository/commons-beanutils/commons-beanutils/1.7.0/commons-beanutils-1.7.0.jar:/Users/llu/.m2/repository/commons-beanutils/commons-beanutils-core/1.8.0/commons-beanutils-core-1.8.0.jar:/Users/llu/.m2/repository/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar:/Users/llu/.m2/repository/org/slf4j/slf4j-log4j12/1.7.5/slf4j-log4j12-1.7.5.jar:/Users/llu/.m2/repository/org/codehaus/jackson/jackson-core-asl/1.9.13/jackson-core-asl-1.9.13.jar:/Users/llu/.m2/repository/org/codehaus/jackson/jackson-mapper-asl/1.9.13/jackson-mapper-asl-1.9.13.jar:/Users/llu/.m2/repository/org/apache/avro/avro/1.7.4/avro-1.7.4.jar:/Users/llu/.m2/repository/com/thoughtworks/paranamer/paranamer/2.3/paranamer-2.3.jar:/Users/llu/.m2/repository/org/xerial/snappy/snappy-java/1.0.4.1/snappy-java-1.0.4.1.jar:/Users/llu/.m2/repository/com/google/code/gson/gson/2.2.4/gson-2.2.4.jar:/Users/llu/.m2/repository/org/apache/hadoop/hadoop-auth/2.6.0/hadoop-auth-2.6.0.jar:/Users/llu/.m2/repository/org/apache/directory/server/apacheds-kerberos-codec/2.0.0-M15/apacheds-kerberos-codec-2.0.0-M15.jar:/Users/llu/.m2/repository/org/apache/directory/server/apacheds-i18n/2.0.0-M15/apacheds-i18n-2.0.0-M15.jar:/Users/llu/.m2/repository/org/apache/directory/api/api-asn1-api/1.0.0-M20/api-asn1-api-1.0.0-M20.jar:/Users/llu/.m2/repository/org/apache/directory/api/api-util/1.0.0-M20/api-util-1.0.0-M20.jar:/Users/llu/.m2/repository/org/apache/curator/curator-framework/2.6.0/curator-framework-2.6.0.jar:/Users/llu/.m2/repository/com/jcraft/jsch/0.1.42/jsch-0.1.42.jar:/Users/llu/.m2/repository/org/apache/curator/curator-client/2.6.0/curator-client-2.6.0.jar:/Users/llu/.m2/repository/org/apache/curator/curator-recipes/2.6.0/curator-recipes-2.6.0.jar:/Users/llu/.m2/repository/org/htrace/htrace-core/3.0.4/htrace-core-3.0.4.jar:/Users/llu/.m2/repository/org/apache/zookeeper/zookeeper/3.4.6/zookeeper-3.4.6.jar:/Users/llu/.m2/repository/io/netty/netty/3.6.2.Final/netty-3.6.2.Final.jar:/Users/llu/.m2/repository/org/apache/commons/commons-compress/1.4.1/commons-compress-1.4.1.jar:/Users/llu/.m2/repository/org/tukaani/xz/1.0/xz-1.0.jar:/Users/llu/.m2/repository/org/apache/hadoop/hadoop-annotations/2.6.0/hadoop-annotations-2.6.0.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_67.jdk/Contents/Home/lib/tools.jar:/Users/llu/.m2/repository/com/google/protobuf/protobuf-java/2.5.0/protobuf-java-2.5.0.jar -sourcepath /Users/llu/hadoop2_6/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java -apidir /Users/llu/hadoop2_6/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/target/site/jdiff/xml -apiname hadoop-yarn-api 2.6.0 -->
<package name="org.apache.hadoop.yarn.api">
  <!-- start interface org.apache.hadoop.yarn.api.ApplicationClientProtocol -->
  <interface name="ApplicationClientProtocol"    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <method name="getNewApplication" return="org.apache.hadoop.yarn.api.protocolrecords.GetNewApplicationResponse"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="request" type="org.apache.hadoop.yarn.api.protocolrecords.GetNewApplicationRequest"/>
      <exception name="YarnException" type="org.apache.hadoop.yarn.exceptions.YarnException"/>
      <exception name="IOException" type="java.io.IOException"/>
      <doc>
      <![CDATA[<p>The interface used by clients to obtain a new {@link ApplicationId} for
 submitting new applications.</p>

 <p>The <code>ResourceManager</code> responds with a new, monotonically
 increasing, {@link ApplicationId} which is used by the client to submit
 a new application.</p>

 <p>The <code>ResourceManager</code> also responds with details such
 as maximum resource capabilities in the cluster as specified in
 {@link GetNewApplicationResponse}.</p>

 @param request request to get a new <code>ApplicationId</code>
 @return response containing the new <code>ApplicationId</code> to be used
 to submit an application
 @throws YarnException
 @throws IOException
 @see #submitApplication(SubmitApplicationRequest)]]>
      </doc>
    </method>
    <method name="submitApplication" return="org.apache.hadoop.yarn.api.protocolrecords.SubmitApplicationResponse"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="request" type="org.apache.hadoop.yarn.api.protocolrecords.SubmitApplicationRequest"/>
      <exception name="YarnException" type="org.apache.hadoop.yarn.exceptions.YarnException"/>
      <exception name="IOException" type="java.io.IOException"/>
      <doc>
      <![CDATA[<p>The interface used by clients to submit a new application to the
 <code>ResourceManager.</code></p>

 <p>The client is required to provide details such as queue,
 {@link Resource} required to run the <code>ApplicationMaster</code>,
 the equivalent of {@link ContainerLaunchContext} for launching
 the <code>ApplicationMaster</code> etc. via the
 {@link SubmitApplicationRequest}.</p>

 <p>Currently the <code>ResourceManager</code> sends an immediate (empty)
 {@link SubmitApplicationResponse} on accepting the submission and throws
 an exception if it rejects the submission. However, this call needs to be
 followed by {@link #getApplicationReport(GetApplicationReportRequest)}
 to make sure that the application gets properly submitted - obtaining a
 {@link SubmitApplicationResponse} from ResourceManager doesn't guarantee
 that RM 'remembers' this application beyond failover or restart. If RM
 failover or RM restart happens before ResourceManager saves the
 application's state successfully, the subsequent
 {@link #getApplicationReport(GetApplicationReportRequest)} will throw
 a {@link ApplicationNotFoundException}. The Clients need to re-submit
 the application with the same {@link ApplicationSubmissionContext} when
 it encounters the {@link ApplicationNotFoundException} on the
 {@link #getApplicationReport(GetApplicationReportRequest)} call.</p>

 <p>During the submission process, it checks whether the application
 already exists. If the application exists, it will simply return
 SubmitApplicationResponse</p>

 <p> In secure mode,the <code>ResourceManager</code> verifies access to
 queues etc. before accepting the application submission.</p>

 @param request request to submit a new application
 @return (empty) response on accepting the submission
 @throws YarnException
 @throws IOException
 @throws InvalidResourceRequestException
           The exception is thrown when a {@link ResourceRequest} is out of
           the range of the configured lower and upper resource boundaries.
 @see #getNewApplication(GetNewApplicationRequest)]]>
      </doc>
    </method>
    <method name="forceKillApplication" return="org.apache.hadoop.yarn.api.protocolrecords.KillApplicationResponse"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="request" type="org.apache.hadoop.yarn.api.protocolrecords.KillApplicationRequest"/>
      <exception name="YarnException" type="org.apache.hadoop.yarn.exceptions.YarnException"/>
      <exception name="IOException" type="java.io.IOException"/>
      <doc>
      <![CDATA[<p>The interface used by clients to request the
 <code>ResourceManager</code> to abort submitted application.</p>

 <p>The client, via {@link KillApplicationRequest} provides the
 {@link ApplicationId} of the application to be aborted.</p>

 <p> In secure mode,the <code>ResourceManager</code> verifies access to the
 application, queue etc. before terminating the application.</p>

 <p>Currently, the <code>ResourceManager</code> returns an empty response
 on success and throws an exception on rejecting the request.</p>

 @param request request to abort a submitted application
 @return <code>ResourceManager</code> returns an empty response
         on success and throws an exception on rejecting the request
 @throws YarnException
 @throws IOException
 @see #getQueueUserAcls(GetQueueUserAclsInfoRequest)]]>
      </doc>
    </method>
    <method name="getApplicationReport" return="org.apache.hadoop.yarn.api.protocolrecords.GetApplicationReportResponse"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="request" type="org.apache.hadoop.yarn.api.protocolrecords.GetApplicationReportRequest"/>
      <exception name="YarnException" type="org.apache.hadoop.yarn.exceptions.YarnException"/>
      <exception name="IOException" type="java.io.IOException"/>
      <doc>
      <![CDATA[<p>The interface used by clients to get a report of an Application from
 the <code>ResourceManager</code>.</p>

 <p>The client, via {@link GetApplicationReportRequest} provides the
 {@link ApplicationId} of the application.</p>

 <p> In secure mode,the <code>ResourceManager</code> verifies access to the
 application, queue etc. before accepting the request.</p>

 <p>The <code>ResourceManager</code> responds with a
 {@link GetApplicationReportResponse} which includes the
 {@link ApplicationReport} for the application.</p>

 <p>If the user does not have <code>VIEW_APP</code> access then the
 following fields in the report will be set to stubbed values:
 <ul>
   <li>host - set to "N/A"</li>
   <li>RPC port - set to -1</li>
   <li>client token - set to "N/A"</li>
   <li>diagnostics - set to "N/A"</li>
   <li>tracking URL - set to "N/A"</li>
   <li>original tracking URL - set to "N/A"</li>
   <li>resource usage report - all values are -1</li>
 </ul></p>

 @param request request for an application report
 @return application report
 @throws YarnException
 @throws IOException]]>
      </doc>
    </method>
    <method name="getClusterMetrics" return="org.apache.hadoop.yarn.api.protocolrecords.GetClusterMetricsResponse"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="request" type="org.apache.hadoop.yarn.api.protocolrecords.GetClusterMetricsRequest"/>
      <exception name="YarnException" type="org.apache.hadoop.yarn.exceptions.YarnException"/>
      <exception name="IOException" type="java.io.IOException"/>
      <doc>
      <![CDATA[<p>The interface used by clients to get metrics about the cluster from
 the <code>ResourceManager</code>.</p>

 <p>The <code>ResourceManager</code> responds with a
 {@link GetClusterMetricsResponse} which includes the
 {@link YarnClusterMetrics} with details such as number of current
 nodes in the cluster.</p>

 @param request request for cluster metrics
 @return cluster metrics
 @throws YarnException
 @throws IOException]]>
      </doc>
    </method>
    <method name="getApplications" return="org.apache.hadoop.yarn.api.protocolrecords.GetApplicationsResponse"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="request" type="org.apache.hadoop.yarn.api.protocolrecords.GetApplicationsRequest"/>
      <exception name="YarnException" type="org.apache.hadoop.yarn.exceptions.YarnException"/>
      <exception name="IOException" type="java.io.IOException"/>
      <doc>
      <![CDATA[<p>The interface used by clients to get a report of Applications
 matching the filters defined by {@link GetApplicationsRequest}
 in the cluster from the <code>ResourceManager</code>.</p>

 <p>The <code>ResourceManager</code> responds with a
 {@link GetApplicationsResponse} which includes the
 {@link ApplicationReport} for the applications.</p>

 <p>If the user does not have <code>VIEW_APP</code> access for an
 application then the corresponding report will be filtered as
 described in {@link #getApplicationReport(GetApplicationReportRequest)}.
 </p>

 @param request request for report on applications
 @return report on applications matching the given application types
           defined in the request
 @throws YarnException
 @throws IOException
 @see GetApplicationsRequest]]>
      </doc>
    </method>
    <method name="getClusterNodes" return="org.apache.hadoop.yarn.api.protocolrecords.GetClusterNodesResponse"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="request" type="org.apache.hadoop.yarn.api.protocolrecords.GetClusterNodesRequest"/>
      <exception name="YarnException" type="org.apache.hadoop.yarn.exceptions.YarnException"/>
      <exception name="IOException" type="java.io.IOException"/>
      <doc>
      <![CDATA[<p>The interface used by clients to get a report of all nodes
 in the cluster from the <code>ResourceManager</code>.</p>

 <p>The <code>ResourceManager</code> responds with a
 {@link GetClusterNodesResponse} which includes the
 {@link NodeReport} for all the nodes in the cluster.</p>

 @param request request for report on all nodes
 @return report on all nodes
 @throws YarnException
 @throws IOException]]>
      </doc>
    </method>
    <method name="getQueueInfo" return="org.apache.hadoop.yarn.api.protocolrecords.GetQueueInfoResponse"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="request" type="org.apache.hadoop.yarn.api.protocolrecords.GetQueueInfoRequest"/>
      <exception name="YarnException" type="org.apache.hadoop.yarn.exceptions.YarnException"/>
      <exception name="IOException" type="java.io.IOException"/>
      <doc>
      <![CDATA[<p>The interface used by clients to get information about <em>queues</em>
 from the <code>ResourceManager</code>.</p>

 <p>The client, via {@link GetQueueInfoRequest}, can ask for details such
 as used/total resources, child queues, running applications etc.</p>

 <p> In secure mode,the <code>ResourceManager</code> verifies access before
 providing the information.</p>

 @param request request to get queue information
 @return queue information
 @throws YarnException
 @throws IOException]]>
      </doc>
    </method>
    <method name="getQueueUserAcls" return="org.apache.hadoop.yarn.api.protocolrecords.GetQueueUserAclsInfoResponse"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="request" type="org.apache.hadoop.yarn.api.protocolrecords.GetQueueUserAclsInfoRequest"/>
      <exception name="YarnException" type="org.apache.hadoop.yarn.exceptions.YarnException"/>
      <exception name="IOException" type="java.io.IOException"/>
      <doc>
      <![CDATA[<p>The interface used by clients to get information about <em>queue
 acls</em> for <em>current user</em> from the <code>ResourceManager</code>.
 </p>

 <p>The <code>ResourceManager</code> responds with queue acls for all
 existing queues.</p>

 @param request request to get queue acls for <em>current user</em>
 @return queue acls for <em>current user</em>
 @throws YarnException
 @throws IOException]]>
      </doc>
    </method>
    <method name="getDelegationToken" return="org.apache.hadoop.yarn.api.protocolrecords.GetDelegationTokenResponse"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="request" type="org.apache.hadoop.yarn.api.protocolrecords.GetDelegationTokenRequest"/>
      <exception name="YarnException" type="org.apache.hadoop.yarn.exceptions.YarnException"/>
      <exception name="IOException" type="java.io.IOException"/>
      <doc>
      <![CDATA[<p>The interface used by clients to get delegation token, enabling the
 containers to be able to talk to the service using those tokens.

  <p> The <code>ResourceManager</code> responds with the delegation
  {@link Token} that can be used by the client to speak to this
  service.
 @param request request to get a delegation token for the client.
 @return delegation token that can be used to talk to this service
 @throws YarnException
 @throws IOException]]>
      </doc>
    </method>
    <method name="moveApplicationAcrossQueues" return="org.apache.hadoop.yarn.api.protocolrecords.MoveApplicationAcrossQueuesResponse"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="request" type="org.apache.hadoop.yarn.api.protocolrecords.MoveApplicationAcrossQueuesRequest"/>
      <exception name="YarnException" type="org.apache.hadoop.yarn.exceptions.YarnException"/>
      <exception name="IOException" type="java.io.IOException"/>
      <doc>
      <![CDATA[Move an application to a new queue.

 @param request the application ID and the target queue
 @return an empty response
 @throws YarnException
 @throws IOException]]>
      </doc>
    </method>
    <method name="getApplicationAttemptReport" return="org.apache.hadoop.yarn.api.protocolrecords.GetApplicationAttemptReportResponse"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="request" type="org.apache.hadoop.yarn.api.protocolrecords.GetApplicationAttemptReportRequest"/>
      <exception name="YarnException" type="org.apache.hadoop.yarn.exceptions.YarnException"/>
      <exception name="IOException" type="java.io.IOException"/>
      <doc>
      <![CDATA[<p>
 The interface used by clients to get a report of an Application Attempt
 from the <code>ResourceManager</code>
 </p>

 <p>
 The client, via {@link GetApplicationAttemptReportRequest} provides the
 {@link ApplicationAttemptId} of the application attempt.
 </p>

 <p>
 In secure mode,the <code>ResourceManager</code> verifies access to
 the method before accepting the request.
 </p>

 <p>
 The <code>ResourceManager</code> responds with a
 {@link GetApplicationAttemptReportResponse} which includes the
 {@link ApplicationAttemptReport} for the application attempt.
 </p>

 <p>
 If the user does not have <code>VIEW_APP</code> access then the following
 fields in the report will be set to stubbed values:
 <ul>
 <li>host</li>
 <li>RPC port</li>
 <li>client token</li>
 <li>diagnostics - set to "N/A"</li>
 <li>tracking URL</li>
 </ul>
 </p>

 @param request
          request for an application attempt report
 @return application attempt report
 @throws YarnException
 @throws IOException]]>
      </doc>
    </method>
    <method name="getApplicationAttempts" return="org.apache.hadoop.yarn.api.protocolrecords.GetApplicationAttemptsResponse"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="request" type="org.apache.hadoop.yarn.api.protocolrecords.GetApplicationAttemptsRequest"/>
      <exception name="YarnException" type="org.apache.hadoop.yarn.exceptions.YarnException"/>
      <exception name="IOException" type="java.io.IOException"/>
      <doc>
      <![CDATA[<p>
 The interface used by clients to get a report of all Application attempts
 in the cluster from the <code>ResourceManager</code>
 </p>

 <p>
 The <code>ResourceManager</code> responds with a
 {@link GetApplicationAttemptsRequest} which includes the
 {@link ApplicationAttemptReport} for all the applications attempts of a
 specified application attempt.
 </p>

 <p>
 If the user does not have <code>VIEW_APP</code> access for an application
 then the corresponding report will be filtered as described in
 {@link #getApplicationAttemptReport(GetApplicationAttemptReportRequest)}.
 </p>

 @param request
          request for reports on all application attempts of an application
 @return reports on all application attempts of an application
 @throws YarnException
 @throws IOException]]>
      </doc>
    </method>
    <method name="getContainerReport" return="org.apache.hadoop.yarn.api.protocolrecords.GetContainerReportResponse"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="request" type="org.apache.hadoop.yarn.api.protocolrecords.GetContainerReportRequest"/>
      <exception name="YarnException" type="org.apache.hadoop.yarn.exceptions.YarnException"/>
      <exception name="IOException" type="java.io.IOException"/>
      <doc>
      <![CDATA[<p>
 The interface used by clients to get a report of an Container from the
 <code>ResourceManager</code>
 </p>

 <p>
 The client, via {@link GetContainerReportRequest} provides the
 {@link ContainerId} of the container.
 </p>

 <p>
 In secure mode,the <code>ResourceManager</code> verifies access to the
 method before accepting the request.
 </p>

 <p>
 The <code>ResourceManager</code> responds with a
 {@link GetContainerReportResponse} which includes the
 {@link ContainerReport} for the container.
 </p>

 @param request
          request for a container report
 @return container report
 @throws YarnException
 @throws IOException]]>
      </doc>
    </method>
    <method name="getContainers" return="org.apache.hadoop.yarn.api.protocolrecords.GetContainersResponse"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="request" type="org.apache.hadoop.yarn.api.protocolrecords.GetContainersRequest"/>
      <exception name="YarnException" type="org.apache.hadoop.yarn.exceptions.YarnException"/>
      <exception name="IOException" type="java.io.IOException"/>
      <doc>
      <![CDATA[<p>
 The interface used by clients to get a report of Containers for an
 application attempt from the <code>ResourceManager</code>
 </p>

 <p>
 The client, via {@link GetContainersRequest} provides the
 {@link ApplicationAttemptId} of the application attempt.
 </p>

 <p>
 In secure mode,the <code>ResourceManager</code> verifies access to the
 method before accepting the request.
 </p>

 <p>
 The <code>ResourceManager</code> responds with a
 {@link GetContainersResponse} which includes a list of
 {@link ContainerReport} for all the containers of a specific application
 attempt.
 </p>

 @param request
          request for a list of container reports of an application attempt.
 @return reports on all containers of an application attempt
 @throws YarnException
 @throws IOException]]>
      </doc>
    </method>
    <method name="submitReservation" return="org.apache.hadoop.yarn.api.protocolrecords.ReservationSubmissionResponse"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="request" type="org.apache.hadoop.yarn.api.protocolrecords.ReservationSubmissionRequest"/>
      <exception name="YarnException" type="org.apache.hadoop.yarn.exceptions.YarnException"/>
      <exception name="IOException" type="java.io.IOException"/>
      <doc>
      <![CDATA[<p>
 The interface used by clients to submit a new reservation to the
 {@code ResourceManager}.
 </p>

 <p>
 The client packages all details of its request in a
 {@link ReservationSubmissionRequest} object. This contains information
 about the amount of capacity, temporal constraints, and concurrency needs.
 Furthermore, the reservation might be composed of multiple stages, with
 ordering dependencies among them.
 </p>

 <p>
 In order to respond, a new admission control component in the
 {@code ResourceManager} performs an analysis of the resources that have
 been committed over the period of time the user is requesting, verify that
 the user requests can be fulfilled, and that it respect a sharing policy
 (e.g., {@code CapacityOverTimePolicy}). Once it has positively determined
 that the ReservationSubmissionRequest is satisfiable the
 {@code ResourceManager} answers with a
 {@link ReservationSubmissionResponse} that include a non-null
 {@link ReservationId}. Upon failure to find a valid allocation the response
 is an exception with the reason.

 On application submission the client can use this {@link ReservationId} to
 obtain access to the reserved resources.
 </p>

 <p>
 The system guarantees that during the time-range specified by the user, the
 reservationID will be corresponding to a valid reservation. The amount of
 capacity dedicated to such queue can vary overtime, depending of the
 allocation that has been determined. But it is guaranteed to satisfy all
 the constraint expressed by the user in the
 {@link ReservationSubmissionRequest}.
 </p>

 @param request the request to submit a new Reservation
 @return response the {@link ReservationId} on accepting the submission
 @throws YarnException if the request is invalid or reservation cannot be
           created successfully
 @throws IOException]]>
      </doc>
    </method>
    <method name="updateReservation" return="org.apache.hadoop.yarn.api.protocolrecords.ReservationUpdateResponse"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="request" type="org.apache.hadoop.yarn.api.protocolrecords.ReservationUpdateRequest"/>
      <exception name="YarnException" type="org.apache.hadoop.yarn.exceptions.YarnException"/>
      <exception name="IOException" type="java.io.IOException"/>
      <doc>
      <![CDATA[<p>
 The interface used by clients to update an existing Reservation. This is
 referred to as a re-negotiation process, in which a user that has
 previously submitted a Reservation.
 </p>

 <p>
 The allocation is attempted by virtually substituting all previous
 allocations related to this Reservation with new ones, that satisfy the new
 {@link ReservationUpdateRequest}. Upon success the previous allocation is
 substituted by the new one, and on failure (i.e., if the system cannot find
 a valid allocation for the updated request), the previous allocation
 remains valid.

 The {@link ReservationId} is not changed, and applications currently
 running within this reservation will automatically receive the resources
 based on the new allocation.
 </p>

 @param request to update an existing Reservation (the ReservationRequest
          should refer to an existing valid {@link ReservationId})
 @return response empty on successfully updating the existing reservation
 @throws YarnException if the request is invalid or reservation cannot be
           updated successfully
 @throws IOException]]>
      </doc>
    </method>
    <method name="deleteReservation" return="org.apache.hadoop.yarn.api.protocolrecords.ReservationDeleteResponse"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="request" type="org.apache.hadoop.yarn.api.protocolrecords.ReservationDeleteRequest"/>
      <exception name="YarnException" type="org.apache.hadoop.yarn.exceptions.YarnException"/>
      <exception name="IOException" type="java.io.IOException"/>
      <doc>
      <![CDATA[<p>
 The interface used by clients to remove an existing Reservation.

 Upon deletion of a reservation applications running with this reservation,
 are automatically downgraded to normal jobs running without any dedicated
 reservation.
 </p>

 @param request to remove an existing Reservation (the ReservationRequest
          should refer to an existing valid {@link ReservationId})
 @return response empty on successfully deleting the existing reservation
 @throws YarnException if the request is invalid or reservation cannot be
           deleted successfully
 @throws IOException]]>
      </doc>
    </method>
    <method name="getNodeToLabels" return="org.apache.hadoop.yarn.api.protocolrecords.GetNodesToLabelsResponse"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="request" type="org.apache.hadoop.yarn.api.protocolrecords.GetNodesToLabelsRequest"/>
      <exception name="YarnException" type="org.apache.hadoop.yarn.exceptions.YarnException"/>
      <exception name="IOException" type="java.io.IOException"/>
      <doc>
      <![CDATA[<p>
 The interface used by client to get node to labels mappings in existing cluster
 </p>

 @param request
 @return node to labels mappings
 @throws YarnException
 @throws IOException]]>
      </doc>
    </method>
    <method name="getClusterNodeLabels" return="org.apache.hadoop.yarn.api.protocolrecords.GetClusterNodeLabelsResponse"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="request" type="org.apache.hadoop.yarn.api.protocolrecords.GetClusterNodeLabelsRequest"/>
      <exception name="YarnException" type="org.apache.hadoop.yarn.exceptions.YarnException"/>
      <exception name="IOException" type="java.io.IOException"/>
      <doc>
      <![CDATA[<p>
 The interface used by client to get node labels in the cluster
 </p>

 @param request to get node labels collection of this cluster
 @return node labels collection of this cluster
 @throws YarnException
 @throws IOException]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>The protocol between clients and the <code>ResourceManager</code>
 to submit/abort jobs and to get information on applications, cluster metrics,
 nodes, queues and ACLs.</p>]]>
    </doc>
  </interface>
  <!-- end interface org.apache.hadoop.yarn.api.ApplicationClientProtocol -->
  <!-- start interface org.apache.hadoop.yarn.api.ApplicationConstants -->
  <interface name="ApplicationConstants"    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <field name="APP_SUBMIT_TIME_ENV" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The environment variable for APP_SUBMIT_TIME. Set in AppMaster environment
 only]]>
      </doc>
    </field>
    <field name="CONTAINER_TOKEN_FILE_ENV_NAME" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The cache file into which container token is written]]>
      </doc>
    </field>
    <field name="APPLICATION_WEB_PROXY_BASE_ENV" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The environmental variable for APPLICATION_WEB_PROXY_BASE. Set in
 ApplicationMaster's environment only. This states that for all non-relative
 web URLs in the app masters web UI what base should they have.]]>
      </doc>
    </field>
    <field name="LOG_DIR_EXPANSION_VAR" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The temporary environmental variable for container log directory. This
 should be replaced by real container log directory on container launch.]]>
      </doc>
    </field>
    <field name="CLASS_PATH_SEPARATOR" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[This constant is used to construct class path and it will be replaced with
 real class path separator(':' for Linux and ';' for Windows) by
 NodeManager on container launch. User has to use this constant to construct
 class path if user wants cross-platform practice i.e. submit an application
 from a Windows client to a Linux/Unix server or vice versa.]]>
      </doc>
    </field>
    <field name="PARAMETER_EXPANSION_LEFT" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The following two constants are used to expand parameter and it will be
 replaced with real parameter expansion marker ('%' for Windows and '$' for
 Linux) by NodeManager on container launch. For example: {{VAR}} will be
 replaced as $VAR on Linux, and %VAR% on Windows. User has to use this
 constant to construct class path if user wants cross-platform practice i.e.
 submit an application from a Windows client to a Linux/Unix server or vice
 versa.]]>
      </doc>
    </field>
    <field name="PARAMETER_EXPANSION_RIGHT" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[User has to use this constant to construct class path if user wants
 cross-platform practice i.e. submit an application from a Windows client to
 a Linux/Unix server or vice versa.]]>
      </doc>
    </field>
    <field name="STDERR" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="STDOUT" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="MAX_APP_ATTEMPTS_ENV" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The environment variable for MAX_APP_ATTEMPTS. Set in AppMaster environment
 only]]>
      </doc>
    </field>
    <doc>
    <![CDATA[This is the API for the applications comprising of constants that YARN sets
 up for the applications and the containers.

 TODO: Investigate the semantics and security of each cross-boundary refs.]]>
    </doc>
  </interface>
  <!-- end interface org.apache.hadoop.yarn.api.ApplicationConstants -->
  <!-- start class org.apache.hadoop.yarn.api.ApplicationConstants.Environment -->
  <class name="ApplicationConstants.Environment" extends="java.lang.Enum"
    abstract="false"
    static="true" final="true" visibility="public"
    deprecated="not deprecated">
    <method name="values" return="org.apache.hadoop.yarn.api.ApplicationConstants.Environment[]"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="valueOf" return="org.apache.hadoop.yarn.api.ApplicationConstants.Environment"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="name" type="java.lang.String"/>
    </method>
    <method name="key" return="java.lang.String"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="toString" return="java.lang.String"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="$" return="java.lang.String"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Expand the environment variable based on client OS environment variable
 expansion syntax (e.g. $VAR for Linux and %VAR% for Windows).
 <p>
 Note: Use $$() method for cross-platform practice i.e. submit an
 application from a Windows client to a Linux/Unix server or vice versa.
 </p>]]>
      </doc>
    </method>
    <method name="$$" return="java.lang.String"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Expand the environment variable in platform-agnostic syntax. The
 parameter expansion marker "{{VAR}}" will be replaced with real parameter
 expansion marker ('%' for Windows and '$' for Linux) by NodeManager on
 container launch. For example: {{VAR}} will be replaced as $VAR on Linux,
 and %VAR% on Windows.]]>
      </doc>
    </method>
    <doc>
    <![CDATA[Environment for Applications.

 Some of the environment variables for applications are <em>final</em>
 i.e. they cannot be modified by the applications.]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.ApplicationConstants.Environment -->
  <!-- start interface org.apache.hadoop.yarn.api.ApplicationHistoryProtocol -->
  <interface name="ApplicationHistoryProtocol"    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <method name="getApplicationReport" return="org.apache.hadoop.yarn.api.protocolrecords.GetApplicationReportResponse"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="request" type="org.apache.hadoop.yarn.api.protocolrecords.GetApplicationReportRequest"/>
      <exception name="YarnException" type="org.apache.hadoop.yarn.exceptions.YarnException"/>
      <exception name="IOException" type="java.io.IOException"/>
      <doc>
      <![CDATA[<p>
 The interface used by clients to get a report of an Application from the
 <code>ResourceManager</code>.
 </p>

 <p>
 The client, via {@link GetApplicationReportRequest} provides the
 {@link ApplicationId} of the application.
 </p>

 <p>
 In secure mode,the <code>ApplicationHistoryServer</code> verifies access to
 the application, queue etc. before accepting the request.
 </p>

 <p>
 The <code>ApplicationHistoryServer</code> responds with a
 {@link GetApplicationReportResponse} which includes the
 {@link ApplicationReport} for the application.
 </p>

 <p>
 If the user does not have <code>VIEW_APP</code> access then the following
 fields in the report will be set to stubbed values:
 <ul>
 <li>host - set to "N/A"</li>
 <li>RPC port - set to -1</li>
 <li>client token - set to "N/A"</li>
 <li>diagnostics - set to "N/A"</li>
 <li>tracking URL - set to "N/A"</li>
 <li>original tracking URL - set to "N/A"</li>
 <li>resource usage report - all values are -1</li>
 </ul>
 </p>

 @param request
          request for an application report
 @return application report
 @throws YarnException
 @throws IOException]]>
      </doc>
    </method>
    <method name="getApplications" return="org.apache.hadoop.yarn.api.protocolrecords.GetApplicationsResponse"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="request" type="org.apache.hadoop.yarn.api.protocolrecords.GetApplicationsRequest"/>
      <exception name="YarnException" type="org.apache.hadoop.yarn.exceptions.YarnException"/>
      <exception name="IOException" type="java.io.IOException"/>
      <doc>
      <![CDATA[<p>
 The interface used by clients to get a report of all Applications in the
 cluster from the <code>ApplicationHistoryServer</code>.
 </p>

 <p>
 The <code>ApplicationHistoryServer</code> responds with a
 {@link GetApplicationsResponse} which includes a list of
 {@link ApplicationReport} for all the applications.
 </p>

 <p>
 If the user does not have <code>VIEW_APP</code> access for an application
 then the corresponding report will be filtered as described in
 {@link #getApplicationReport(GetApplicationReportRequest)}.
 </p>

 @param request
          request for reports on all the applications
 @return report on applications matching the given application types defined
         in the request
 @throws YarnException
 @throws IOException]]>
      </doc>
    </method>
    <method name="getApplicationAttemptReport" return="org.apache.hadoop.yarn.api.protocolrecords.GetApplicationAttemptReportResponse"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="request" type="org.apache.hadoop.yarn.api.protocolrecords.GetApplicationAttemptReportRequest"/>
      <exception name="YarnException" type="org.apache.hadoop.yarn.exceptions.YarnException"/>
      <exception name="IOException" type="java.io.IOException"/>
      <doc>
      <![CDATA[<p>
 The interface used by clients to get a report of an Application Attempt
 from the <code>ApplicationHistoryServer</code>.
 </p>

 <p>
 The client, via {@link GetApplicationAttemptReportRequest} provides the
 {@link ApplicationAttemptId} of the application attempt.
 </p>

 <p>
 In secure mode,the <code>ApplicationHistoryServer</code> verifies access to
 the method before accepting the request.
 </p>

 <p>
 The <code>ApplicationHistoryServer</code> responds with a
 {@link GetApplicationAttemptReportResponse} which includes the
 {@link ApplicationAttemptReport} for the application attempt.
 </p>

 <p>
 If the user does not have <code>VIEW_APP</code> access then the following
 fields in the report will be set to stubbed values:
 <ul>
 <li>host</li>
 <li>RPC port</li>
 <li>client token</li>
 <li>diagnostics - set to "N/A"</li>
 <li>tracking URL</li>
 </ul>
 </p>

 @param request
          request for an application attempt report
 @return application attempt report
 @throws YarnException
 @throws IOException]]>
      </doc>
    </method>
    <method name="getApplicationAttempts" return="org.apache.hadoop.yarn.api.protocolrecords.GetApplicationAttemptsResponse"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="request" type="org.apache.hadoop.yarn.api.protocolrecords.GetApplicationAttemptsRequest"/>
      <exception name="YarnException" type="org.apache.hadoop.yarn.exceptions.YarnException"/>
      <exception name="IOException" type="java.io.IOException"/>
      <doc>
      <![CDATA[<p>
 The interface used by clients to get a report of all Application attempts
 in the cluster from the <code>ApplicationHistoryServer</code>.
 </p>

 <p>
 The <code>ApplicationHistoryServer</code> responds with a
 {@link GetApplicationAttemptsRequest} which includes the
 {@link ApplicationAttemptReport} for all the applications attempts of a
 specified application attempt.
 </p>

 <p>
 If the user does not have <code>VIEW_APP</code> access for an application
 then the corresponding report will be filtered as described in
 {@link #getApplicationAttemptReport(GetApplicationAttemptReportRequest)}.
 </p>

 @param request
          request for reports on all application attempts of an application
 @return reports on all application attempts of an application
 @throws YarnException
 @throws IOException]]>
      </doc>
    </method>
    <method name="getContainerReport" return="org.apache.hadoop.yarn.api.protocolrecords.GetContainerReportResponse"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="request" type="org.apache.hadoop.yarn.api.protocolrecords.GetContainerReportRequest"/>
      <exception name="YarnException" type="org.apache.hadoop.yarn.exceptions.YarnException"/>
      <exception name="IOException" type="java.io.IOException"/>
      <doc>
      <![CDATA[<p>
 The interface used by clients to get a report of an Container from the
 <code>ApplicationHistoryServer</code>.
 </p>

 <p>
 The client, via {@link GetContainerReportRequest} provides the
 {@link ContainerId} of the container.
 </p>

 <p>
 In secure mode,the <code>ApplicationHistoryServer</code> verifies access to
 the method before accepting the request.
 </p>

 <p>
 The <code>ApplicationHistoryServer</code> responds with a
 {@link GetContainerReportResponse} which includes the
 {@link ContainerReport} for the container.
 </p>

 @param request
          request for a container report
 @return container report
 @throws YarnException
 @throws IOException]]>
      </doc>
    </method>
    <method name="getContainers" return="org.apache.hadoop.yarn.api.protocolrecords.GetContainersResponse"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="request" type="org.apache.hadoop.yarn.api.protocolrecords.GetContainersRequest"/>
      <exception name="YarnException" type="org.apache.hadoop.yarn.exceptions.YarnException"/>
      <exception name="IOException" type="java.io.IOException"/>
      <doc>
      <![CDATA[<p>
 The interface used by clients to get a report of Containers for an
 application attempt from the <code>ApplciationHistoryServer</code>.
 </p>

 <p>
 The client, via {@link GetContainersRequest} provides the
 {@link ApplicationAttemptId} of the application attempt.
 </p>

 <p>
 In secure mode,the <code>ApplicationHistoryServer</code> verifies access to
 the method before accepting the request.
 </p>

 <p>
 The <code>ApplicationHistoryServer</code> responds with a
 {@link GetContainersResponse} which includes a list of
 {@link ContainerReport} for all the containers of a specific application
 attempt.
 </p>

 @param request
          request for a list of container reports of an application attempt.
 @return reports on all containers of an application attempt
 @throws YarnException
 @throws IOException]]>
      </doc>
    </method>
    <method name="getDelegationToken" return="org.apache.hadoop.yarn.api.protocolrecords.GetDelegationTokenResponse"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="request" type="org.apache.hadoop.yarn.api.protocolrecords.GetDelegationTokenRequest"/>
      <exception name="YarnException" type="org.apache.hadoop.yarn.exceptions.YarnException"/>
      <exception name="IOException" type="java.io.IOException"/>
      <doc>
      <![CDATA[<p>
 The interface used by clients to get delegation token, enabling the
 containers to be able to talk to the service using those tokens.
 </p>

 <p>
 The <code>ApplicationHistoryServer</code> responds with the delegation
 token {@link Token} that can be used by the client to speak to this
 service.
 </p>

 @param request
          request to get a delegation token for the client.
 @return delegation token that can be used to talk to this service
 @throws YarnException
 @throws IOException]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>
 The protocol between clients and the <code>ApplicationHistoryServer</code> to
 get the information of completed applications etc.
 </p>]]>
    </doc>
  </interface>
  <!-- end interface org.apache.hadoop.yarn.api.ApplicationHistoryProtocol -->
  <!-- start interface org.apache.hadoop.yarn.api.ApplicationMasterProtocol -->
  <interface name="ApplicationMasterProtocol"    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <method name="registerApplicationMaster" return="org.apache.hadoop.yarn.api.protocolrecords.RegisterApplicationMasterResponse"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="request" type="org.apache.hadoop.yarn.api.protocolrecords.RegisterApplicationMasterRequest"/>
      <exception name="YarnException" type="org.apache.hadoop.yarn.exceptions.YarnException"/>
      <exception name="IOException" type="java.io.IOException"/>
      <doc>
      <![CDATA[<p>
 The interface used by a new <code>ApplicationMaster</code> to register with
 the <code>ResourceManager</code>.
 </p>

 <p>
 The <code>ApplicationMaster</code> needs to provide details such as RPC
 Port, HTTP tracking url etc. as specified in
 {@link RegisterApplicationMasterRequest}.
 </p>

 <p>
 The <code>ResourceManager</code> responds with critical details such as
 maximum resource capabilities in the cluster as specified in
 {@link RegisterApplicationMasterResponse}.
 </p>

 @param request
          registration request
 @return registration respose
 @throws YarnException
 @throws IOException
 @throws InvalidApplicationMasterRequestException
           The exception is thrown when an ApplicationMaster tries to
           register more then once.
 @see RegisterApplicationMasterRequest
 @see RegisterApplicationMasterResponse]]>
      </doc>
    </method>
    <method name="finishApplicationMaster" return="org.apache.hadoop.yarn.api.protocolrecords.FinishApplicationMasterResponse"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="request" type="org.apache.hadoop.yarn.api.protocolrecords.FinishApplicationMasterRequest"/>
      <exception name="YarnException" type="org.apache.hadoop.yarn.exceptions.YarnException"/>
      <exception name="IOException" type="java.io.IOException"/>
      <doc>
      <![CDATA[<p>The interface used by an <code>ApplicationMaster</code> to notify the
 <code>ResourceManager</code> about its completion (success or failed).</p>

 <p>The <code>ApplicationMaster</code> has to provide details such as
 final state, diagnostics (in case of failures) etc. as specified in
 {@link FinishApplicationMasterRequest}.</p>

 <p>The <code>ResourceManager</code> responds with
 {@link FinishApplicationMasterResponse}.</p>

 @param request completion request
 @return completion response
 @throws YarnException
 @throws IOException
 @see FinishApplicationMasterRequest
 @see FinishApplicationMasterResponse]]>
      </doc>
    </method>
    <method name="allocate" return="org.apache.hadoop.yarn.api.protocolrecords.AllocateResponse"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="request" type="org.apache.hadoop.yarn.api.protocolrecords.AllocateRequest"/>
      <exception name="YarnException" type="org.apache.hadoop.yarn.exceptions.YarnException"/>
      <exception name="IOException" type="java.io.IOException"/>
      <doc>
      <![CDATA[<p>
 The main interface between an <code>ApplicationMaster</code> and the
 <code>ResourceManager</code>.
 </p>

 <p>
 The <code>ApplicationMaster</code> uses this interface to provide a list of
 {@link ResourceRequest} and returns unused {@link Container} allocated to
 it via {@link AllocateRequest}. Optionally, the
 <code>ApplicationMaster</code> can also <em>blacklist</em> resources which
 it doesn't want to use.
 </p>

 <p>
 This also doubles up as a <em>heartbeat</em> to let the
 <code>ResourceManager</code> know that the <code>ApplicationMaster</code>
 is alive. Thus, applications should periodically make this call to be kept
 alive. The frequency depends on
 {@link YarnConfiguration#RM_AM_EXPIRY_INTERVAL_MS} which defaults to
 {@link YarnConfiguration#DEFAULT_RM_AM_EXPIRY_INTERVAL_MS}.
 </p>

 <p>
 The <code>ResourceManager</code> responds with list of allocated
 {@link Container}, status of completed containers and headroom information
 for the application.
 </p>

 <p>
 The <code>ApplicationMaster</code> can use the available headroom
 (resources) to decide how to utilized allocated resources and make informed
 decisions about future resource requests.
 </p>

 @param request
          allocation request
 @return allocation response
 @throws YarnException
 @throws IOException
 @throws InvalidApplicationMasterRequestException
           This exception is thrown when an ApplicationMaster calls allocate
           without registering first.
 @throws InvalidResourceBlacklistRequestException
           This exception is thrown when an application provides an invalid
           specification for blacklist of resources.
 @throws InvalidResourceRequestException
           This exception is thrown when a {@link ResourceRequest} is out of
           the range of the configured lower and upper limits on the
           resources.
 @see AllocateRequest
 @see AllocateResponse]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>The protocol between a live instance of <code>ApplicationMaster</code>
 and the <code>ResourceManager</code>.</p>

 <p>This is used by the <code>ApplicationMaster</code> to register/unregister
 and to request and obtain resources in the cluster from the
 <code>ResourceManager</code>.</p>]]>
    </doc>
  </interface>
  <!-- end interface org.apache.hadoop.yarn.api.ApplicationMasterProtocol -->
  <!-- start interface org.apache.hadoop.yarn.api.ContainerManagementProtocol -->
  <interface name="ContainerManagementProtocol"    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <method name="startContainers" return="org.apache.hadoop.yarn.api.protocolrecords.StartContainersResponse"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="request" type="org.apache.hadoop.yarn.api.protocolrecords.StartContainersRequest"/>
      <exception name="YarnException" type="org.apache.hadoop.yarn.exceptions.YarnException"/>
      <exception name="IOException" type="java.io.IOException"/>
      <doc>
      <![CDATA[<p>
 The <code>ApplicationMaster</code> provides a list of
 {@link StartContainerRequest}s to a <code>NodeManager</code> to
 <em>start</em> {@link Container}s allocated to it using this interface.
 </p>

 <p>
 The <code>ApplicationMaster</code> has to provide details such as allocated
 resource capability, security tokens (if enabled), command to be executed
 to start the container, environment for the process, necessary
 binaries/jar/shared-objects etc. via the {@link ContainerLaunchContext} in
 the {@link StartContainerRequest}.
 </p>

 <p>
 The <code>NodeManager</code> sends a response via
 {@link StartContainersResponse} which includes a list of
 {@link Container}s of successfully launched {@link Container}s, a
 containerId-to-exception map for each failed {@link StartContainerRequest} in
 which the exception indicates errors from per container and a
 allServicesMetaData map between the names of auxiliary services and their
 corresponding meta-data. Note: None-container-specific exceptions will
 still be thrown by the API method itself.
 </p>
 <p>
 The <code>ApplicationMaster</code> can use
 {@link #getContainerStatuses(GetContainerStatusesRequest)} to get updated
 statuses of the to-be-launched or launched containers.
 </p>

 @param request
          request to start a list of containers
 @return response including conatinerIds of all successfully launched
         containers, a containerId-to-exception map for failed requests and
         a allServicesMetaData map.
 @throws YarnException
 @throws IOException
 @throws NMNotYetReadyException
           This exception is thrown when NM starts from scratch but has not
           yet connected with RM.]]>
      </doc>
    </method>
    <method name="stopContainers" return="org.apache.hadoop.yarn.api.protocolrecords.StopContainersResponse"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="request" type="org.apache.hadoop.yarn.api.protocolrecords.StopContainersRequest"/>
      <exception name="YarnException" type="org.apache.hadoop.yarn.exceptions.YarnException"/>
      <exception name="IOException" type="java.io.IOException"/>
      <doc>
      <![CDATA[<p>
 The <code>ApplicationMaster</code> requests a <code>NodeManager</code> to
 <em>stop</em> a list of {@link Container}s allocated to it using this
 interface.
 </p>

 <p>
 The <code>ApplicationMaster</code> sends a {@link StopContainersRequest}
 which includes the {@link ContainerId}s of the containers to be stopped.
 </p>

 <p>
 The <code>NodeManager</code> sends a response via
 {@link StopContainersResponse} which includes a list of {@link ContainerId}
 s of successfully stopped containers, a containerId-to-exception map for
 each failed request in which the exception indicates errors from per
 container. Note: None-container-specific exceptions will still be thrown by
 the API method itself. <code>ApplicationMaster</code> can use
 {@link #getContainerStatuses(GetContainerStatusesRequest)} to get updated
 statuses of the containers.
 </p>

 @param request
          request to stop a list of containers
 @return response which includes a list of containerIds of successfully
         stopped containers, a containerId-to-exception map for failed
         requests.
 @throws YarnException
 @throws IOException]]>
      </doc>
    </method>
    <method name="getContainerStatuses" return="org.apache.hadoop.yarn.api.protocolrecords.GetContainerStatusesResponse"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="request" type="org.apache.hadoop.yarn.api.protocolrecords.GetContainerStatusesRequest"/>
      <exception name="YarnException" type="org.apache.hadoop.yarn.exceptions.YarnException"/>
      <exception name="IOException" type="java.io.IOException"/>
      <doc>
      <![CDATA[<p>
 The API used by the <code>ApplicationMaster</code> to request for current
 statuses of <code>Container</code>s from the <code>NodeManager</code>.
 </p>

 <p>
 The <code>ApplicationMaster</code> sends a
 {@link GetContainerStatusesRequest} which includes the {@link ContainerId}s
 of all containers whose statuses are needed.
 </p>

 <p>
 The <code>NodeManager</code> responds with
 {@link GetContainerStatusesResponse} which includes a list of
 {@link ContainerStatus} of the successfully queried containers and a
 containerId-to-exception map for each failed request in which the exception
 indicates errors from per container. Note: None-container-specific
 exceptions will still be thrown by the API method itself.
 </p>

 @param request
          request to get <code>ContainerStatus</code>es of containers with
          the specified <code>ContainerId</code>s
 @return response containing the list of <code>ContainerStatus</code> of the
         successfully queried containers and a containerId-to-exception map
         for failed requests.

 @throws YarnException
 @throws IOException]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>The protocol between an <code>ApplicationMaster</code> and a
 <code>NodeManager</code> to start/stop containers and to get status
 of running containers.</p>

 <p>If security is enabled the <code>NodeManager</code> verifies that the
 <code>ApplicationMaster</code> has truly been allocated the container
 by the <code>ResourceManager</code> and also verifies all interactions such
 as stopping the container or obtaining status information for the container.
 </p>]]>
    </doc>
  </interface>
  <!-- end interface org.apache.hadoop.yarn.api.ContainerManagementProtocol -->
</package>
<package name="org.apache.hadoop.yarn.api.protocolrecords">
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.AllocateRequest -->
  <class name="AllocateRequest" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="AllocateRequest"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.AllocateRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="responseID" type="int"/>
      <param name="appProgress" type="float"/>
      <param name="resourceAsk" type="java.util.List"/>
      <param name="containersToBeReleased" type="java.util.List"/>
      <param name="resourceBlacklistRequest" type="org.apache.hadoop.yarn.api.records.ResourceBlacklistRequest"/>
    </method>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.AllocateRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="responseID" type="int"/>
      <param name="appProgress" type="float"/>
      <param name="resourceAsk" type="java.util.List"/>
      <param name="containersToBeReleased" type="java.util.List"/>
      <param name="resourceBlacklistRequest" type="org.apache.hadoop.yarn.api.records.ResourceBlacklistRequest"/>
      <param name="increaseRequests" type="java.util.List"/>
    </method>
    <method name="getResponseId" return="int"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>response id</em> used to track duplicate responses.
 @return <em>response id</em>]]>
      </doc>
    </method>
    <method name="setResponseId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="id" type="int"/>
      <doc>
      <![CDATA[Set the <em>response id</em> used to track duplicate responses.
 @param id <em>response id</em>]]>
      </doc>
    </method>
    <method name="getProgress" return="float"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>current progress</em> of application.
 @return <em>current progress</em> of application]]>
      </doc>
    </method>
    <method name="setProgress"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="progress" type="float"/>
      <doc>
      <![CDATA[Set the <em>current progress</em> of application
 @param progress <em>current progress</em> of application]]>
      </doc>
    </method>
    <method name="getAskList" return="java.util.List"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the list of <code>ResourceRequest</code> to update the
 <code>ResourceManager</code> about the application's resource requirements.
 @return the list of <code>ResourceRequest</code>
 @see ResourceRequest]]>
      </doc>
    </method>
    <method name="setAskList"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="resourceRequests" type="java.util.List"/>
      <doc>
      <![CDATA[Set list of <code>ResourceRequest</code> to update the
 <code>ResourceManager</code> about the application's resource requirements.
 @param resourceRequests list of <code>ResourceRequest</code> to update the
                        <code>ResourceManager</code> about the application's
                        resource requirements
 @see ResourceRequest]]>
      </doc>
    </method>
    <method name="getReleaseList" return="java.util.List"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the list of <code>ContainerId</code> of containers being
 released by the <code>ApplicationMaster</code>.
 @return list of <code>ContainerId</code> of containers being
         released by the <code>ApplicationMaster</code>]]>
      </doc>
    </method>
    <method name="setReleaseList"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="releaseContainers" type="java.util.List"/>
      <doc>
      <![CDATA[Set the list of <code>ContainerId</code> of containers being
 released by the <code>ApplicationMaster</code>
 @param releaseContainers list of <code>ContainerId</code> of
                          containers being released by the
                          <code>ApplicationMaster</code>]]>
      </doc>
    </method>
    <method name="getResourceBlacklistRequest" return="org.apache.hadoop.yarn.api.records.ResourceBlacklistRequest"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>ResourceBlacklistRequest</code> being sent by the
 <code>ApplicationMaster</code>.
 @return the <code>ResourceBlacklistRequest</code> being sent by the
         <code>ApplicationMaster</code>
 @see ResourceBlacklistRequest]]>
      </doc>
    </method>
    <method name="setResourceBlacklistRequest"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="resourceBlacklistRequest" type="org.apache.hadoop.yarn.api.records.ResourceBlacklistRequest"/>
      <doc>
      <![CDATA[Set the <code>ResourceBlacklistRequest</code> to inform the
 <code>ResourceManager</code> about the blacklist additions and removals
 per the <code>ApplicationMaster</code>.

 @param resourceBlacklistRequest the <code>ResourceBlacklistRequest</code>
                         to inform the <code>ResourceManager</code> about
                         the blacklist additions and removals
                         per the <code>ApplicationMaster</code>
 @see ResourceBlacklistRequest]]>
      </doc>
    </method>
    <method name="getIncreaseRequests" return="java.util.List"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>ContainerResourceIncreaseRequest</code> being sent by the
 <code>ApplicationMaster</code>]]>
      </doc>
    </method>
    <method name="setIncreaseRequests"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="increaseRequests" type="java.util.List"/>
      <doc>
      <![CDATA[Set the <code>ContainerResourceIncreaseRequest</code> to inform the
 <code>ResourceManager</code> about some container's resources need to be
 increased]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>The core request sent by the <code>ApplicationMaster</code> to the
 <code>ResourceManager</code> to obtain resources in the cluster.</p>

 <p>The request includes:
   <ul>
     <li>A response id to track duplicate responses.</li>
     <li>Progress information.</li>
     <li>
       A list of {@link ResourceRequest} to inform the
       <code>ResourceManager</code> about the application's
       resource requirements.
     </li>
     <li>
       A list of unused {@link Container} which are being returned.
     </li>
   </ul>
 </p>

 @see ApplicationMasterProtocol#allocate(AllocateRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.AllocateRequest -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.AllocateResponse -->
  <class name="AllocateResponse" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="AllocateResponse"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.AllocateResponse"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="responseId" type="int"/>
      <param name="completedContainers" type="java.util.List"/>
      <param name="allocatedContainers" type="java.util.List"/>
      <param name="updatedNodes" type="java.util.List"/>
      <param name="availResources" type="org.apache.hadoop.yarn.api.records.Resource"/>
      <param name="command" type="org.apache.hadoop.yarn.api.records.AMCommand"/>
      <param name="numClusterNodes" type="int"/>
      <param name="preempt" type="org.apache.hadoop.yarn.api.records.PreemptionMessage"/>
      <param name="nmTokens" type="java.util.List"/>
    </method>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.AllocateResponse"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="responseId" type="int"/>
      <param name="completedContainers" type="java.util.List"/>
      <param name="allocatedContainers" type="java.util.List"/>
      <param name="updatedNodes" type="java.util.List"/>
      <param name="availResources" type="org.apache.hadoop.yarn.api.records.Resource"/>
      <param name="command" type="org.apache.hadoop.yarn.api.records.AMCommand"/>
      <param name="numClusterNodes" type="int"/>
      <param name="preempt" type="org.apache.hadoop.yarn.api.records.PreemptionMessage"/>
      <param name="nmTokens" type="java.util.List"/>
      <param name="increasedContainers" type="java.util.List"/>
      <param name="decreasedContainers" type="java.util.List"/>
    </method>
    <method name="getAMCommand" return="org.apache.hadoop.yarn.api.records.AMCommand"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[If the <code>ResourceManager</code> needs the
 <code>ApplicationMaster</code> to take some action then it will send an
 AMCommand to the <code>ApplicationMaster</code>. See <code>AMCommand</code>
 for details on commands and actions for them.
 @return <code>AMCommand</code> if the <code>ApplicationMaster</code> should
         take action, <code>null</code> otherwise
 @see AMCommand]]>
      </doc>
    </method>
    <method name="getResponseId" return="int"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>last response id</em>.
 @return <em>last response id</em>]]>
      </doc>
    </method>
    <method name="getAllocatedContainers" return="java.util.List"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the list of <em>newly allocated</em> <code>Container</code> by the
 <code>ResourceManager</code>.
 @return list of <em>newly allocated</em> <code>Container</code>]]>
      </doc>
    </method>
    <method name="getAvailableResources" return="org.apache.hadoop.yarn.api.records.Resource"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>available headroom</em> for resources in the cluster for the
 application.
 @return limit of available headroom for resources in the cluster for the
 application]]>
      </doc>
    </method>
    <method name="getCompletedContainersStatuses" return="java.util.List"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the list of <em>completed containers' statuses</em>.
 @return the list of <em>completed containers' statuses</em>]]>
      </doc>
    </method>
    <method name="getUpdatedNodes" return="java.util.List"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the list of <em>updated <code>NodeReport</code>s</em>. Updates could
 be changes in health, availability etc of the nodes.
 @return The delta of updated nodes since the last response]]>
      </doc>
    </method>
    <method name="getNumClusterNodes" return="int"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the number of hosts available on the cluster.
 @return the available host count.]]>
      </doc>
    </method>
    <method name="getPreemptionMessage" return="org.apache.hadoop.yarn.api.records.PreemptionMessage"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[<p>Get the description of containers owned by the AM, but requested back by
 the cluster. Note that the RM may have an inconsistent view of the
 resources owned by the AM. These messages are advisory, and the AM may
 elect to ignore them.<p>

 <p>The message is a snapshot of the resources the RM wants back from the AM.
 While demand persists, the RM will repeat its request; applications should
 not interpret each message as a request for <em>additional<em>
 resources on top of previous messages. Resources requested consistently
 over some duration may be forcibly killed by the RM.<p>

 @return A specification of the resources to reclaim from this AM.]]>
      </doc>
    </method>
    <method name="getNMTokens" return="java.util.List"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[<p>Get the list of NMTokens required for communicating with NM. New NMTokens
 issued only if<p>
 <p>1) AM is receiving first container on underlying NodeManager.<br>
 OR<br>
 2) NMToken master key rolled over in ResourceManager and AM is getting new
 container on the same underlying NodeManager.<p>
 <p>AM will receive one NMToken per NM irrespective of the number of containers
 issued on same NM. AM is expected to store these tokens until issued a
 new token for the same NM.<p>]]>
      </doc>
    </method>
    <method name="getIncreasedContainers" return="java.util.List"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the list of newly increased containers by <code>ResourceManager</code>]]>
      </doc>
    </method>
    <method name="getDecreasedContainers" return="java.util.List"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the list of newly decreased containers by <code>NodeManager</code>]]>
      </doc>
    </method>
    <method name="getAMRMToken" return="org.apache.hadoop.yarn.api.records.Token"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The AMRMToken that belong to this attempt

 @return The AMRMToken that belong to this attempt]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>The response sent by the <code>ResourceManager</code> the
 <code>ApplicationMaster</code> during resource negotiation.</p>

 <p>The response, includes:
   <ul>
     <li>Response ID to track duplicate responses.</li>
     <li>
       An AMCommand sent by ResourceManager to let the <code>ApplicationMaster</code>
       take some actions (resync, shutdown etc.).
     <li>A list of newly allocated {@link Container}.</li>
     <li>A list of completed {@link Container}s' statuses.</li>
     <li>
       The available headroom for resources in the cluster for the
       application.
     </li>
     <li>A list of nodes whose status has been updated.</li>
     <li>The number of available nodes in a cluster.</li>
     <li>A description of resources requested back by the cluster</li>
     <li>AMRMToken, if AMRMToken has been rolled over</li>
   </ul>
 </p>

 @see ApplicationMasterProtocol#allocate(AllocateRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.AllocateResponse -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.ApplicationsRequestScope -->
  <class name="ApplicationsRequestScope" extends="java.lang.Enum"
    abstract="false"
    static="false" final="true" visibility="public"
    deprecated="not deprecated">
    <method name="values" return="org.apache.hadoop.yarn.api.protocolrecords.ApplicationsRequestScope[]"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="valueOf" return="org.apache.hadoop.yarn.api.protocolrecords.ApplicationsRequestScope"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="name" type="java.lang.String"/>
    </method>
    <doc>
    <![CDATA[Enumeration that controls the scope of applications fetched]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.ApplicationsRequestScope -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.FinishApplicationMasterRequest -->
  <class name="FinishApplicationMasterRequest" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="FinishApplicationMasterRequest"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.FinishApplicationMasterRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="finalAppStatus" type="org.apache.hadoop.yarn.api.records.FinalApplicationStatus"/>
      <param name="diagnostics" type="java.lang.String"/>
      <param name="url" type="java.lang.String"/>
    </method>
    <method name="getFinalApplicationStatus" return="org.apache.hadoop.yarn.api.records.FinalApplicationStatus"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get <em>final state</em> of the <code>ApplicationMaster</code>.
 @return <em>final state</em> of the <code>ApplicationMaster</code>]]>
      </doc>
    </method>
    <method name="setFinalApplicationStatus"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="finalState" type="org.apache.hadoop.yarn.api.records.FinalApplicationStatus"/>
      <doc>
      <![CDATA[Set the <em>final state</em> of the <code>ApplicationMaster</code>
 @param finalState <em>final state</em> of the <code>ApplicationMaster</code>]]>
      </doc>
    </method>
    <method name="getDiagnostics" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get <em>diagnostic information</em> on application failure.
 @return <em>diagnostic information</em> on application failure]]>
      </doc>
    </method>
    <method name="setDiagnostics"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="diagnostics" type="java.lang.String"/>
      <doc>
      <![CDATA[Set <em>diagnostic information</em> on application failure.
 @param diagnostics <em>diagnostic information</em> on application failure]]>
      </doc>
    </method>
    <method name="getTrackingUrl" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>tracking URL</em> for the <code>ApplicationMaster</code>.
 This url if contains scheme then that will be used by resource manager
 web application proxy otherwise it will default to http.
 @return <em>tracking URL</em>for the <code>ApplicationMaster</code>]]>
      </doc>
    </method>
    <method name="setTrackingUrl"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="url" type="java.lang.String"/>
      <doc>
      <![CDATA[Set the <em>final tracking URL</em>for the <code>ApplicationMaster</code>.
 This is the web-URL to which ResourceManager or web-application proxy will
 redirect client/users once the application is finished and the
 <code>ApplicationMaster</code> is gone.
 <p>
 If the passed url has a scheme then that will be used by the
 ResourceManager and web-application proxy, otherwise the scheme will
 default to http.
 </p>
 <p>
 Empty, null, "N/A" strings are all valid besides a real URL. In case an url
 isn't explicitly passed, it defaults to "N/A" on the ResourceManager.
 <p>

 @param url
          <em>tracking URL</em>for the <code>ApplicationMaster</code>]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>The finalization request sent by the <code>ApplicationMaster</code> to
 inform the <code>ResourceManager</code> about its completion.</p>

 <p>The final request includes details such:
   <ul>
     <li>Final state of the <code>ApplicationMaster</code></li>
     <li>
       Diagnostic information in case of failure of the
       <code>ApplicationMaster</code>
     </li>
     <li>Tracking URL</li>
   </ul>
 </p>

 @see ApplicationMasterProtocol#finishApplicationMaster(FinishApplicationMasterRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.FinishApplicationMasterRequest -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.FinishApplicationMasterResponse -->
  <class name="FinishApplicationMasterResponse" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="FinishApplicationMasterResponse"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getIsUnregistered" return="boolean"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the flag which indicates that the application has successfully
 unregistered with the RM and the application can safely stop.]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>
 The response sent by the <code>ResourceManager</code> to a
 <code>ApplicationMaster</code> on it's completion.
 </p>

 <p>
 The response, includes:
 <ul>
 <li>A flag which indicates that the application has successfully unregistered
 with the RM and the application can safely stop.</li>
 </ul>
 </p>
 Note: The flag indicates whether the application has successfully
 unregistered and is safe to stop. The application may stop after the flag is
 true. If the application stops before the flag is true then the RM may retry
 the application .

 @see ApplicationMasterProtocol#finishApplicationMaster(FinishApplicationMasterRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.FinishApplicationMasterResponse -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.GetApplicationAttemptReportRequest -->
  <class name="GetApplicationAttemptReportRequest" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="GetApplicationAttemptReportRequest"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.GetApplicationAttemptReportRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="applicationAttemptId" type="org.apache.hadoop.yarn.api.records.ApplicationAttemptId"/>
    </method>
    <method name="getApplicationAttemptId" return="org.apache.hadoop.yarn.api.records.ApplicationAttemptId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>ApplicationAttemptId</code> of an application attempt.

 @return <code>ApplicationAttemptId</code> of an application attempt]]>
      </doc>
    </method>
    <method name="setApplicationAttemptId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="applicationAttemptId" type="org.apache.hadoop.yarn.api.records.ApplicationAttemptId"/>
      <doc>
      <![CDATA[Set the <code>ApplicationAttemptId</code> of an application attempt

 @param applicationAttemptId
          <code>ApplicationAttemptId</code> of an application attempt]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>
 The request sent by a client to the <code>ResourceManager</code> to get an
 {@link ApplicationAttemptReport} for an application attempt.
 </p>

 <p>
 The request should include the {@link ApplicationAttemptId} of the
 application attempt.
 </p>

 @see ApplicationAttemptReport
 @see ApplicationHistoryProtocol#getApplicationAttemptReport(GetApplicationAttemptReportRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.GetApplicationAttemptReportRequest -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.GetApplicationAttemptReportResponse -->
  <class name="GetApplicationAttemptReportResponse" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="GetApplicationAttemptReportResponse"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.GetApplicationAttemptReportResponse"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="ApplicationAttemptReport" type="org.apache.hadoop.yarn.api.records.ApplicationAttemptReport"/>
    </method>
    <method name="getApplicationAttemptReport" return="org.apache.hadoop.yarn.api.records.ApplicationAttemptReport"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>ApplicationAttemptReport</code> for the application attempt.

 @return <code>ApplicationAttemptReport</code> for the application attempt]]>
      </doc>
    </method>
    <method name="setApplicationAttemptReport"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="applicationAttemptReport" type="org.apache.hadoop.yarn.api.records.ApplicationAttemptReport"/>
      <doc>
      <![CDATA[Get the <code>ApplicationAttemptReport</code> for the application attempt.

 @param applicationAttemptReport
          <code>ApplicationAttemptReport</code> for the application attempt]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>
 The response sent by the <code>ResourceManager</code> to a client requesting
 an application attempt report.
 </p>

 <p>
 The response includes an {@link ApplicationAttemptReport} which has the
 details about the particular application attempt
 </p>

 @see ApplicationAttemptReport
 @see ApplicationHistoryProtocol#getApplicationAttemptReport(GetApplicationAttemptReportRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.GetApplicationAttemptReportResponse -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.GetApplicationAttemptsRequest -->
  <class name="GetApplicationAttemptsRequest" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="GetApplicationAttemptsRequest"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.GetApplicationAttemptsRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="applicationId" type="org.apache.hadoop.yarn.api.records.ApplicationId"/>
    </method>
    <method name="getApplicationId" return="org.apache.hadoop.yarn.api.records.ApplicationId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>ApplicationId</code> of an application

 @return <code>ApplicationId</code> of an application]]>
      </doc>
    </method>
    <method name="setApplicationId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="applicationId" type="org.apache.hadoop.yarn.api.records.ApplicationId"/>
      <doc>
      <![CDATA[Set the <code>ApplicationId</code> of an application

 @param applicationId
          <code>ApplicationId</code> of an application]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>
 The request from clients to get a list of application attempt reports of an
 application from the <code>ResourceManager</code>.
 </p>

 @see ApplicationHistoryProtocol#getApplicationAttempts(GetApplicationAttemptsRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.GetApplicationAttemptsRequest -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.GetApplicationAttemptsResponse -->
  <class name="GetApplicationAttemptsResponse" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="GetApplicationAttemptsResponse"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.GetApplicationAttemptsResponse"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="applicationAttempts" type="java.util.List"/>
    </method>
    <method name="getApplicationAttemptList" return="java.util.List"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get a list of <code>ApplicationReport</code> of an application.

 @return a list of <code>ApplicationReport</code> of an application]]>
      </doc>
    </method>
    <method name="setApplicationAttemptList"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="applicationAttempts" type="java.util.List"/>
      <doc>
      <![CDATA[Get a list of <code>ApplicationReport</code> of an application.

 @param applicationAttempts
          a list of <code>ApplicationReport</code> of an application]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>
 The response sent by the <code>ResourceManager</code> to a client requesting
 a list of {@link ApplicationAttemptReport} for application attempts.
 </p>

 <p>
 The <code>ApplicationAttemptReport</code> for each application includes the
 details of an application attempt.
 </p>

 @see ApplicationAttemptReport
 @see ApplicationHistoryProtocol#getApplicationAttempts(GetApplicationAttemptsRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.GetApplicationAttemptsResponse -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.GetApplicationReportRequest -->
  <class name="GetApplicationReportRequest" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="GetApplicationReportRequest"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.GetApplicationReportRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="applicationId" type="org.apache.hadoop.yarn.api.records.ApplicationId"/>
    </method>
    <method name="getApplicationId" return="org.apache.hadoop.yarn.api.records.ApplicationId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>ApplicationId</code> of the application.
 @return <code>ApplicationId</code> of the application]]>
      </doc>
    </method>
    <method name="setApplicationId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="applicationId" type="org.apache.hadoop.yarn.api.records.ApplicationId"/>
      <doc>
      <![CDATA[Set the <code>ApplicationId</code> of the application
 @param applicationId <code>ApplicationId</code> of the application]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>The request sent by a client to the <code>ResourceManager</code> to
 get an {@link ApplicationReport} for an application.</p>

 <p>The request should include the {@link ApplicationId} of the
 application.</p>

 @see ApplicationClientProtocol#getApplicationReport(GetApplicationReportRequest)
 @see ApplicationReport]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.GetApplicationReportRequest -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.GetApplicationReportResponse -->
  <class name="GetApplicationReportResponse" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="GetApplicationReportResponse"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getApplicationReport" return="org.apache.hadoop.yarn.api.records.ApplicationReport"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>ApplicationReport</code> for the application.
 @return <code>ApplicationReport</code> for the application]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>The response sent by the <code>ResourceManager</code> to a client
 requesting an application report.</p>

 <p>The response includes an {@link ApplicationReport} which has details such
 as user, queue, name, host on which the <code>ApplicationMaster</code> is
 running, RPC port, tracking URL, diagnostics, start time etc.</p>

 @see ApplicationClientProtocol#getApplicationReport(GetApplicationReportRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.GetApplicationReportResponse -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.GetApplicationsRequest -->
  <class name="GetApplicationsRequest" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="GetApplicationsRequest"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.GetApplicationsRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.GetApplicationsRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="scope" type="org.apache.hadoop.yarn.api.protocolrecords.ApplicationsRequestScope"/>
      <param name="users" type="java.util.Set"/>
      <param name="queues" type="java.util.Set"/>
      <param name="applicationTypes" type="java.util.Set"/>
      <param name="applicationTags" type="java.util.Set"/>
      <param name="applicationStates" type="java.util.EnumSet"/>
      <param name="startRange" type="org.apache.commons.lang.math.LongRange"/>
      <param name="finishRange" type="org.apache.commons.lang.math.LongRange"/>
      <param name="limit" type="java.lang.Long"/>
      <doc>
      <![CDATA[<p>
 The request from clients to get a report of Applications matching the
 giving application types in the cluster from the
 <code>ResourceManager</code>.
 </p>

 @see ApplicationClientProtocol#getApplications(GetApplicationsRequest)

 <p>Setting any of the parameters to null, would just disable that
 filter</p>

 @param scope {@link ApplicationsRequestScope} to filter by
 @param users list of users to filter by
 @param queues list of scheduler queues to filter by
 @param applicationTypes types of applications
 @param applicationTags application tags to filter by
 @param applicationStates application states to filter by
 @param startRange range of application start times to filter by
 @param finishRange range of application finish times to filter by
 @param limit number of applications to limit to
 @return {@link GetApplicationsRequest} to be used with
 {@link ApplicationClientProtocol#getApplications(GetApplicationsRequest)}]]>
      </doc>
    </method>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.GetApplicationsRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="scope" type="org.apache.hadoop.yarn.api.protocolrecords.ApplicationsRequestScope"/>
      <doc>
      <![CDATA[<p>
 The request from clients to get a report of Applications matching the
 giving application types in the cluster from the
 <code>ResourceManager</code>.
 </p>

 @param scope {@link ApplicationsRequestScope} to filter by
 @see ApplicationClientProtocol#getApplications(GetApplicationsRequest)]]>
      </doc>
    </method>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.GetApplicationsRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="applicationTypes" type="java.util.Set"/>
      <doc>
      <![CDATA[<p>
 The request from clients to get a report of Applications matching the
 giving application types in the cluster from the
 <code>ResourceManager</code>.
 </p>


 @see ApplicationClientProtocol#getApplications(GetApplicationsRequest)]]>
      </doc>
    </method>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.GetApplicationsRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="applicationStates" type="java.util.EnumSet"/>
      <doc>
      <![CDATA[<p>
 The request from clients to get a report of Applications matching the
 giving application states in the cluster from the
 <code>ResourceManager</code>.
 </p>


 @see ApplicationClientProtocol#getApplications(GetApplicationsRequest)]]>
      </doc>
    </method>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.GetApplicationsRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="applicationTypes" type="java.util.Set"/>
      <param name="applicationStates" type="java.util.EnumSet"/>
      <doc>
      <![CDATA[<p>
 The request from clients to get a report of Applications matching the
 giving and application types and application types in the cluster from the
 <code>ResourceManager</code>.
 </p>


 @see ApplicationClientProtocol#getApplications(GetApplicationsRequest)]]>
      </doc>
    </method>
    <method name="getApplicationTypes" return="java.util.Set"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the application types to filter applications on

 @return Set of Application Types to filter on]]>
      </doc>
    </method>
    <method name="getApplicationStates" return="java.util.EnumSet"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the application states to filter applications on

 @return Set of Application states to filter on]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>The request from clients to get a report of Applications
 in the cluster from the <code>ResourceManager</code>.</p>


 @see ApplicationClientProtocol#getApplications(GetApplicationsRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.GetApplicationsRequest -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.GetApplicationsResponse -->
  <class name="GetApplicationsResponse" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="GetApplicationsResponse"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getApplicationList" return="java.util.List"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get <code>ApplicationReport</code> for applications.
 @return <code>ApplicationReport</code> for applications]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>The response sent by the <code>ResourceManager</code> to a client
 requesting an {@link ApplicationReport} for applications.</p>

 <p>The <code>ApplicationReport</code> for each application includes details
 such as user, queue, name, host on which the <code>ApplicationMaster</code>
 is running, RPC port, tracking URL, diagnostics, start time etc.</p>

 @see ApplicationReport
 @see ApplicationClientProtocol#getApplications(GetApplicationsRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.GetApplicationsResponse -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.GetClusterMetricsRequest -->
  <class name="GetClusterMetricsRequest" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="GetClusterMetricsRequest"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.GetClusterMetricsRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <doc>
    <![CDATA[<p>The request sent by clients to get cluster metrics from the
 <code>ResourceManager</code>.</p>

 <p>Currently, this is empty.</p>

 @see ApplicationClientProtocol#getClusterMetrics(GetClusterMetricsRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.GetClusterMetricsRequest -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.GetClusterMetricsResponse -->
  <class name="GetClusterMetricsResponse" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="GetClusterMetricsResponse"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getClusterMetrics" return="org.apache.hadoop.yarn.api.records.YarnClusterMetrics"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>YarnClusterMetrics</code> for the cluster.
 @return <code>YarnClusterMetrics</code> for the cluster]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>The response sent by the <code>ResourceManager</code> to a client
 requesting cluster metrics.<p>

 @see YarnClusterMetrics
 @see ApplicationClientProtocol#getClusterMetrics(GetClusterMetricsRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.GetClusterMetricsResponse -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.GetClusterNodeLabelsRequest -->
  <class name="GetClusterNodeLabelsRequest" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="GetClusterNodeLabelsRequest"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.GetClusterNodeLabelsRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.GetClusterNodeLabelsRequest -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.GetClusterNodeLabelsResponse -->
  <class name="GetClusterNodeLabelsResponse" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="GetClusterNodeLabelsResponse"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.GetClusterNodeLabelsResponse"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="labels" type="java.util.Set"/>
    </method>
    <method name="setNodeLabels"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="labels" type="java.util.Set"/>
    </method>
    <method name="getNodeLabels" return="java.util.Set"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.GetClusterNodeLabelsResponse -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.GetClusterNodesRequest -->
  <class name="GetClusterNodesRequest" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="GetClusterNodesRequest"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.GetClusterNodesRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="states" type="java.util.EnumSet"/>
    </method>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.GetClusterNodesRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="getNodeStates" return="java.util.EnumSet"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The state to filter the cluster nodes with.]]>
      </doc>
    </method>
    <method name="setNodeStates"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="states" type="java.util.EnumSet"/>
      <doc>
      <![CDATA[The state to filter the cluster nodes with.]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>The request from clients to get a report of all nodes
 in the cluster from the <code>ResourceManager</code>.</p>

 The request will ask for all nodes in the given {@link NodeState}s.

 @see ApplicationClientProtocol#getClusterNodes(GetClusterNodesRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.GetClusterNodesRequest -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.GetClusterNodesResponse -->
  <class name="GetClusterNodesResponse" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="GetClusterNodesResponse"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getNodeReports" return="java.util.List"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get <code>NodeReport</code> for all nodes in the cluster.
 @return <code>NodeReport</code> for all nodes in the cluster]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>The response sent by the <code>ResourceManager</code> to a client
 requesting a {@link NodeReport} for all nodes.</p>

 <p>The <code>NodeReport</code> contains per-node information such as
 available resources, number of containers, tracking url, rack name, health
 status etc.

 @see NodeReport
 @see ApplicationClientProtocol#getClusterNodes(GetClusterNodesRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.GetClusterNodesResponse -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.GetContainerReportRequest -->
  <class name="GetContainerReportRequest" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="GetContainerReportRequest"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.GetContainerReportRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="containerId" type="org.apache.hadoop.yarn.api.records.ContainerId"/>
    </method>
    <method name="getContainerId" return="org.apache.hadoop.yarn.api.records.ContainerId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>ContainerId</code> of the Container.

 @return <code>ContainerId</code> of the Container]]>
      </doc>
    </method>
    <method name="setContainerId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="containerId" type="org.apache.hadoop.yarn.api.records.ContainerId"/>
      <doc>
      <![CDATA[Set the <code>ContainerId</code> of the container

 @param containerId
          <code>ContainerId</code> of the container]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>
 The request sent by a client to the <code>ResourceManager</code> to get an
 {@link ContainerReport} for a container.
 </p>]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.GetContainerReportRequest -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.GetContainerReportResponse -->
  <class name="GetContainerReportResponse" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="GetContainerReportResponse"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.GetContainerReportResponse"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="containerReport" type="org.apache.hadoop.yarn.api.records.ContainerReport"/>
    </method>
    <method name="getContainerReport" return="org.apache.hadoop.yarn.api.records.ContainerReport"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>ContainerReport</code> for the container.

 @return <code>ContainerReport</code> for the container]]>
      </doc>
    </method>
    <method name="setContainerReport"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="containerReport" type="org.apache.hadoop.yarn.api.records.ContainerReport"/>
    </method>
    <doc>
    <![CDATA[<p>
 The response sent by the <code>ResourceManager</code> to a client requesting
 a container report.
 </p>

 <p>
 The response includes a {@link ContainerReport} which has details of a
 container.
 </p>]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.GetContainerReportResponse -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.GetContainersRequest -->
  <class name="GetContainersRequest" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="GetContainersRequest"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.GetContainersRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="applicationAttemptId" type="org.apache.hadoop.yarn.api.records.ApplicationAttemptId"/>
    </method>
    <method name="getApplicationAttemptId" return="org.apache.hadoop.yarn.api.records.ApplicationAttemptId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>ApplicationAttemptId</code> of an application attempt.

 @return <code>ApplicationAttemptId</code> of an application attempt]]>
      </doc>
    </method>
    <method name="setApplicationAttemptId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="applicationAttemptId" type="org.apache.hadoop.yarn.api.records.ApplicationAttemptId"/>
      <doc>
      <![CDATA[Set the <code>ApplicationAttemptId</code> of an application attempt

 @param applicationAttemptId
          <code>ApplicationAttemptId</code> of an application attempt]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>
 The request from clients to get a list of container reports, which belong to
 an application attempt from the <code>ResourceManager</code>.
 </p>

 @see ApplicationHistoryProtocol#getContainers(GetContainersRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.GetContainersRequest -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.GetContainersResponse -->
  <class name="GetContainersResponse" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="GetContainersResponse"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.GetContainersResponse"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="containers" type="java.util.List"/>
    </method>
    <method name="getContainerList" return="java.util.List"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get a list of <code>ContainerReport</code> for all the containers of an
 application attempt.

 @return a list of <code>ContainerReport</code> for all the containers of an
         application attempt]]>
      </doc>
    </method>
    <method name="setContainerList"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="containers" type="java.util.List"/>
      <doc>
      <![CDATA[Set a list of <code>ContainerReport</code> for all the containers of an
 application attempt.

 @param containers
          a list of <code>ContainerReport</code> for all the containers of
          an application attempt]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>
 The response sent by the <code>ResourceManager</code> to a client requesting
 a list of {@link ContainerReport} for containers.
 </p>

 <p>
 The <code>ContainerReport</code> for each container includes the container
 details.
 </p>

 @see ContainerReport
 @see ApplicationHistoryProtocol#getContainers(GetContainersRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.GetContainersResponse -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.GetContainerStatusesRequest -->
  <class name="GetContainerStatusesRequest" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="GetContainerStatusesRequest"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.GetContainerStatusesRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="containerIds" type="java.util.List"/>
    </method>
    <method name="getContainerIds" return="java.util.List"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the list of <code>ContainerId</code>s of containers for which to obtain
 the <code>ContainerStatus</code>.

 @return the list of <code>ContainerId</code>s of containers for which to
         obtain the <code>ContainerStatus</code>.]]>
      </doc>
    </method>
    <method name="setContainerIds"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="containerIds" type="java.util.List"/>
      <doc>
      <![CDATA[Set a list of <code>ContainerId</code>s of containers for which to obtain
 the <code>ContainerStatus</code>

 @param containerIds
          a list of <code>ContainerId</code>s of containers for which to
          obtain the <code>ContainerStatus</code>]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>
 The request sent by the <code>ApplicationMaster</code> to the
 <code>NodeManager</code> to get {@link ContainerStatus} of requested
 containers.
 </p>

 @see ContainerManagementProtocol#getContainerStatuses(GetContainerStatusesRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.GetContainerStatusesRequest -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.GetContainerStatusesResponse -->
  <class name="GetContainerStatusesResponse" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="GetContainerStatusesResponse"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getContainerStatuses" return="java.util.List"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>ContainerStatus</code>es of the requested containers.

 @return <code>ContainerStatus</code>es of the requested containers.]]>
      </doc>
    </method>
    <method name="getFailedRequests" return="java.util.Map"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the containerId-to-exception map in which the exception indicates error
 from per container for failed requests]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>
 The response sent by the <code>NodeManager</code> to the
 <code>ApplicationMaster</code> when asked to obtain the
 <code>ContainerStatus</code> of requested containers.
 </p>

 @see ContainerManagementProtocol#getContainerStatuses(GetContainerStatusesRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.GetContainerStatusesResponse -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.GetDelegationTokenRequest -->
  <class name="GetDelegationTokenRequest" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="GetDelegationTokenRequest"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.GetDelegationTokenRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="renewer" type="java.lang.String"/>
    </method>
    <method name="getRenewer" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="setRenewer"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="renewer" type="java.lang.String"/>
    </method>
    <doc>
    <![CDATA[The request issued by the client to get a delegation token from
 the {@code ResourceManager}.
 for more information.]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.GetDelegationTokenRequest -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.GetDelegationTokenResponse -->
  <class name="GetDelegationTokenResponse" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="GetDelegationTokenResponse"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getRMDelegationToken" return="org.apache.hadoop.yarn.api.records.Token"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The Delegation tokens have a identifier which maps to
 {@link AbstractDelegationTokenIdentifier}.]]>
      </doc>
    </method>
    <doc>
    <![CDATA[Response to a {@link GetDelegationTokenRequest} request
 from the client. The response contains the token that
 can be used by the containers to talk to  ClientRMService.]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.GetDelegationTokenResponse -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.GetNewApplicationRequest -->
  <class name="GetNewApplicationRequest" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="GetNewApplicationRequest"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.GetNewApplicationRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <doc>
    <![CDATA[<p>The request sent by clients to get a new {@link ApplicationId} for
 submitting an application.</p>

 <p>Currently, this is empty.</p>

 @see ApplicationClientProtocol#getNewApplication(GetNewApplicationRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.GetNewApplicationRequest -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.GetNewApplicationResponse -->
  <class name="GetNewApplicationResponse" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="GetNewApplicationResponse"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getApplicationId" return="org.apache.hadoop.yarn.api.records.ApplicationId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>new</em> <code>ApplicationId</code> allocated by the
 <code>ResourceManager</code>.
 @return <em>new</em> <code>ApplicationId</code> allocated by the
          <code>ResourceManager</code>]]>
      </doc>
    </method>
    <method name="getMaximumResourceCapability" return="org.apache.hadoop.yarn.api.records.Resource"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the maximum capability for any {@link Resource} allocated by the
 <code>ResourceManager</code> in the cluster.
 @return maximum capability of allocated resources in the cluster]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>The response sent by the <code>ResourceManager</code> to the client for
 a request to get a new {@link ApplicationId} for submitting applications.</p>

 <p>Clients can submit an application with the returned
 {@link ApplicationId}.</p>

 @see ApplicationClientProtocol#getNewApplication(GetNewApplicationRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.GetNewApplicationResponse -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.GetNodesToLabelsRequest -->
  <class name="GetNodesToLabelsRequest" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="GetNodesToLabelsRequest"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.GetNodesToLabelsRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.GetNodesToLabelsRequest -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.GetNodesToLabelsResponse -->
  <class name="GetNodesToLabelsResponse" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="GetNodesToLabelsResponse"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.GetNodesToLabelsResponse"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="map" type="java.util.Map"/>
    </method>
    <method name="setNodeToLabels"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="map" type="java.util.Map"/>
    </method>
    <method name="getNodeToLabels" return="java.util.Map"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.GetNodesToLabelsResponse -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.GetQueueInfoRequest -->
  <class name="GetQueueInfoRequest" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="GetQueueInfoRequest"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.GetQueueInfoRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="queueName" type="java.lang.String"/>
      <param name="includeApplications" type="boolean"/>
      <param name="includeChildQueues" type="boolean"/>
      <param name="recursive" type="boolean"/>
    </method>
    <method name="getQueueName" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>queue name</em> for which to get queue information.
 @return <em>queue name</em> for which to get queue information]]>
      </doc>
    </method>
    <method name="setQueueName"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="queueName" type="java.lang.String"/>
      <doc>
      <![CDATA[Set the <em>queue name</em> for which to get queue information
 @param queueName <em>queue name</em> for which to get queue information]]>
      </doc>
    </method>
    <method name="getIncludeApplications" return="boolean"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Is information about <em>active applications<e/m> required?
 @return <code>true</code> if applications' information is to be included,
         else <code>false</code>]]>
      </doc>
    </method>
    <method name="setIncludeApplications"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="includeApplications" type="boolean"/>
      <doc>
      <![CDATA[Should we get fetch information about <em>active applications</em>?
 @param includeApplications fetch information about <em>active
                            applications</em>?]]>
      </doc>
    </method>
    <method name="getIncludeChildQueues" return="boolean"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Is information about <em>child queues</em> required?
 @return <code>true</code> if information about child queues is required,
         else <code>false</code>]]>
      </doc>
    </method>
    <method name="setIncludeChildQueues"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="includeChildQueues" type="boolean"/>
      <doc>
      <![CDATA[Should we fetch information about <em>child queues</em>?
 @param includeChildQueues fetch information about <em>child queues</em>?]]>
      </doc>
    </method>
    <method name="getRecursive" return="boolean"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Is information on the entire <em>child queue hierarchy</em> required?
 @return <code>true</code> if information about entire hierarchy is
         required, <code>false</code> otherwise]]>
      </doc>
    </method>
    <method name="setRecursive"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="recursive" type="boolean"/>
      <doc>
      <![CDATA[Should we fetch information on the entire <em>child queue hierarchy</em>?
 @param recursive fetch information on the entire <em>child queue
                  hierarchy</em>?]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>The request sent by clients to get <em>queue information</em>
 from the <code>ResourceManager</code>.</p>

 @see ApplicationClientProtocol#getQueueInfo(GetQueueInfoRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.GetQueueInfoRequest -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.GetQueueInfoResponse -->
  <class name="GetQueueInfoResponse" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="GetQueueInfoResponse"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getQueueInfo" return="org.apache.hadoop.yarn.api.records.QueueInfo"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>QueueInfo</code> for the specified queue.
 @return <code>QueueInfo</code> for the specified queue]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>The response sent by the <code>ResourceManager</code> to a client
 requesting information about queues in the system.</p>

 <p>The response includes a {@link QueueInfo} which has details such as
 queue name, used/total capacities, running applications, child queues etc
 .</p>

 @see QueueInfo
 @see ApplicationClientProtocol#getQueueInfo(GetQueueInfoRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.GetQueueInfoResponse -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.GetQueueUserAclsInfoRequest -->
  <class name="GetQueueUserAclsInfoRequest" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="GetQueueUserAclsInfoRequest"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.GetQueueUserAclsInfoRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <doc>
    <![CDATA[<p>The request sent by clients to the <code>ResourceManager</code> to
 get queue acls for the <em>current user</em>.</p>

 <p>Currently, this is empty.</p>

 @see ApplicationClientProtocol#getQueueUserAcls(GetQueueUserAclsInfoRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.GetQueueUserAclsInfoRequest -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.GetQueueUserAclsInfoResponse -->
  <class name="GetQueueUserAclsInfoResponse" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="GetQueueUserAclsInfoResponse"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getUserAclsInfoList" return="java.util.List"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>QueueUserACLInfo</code> per queue for the user.
 @return <code>QueueUserACLInfo</code> per queue for the user]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>The response sent by the <code>ResourceManager</code> to clients
 seeking queue acls for the user.</p>

 <p>The response contains a list of {@link QueueUserACLInfo} which
 provides information about {@link QueueACL} per queue.</p>

 @see QueueACL
 @see QueueUserACLInfo
 @see ApplicationClientProtocol#getQueueUserAcls(GetQueueUserAclsInfoRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.GetQueueUserAclsInfoResponse -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.KillApplicationRequest -->
  <class name="KillApplicationRequest" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="KillApplicationRequest"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.KillApplicationRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="applicationId" type="org.apache.hadoop.yarn.api.records.ApplicationId"/>
    </method>
    <method name="getApplicationId" return="org.apache.hadoop.yarn.api.records.ApplicationId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>ApplicationId</code> of the application to be aborted.
 @return <code>ApplicationId</code> of the application to be aborted]]>
      </doc>
    </method>
    <method name="setApplicationId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="applicationId" type="org.apache.hadoop.yarn.api.records.ApplicationId"/>
    </method>
    <doc>
    <![CDATA[<p>The request sent by the client to the <code>ResourceManager</code>
 to abort a submitted application.</p>

 <p>The request includes the {@link ApplicationId} of the application to be
 aborted.</p>

 @see ApplicationClientProtocol#forceKillApplication(KillApplicationRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.KillApplicationRequest -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.KillApplicationResponse -->
  <class name="KillApplicationResponse" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="KillApplicationResponse"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getIsKillCompleted" return="boolean"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the flag which indicates that the process of killing application is completed or not.]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>
 The response sent by the <code>ResourceManager</code> to the client aborting
 a submitted application.
 </p>
 <p>
 The response, includes:
 <ul>
 <li>A flag which indicates that the process of killing the application is
 completed or not.</li>
 </ul>
 Note: user is recommended to wait until this flag becomes true, otherwise if
 the <code>ResourceManager</code> crashes before the process of killing the
 application is completed, the <code>ResourceManager</code> may retry this
 application on recovery.
 </p>

 @see ApplicationClientProtocol#forceKillApplication(KillApplicationRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.KillApplicationResponse -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.MoveApplicationAcrossQueuesRequest -->
  <class name="MoveApplicationAcrossQueuesRequest" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="MoveApplicationAcrossQueuesRequest"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.MoveApplicationAcrossQueuesRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="appId" type="org.apache.hadoop.yarn.api.records.ApplicationId"/>
      <param name="queue" type="java.lang.String"/>
    </method>
    <method name="getApplicationId" return="org.apache.hadoop.yarn.api.records.ApplicationId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>ApplicationId</code> of the application to be moved.
 @return <code>ApplicationId</code> of the application to be moved]]>
      </doc>
    </method>
    <method name="setApplicationId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="appId" type="org.apache.hadoop.yarn.api.records.ApplicationId"/>
      <doc>
      <![CDATA[Set the <code>ApplicationId</code> of the application to be moved.
 @param appId <code>ApplicationId</code> of the application to be moved]]>
      </doc>
    </method>
    <method name="getTargetQueue" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the queue to place the application in.
 @return the name of the queue to place the application in]]>
      </doc>
    </method>
    <method name="setTargetQueue"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="queue" type="java.lang.String"/>
      <doc>
      <![CDATA[Get the queue to place the application in.
 @param queue the name of the queue to place the application in]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>The request sent by the client to the <code>ResourceManager</code>
 to move a submitted application to a different queue.</p>

 <p>The request includes the {@link ApplicationId} of the application to be
 moved and the queue to place it in.</p>

 @see ApplicationClientProtocol#moveApplicationAcrossQueues(MoveApplicationAcrossQueuesRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.MoveApplicationAcrossQueuesRequest -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.MoveApplicationAcrossQueuesResponse -->
  <class name="MoveApplicationAcrossQueuesResponse" extends="java.lang.Object"
    abstract="false"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="MoveApplicationAcrossQueuesResponse"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <doc>
    <![CDATA[<p>
 The response sent by the <code>ResourceManager</code> to the client moving
 a submitted application to a different queue.
 </p>
 <p>
 A response without exception means that the move has completed successfully.
 </p>

 @see ApplicationClientProtocol#moveApplicationAcrossQueues(MoveApplicationAcrossQueuesRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.MoveApplicationAcrossQueuesResponse -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.RegisterApplicationMasterRequest -->
  <class name="RegisterApplicationMasterRequest" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="RegisterApplicationMasterRequest"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.RegisterApplicationMasterRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="host" type="java.lang.String"/>
      <param name="port" type="int"/>
      <param name="trackingUrl" type="java.lang.String"/>
      <doc>
      <![CDATA[Create a new instance of <code>RegisterApplicationMasterRequest</code>.
 If <em>port, trackingUrl</em> is not used, use the following default value:
 <ul>
  <li>port: -1</li>
  <li>trackingUrl: null</li>
 </ul>
 The port is allowed to be any integer larger than or equal to -1.
 @return the new instance of <code>RegisterApplicationMasterRequest</code>]]>
      </doc>
    </method>
    <method name="getHost" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>host</em> on which the <code>ApplicationMaster</code> is
 running.
 @return <em>host</em> on which the <code>ApplicationMaster</code> is running]]>
      </doc>
    </method>
    <method name="setHost"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="host" type="java.lang.String"/>
      <doc>
      <![CDATA[Set the <em>host</em> on which the <code>ApplicationMaster</code> is
 running.
 @param host <em>host</em> on which the <code>ApplicationMaster</code>
             is running]]>
      </doc>
    </method>
    <method name="getRpcPort" return="int"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>RPC port</em> on which the <code>ApplicationMaster</code>
 is responding.
 @return the <em>RPC port<em> on which the <code>ApplicationMaster</code> is
         responding]]>
      </doc>
    </method>
    <method name="setRpcPort"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="port" type="int"/>
      <doc>
      <![CDATA[Set the <em>RPC port<em> on which the <code>ApplicationMaster</code> is
 responding.
 @param port <em>RPC port<em> on which the <code>ApplicationMaster</code> is
             responding]]>
      </doc>
    </method>
    <method name="getTrackingUrl" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>tracking URL</em> for the <code>ApplicationMaster</code>.
 This url if contains scheme then that will be used by resource manager
 web application proxy otherwise it will default to http.
 @return <em>tracking URL</em> for the <code>ApplicationMaster</code>]]>
      </doc>
    </method>
    <method name="setTrackingUrl"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="trackingUrl" type="java.lang.String"/>
      <doc>
      <![CDATA[Set the <em>tracking URL</em>for the <code>ApplicationMaster</code> while
 it is running. This is the web-URL to which ResourceManager or
 web-application proxy will redirect client/users while the application and
 the <code>ApplicationMaster</code> are still running.
 <p>
 If the passed url has a scheme then that will be used by the
 ResourceManager and web-application proxy, otherwise the scheme will
 default to http.
 </p>
 <p>
 Empty, null, "N/A" strings are all valid besides a real URL. In case an url
 isn't explicitly passed, it defaults to "N/A" on the ResourceManager.
 <p>

 @param trackingUrl
          <em>tracking URL</em>for the <code>ApplicationMaster</code>]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>The request sent by the <code>ApplicationMaster</code> to
 <code>ResourceManager</code> on registration.</p>

 <p>The registration includes details such as:
   <ul>
     <li>Hostname on which the AM is running.</li>
     <li>RPC Port</li>
     <li>Tracking URL</li>
   </ul>
 </p>

 @see ApplicationMasterProtocol#registerApplicationMaster(RegisterApplicationMasterRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.RegisterApplicationMasterRequest -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.RegisterApplicationMasterResponse -->
  <class name="RegisterApplicationMasterResponse" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="RegisterApplicationMasterResponse"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getMaximumResourceCapability" return="org.apache.hadoop.yarn.api.records.Resource"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the maximum capability for any {@link Resource} allocated by the
 <code>ResourceManager</code> in the cluster.
 @return maximum capability of allocated resources in the cluster]]>
      </doc>
    </method>
    <method name="getApplicationACLs" return="java.util.Map"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>ApplicationACL</code>s for the application.
 @return all the <code>ApplicationACL</code>s]]>
      </doc>
    </method>
    <method name="getClientToAMTokenMasterKey" return="java.nio.ByteBuffer"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[<p>Get ClientToAMToken master key.</p>
 <p>The ClientToAMToken master key is sent to <code>ApplicationMaster</code>
 by <code>ResourceManager</code> via {@link RegisterApplicationMasterResponse}
 , used to verify corresponding ClientToAMToken.</p>]]>
      </doc>
    </method>
    <method name="setClientToAMTokenMasterKey"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="key" type="java.nio.ByteBuffer"/>
      <doc>
      <![CDATA[Set ClientToAMToken master key.]]>
      </doc>
    </method>
    <method name="getQueue" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[<p>Get the queue that the application was placed in.<p>]]>
      </doc>
    </method>
    <method name="setQueue"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="queue" type="java.lang.String"/>
      <doc>
      <![CDATA[<p>Set the queue that the application was placed in.<p>]]>
      </doc>
    </method>
    <method name="getContainersFromPreviousAttempts" return="java.util.List"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[<p>
 Get the list of running containers as viewed by
 <code>ResourceManager</code> from previous application attempts.
 </p>

 @return the list of running containers as viewed by
         <code>ResourceManager</code> from previous application attempts
 @see RegisterApplicationMasterResponse#getNMTokensFromPreviousAttempts()]]>
      </doc>
    </method>
    <method name="getNMTokensFromPreviousAttempts" return="java.util.List"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the list of NMTokens for communicating with the NMs where the
 containers of previous application attempts are running.

 @return the list of NMTokens for communicating with the NMs where the
         containers of previous application attempts are running.

 @see RegisterApplicationMasterResponse#getContainersFromPreviousAttempts()]]>
      </doc>
    </method>
    <method name="getSchedulerResourceTypes" return="java.util.EnumSet"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get a set of the resource types considered by the scheduler.

 @return a Map of RM settings]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>The response sent by the <code>ResourceManager</code> to a new
 <code>ApplicationMaster</code> on registration.</p>

 <p>The response contains critical details such as:
 <ul>
   <li>Maximum capability for allocated resources in the cluster.</li>
   <li><code>ApplicationACL</code>s for the application.</li>
   <li>ClientToAMToken master key.</li>
 </ul>
 </p>

 @see ApplicationMasterProtocol#registerApplicationMaster(RegisterApplicationMasterRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.RegisterApplicationMasterResponse -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.ReservationDeleteRequest -->
  <class name="ReservationDeleteRequest" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="ReservationDeleteRequest"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.ReservationDeleteRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="reservationId" type="org.apache.hadoop.yarn.api.records.ReservationId"/>
    </method>
    <method name="getReservationId" return="org.apache.hadoop.yarn.api.records.ReservationId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the {@link ReservationId}, that corresponds to a valid resource
 allocation in the scheduler (between start and end time of this
 reservation)

 @return the {@link ReservationId} representing the unique id of the
         corresponding reserved resource allocation in the scheduler]]>
      </doc>
    </method>
    <method name="setReservationId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="reservationId" type="org.apache.hadoop.yarn.api.records.ReservationId"/>
      <doc>
      <![CDATA[Set the {@link ReservationId}, that correspond to a valid resource
 allocation in the scheduler (between start and end time of this
 reservation)

 @param reservationId the {@link ReservationId} representing the the unique
          id of the corresponding reserved resource allocation in the
          scheduler]]>
      </doc>
    </method>
    <doc>
    <![CDATA[{@link ReservationDeleteRequest} captures the set of requirements the user
 has to delete an existing reservation.

 @see ReservationDefinition]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.ReservationDeleteRequest -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.ReservationDeleteResponse -->
  <class name="ReservationDeleteResponse" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="ReservationDeleteResponse"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <doc>
    <![CDATA[{@link ReservationDeleteResponse} contains the answer of the admission
 control system in the {@code ResourceManager} to a reservation delete
 operation. Currently response is empty if the operation was successful, if
 not an exception reporting reason for a failure.

 @see ReservationDefinition]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.ReservationDeleteResponse -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.ReservationSubmissionRequest -->
  <class name="ReservationSubmissionRequest" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="ReservationSubmissionRequest"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.ReservationSubmissionRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="reservationDefinition" type="org.apache.hadoop.yarn.api.records.ReservationDefinition"/>
      <param name="queueName" type="java.lang.String"/>
    </method>
    <method name="getReservationDefinition" return="org.apache.hadoop.yarn.api.records.ReservationDefinition"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the {@link ReservationDefinition} representing the user constraints for
 this reservation

 @return the reservation definition representing user constraints]]>
      </doc>
    </method>
    <method name="setReservationDefinition"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="reservationDefinition" type="org.apache.hadoop.yarn.api.records.ReservationDefinition"/>
      <doc>
      <![CDATA[Set the {@link ReservationDefinition} representing the user constraints for
 this reservation

 @param reservationDefinition the reservation request representing the
          reservation]]>
      </doc>
    </method>
    <method name="getQueue" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the name of the {@code Plan} that corresponds to the name of the
 {@link QueueInfo} in the scheduler to which the reservation will be
 submitted to.

 @return the name of the {@code Plan} that corresponds to the name of the
         {@link QueueInfo} in the scheduler to which the reservation will be
         submitted to]]>
      </doc>
    </method>
    <method name="setQueue"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="queueName" type="java.lang.String"/>
      <doc>
      <![CDATA[Set the name of the {@code Plan} that corresponds to the name of the
 {@link QueueInfo} in the scheduler to which the reservation will be
 submitted to

 @param queueName the name of the parent {@code Plan} that corresponds to
          the name of the {@link QueueInfo} in the scheduler to which the
          reservation will be submitted to]]>
      </doc>
    </method>
    <doc>
    <![CDATA[{@link ReservationSubmissionRequest} captures the set of requirements the
 user has to create a reservation.

 @see ReservationDefinition]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.ReservationSubmissionRequest -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.ReservationSubmissionResponse -->
  <class name="ReservationSubmissionResponse" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="ReservationSubmissionResponse"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getReservationId" return="org.apache.hadoop.yarn.api.records.ReservationId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the {@link ReservationId}, that corresponds to a valid resource
 allocation in the scheduler (between start and end time of this
 reservation)

 @return the {@link ReservationId} representing the unique id of the
         corresponding reserved resource allocation in the scheduler]]>
      </doc>
    </method>
    <doc>
    <![CDATA[{@link ReservationSubmissionResponse} contains the answer of the admission
 control system in the {@code ResourceManager} to a reservation create
 operation. Response contains a {@link ReservationId} if the operation was
 successful, if not an exception reporting reason for a failure.

 @see ReservationDefinition]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.ReservationSubmissionResponse -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.ReservationUpdateRequest -->
  <class name="ReservationUpdateRequest" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="ReservationUpdateRequest"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.ReservationUpdateRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="reservationDefinition" type="org.apache.hadoop.yarn.api.records.ReservationDefinition"/>
      <param name="reservationId" type="org.apache.hadoop.yarn.api.records.ReservationId"/>
    </method>
    <method name="getReservationDefinition" return="org.apache.hadoop.yarn.api.records.ReservationDefinition"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the {@link ReservationDefinition} representing the updated user
 constraints for this reservation

 @return the reservation definition representing user constraints]]>
      </doc>
    </method>
    <method name="setReservationDefinition"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="reservationDefinition" type="org.apache.hadoop.yarn.api.records.ReservationDefinition"/>
      <doc>
      <![CDATA[Set the {@link ReservationDefinition} representing the updated user
 constraints for this reservation

 @param reservationDefinition the reservation request representing the
          reservation]]>
      </doc>
    </method>
    <method name="getReservationId" return="org.apache.hadoop.yarn.api.records.ReservationId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the {@link ReservationId}, that corresponds to a valid resource
 allocation in the scheduler (between start and end time of this
 reservation)

 @return the {@link ReservationId} representing the unique id of the
         corresponding reserved resource allocation in the scheduler]]>
      </doc>
    </method>
    <method name="setReservationId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="reservationId" type="org.apache.hadoop.yarn.api.records.ReservationId"/>
      <doc>
      <![CDATA[Set the {@link ReservationId}, that correspond to a valid resource
 allocation in the scheduler (between start and end time of this
 reservation)

 @param reservationId the {@link ReservationId} representing the the unique
          id of the corresponding reserved resource allocation in the
          scheduler]]>
      </doc>
    </method>
    <doc>
    <![CDATA[{@link ReservationUpdateRequest} captures the set of requirements the user
 has to update an existing reservation.

 @see ReservationDefinition]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.ReservationUpdateRequest -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.ReservationUpdateResponse -->
  <class name="ReservationUpdateResponse" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="ReservationUpdateResponse"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <doc>
    <![CDATA[{@link ReservationUpdateResponse} contains the answer of the admission
 control system in the {@code ResourceManager} to a reservation update
 operation. Currently response is empty if the operation was successful, if
 not an exception reporting reason for a failure.

 @see ReservationDefinition]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.ReservationUpdateResponse -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.StartContainerRequest -->
  <class name="StartContainerRequest" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="StartContainerRequest"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.StartContainerRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="context" type="org.apache.hadoop.yarn.api.records.ContainerLaunchContext"/>
      <param name="container" type="org.apache.hadoop.yarn.api.records.Token"/>
    </method>
    <method name="getContainerLaunchContext" return="org.apache.hadoop.yarn.api.records.ContainerLaunchContext"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>ContainerLaunchContext</code> for the container to be started
 by the <code>NodeManager</code>.

 @return <code>ContainerLaunchContext</code> for the container to be started
         by the <code>NodeManager</code>]]>
      </doc>
    </method>
    <method name="setContainerLaunchContext"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="context" type="org.apache.hadoop.yarn.api.records.ContainerLaunchContext"/>
      <doc>
      <![CDATA[Set the <code>ContainerLaunchContext</code> for the container to be started
 by the <code>NodeManager</code>
 @param context <code>ContainerLaunchContext</code> for the container to be
                started by the <code>NodeManager</code>]]>
      </doc>
    </method>
    <method name="getContainerToken" return="org.apache.hadoop.yarn.api.records.Token"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[<p>Get the container token to be used for authorization during starting
 container.</p>
 <p>Note: {@link NMToken} will be used for authenticating communication with </code>
 NodeManager</code>.</p>
 @return the container token to be used for authorization during starting
 container.
 @see NMToken
 @see ContainerManagementProtocol#startContainers(StartContainersRequest)]]>
      </doc>
    </method>
    <method name="setContainerToken"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="container" type="org.apache.hadoop.yarn.api.records.Token"/>
    </method>
    <doc>
    <![CDATA[<p>The request sent by the <code>ApplicationMaster</code> to the
 <code>NodeManager</code> to <em>start</em> a container.</p>

 <p>The <code>ApplicationMaster</code> has to provide details such as
 allocated resource capability, security tokens (if enabled), command
 to be executed to start the container, environment for the process,
 necessary binaries/jar/shared-objects etc. via the
 {@link ContainerLaunchContext}.</p>

 @see ContainerManagementProtocol#startContainers(StartContainersRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.StartContainerRequest -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.StartContainersRequest -->
  <class name="StartContainersRequest" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="StartContainersRequest"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.StartContainersRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="requests" type="java.util.List"/>
    </method>
    <method name="getStartContainerRequests" return="java.util.List"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get a list of {@link StartContainerRequest} to start containers.
 @return a list of {@link StartContainerRequest} to start containers.]]>
      </doc>
    </method>
    <method name="setStartContainerRequests"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="request" type="java.util.List"/>
      <doc>
      <![CDATA[Set a list of {@link StartContainerRequest} to start containers.
 @param request a list of {@link StartContainerRequest} to start containers]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>
 The request which contains a list of {@link StartContainerRequest} sent by
 the <code>ApplicationMaster</code> to the <code>NodeManager</code> to
 <em>start</em> containers.
 </p>

 <p>
 In each {@link StartContainerRequest}, the <code>ApplicationMaster</code> has
 to provide details such as allocated resource capability, security tokens (if
 enabled), command to be executed to start the container, environment for the
 process, necessary binaries/jar/shared-objects etc. via the
 {@link ContainerLaunchContext}.
 </p>

 @see ContainerManagementProtocol#startContainers(StartContainersRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.StartContainersRequest -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.StartContainersResponse -->
  <class name="StartContainersResponse" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="StartContainersResponse"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getSuccessfullyStartedContainers" return="java.util.List"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the list of <code>ContainerId</code> s of the containers that are
 started successfully.

 @return the list of <code>ContainerId</code> s of the containers that are
         started successfully.
 @see ContainerManagementProtocol#startContainers(StartContainersRequest)]]>
      </doc>
    </method>
    <method name="getFailedRequests" return="java.util.Map"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the containerId-to-exception map in which the exception indicates error
 from per container for failed requests]]>
      </doc>
    </method>
    <method name="getAllServicesMetaData" return="java.util.Map"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[<p>
 Get the meta-data from all auxiliary services running on the
 <code>NodeManager</code>.
 </p>
 <p>
 The meta-data is returned as a Map between the auxiliary service names and
 their corresponding per service meta-data as an opaque blob
 <code>ByteBuffer</code>
 </p>

 <p>
 To be able to interpret the per-service meta-data, you should consult the
 documentation for the Auxiliary-service configured on the NodeManager
 </p>

 @return a Map between the names of auxiliary services and their
         corresponding meta-data]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>
 The response sent by the <code>NodeManager</code> to the
 <code>ApplicationMaster</code> when asked to <em>start</em> an allocated
 container.
 </p>

 @see ContainerManagementProtocol#startContainers(StartContainersRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.StartContainersResponse -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.StopContainersRequest -->
  <class name="StopContainersRequest" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="StopContainersRequest"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.StopContainersRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="containerIds" type="java.util.List"/>
    </method>
    <method name="getContainerIds" return="java.util.List"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>ContainerId</code>s of the containers to be stopped.
 @return <code>ContainerId</code>s of containers to be stopped]]>
      </doc>
    </method>
    <method name="setContainerIds"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="containerIds" type="java.util.List"/>
      <doc>
      <![CDATA[Set the <code>ContainerId</code>s of the containers to be stopped.
 @param containerIds <code>ContainerId</code>s of the containers to be stopped]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>The request sent by the <code>ApplicationMaster</code> to the
 <code>NodeManager</code> to <em>stop</em> containers.</p>

 @see ContainerManagementProtocol#stopContainers(StopContainersRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.StopContainersRequest -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.StopContainersResponse -->
  <class name="StopContainersResponse" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="StopContainersResponse"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getSuccessfullyStoppedContainers" return="java.util.List"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the list of containerIds of successfully stopped containers.

 @return the list of containerIds of successfully stopped containers.]]>
      </doc>
    </method>
    <method name="getFailedRequests" return="java.util.Map"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the containerId-to-exception map in which the exception indicates error
 from per container for failed requests]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>
 The response sent by the <code>NodeManager</code> to the
 <code>ApplicationMaster</code> when asked to <em>stop</em> allocated
 containers.
 </p>

 @see ContainerManagementProtocol#stopContainers(StopContainersRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.StopContainersResponse -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.SubmitApplicationRequest -->
  <class name="SubmitApplicationRequest" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="SubmitApplicationRequest"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.protocolrecords.SubmitApplicationRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="context" type="org.apache.hadoop.yarn.api.records.ApplicationSubmissionContext"/>
    </method>
    <method name="getApplicationSubmissionContext" return="org.apache.hadoop.yarn.api.records.ApplicationSubmissionContext"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>ApplicationSubmissionContext</code> for the application.
 @return <code>ApplicationSubmissionContext</code> for the application]]>
      </doc>
    </method>
    <method name="setApplicationSubmissionContext"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="context" type="org.apache.hadoop.yarn.api.records.ApplicationSubmissionContext"/>
      <doc>
      <![CDATA[Set the <code>ApplicationSubmissionContext</code> for the application.
 @param context <code>ApplicationSubmissionContext</code> for the
                application]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>The request sent by a client to <em>submit an application</em> to the
 <code>ResourceManager</code>.</p>

 <p>The request, via {@link ApplicationSubmissionContext}, contains
 details such as queue, {@link Resource} required to run the
 <code>ApplicationMaster</code>, the equivalent of
 {@link ContainerLaunchContext} for launching the
 <code>ApplicationMaster</code> etc.

 @see ApplicationClientProtocol#submitApplication(SubmitApplicationRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.SubmitApplicationRequest -->
  <!-- start class org.apache.hadoop.yarn.api.protocolrecords.SubmitApplicationResponse -->
  <class name="SubmitApplicationResponse" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="SubmitApplicationResponse"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <doc>
    <![CDATA[<p>The response sent by the <code>ResourceManager</code> to a client on
 application submission.</p>

 <p>Currently, this is empty.</p>

 @see ApplicationClientProtocol#submitApplication(SubmitApplicationRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.protocolrecords.SubmitApplicationResponse -->
</package>
<package name="org.apache.hadoop.yarn.api.records">
  <!-- start class org.apache.hadoop.yarn.api.records.AMCommand -->
  <class name="AMCommand" extends="java.lang.Enum"
    abstract="false"
    static="false" final="true" visibility="public"
    deprecated="not deprecated">
    <method name="values" return="org.apache.hadoop.yarn.api.records.AMCommand[]"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="valueOf" return="org.apache.hadoop.yarn.api.records.AMCommand"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="name" type="java.lang.String"/>
    </method>
    <doc>
    <![CDATA[Command sent by the Resource Manager to the Application Master in the
 AllocateResponse
 @see AllocateResponse]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.AMCommand -->
  <!-- start class org.apache.hadoop.yarn.api.records.ApplicationAccessType -->
  <class name="ApplicationAccessType" extends="java.lang.Enum"
    abstract="false"
    static="false" final="true" visibility="public"
    deprecated="not deprecated">
    <method name="values" return="org.apache.hadoop.yarn.api.records.ApplicationAccessType[]"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="valueOf" return="org.apache.hadoop.yarn.api.records.ApplicationAccessType"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="name" type="java.lang.String"/>
    </method>
    <doc>
    <![CDATA[Application access types.]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.ApplicationAccessType -->
  <!-- start class org.apache.hadoop.yarn.api.records.ApplicationAttemptId -->
  <class name="ApplicationAttemptId" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <implements name="java.lang.Comparable"/>
    <constructor name="ApplicationAttemptId"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getApplicationId" return="org.apache.hadoop.yarn.api.records.ApplicationId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>ApplicationId</code> of the <code>ApplicationAttempId</code>.
 @return <code>ApplicationId</code> of the <code>ApplicationAttempId</code>]]>
      </doc>
    </method>
    <method name="getAttemptId" return="int"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>attempt id</code> of the <code>Application</code>.
 @return <code>attempt id</code> of the <code>Application</code>]]>
      </doc>
    </method>
    <method name="hashCode" return="int"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="equals" return="boolean"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="obj" type="java.lang.Object"/>
    </method>
    <method name="compareTo" return="int"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="other" type="org.apache.hadoop.yarn.api.records.ApplicationAttemptId"/>
    </method>
    <method name="toString" return="java.lang.String"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="build"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="protected"
      deprecated="not deprecated">
    </method>
    <field name="appAttemptIdStrPrefix" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <doc>
    <![CDATA[<p><code>ApplicationAttemptId</code> denotes the particular <em>attempt</em>
 of an <code>ApplicationMaster</code> for a given {@link ApplicationId}.</p>

 <p>Multiple attempts might be needed to run an application to completion due
 to temporal failures of the <code>ApplicationMaster</code> such as hardware
 failures, connectivity issues etc. on the node on which it was scheduled.</p>]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.ApplicationAttemptId -->
  <!-- start class org.apache.hadoop.yarn.api.records.ApplicationAttemptReport -->
  <class name="ApplicationAttemptReport" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="ApplicationAttemptReport"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getYarnApplicationAttemptState" return="org.apache.hadoop.yarn.api.records.YarnApplicationAttemptState"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>YarnApplicationAttemptState</em> of the application attempt.

 @return <em>YarnApplicationAttemptState</em> of the application attempt]]>
      </doc>
    </method>
    <method name="getRpcPort" return="int"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>RPC port</em> of this attempt <code>ApplicationMaster</code>.

 @return <em>RPC port</em> of this attempt <code>ApplicationMaster</code>]]>
      </doc>
    </method>
    <method name="getHost" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>host</em> on which this attempt of
 <code>ApplicationMaster</code> is running.

 @return <em>host</em> on which this attempt of
         <code>ApplicationMaster</code> is running]]>
      </doc>
    </method>
    <method name="getDiagnostics" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>diagnositic information</em> of the application attempt in case
 of errors.

 @return <em>diagnositic information</em> of the application attempt in case
         of errors]]>
      </doc>
    </method>
    <method name="getTrackingUrl" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>tracking url</em> for the application attempt.

 @return <em>tracking url</em> for the application attempt]]>
      </doc>
    </method>
    <method name="getOriginalTrackingUrl" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>original tracking url</em> for the application attempt.

 @return <em>original tracking url</em> for the application attempt]]>
      </doc>
    </method>
    <method name="getApplicationAttemptId" return="org.apache.hadoop.yarn.api.records.ApplicationAttemptId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>ApplicationAttemptId</code> of this attempt of the
 application

 @return <code>ApplicationAttemptId</code> of the attempt]]>
      </doc>
    </method>
    <method name="getAMContainerId" return="org.apache.hadoop.yarn.api.records.ContainerId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>ContainerId</code> of AMContainer for this attempt

 @return <code>ContainerId</code> of the attempt]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>
 <code>ApplicationAttemptReport</code> is a report of an application attempt.
 </p>

 <p>
 It includes details such as:
 <ul>
 <li>{@link ApplicationAttemptId} of the application.</li>
 <li>Host on which the <code>ApplicationMaster</code> of this attempt is
 running.</li>
 <li>RPC port of the <code>ApplicationMaster</code> of this attempt.</li>
 <li>Tracking URL.</li>
 <li>Diagnostic information in case of errors.</li>
 <li>{@link YarnApplicationAttemptState} of the application attempt.</li>
 <li>{@link ContainerId} of the master Container.</li>
 </ul>
 </p>]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.ApplicationAttemptReport -->
  <!-- start class org.apache.hadoop.yarn.api.records.ApplicationId -->
  <class name="ApplicationId" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <implements name="java.lang.Comparable"/>
    <constructor name="ApplicationId"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getId" return="int"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the short integer identifier of the <code>ApplicationId</code>
 which is unique for all applications started by a particular instance
 of the <code>ResourceManager</code>.
 @return short integer identifier of the <code>ApplicationId</code>]]>
      </doc>
    </method>
    <method name="getClusterTimestamp" return="long"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>start time</em> of the <code>ResourceManager</code> which is
 used to generate globally unique <code>ApplicationId</code>.
 @return <em>start time</em> of the <code>ResourceManager</code>]]>
      </doc>
    </method>
    <method name="build"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="protected"
      deprecated="not deprecated">
    </method>
    <method name="compareTo" return="int"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="other" type="org.apache.hadoop.yarn.api.records.ApplicationId"/>
    </method>
    <method name="toString" return="java.lang.String"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="hashCode" return="int"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="equals" return="boolean"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="obj" type="java.lang.Object"/>
    </method>
    <field name="appIdStrPrefix" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <doc>
    <![CDATA[<p><code>ApplicationId</code> represents the <em>globally unique</em>
 identifier for an application.</p>

 <p>The globally unique nature of the identifier is achieved by using the
 <em>cluster timestamp</em> i.e. start-time of the
 <code>ResourceManager</code> along with a monotonically increasing counter
 for the application.</p>]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.ApplicationId -->
  <!-- start class org.apache.hadoop.yarn.api.records.ApplicationReport -->
  <class name="ApplicationReport" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="ApplicationReport"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getApplicationId" return="org.apache.hadoop.yarn.api.records.ApplicationId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>ApplicationId</code> of the application.
 @return <code>ApplicationId</code> of the application]]>
      </doc>
    </method>
    <method name="getCurrentApplicationAttemptId" return="org.apache.hadoop.yarn.api.records.ApplicationAttemptId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>ApplicationAttemptId</code> of the current
 attempt of the application
 @return <code>ApplicationAttemptId</code> of the attempt]]>
      </doc>
    </method>
    <method name="getUser" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>user</em> who submitted the application.
 @return <em>user</em> who submitted the application]]>
      </doc>
    </method>
    <method name="getQueue" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>queue</em> to which the application was submitted.
 @return <em>queue</em> to which the application was submitted]]>
      </doc>
    </method>
    <method name="getName" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the user-defined <em>name</em> of the application.
 @return <em>name</em> of the application]]>
      </doc>
    </method>
    <method name="getHost" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>host</em> on which the <code>ApplicationMaster</code>
 is running.
 @return <em>host</em> on which the <code>ApplicationMaster</code>
         is running]]>
      </doc>
    </method>
    <method name="getRpcPort" return="int"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>RPC port</em> of the <code>ApplicationMaster</code>.
 @return <em>RPC port</em> of the <code>ApplicationMaster</code>]]>
      </doc>
    </method>
    <method name="getClientToAMToken" return="org.apache.hadoop.yarn.api.records.Token"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>client token</em> for communicating with the
 <code>ApplicationMaster</code>.
 <p>
 <em>ClientToAMToken</em> is the security token used by the AMs to verify
 authenticity of any <code>client</code>.
 </p>

 <p>
 The <code>ResourceManager</code>, provides a secure token (via
 {@link ApplicationReport#getClientToAMToken()}) which is verified by the
 ApplicationMaster when the client directly talks to an AM.
 </p>
 @return <em>client token</em> for communicating with the
 <code>ApplicationMaster</code>]]>
      </doc>
    </method>
    <method name="getYarnApplicationState" return="org.apache.hadoop.yarn.api.records.YarnApplicationState"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>YarnApplicationState</code> of the application.
 @return <code>YarnApplicationState</code> of the application]]>
      </doc>
    </method>
    <method name="getDiagnostics" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get  the <em>diagnositic information</em> of the application in case of
 errors.
 @return <em>diagnositic information</em> of the application in case
         of errors]]>
      </doc>
    </method>
    <method name="getTrackingUrl" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>tracking url</em> for the application.
 @return <em>tracking url</em> for the application]]>
      </doc>
    </method>
    <method name="getStartTime" return="long"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>start time</em> of the application.
 @return <em>start time</em> of the application]]>
      </doc>
    </method>
    <method name="getFinishTime" return="long"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>finish time</em> of the application.
 @return <em>finish time</em> of the application]]>
      </doc>
    </method>
    <method name="getFinalApplicationStatus" return="org.apache.hadoop.yarn.api.records.FinalApplicationStatus"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>final finish status</em> of the application.
 @return <em>final finish status</em> of the application]]>
      </doc>
    </method>
    <method name="getApplicationResourceUsageReport" return="org.apache.hadoop.yarn.api.records.ApplicationResourceUsageReport"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Retrieve the structure containing the job resources for this application
 @return the job resources structure for this application]]>
      </doc>
    </method>
    <method name="getProgress" return="float"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the application's progress ( range 0.0 to 1.0 )
 @return application's progress]]>
      </doc>
    </method>
    <method name="getApplicationType" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the application's Type
 @return application's Type]]>
      </doc>
    </method>
    <method name="getApplicationTags" return="java.util.Set"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get all tags corresponding to the application
 @return Application's tags]]>
      </doc>
    </method>
    <method name="getAMRMToken" return="org.apache.hadoop.yarn.api.records.Token"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the AMRM token of the application.
 <p/>
 The AMRM token is required for AM to RM scheduling operations. For
 managed Application Masters Yarn takes care of injecting it. For unmanaged
 Applications Masters, the token must be obtained via this method and set
 in the {@link org.apache.hadoop.security.UserGroupInformation} of the
 current user.
 <p/>
 The AMRM token will be returned only if all the following conditions are
 met:
 <li>
   <ul>the requester is the owner of the ApplicationMaster</ul>
   <ul>the application master is an unmanaged ApplicationMaster</ul>
   <ul>the application master is in ACCEPTED state</ul>
 </li>
 Else this method returns NULL.

 @return the AM to RM token if available.]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p><code>ApplicationReport</code> is a report of an application.</p>

 <p>It includes details such as:
   <ul>
     <li>{@link ApplicationId} of the application.</li>
     <li>Applications user.</li>
     <li>Application queue.</li>
     <li>Application name.</li>
     <li>Host on which the <code>ApplicationMaster</code> is running.</li>
     <li>RPC port of the <code>ApplicationMaster</code>.</li>
     <li>Tracking URL.</li>
     <li>{@link YarnApplicationState} of the application.</li>
     <li>Diagnostic information in case of errors.</li>
     <li>Start time of the application.</li>
     <li>Client {@link Token} of the application (if security is enabled).</li>
   </ul>
 </p>

 @see ApplicationClientProtocol#getApplicationReport(org.apache.hadoop.yarn.api.protocolrecords.GetApplicationReportRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.ApplicationReport -->
  <!-- start class org.apache.hadoop.yarn.api.records.ApplicationResourceUsageReport -->
  <class name="ApplicationResourceUsageReport" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="ApplicationResourceUsageReport"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getNumUsedContainers" return="int"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the number of used containers.  -1 for invalid/inaccessible reports.
 @return the number of used containers]]>
      </doc>
    </method>
    <method name="getUsedResources" return="org.apache.hadoop.yarn.api.records.Resource"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the used <code>Resource</code>.  -1 for invalid/inaccessible reports.
 @return the used <code>Resource</code>]]>
      </doc>
    </method>
    <method name="getReservedResources" return="org.apache.hadoop.yarn.api.records.Resource"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the reserved <code>Resource</code>.  -1 for invalid/inaccessible reports.
 @return the reserved <code>Resource</code>]]>
      </doc>
    </method>
    <method name="getNeededResources" return="org.apache.hadoop.yarn.api.records.Resource"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the needed <code>Resource</code>.  -1 for invalid/inaccessible reports.
 @return the needed <code>Resource</code>]]>
      </doc>
    </method>
    <method name="getMemorySeconds" return="long"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the aggregated amount of memory (in megabytes) the application has
 allocated times the number of seconds the application has been running.
 @return the aggregated amount of memory seconds]]>
      </doc>
    </method>
    <method name="getVcoreSeconds" return="long"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the aggregated number of vcores that the application has allocated
 times the number of seconds the application has been running.
 @return the aggregated number of vcore seconds]]>
      </doc>
    </method>
    <doc>
    <![CDATA[Contains various scheduling metrics to be reported by UI and CLI.]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.ApplicationResourceUsageReport -->
  <!-- start class org.apache.hadoop.yarn.api.records.ApplicationSubmissionContext -->
  <class name="ApplicationSubmissionContext" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="ApplicationSubmissionContext"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.records.ApplicationSubmissionContext"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="applicationId" type="org.apache.hadoop.yarn.api.records.ApplicationId"/>
      <param name="applicationName" type="java.lang.String"/>
      <param name="queue" type="java.lang.String"/>
      <param name="priority" type="org.apache.hadoop.yarn.api.records.Priority"/>
      <param name="amContainer" type="org.apache.hadoop.yarn.api.records.ContainerLaunchContext"/>
      <param name="isUnmanagedAM" type="boolean"/>
      <param name="cancelTokensWhenComplete" type="boolean"/>
      <param name="maxAppAttempts" type="int"/>
      <param name="resource" type="org.apache.hadoop.yarn.api.records.Resource"/>
      <param name="applicationType" type="java.lang.String"/>
      <param name="keepContainers" type="boolean"/>
      <param name="appLabelExpression" type="java.lang.String"/>
      <param name="amContainerLabelExpression" type="java.lang.String"/>
    </method>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.records.ApplicationSubmissionContext"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="applicationId" type="org.apache.hadoop.yarn.api.records.ApplicationId"/>
      <param name="applicationName" type="java.lang.String"/>
      <param name="queue" type="java.lang.String"/>
      <param name="priority" type="org.apache.hadoop.yarn.api.records.Priority"/>
      <param name="amContainer" type="org.apache.hadoop.yarn.api.records.ContainerLaunchContext"/>
      <param name="isUnmanagedAM" type="boolean"/>
      <param name="cancelTokensWhenComplete" type="boolean"/>
      <param name="maxAppAttempts" type="int"/>
      <param name="resource" type="org.apache.hadoop.yarn.api.records.Resource"/>
      <param name="applicationType" type="java.lang.String"/>
      <param name="keepContainers" type="boolean"/>
    </method>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.records.ApplicationSubmissionContext"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="applicationId" type="org.apache.hadoop.yarn.api.records.ApplicationId"/>
      <param name="applicationName" type="java.lang.String"/>
      <param name="queue" type="java.lang.String"/>
      <param name="priority" type="org.apache.hadoop.yarn.api.records.Priority"/>
      <param name="amContainer" type="org.apache.hadoop.yarn.api.records.ContainerLaunchContext"/>
      <param name="isUnmanagedAM" type="boolean"/>
      <param name="cancelTokensWhenComplete" type="boolean"/>
      <param name="maxAppAttempts" type="int"/>
      <param name="resource" type="org.apache.hadoop.yarn.api.records.Resource"/>
      <param name="applicationType" type="java.lang.String"/>
    </method>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.records.ApplicationSubmissionContext"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="applicationId" type="org.apache.hadoop.yarn.api.records.ApplicationId"/>
      <param name="applicationName" type="java.lang.String"/>
      <param name="queue" type="java.lang.String"/>
      <param name="priority" type="org.apache.hadoop.yarn.api.records.Priority"/>
      <param name="amContainer" type="org.apache.hadoop.yarn.api.records.ContainerLaunchContext"/>
      <param name="isUnmanagedAM" type="boolean"/>
      <param name="cancelTokensWhenComplete" type="boolean"/>
      <param name="maxAppAttempts" type="int"/>
      <param name="resource" type="org.apache.hadoop.yarn.api.records.Resource"/>
    </method>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.records.ApplicationSubmissionContext"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="applicationId" type="org.apache.hadoop.yarn.api.records.ApplicationId"/>
      <param name="applicationName" type="java.lang.String"/>
      <param name="queue" type="java.lang.String"/>
      <param name="amContainer" type="org.apache.hadoop.yarn.api.records.ContainerLaunchContext"/>
      <param name="isUnmanagedAM" type="boolean"/>
      <param name="cancelTokensWhenComplete" type="boolean"/>
      <param name="maxAppAttempts" type="int"/>
      <param name="applicationType" type="java.lang.String"/>
      <param name="keepContainers" type="boolean"/>
      <param name="appLabelExpression" type="java.lang.String"/>
      <param name="resourceRequest" type="org.apache.hadoop.yarn.api.records.ResourceRequest"/>
    </method>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.records.ApplicationSubmissionContext"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="applicationId" type="org.apache.hadoop.yarn.api.records.ApplicationId"/>
      <param name="applicationName" type="java.lang.String"/>
      <param name="queue" type="java.lang.String"/>
      <param name="priority" type="org.apache.hadoop.yarn.api.records.Priority"/>
      <param name="amContainer" type="org.apache.hadoop.yarn.api.records.ContainerLaunchContext"/>
      <param name="isUnmanagedAM" type="boolean"/>
      <param name="cancelTokensWhenComplete" type="boolean"/>
      <param name="maxAppAttempts" type="int"/>
      <param name="resource" type="org.apache.hadoop.yarn.api.records.Resource"/>
      <param name="applicationType" type="java.lang.String"/>
      <param name="keepContainers" type="boolean"/>
      <param name="attemptFailuresValidityInterval" type="long"/>
    </method>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.records.ApplicationSubmissionContext"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="applicationId" type="org.apache.hadoop.yarn.api.records.ApplicationId"/>
      <param name="applicationName" type="java.lang.String"/>
      <param name="queue" type="java.lang.String"/>
      <param name="priority" type="org.apache.hadoop.yarn.api.records.Priority"/>
      <param name="amContainer" type="org.apache.hadoop.yarn.api.records.ContainerLaunchContext"/>
      <param name="isUnmanagedAM" type="boolean"/>
      <param name="cancelTokensWhenComplete" type="boolean"/>
      <param name="maxAppAttempts" type="int"/>
      <param name="resource" type="org.apache.hadoop.yarn.api.records.Resource"/>
      <param name="applicationType" type="java.lang.String"/>
      <param name="keepContainers" type="boolean"/>
      <param name="logAggregationContext" type="org.apache.hadoop.yarn.api.records.LogAggregationContext"/>
    </method>
    <method name="getApplicationId" return="org.apache.hadoop.yarn.api.records.ApplicationId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>ApplicationId</code> of the submitted application.
 @return <code>ApplicationId</code> of the submitted application]]>
      </doc>
    </method>
    <method name="setApplicationId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="applicationId" type="org.apache.hadoop.yarn.api.records.ApplicationId"/>
      <doc>
      <![CDATA[Set the <code>ApplicationId</code> of the submitted application.
 @param applicationId <code>ApplicationId</code> of the submitted
                      application]]>
      </doc>
    </method>
    <method name="getApplicationName" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the application <em>name</em>.
 @return application name]]>
      </doc>
    </method>
    <method name="setApplicationName"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="applicationName" type="java.lang.String"/>
      <doc>
      <![CDATA[Set the application <em>name</em>.
 @param applicationName application name]]>
      </doc>
    </method>
    <method name="getQueue" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>queue</em> to which the application is being submitted.
 @return <em>queue</em> to which the application is being submitted]]>
      </doc>
    </method>
    <method name="setQueue"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="queue" type="java.lang.String"/>
      <doc>
      <![CDATA[Set the <em>queue</em> to which the application is being submitted
 @param queue <em>queue</em> to which the application is being submitted]]>
      </doc>
    </method>
    <method name="getPriority" return="org.apache.hadoop.yarn.api.records.Priority"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>Priority</code> of the application.
 @return <code>Priority</code> of the application]]>
      </doc>
    </method>
    <method name="getAMContainerSpec" return="org.apache.hadoop.yarn.api.records.ContainerLaunchContext"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>ContainerLaunchContext</code> to describe the
 <code>Container</code> with which the <code>ApplicationMaster</code> is
 launched.
 @return <code>ContainerLaunchContext</code> for the
         <code>ApplicationMaster</code> container]]>
      </doc>
    </method>
    <method name="setAMContainerSpec"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="amContainer" type="org.apache.hadoop.yarn.api.records.ContainerLaunchContext"/>
      <doc>
      <![CDATA[Set the <code>ContainerLaunchContext</code> to describe the
 <code>Container</code> with which the <code>ApplicationMaster</code> is
 launched.
 @param amContainer <code>ContainerLaunchContext</code> for the
                    <code>ApplicationMaster</code> container]]>
      </doc>
    </method>
    <method name="getUnmanagedAM" return="boolean"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get if the RM should manage the execution of the AM.
 If true, then the RM
 will not allocate a container for the AM and start it. It will expect the
 AM to be launched and connect to the RM within the AM liveliness period and
 fail the app otherwise. The client should launch the AM only after the RM
 has ACCEPTED the application and changed the <code>YarnApplicationState</code>.
 Such apps will not be retried by the RM on app attempt failure.
 The default value is false.
 @return true if the AM is not managed by the RM]]>
      </doc>
    </method>
    <method name="setUnmanagedAM"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="value" type="boolean"/>
      <doc>
      <![CDATA[@param value true if RM should not manage the AM]]>
      </doc>
    </method>
    <method name="getMaxAppAttempts" return="int"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[@return the number of max attempts of the application to be submitted]]>
      </doc>
    </method>
    <method name="setMaxAppAttempts"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="maxAppAttempts" type="int"/>
      <doc>
      <![CDATA[Set the number of max attempts of the application to be submitted. WARNING:
 it should be no larger than the global number of max attempts in the Yarn
 configuration.
 @param maxAppAttempts the number of max attempts of the application
 to be submitted.]]>
      </doc>
    </method>
    <method name="getResource" return="org.apache.hadoop.yarn.api.records.Resource"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the resource required by the <code>ApplicationMaster</code> for this
 application. Please note this will be DEPRECATED, use <em>getResource</em>
 in <em>getAMContainerResourceRequest</em> instead.

 @return the resource required by the <code>ApplicationMaster</code> for
         this application.]]>
      </doc>
    </method>
    <method name="setResource"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="resource" type="org.apache.hadoop.yarn.api.records.Resource"/>
      <doc>
      <![CDATA[Set the resource required by the <code>ApplicationMaster</code> for this
 application.

 @param resource the resource required by the <code>ApplicationMaster</code>
 for this application.]]>
      </doc>
    </method>
    <method name="getApplicationType" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the application type

 @return the application type]]>
      </doc>
    </method>
    <method name="setApplicationType"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="applicationType" type="java.lang.String"/>
      <doc>
      <![CDATA[Set the application type

 @param applicationType the application type]]>
      </doc>
    </method>
    <method name="getKeepContainersAcrossApplicationAttempts" return="boolean"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the flag which indicates whether to keep containers across application
 attempts or not.

 @return the flag which indicates whether to keep containers across
         application attempts or not.]]>
      </doc>
    </method>
    <method name="setKeepContainersAcrossApplicationAttempts"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="keepContainers" type="boolean"/>
      <doc>
      <![CDATA[Set the flag which indicates whether to keep containers across application
 attempts.
 <p>
 If the flag is true, running containers will not be killed when application
 attempt fails and these containers will be retrieved by the new application
 attempt on registration via
 {@link ApplicationMasterProtocol#registerApplicationMaster(RegisterApplicationMasterRequest)}.
 </p>

 @param keepContainers
          the flag which indicates whether to keep containers across
          application attempts.]]>
      </doc>
    </method>
    <method name="getApplicationTags" return="java.util.Set"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get tags for the application

 @return the application tags]]>
      </doc>
    </method>
    <method name="setApplicationTags"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="tags" type="java.util.Set"/>
      <doc>
      <![CDATA[Set tags for the application. A maximum of
 {@link YarnConfiguration#APPLICATION_MAX_TAGS} are allowed
 per application. Each tag can be at most
 {@link YarnConfiguration#APPLICATION_MAX_TAG_LENGTH}
 characters, and can contain only ASCII characters.

 @param tags tags to set]]>
      </doc>
    </method>
    <method name="getNodeLabelExpression" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get node-label-expression for this app. If this is set, all containers of
 this application without setting node-label-expression in ResurceRequest
 will get allocated resources on only those nodes that satisfy this
 node-label-expression.

 If different node-label-expression of this app and ResourceRequest are set
 at the same time, the one set in ResourceRequest will be used when
 allocating container

 @return node-label-expression for this app]]>
      </doc>
    </method>
    <method name="setNodeLabelExpression"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="nodeLabelExpression" type="java.lang.String"/>
      <doc>
      <![CDATA[Set node-label-expression for this app
 @param nodeLabelExpression node-label-expression of this app]]>
      </doc>
    </method>
    <method name="getAMContainerResourceRequest" return="org.apache.hadoop.yarn.api.records.ResourceRequest"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get ResourceRequest of AM container, if this is not null, scheduler will
 use this to acquire resource for AM container.

 If this is null, scheduler will assemble a ResourceRequest by using
 <em>getResource</em> and <em>getPriority</em> of
 <em>ApplicationSubmissionContext</em>.

 Number of containers and Priority will be ignore.

 @return ResourceRequest of AM container]]>
      </doc>
    </method>
    <method name="setAMContainerResourceRequest"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="request" type="org.apache.hadoop.yarn.api.records.ResourceRequest"/>
      <doc>
      <![CDATA[Set ResourceRequest of AM container
 @param request of AM container]]>
      </doc>
    </method>
    <method name="getAttemptFailuresValidityInterval" return="long"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the attemptFailuresValidityInterval in milliseconds for the application

 @return the attemptFailuresValidityInterval]]>
      </doc>
    </method>
    <method name="setAttemptFailuresValidityInterval"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="attemptFailuresValidityInterval" type="long"/>
      <doc>
      <![CDATA[Set the attemptFailuresValidityInterval in milliseconds for the application
 @param attemptFailuresValidityInterval]]>
      </doc>
    </method>
    <method name="getLogAggregationContext" return="org.apache.hadoop.yarn.api.records.LogAggregationContext"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get <code>LogAggregationContext</code> of the application

 @return <code>LogAggregationContext</code> of the application]]>
      </doc>
    </method>
    <method name="setLogAggregationContext"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="logAggregationContext" type="org.apache.hadoop.yarn.api.records.LogAggregationContext"/>
      <doc>
      <![CDATA[Set <code>LogAggregationContext</code> for the application

 @param logAggregationContext
          for the application]]>
      </doc>
    </method>
    <method name="getReservationID" return="org.apache.hadoop.yarn.api.records.ReservationId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the reservation id, that corresponds to a valid resource allocation in
 the scheduler (between start and end time of the corresponding reservation)

 @return the reservation id representing the unique id of the corresponding
         reserved resource allocation in the scheduler]]>
      </doc>
    </method>
    <method name="setReservationID"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="reservationID" type="org.apache.hadoop.yarn.api.records.ReservationId"/>
      <doc>
      <![CDATA[Set the reservation id, that correspond to a valid resource allocation in
 the scheduler (between start and end time of the corresponding reservation)

 @param reservationID representing the unique id of the
          corresponding reserved resource allocation in the scheduler]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p><code>ApplicationSubmissionContext</code> represents all of the
 information needed by the <code>ResourceManager</code> to launch
 the <code>ApplicationMaster</code> for an application.</p>

 <p>It includes details such as:
   <ul>
     <li>{@link ApplicationId} of the application.</li>
     <li>Application user.</li>
     <li>Application name.</li>
     <li>{@link Priority} of the application.</li>
     <li>
       {@link ContainerLaunchContext} of the container in which the
       <code>ApplicationMaster</code> is executed.
     </li>
     <li>maxAppAttempts. The maximum number of application attempts.
     It should be no larger than the global number of max attempts in the
     Yarn configuration.</li>
     <li>attemptFailuresValidityInterval. The default value is -1.
     when attemptFailuresValidityInterval in milliseconds is set to > 0,
     the failure number will no take failures which happen out of the
     validityInterval into failure count. If failure count reaches to
     maxAppAttempts, the application will be failed.
     </li>
   <li>Optional, application-specific {@link LogAggregationContext}</li>
   </ul>
 </p>

 @see ContainerLaunchContext
 @see ApplicationClientProtocol#submitApplication(org.apache.hadoop.yarn.api.protocolrecords.SubmitApplicationRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.ApplicationSubmissionContext -->
  <!-- start class org.apache.hadoop.yarn.api.records.Container -->
  <class name="Container" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <implements name="java.lang.Comparable"/>
    <constructor name="Container"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getId" return="org.apache.hadoop.yarn.api.records.ContainerId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the globally unique identifier for the container.
 @return globally unique identifier for the container]]>
      </doc>
    </method>
    <method name="getNodeId" return="org.apache.hadoop.yarn.api.records.NodeId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the identifier of the node on which the container is allocated.
 @return identifier of the node on which the container is allocated]]>
      </doc>
    </method>
    <method name="getNodeHttpAddress" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the http uri of the node on which the container is allocated.
 @return http uri of the node on which the container is allocated]]>
      </doc>
    </method>
    <method name="getResource" return="org.apache.hadoop.yarn.api.records.Resource"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>Resource</code> allocated to the container.
 @return <code>Resource</code> allocated to the container]]>
      </doc>
    </method>
    <method name="getPriority" return="org.apache.hadoop.yarn.api.records.Priority"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>Priority</code> at which the <code>Container</code> was
 allocated.
 @return <code>Priority</code> at which the <code>Container</code> was
         allocated]]>
      </doc>
    </method>
    <method name="getContainerToken" return="org.apache.hadoop.yarn.api.records.Token"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>ContainerToken</code> for the container.
 <p><code>ContainerToken</code> is the security token used by the framework
 to verify authenticity of any <code>Container</code>.</p>

 <p>The <code>ResourceManager</code>, on container allocation provides a
 secure token which is verified by the <code>NodeManager</code> on
 container launch.</p>

 <p>Applications do not need to care about <code>ContainerToken</code>, they
 are transparently handled by the framework - the allocated
 <code>Container</code> includes the <code>ContainerToken</code>.</p>

 @see ApplicationMasterProtocol#allocate(org.apache.hadoop.yarn.api.protocolrecords.AllocateRequest)
 @see ContainerManagementProtocol#startContainers(org.apache.hadoop.yarn.api.protocolrecords.StartContainersRequest)

 @return <code>ContainerToken</code> for the container]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p><code>Container</code> represents an allocated resource in the cluster.
 </p>

 <p>The <code>ResourceManager</code> is the sole authority to allocate any
 <code>Container</code> to applications. The allocated <code>Container</code>
 is always on a single node and has a unique {@link ContainerId}. It has
 a specific amount of {@link Resource} allocated.</p>

 <p>It includes details such as:
   <ul>
     <li>{@link ContainerId} for the container, which is globally unique.</li>
     <li>
       {@link NodeId} of the node on which it is allocated.
     </li>
     <li>HTTP uri of the node.</li>
     <li>{@link Resource} allocated to the container.</li>
     <li>{@link Priority} at which the container was allocated.</li>
     <li>
       Container {@link Token} of the container, used to securely verify
       authenticity of the allocation.
     </li>
   </ul>
 </p>

 <p>Typically, an <code>ApplicationMaster</code> receives the
 <code>Container</code> from the <code>ResourceManager</code> during
 resource-negotiation and then talks to the <code>NodeManager</code> to
 start/stop containers.</p>

 @see ApplicationMasterProtocol#allocate(org.apache.hadoop.yarn.api.protocolrecords.AllocateRequest)
 @see ContainerManagementProtocol#startContainers(org.apache.hadoop.yarn.api.protocolrecords.StartContainersRequest)
 @see ContainerManagementProtocol#stopContainers(org.apache.hadoop.yarn.api.protocolrecords.StopContainersRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.Container -->
  <!-- start class org.apache.hadoop.yarn.api.records.ContainerExitStatus -->
  <class name="ContainerExitStatus" extends="java.lang.Object"
    abstract="false"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="ContainerExitStatus"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <field name="SUCCESS" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="INVALID" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="ABORTED" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Containers killed by the framework, either due to being released by
 the application or being 'lost' due to node failures etc.]]>
      </doc>
    </field>
    <field name="DISKS_FAILED" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[When threshold number of the nodemanager-local-directories or
 threshold number of the nodemanager-log-directories become bad.]]>
      </doc>
    </field>
    <field name="PREEMPTED" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Containers preempted by the framework.]]>
      </doc>
    </field>
    <field name="KILLED_EXCEEDED_VMEM" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Container terminated because of exceeding allocated virtual memory.]]>
      </doc>
    </field>
    <field name="KILLED_EXCEEDED_PMEM" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Container terminated because of exceeding allocated physical memory.]]>
      </doc>
    </field>
    <field name="KILLED_BY_APPMASTER" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Container was terminated by stop request by the app master.]]>
      </doc>
    </field>
    <field name="KILLED_BY_RESOURCEMANAGER" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Container was terminated by the resource manager.]]>
      </doc>
    </field>
    <field name="KILLED_AFTER_APP_COMPLETION" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Container was terminated after the application finished.]]>
      </doc>
    </field>
    <doc>
    <![CDATA[Container exit statuses indicating special exit circumstances.]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.ContainerExitStatus -->
  <!-- start class org.apache.hadoop.yarn.api.records.ContainerId -->
  <class name="ContainerId" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <implements name="java.lang.Comparable"/>
    <constructor name="ContainerId"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getApplicationAttemptId" return="org.apache.hadoop.yarn.api.records.ApplicationAttemptId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>ApplicationAttemptId</code> of the application to which the
 <code>Container</code> was assigned.
 <p>
 Note: If containers are kept alive across application attempts via
 {@link ApplicationSubmissionContext#setKeepContainersAcrossApplicationAttempts(boolean)}
 the <code>ContainerId</code> does not necessarily contain the current
 running application attempt's <code>ApplicationAttemptId</code> This
 container can be allocated by previously exited application attempt and
 managed by the current running attempt thus have the previous application
 attempt's <code>ApplicationAttemptId</code>.
 </p>

 @return <code>ApplicationAttemptId</code> of the application to which the
         <code>Container</code> was assigned]]>
      </doc>
    </method>
    <method name="getId" return="int"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the lower 32 bits of identifier of the <code>ContainerId</code>,
 which doesn't include epoch. Note that this method will be marked as
 deprecated, so please use <code>getContainerId</code> instead.
 @return lower 32 bits of identifier of the <code>ContainerId</code>]]>
      </doc>
    </method>
    <method name="getContainerId" return="long"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the identifier of the <code>ContainerId</code>. Upper 24 bits are
 reserved as epoch of cluster, and lower 40 bits are reserved as
 sequential number of containers.
 @return identifier of the <code>ContainerId</code>]]>
      </doc>
    </method>
    <method name="hashCode" return="int"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="equals" return="boolean"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="obj" type="java.lang.Object"/>
    </method>
    <method name="compareTo" return="int"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="other" type="org.apache.hadoop.yarn.api.records.ContainerId"/>
    </method>
    <method name="toString" return="java.lang.String"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[@return A string representation of containerId. The format is
 container_e*epoch*_*clusterTimestamp*_*appId*_*attemptId*_*containerId*
 when epoch is larger than 0
 (e.g. container_e17_1410901177871_0001_01_000005).
 *epoch* is increased when RM restarts or fails over.
 When epoch is 0, epoch is omitted
 (e.g. container_1410901177871_0001_01_000005).]]>
      </doc>
    </method>
    <method name="fromString" return="org.apache.hadoop.yarn.api.records.ContainerId"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="containerIdStr" type="java.lang.String"/>
    </method>
    <method name="build"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="protected"
      deprecated="not deprecated">
    </method>
    <field name="CONTAINER_ID_BITMASK" type="long"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <doc>
    <![CDATA[<p><code>ContainerId</code> represents a globally unique identifier
 for a {@link Container} in the cluster.</p>]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.ContainerId -->
  <!-- start class org.apache.hadoop.yarn.api.records.ContainerLaunchContext -->
  <class name="ContainerLaunchContext" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="ContainerLaunchContext"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.records.ContainerLaunchContext"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="localResources" type="java.util.Map"/>
      <param name="environment" type="java.util.Map"/>
      <param name="commands" type="java.util.List"/>
      <param name="serviceData" type="java.util.Map"/>
      <param name="tokens" type="java.nio.ByteBuffer"/>
      <param name="acls" type="java.util.Map"/>
    </method>
    <method name="getTokens" return="java.nio.ByteBuffer"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get all the tokens needed by this container. It may include file-system
 tokens, ApplicationMaster related tokens if this container is an
 ApplicationMaster or framework level tokens needed by this container to
 communicate to various services in a secure manner.

 @return tokens needed by this container.]]>
      </doc>
    </method>
    <method name="setTokens"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="tokens" type="java.nio.ByteBuffer"/>
      <doc>
      <![CDATA[Set security tokens needed by this container.
 @param tokens security tokens]]>
      </doc>
    </method>
    <method name="getLocalResources" return="java.util.Map"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get <code>LocalResource</code> required by the container.
 @return all <code>LocalResource</code> required by the container]]>
      </doc>
    </method>
    <method name="setLocalResources"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="localResources" type="java.util.Map"/>
      <doc>
      <![CDATA[Set <code>LocalResource</code> required by the container. All pre-existing
 Map entries are cleared before adding the new Map
 @param localResources <code>LocalResource</code> required by the container]]>
      </doc>
    </method>
    <method name="getServiceData" return="java.util.Map"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[<p>
 Get application-specific binary <em>service data</em>. This is a map keyed
 by the name of each {@link AuxiliaryService} that is configured on a
 NodeManager and value correspond to the application specific data targeted
 for the keyed {@link AuxiliaryService}.
 </p>

 <p>
 This will be used to initialize this application on the specific
 {@link AuxiliaryService} running on the NodeManager by calling
 {@link AuxiliaryService#initializeApplication(ApplicationInitializationContext)}
 </p>

 @return application-specific binary <em>service data</em>]]>
      </doc>
    </method>
    <method name="setServiceData"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="serviceData" type="java.util.Map"/>
      <doc>
      <![CDATA[<p>
 Set application-specific binary <em>service data</em>. This is a map keyed
 by the name of each {@link AuxiliaryService} that is configured on a
 NodeManager and value correspond to the application specific data targeted
 for the keyed {@link AuxiliaryService}. All pre-existing Map entries are
 preserved.
 </p>

 @param serviceData
          application-specific binary <em>service data</em>]]>
      </doc>
    </method>
    <method name="getEnvironment" return="java.util.Map"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get <em>environment variables</em> for the container.
 @return <em>environment variables</em> for the container]]>
      </doc>
    </method>
    <method name="setEnvironment"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="environment" type="java.util.Map"/>
      <doc>
      <![CDATA[Add <em>environment variables</em> for the container. All pre-existing Map
 entries are cleared before adding the new Map
 @param environment <em>environment variables</em> for the container]]>
      </doc>
    </method>
    <method name="getCommands" return="java.util.List"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the list of <em>commands</em> for launching the container.
 @return the list of <em>commands</em> for launching the container]]>
      </doc>
    </method>
    <method name="setCommands"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="commands" type="java.util.List"/>
      <doc>
      <![CDATA[Add the list of <em>commands</em> for launching the container. All
 pre-existing List entries are cleared before adding the new List
 @param commands the list of <em>commands</em> for launching the container]]>
      </doc>
    </method>
    <method name="getApplicationACLs" return="java.util.Map"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>ApplicationACL</code>s for the application.
 @return all the <code>ApplicationACL</code>s]]>
      </doc>
    </method>
    <method name="setApplicationACLs"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="acls" type="java.util.Map"/>
      <doc>
      <![CDATA[Set the <code>ApplicationACL</code>s for the application. All pre-existing
 Map entries are cleared before adding the new Map
 @param acls <code>ApplicationACL</code>s for the application]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p><code>ContainerLaunchContext</code> represents all of the information
 needed by the <code>NodeManager</code> to launch a container.</p>

 <p>It includes details such as:
   <ul>
     <li>{@link ContainerId} of the container.</li>
     <li>{@link Resource} allocated to the container.</li>
     <li>User to whom the container is allocated.</li>
     <li>Security tokens (if security is enabled).</li>
     <li>
       {@link LocalResource} necessary for running the container such
       as binaries, jar, shared-objects, side-files etc.
     </li>
     <li>Optional, application-specific binary service data.</li>
     <li>Environment variables for the launched process.</li>
     <li>Command to launch the container.</li>
   </ul>
 </p>

 @see ContainerManagementProtocol#startContainers(org.apache.hadoop.yarn.api.protocolrecords.StartContainersRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.ContainerLaunchContext -->
  <!-- start class org.apache.hadoop.yarn.api.records.ContainerReport -->
  <class name="ContainerReport" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="ContainerReport"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getContainerId" return="org.apache.hadoop.yarn.api.records.ContainerId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>ContainerId</code> of the container.

 @return <code>ContainerId</code> of the container.]]>
      </doc>
    </method>
    <method name="setContainerId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="containerId" type="org.apache.hadoop.yarn.api.records.ContainerId"/>
    </method>
    <method name="getAllocatedResource" return="org.apache.hadoop.yarn.api.records.Resource"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the allocated <code>Resource</code> of the container.

 @return allocated <code>Resource</code> of the container.]]>
      </doc>
    </method>
    <method name="setAllocatedResource"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="resource" type="org.apache.hadoop.yarn.api.records.Resource"/>
    </method>
    <method name="getAssignedNode" return="org.apache.hadoop.yarn.api.records.NodeId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the allocated <code>NodeId</code> where container is running.

 @return allocated <code>NodeId</code> where container is running.]]>
      </doc>
    </method>
    <method name="setAssignedNode"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="nodeId" type="org.apache.hadoop.yarn.api.records.NodeId"/>
    </method>
    <method name="getPriority" return="org.apache.hadoop.yarn.api.records.Priority"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the allocated <code>Priority</code> of the container.

 @return allocated <code>Priority</code> of the container.]]>
      </doc>
    </method>
    <method name="setPriority"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="priority" type="org.apache.hadoop.yarn.api.records.Priority"/>
    </method>
    <method name="getCreationTime" return="long"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the creation time of the container.

 @return creation time of the container]]>
      </doc>
    </method>
    <method name="setCreationTime"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="creationTime" type="long"/>
    </method>
    <method name="getFinishTime" return="long"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the Finish time of the container.

 @return Finish time of the container]]>
      </doc>
    </method>
    <method name="setFinishTime"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="finishTime" type="long"/>
    </method>
    <method name="getDiagnosticsInfo" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the DiagnosticsInfo of the container.

 @return DiagnosticsInfo of the container]]>
      </doc>
    </method>
    <method name="setDiagnosticsInfo"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="diagnosticsInfo" type="java.lang.String"/>
    </method>
    <method name="getLogUrl" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the LogURL of the container.

 @return LogURL of the container]]>
      </doc>
    </method>
    <method name="setLogUrl"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="logUrl" type="java.lang.String"/>
    </method>
    <method name="getContainerState" return="org.apache.hadoop.yarn.api.records.ContainerState"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the final <code>ContainerState</code> of the container.

 @return final <code>ContainerState</code> of the container.]]>
      </doc>
    </method>
    <method name="setContainerState"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="containerState" type="org.apache.hadoop.yarn.api.records.ContainerState"/>
    </method>
    <method name="getContainerExitStatus" return="int"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the final <code>exit status</code> of the container.

 @return final <code>exit status</code> of the container.]]>
      </doc>
    </method>
    <method name="setContainerExitStatus"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="containerExitStatus" type="int"/>
    </method>
    <doc>
    <![CDATA[<p>
 <code>ContainerReport</code> is a report of an container.
 </p>

 <p>
 It includes details such as:
 <ul>
 <li>{@link ContainerId} of the container.</li>
 <li>Allocated Resources to the container.</li>
 <li>Assigned Node id.</li>
 <li>Assigned Priority.</li>
 <li>Creation Time.</li>
 <li>Finish Time.</li>
 <li>Container Exit Status.</li>
 <li>{@link ContainerState} of the container.</li>
 <li>Diagnostic information in case of errors.</li>
 <li>Log URL.</li>
 </ul>
 </p>]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.ContainerReport -->
  <!-- start class org.apache.hadoop.yarn.api.records.ContainerResourceDecrease -->
  <class name="ContainerResourceDecrease" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="ContainerResourceDecrease"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.records.ContainerResourceDecrease"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="existingContainerId" type="org.apache.hadoop.yarn.api.records.ContainerId"/>
      <param name="targetCapability" type="org.apache.hadoop.yarn.api.records.Resource"/>
    </method>
    <method name="getContainerId" return="org.apache.hadoop.yarn.api.records.ContainerId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="setContainerId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="containerId" type="org.apache.hadoop.yarn.api.records.ContainerId"/>
    </method>
    <method name="getCapability" return="org.apache.hadoop.yarn.api.records.Resource"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="setCapability"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="capability" type="org.apache.hadoop.yarn.api.records.Resource"/>
    </method>
    <method name="hashCode" return="int"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="equals" return="boolean"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="other" type="java.lang.Object"/>
    </method>
    <doc>
    <![CDATA[Used by Application Master to ask Node Manager reduce size of a specified
 container]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.ContainerResourceDecrease -->
  <!-- start class org.apache.hadoop.yarn.api.records.ContainerResourceIncrease -->
  <class name="ContainerResourceIncrease" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="ContainerResourceIncrease"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.records.ContainerResourceIncrease"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="existingContainerId" type="org.apache.hadoop.yarn.api.records.ContainerId"/>
      <param name="targetCapability" type="org.apache.hadoop.yarn.api.records.Resource"/>
      <param name="token" type="org.apache.hadoop.yarn.api.records.Token"/>
    </method>
    <method name="getContainerId" return="org.apache.hadoop.yarn.api.records.ContainerId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="setContainerId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="containerId" type="org.apache.hadoop.yarn.api.records.ContainerId"/>
    </method>
    <method name="getCapability" return="org.apache.hadoop.yarn.api.records.Resource"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="setCapability"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="capability" type="org.apache.hadoop.yarn.api.records.Resource"/>
    </method>
    <method name="getContainerToken" return="org.apache.hadoop.yarn.api.records.Token"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="setContainerToken"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="token" type="org.apache.hadoop.yarn.api.records.Token"/>
    </method>
    <method name="hashCode" return="int"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="equals" return="boolean"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="other" type="java.lang.Object"/>
    </method>
    <doc>
    <![CDATA[Represent a new increased container accepted by Resource Manager]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.ContainerResourceIncrease -->
  <!-- start class org.apache.hadoop.yarn.api.records.ContainerResourceIncreaseRequest -->
  <class name="ContainerResourceIncreaseRequest" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="ContainerResourceIncreaseRequest"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.records.ContainerResourceIncreaseRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="existingContainerId" type="org.apache.hadoop.yarn.api.records.ContainerId"/>
      <param name="targetCapability" type="org.apache.hadoop.yarn.api.records.Resource"/>
    </method>
    <method name="getContainerId" return="org.apache.hadoop.yarn.api.records.ContainerId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="setContainerId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="containerId" type="org.apache.hadoop.yarn.api.records.ContainerId"/>
    </method>
    <method name="getCapability" return="org.apache.hadoop.yarn.api.records.Resource"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="setCapability"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="capability" type="org.apache.hadoop.yarn.api.records.Resource"/>
    </method>
    <method name="hashCode" return="int"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="equals" return="boolean"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="other" type="java.lang.Object"/>
    </method>
    <doc>
    <![CDATA[Used by Application Master, send a container resource increase request to
 Resource Manager]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.ContainerResourceIncreaseRequest -->
  <!-- start class org.apache.hadoop.yarn.api.records.ContainerState -->
  <class name="ContainerState" extends="java.lang.Enum"
    abstract="false"
    static="false" final="true" visibility="public"
    deprecated="not deprecated">
    <method name="values" return="org.apache.hadoop.yarn.api.records.ContainerState[]"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="valueOf" return="org.apache.hadoop.yarn.api.records.ContainerState"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="name" type="java.lang.String"/>
    </method>
    <doc>
    <![CDATA[<p>State of a <code>Container</code>.</p>]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.ContainerState -->
  <!-- start class org.apache.hadoop.yarn.api.records.ContainerStatus -->
  <class name="ContainerStatus" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="ContainerStatus"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getContainerId" return="org.apache.hadoop.yarn.api.records.ContainerId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>ContainerId</code> of the container.
 @return <code>ContainerId</code> of the container]]>
      </doc>
    </method>
    <method name="getState" return="org.apache.hadoop.yarn.api.records.ContainerState"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>ContainerState</code> of the container.
 @return <code>ContainerState</code> of the container]]>
      </doc>
    </method>
    <method name="getExitStatus" return="int"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[<p>Get the <em>exit status</em> for the container.</p>

 <p>Note: This is valid only for completed containers i.e. containers
 with state {@link ContainerState#COMPLETE}.
 Otherwise, it returns an ContainerExitStatus.INVALID.
 </p>

 <p>Containers killed by the framework, either due to being released by
 the application or being 'lost' due to node failures etc. have a special
 exit code of ContainerExitStatus.ABORTED.</p>

 <p>When threshold number of the nodemanager-local-directories or
 threshold number of the nodemanager-log-directories become bad, then
 container is not launched and is exited with ContainersExitStatus.DISKS_FAILED.
 </p>

 @return <em>exit status</em> for the container]]>
      </doc>
    </method>
    <method name="getDiagnostics" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get <em>diagnostic messages</em> for failed containers.
 @return <em>diagnostic messages</em> for failed containers]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p><code>ContainerStatus</code> represents the current status of a
 <code>Container</code>.</p>

 <p>It provides details such as:
   <ul>
     <li><code>ContainerId</code> of the container.</li>
     <li><code>ContainerState</code> of the container.</li>
     <li><em>Exit status</em> of a completed container.</li>
     <li><em>Diagnostic</em> message for a failed container.</li>
   </ul>
 </p>]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.ContainerStatus -->
  <!-- start class org.apache.hadoop.yarn.api.records.FinalApplicationStatus -->
  <class name="FinalApplicationStatus" extends="java.lang.Enum"
    abstract="false"
    static="false" final="true" visibility="public"
    deprecated="not deprecated">
    <method name="values" return="org.apache.hadoop.yarn.api.records.FinalApplicationStatus[]"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="valueOf" return="org.apache.hadoop.yarn.api.records.FinalApplicationStatus"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="name" type="java.lang.String"/>
    </method>
    <doc>
    <![CDATA[Enumeration of various final states of an <code>Application</code>.]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.FinalApplicationStatus -->
  <!-- start class org.apache.hadoop.yarn.api.records.LocalResource -->
  <class name="LocalResource" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="LocalResource"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.records.LocalResource"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="url" type="org.apache.hadoop.yarn.api.records.URL"/>
      <param name="type" type="org.apache.hadoop.yarn.api.records.LocalResourceType"/>
      <param name="visibility" type="org.apache.hadoop.yarn.api.records.LocalResourceVisibility"/>
      <param name="size" type="long"/>
      <param name="timestamp" type="long"/>
      <param name="pattern" type="java.lang.String"/>
    </method>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.records.LocalResource"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="url" type="org.apache.hadoop.yarn.api.records.URL"/>
      <param name="type" type="org.apache.hadoop.yarn.api.records.LocalResourceType"/>
      <param name="visibility" type="org.apache.hadoop.yarn.api.records.LocalResourceVisibility"/>
      <param name="size" type="long"/>
      <param name="timestamp" type="long"/>
    </method>
    <method name="getResource" return="org.apache.hadoop.yarn.api.records.URL"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>location</em> of the resource to be localized.
 @return <em>location</em> of the resource to be localized]]>
      </doc>
    </method>
    <method name="setResource"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="resource" type="org.apache.hadoop.yarn.api.records.URL"/>
      <doc>
      <![CDATA[Set <em>location</em> of the resource to be localized.
 @param resource <em>location</em> of the resource to be localized]]>
      </doc>
    </method>
    <method name="getSize" return="long"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>size</em> of the resource to be localized.
 @return <em>size</em> of the resource to be localized]]>
      </doc>
    </method>
    <method name="setSize"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="size" type="long"/>
      <doc>
      <![CDATA[Set the <em>size</em> of the resource to be localized.
 @param size <em>size</em> of the resource to be localized]]>
      </doc>
    </method>
    <method name="getTimestamp" return="long"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the original <em>timestamp</em> of the resource to be localized, used
 for verification.
 @return <em>timestamp</em> of the resource to be localized]]>
      </doc>
    </method>
    <method name="setTimestamp"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="timestamp" type="long"/>
      <doc>
      <![CDATA[Set the <em>timestamp</em> of the resource to be localized, used
 for verification.
 @param timestamp <em>timestamp</em> of the resource to be localized]]>
      </doc>
    </method>
    <method name="getType" return="org.apache.hadoop.yarn.api.records.LocalResourceType"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>LocalResourceType</code> of the resource to be localized.
 @return <code>LocalResourceType</code> of the resource to be localized]]>
      </doc>
    </method>
    <method name="setType"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="type" type="org.apache.hadoop.yarn.api.records.LocalResourceType"/>
      <doc>
      <![CDATA[Set the <code>LocalResourceType</code> of the resource to be localized.
 @param type <code>LocalResourceType</code> of the resource to be localized]]>
      </doc>
    </method>
    <method name="getVisibility" return="org.apache.hadoop.yarn.api.records.LocalResourceVisibility"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>LocalResourceVisibility</code> of the resource to be
 localized.
 @return <code>LocalResourceVisibility</code> of the resource to be
         localized]]>
      </doc>
    </method>
    <method name="setVisibility"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="visibility" type="org.apache.hadoop.yarn.api.records.LocalResourceVisibility"/>
      <doc>
      <![CDATA[Set the <code>LocalResourceVisibility</code> of the resource to be
 localized.
 @param visibility <code>LocalResourceVisibility</code> of the resource to be
                   localized]]>
      </doc>
    </method>
    <method name="getPattern" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>pattern</em> that should be used to extract entries from the
 archive (only used when type is <code>PATTERN</code>).
 @return <em>pattern</em> that should be used to extract entries from the
 archive.]]>
      </doc>
    </method>
    <method name="setPattern"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="pattern" type="java.lang.String"/>
      <doc>
      <![CDATA[Set the <em>pattern</em> that should be used to extract entries from the
 archive (only used when type is <code>PATTERN</code>).
 @param pattern <em>pattern</em> that should be used to extract entries
 from the archive.]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p><code>LocalResource</code> represents a local resource required to
 run a container.</p>

 <p>The <code>NodeManager</code> is responsible for localizing the resource
 prior to launching the container.</p>

 <p>Applications can specify {@link LocalResourceType} and
 {@link LocalResourceVisibility}.</p>

 @see LocalResourceType
 @see LocalResourceVisibility
 @see ContainerLaunchContext
 @see ApplicationSubmissionContext
 @see ContainerManagementProtocol#startContainers(org.apache.hadoop.yarn.api.protocolrecords.StartContainersRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.LocalResource -->
  <!-- start class org.apache.hadoop.yarn.api.records.LocalResourceType -->
  <class name="LocalResourceType" extends="java.lang.Enum"
    abstract="false"
    static="false" final="true" visibility="public"
    deprecated="not deprecated">
    <method name="values" return="org.apache.hadoop.yarn.api.records.LocalResourceType[]"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="valueOf" return="org.apache.hadoop.yarn.api.records.LocalResourceType"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="name" type="java.lang.String"/>
    </method>
    <doc>
    <![CDATA[<p><code>LocalResourceType</code> specifies the <em>type</em>
 of a resource localized by the <code>NodeManager</code>.</p>

 <p>The <em>type</em> can be one of:
   <ul>
     <li>
       {@link #FILE} - Regular file i.e. uninterpreted bytes.
     </li>
     <li>
       {@link #ARCHIVE} - Archive, which is automatically unarchived by the
       <code>NodeManager</code>.
     </li>
     <li>
       {@link #PATTERN} - A hybrid between {@link #ARCHIVE} and {@link #FILE}.
   </ul>
 </p>

 @see LocalResource
 @see ContainerLaunchContext
 @see ApplicationSubmissionContext
 @see ContainerManagementProtocol#startContainers(org.apache.hadoop.yarn.api.protocolrecords.StartContainersRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.LocalResourceType -->
  <!-- start class org.apache.hadoop.yarn.api.records.LocalResourceVisibility -->
  <class name="LocalResourceVisibility" extends="java.lang.Enum"
    abstract="false"
    static="false" final="true" visibility="public"
    deprecated="not deprecated">
    <method name="values" return="org.apache.hadoop.yarn.api.records.LocalResourceVisibility[]"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="valueOf" return="org.apache.hadoop.yarn.api.records.LocalResourceVisibility"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="name" type="java.lang.String"/>
    </method>
    <doc>
    <![CDATA[<p><code>LocalResourceVisibility</code> specifies the <em>visibility</em>
 of a resource localized by the <code>NodeManager</code>.</p>

 <p>The <em>visibility</em> can be one of:
   <ul>
     <li>{@link #PUBLIC} - Shared by all users on the node.</li>
     <li>
       {@link #PRIVATE} - Shared among all applications of the
       <em>same user</em> on the node.
     </li>
     <li>
       {@link #APPLICATION} - Shared only among containers of the
       <em>same application</em> on the node.
     </li>
   </ul>
 </p>

 @see LocalResource
 @see ContainerLaunchContext
 @see ApplicationSubmissionContext
 @see ContainerManagementProtocol#startContainers(org.apache.hadoop.yarn.api.protocolrecords.StartContainersRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.LocalResourceVisibility -->
  <!-- start class org.apache.hadoop.yarn.api.records.LogAggregationContext -->
  <class name="LogAggregationContext" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="LogAggregationContext"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.records.LogAggregationContext"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="includePattern" type="java.lang.String"/>
      <param name="excludePattern" type="java.lang.String"/>
    </method>
    <method name="getIncludePattern" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get include pattern

 @return include pattern]]>
      </doc>
    </method>
    <method name="setIncludePattern"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="includePattern" type="java.lang.String"/>
      <doc>
      <![CDATA[Set include pattern

 @param includePattern]]>
      </doc>
    </method>
    <method name="getExcludePattern" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get exclude pattern

 @return exclude pattern]]>
      </doc>
    </method>
    <method name="setExcludePattern"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="excludePattern" type="java.lang.String"/>
      <doc>
      <![CDATA[Set exclude pattern

 @param excludePattern]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p><code>LogAggregationContext</code> represents all of the
 information needed by the <code>NodeManager</code> to handle
 the logs for an application.</p>

 <p>It includes details such as:
   <ul>
     <li>includePattern. It uses Java Regex to filter the log files
     which match the defined include pattern and those log files
     will be uploaded. </li>
     <li>excludePattern. It uses Java Regex to filter the log files
     which match the defined exclude pattern and those log files
     will not be uploaded. If the log file name matches both the
     include and the exclude pattern, this file will be excluded eventually</li>
   </ul>
 </p>

 @see ApplicationSubmissionContext]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.LogAggregationContext -->
  <!-- start class org.apache.hadoop.yarn.api.records.NMToken -->
  <class name="NMToken" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="NMToken"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getNodeId" return="org.apache.hadoop.yarn.api.records.NodeId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the {@link NodeId} of the <code>NodeManager</code> for which the NMToken
 is used to authenticate.
 @return the {@link NodeId} of the <code>NodeManager</code> for which the
 NMToken is used to authenticate.]]>
      </doc>
    </method>
    <method name="setNodeId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="nodeId" type="org.apache.hadoop.yarn.api.records.NodeId"/>
    </method>
    <method name="getToken" return="org.apache.hadoop.yarn.api.records.Token"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the {@link Token} used for authenticating with <code>NodeManager</code>
 @return the {@link Token} used for authenticating with <code>NodeManager</code>]]>
      </doc>
    </method>
    <method name="setToken"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="token" type="org.apache.hadoop.yarn.api.records.Token"/>
    </method>
    <method name="hashCode" return="int"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="equals" return="boolean"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="obj" type="java.lang.Object"/>
    </method>
    <doc>
    <![CDATA[<p>The NMToken is used for authenticating communication with
 <code>NodeManager</code></p>
 <p>It is issued by <code>ResourceMananger</code> when <code>ApplicationMaster</code>
 negotiates resource with <code>ResourceManager</code> and
 validated on <code>NodeManager</code> side.</p>
 @see  AllocateResponse#getNMTokens()]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.NMToken -->
  <!-- start class org.apache.hadoop.yarn.api.records.NodeId -->
  <class name="NodeId" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <implements name="java.lang.Comparable"/>
    <constructor name="NodeId"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getHost" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>hostname</em> of the node.
 @return <em>hostname</em> of the node]]>
      </doc>
    </method>
    <method name="getPort" return="int"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>port</em> for communicating with the node.
 @return <em>port</em> for communicating with the node]]>
      </doc>
    </method>
    <method name="toString" return="java.lang.String"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="hashCode" return="int"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="equals" return="boolean"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="obj" type="java.lang.Object"/>
    </method>
    <method name="compareTo" return="int"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="other" type="org.apache.hadoop.yarn.api.records.NodeId"/>
    </method>
    <method name="build"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="protected"
      deprecated="not deprecated">
    </method>
    <doc>
    <![CDATA[<p><code>NodeId</code> is the unique identifier for a node.</p>

 <p>It includes the <em>hostname</em> and <em>port</em> to uniquely
 identify the node. Thus, it is unique across restarts of any
 <code>NodeManager</code>.</p>]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.NodeId -->
  <!-- start class org.apache.hadoop.yarn.api.records.NodeReport -->
  <class name="NodeReport" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="NodeReport"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getNodeId" return="org.apache.hadoop.yarn.api.records.NodeId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>NodeId</code> of the node.
 @return <code>NodeId</code> of the node]]>
      </doc>
    </method>
    <method name="getNodeState" return="org.apache.hadoop.yarn.api.records.NodeState"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>NodeState</code> of the node.
 @return <code>NodeState</code> of the node]]>
      </doc>
    </method>
    <method name="getHttpAddress" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>http address</em> of the node.
 @return <em>http address</em> of the node]]>
      </doc>
    </method>
    <method name="getRackName" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>rack name</em> for the node.
 @return <em>rack name</em> for the node]]>
      </doc>
    </method>
    <method name="getUsed" return="org.apache.hadoop.yarn.api.records.Resource"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get <em>used</em> <code>Resource</code> on the node.
 @return <em>used</em> <code>Resource</code> on the node]]>
      </doc>
    </method>
    <method name="getCapability" return="org.apache.hadoop.yarn.api.records.Resource"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>total</em> <code>Resource</code> on the node.
 @return <em>total</em> <code>Resource</code> on the node]]>
      </doc>
    </method>
    <method name="getHealthReport" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>diagnostic health report</em> of the node.
 @return <em>diagnostic health report</em> of the node]]>
      </doc>
    </method>
    <method name="getLastHealthReportTime" return="long"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>last timestamp</em> at which the health report was received.
 @return <em>last timestamp</em> at which the health report was received]]>
      </doc>
    </method>
    <method name="getNodeLabels" return="java.util.Set"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get labels of this node
 @return labels of this node]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p><code>NodeReport</code> is a summary of runtime information of a
 node in the cluster.</p>

 <p>It includes details such as:
   <ul>
     <li>{@link NodeId} of the node.</li>
     <li>HTTP Tracking URL of the node.</li>
     <li>Rack name for the node.</li>
     <li>Used {@link Resource} on the node.</li>
     <li>Total available {@link Resource} of the node.</li>
     <li>Number of running containers on the node.</li>
   </ul>
 </p>

 @see ApplicationClientProtocol#getClusterNodes(org.apache.hadoop.yarn.api.protocolrecords.GetClusterNodesRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.NodeReport -->
  <!-- start class org.apache.hadoop.yarn.api.records.NodeState -->
  <class name="NodeState" extends="java.lang.Enum"
    abstract="false"
    static="false" final="true" visibility="public"
    deprecated="not deprecated">
    <method name="values" return="org.apache.hadoop.yarn.api.records.NodeState[]"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="valueOf" return="org.apache.hadoop.yarn.api.records.NodeState"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="name" type="java.lang.String"/>
    </method>
    <method name="isUnusable" return="boolean"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <doc>
    <![CDATA[<p>State of a <code>Node</code>.</p>]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.NodeState -->
  <!-- start class org.apache.hadoop.yarn.api.records.PreemptionContainer -->
  <class name="PreemptionContainer" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="PreemptionContainer"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getId" return="org.apache.hadoop.yarn.api.records.ContainerId"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[@return Container referenced by this handle.]]>
      </doc>
    </method>
    <doc>
    <![CDATA[Specific container requested back by the <code>ResourceManager</code>.
 @see PreemptionContract
 @see StrictPreemptionContract]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.PreemptionContainer -->
  <!-- start class org.apache.hadoop.yarn.api.records.PreemptionContract -->
  <class name="PreemptionContract" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="PreemptionContract"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getResourceRequest" return="java.util.List"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[If the AM releases resources matching these requests, then the {@link
 PreemptionContainer}s enumerated in {@link #getContainers()} should not be
 evicted from the cluster. Due to delays in propagating cluster state and
 sending these messages, there are conditions where satisfied contracts may
 not prevent the platform from killing containers.
 @return List of {@link PreemptionResourceRequest} to update the
 <code>ApplicationMaster</code> about resources requested back by the
 <code>ResourceManager</code>.
 @see AllocateRequest#setAskList(List)]]>
      </doc>
    </method>
    <method name="getContainers" return="java.util.Set"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Assign the set of {@link PreemptionContainer} specifying which containers
 owned by the <code>ApplicationMaster</code> that may be reclaimed by the
 <code>ResourceManager</code>. If the AM prefers a different set of
 containers, then it may checkpoint or kill containers matching the
 description in {@link #getResourceRequest}.
 @return Set of containers at risk if the contract is not met.]]>
      </doc>
    </method>
    <doc>
    <![CDATA[Description of resources requested back by the <code>ResourceManager</code>.
 The <code>ApplicationMaster</code> (AM) can satisfy this request according
 to its own priorities to prevent containers from being forcibly killed by
 the platform.
 @see PreemptionMessage]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.PreemptionContract -->
  <!-- start class org.apache.hadoop.yarn.api.records.PreemptionMessage -->
  <class name="PreemptionMessage" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="PreemptionMessage"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getStrictContract" return="org.apache.hadoop.yarn.api.records.StrictPreemptionContract"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[@return Specific resources that may be killed by the
 <code>ResourceManager</code>]]>
      </doc>
    </method>
    <method name="getContract" return="org.apache.hadoop.yarn.api.records.PreemptionContract"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[@return Contract describing resources to return to the cluster.]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>A {@link PreemptionMessage} is part of the RM-AM protocol, and it is used by
 the RM to specify resources that the RM wants to reclaim from this
 <code>ApplicationMaster</code> (AM). The AM receives a {@link
 StrictPreemptionContract} message encoding which containers the platform may
 forcibly kill, granting it an opportunity to checkpoint state or adjust its
 execution plan. The message may also include a {@link PreemptionContract}
 granting the AM more latitude in selecting which resources to return to the
 cluster.<p>

 <p>The AM should decode both parts of the message. The {@link
 StrictPreemptionContract} specifies particular allocations that the RM
 requires back. The AM can checkpoint containers' state, adjust its execution
 plan to move the computation, or take no action and hope that conditions that
 caused the RM to ask for the container will change.<p>

 <p>In contrast, the {@link PreemptionContract} also includes a description of
 resources with a set of containers. If the AM releases containers matching
 that profile, then the containers enumerated in {@link
 PreemptionContract#getContainers()} may not be killed.<p>

 <p>Each preemption message reflects the RM's current understanding of the
 cluster state, so a request to return <emph>N</emph> containers may not
 reflect containers the AM is releasing, recently exited containers the RM has
 yet to learn about, or new containers allocated before the message was
 generated. Conversely, an RM may request a different profile of containers in
 subsequent requests.<p>

 <p>The policy enforced by the RM is part of the scheduler. Generally, only
 containers that have been requested consistently should be killed, but the
 details are not specified.<p>]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.PreemptionMessage -->
  <!-- start class org.apache.hadoop.yarn.api.records.PreemptionResourceRequest -->
  <class name="PreemptionResourceRequest" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="PreemptionResourceRequest"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getResourceRequest" return="org.apache.hadoop.yarn.api.records.ResourceRequest"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[@return Resource described in this request, to be matched against running
 containers.]]>
      </doc>
    </method>
    <doc>
    <![CDATA[Description of resources requested back by the cluster.
 @see PreemptionContract
 @see AllocateRequest#setAskList(java.util.List)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.PreemptionResourceRequest -->
  <!-- start class org.apache.hadoop.yarn.api.records.Priority -->
  <class name="Priority" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <implements name="java.lang.Comparable"/>
    <constructor name="Priority"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.records.Priority"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="p" type="int"/>
    </method>
    <method name="getPriority" return="int"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the assigned priority
 @return the assigned priority]]>
      </doc>
    </method>
    <method name="setPriority"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="priority" type="int"/>
      <doc>
      <![CDATA[Set the assigned priority
 @param priority the assigned priority]]>
      </doc>
    </method>
    <method name="hashCode" return="int"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="equals" return="boolean"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="obj" type="java.lang.Object"/>
    </method>
    <method name="compareTo" return="int"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="other" type="org.apache.hadoop.yarn.api.records.Priority"/>
    </method>
    <method name="toString" return="java.lang.String"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <field name="UNDEFINED" type="org.apache.hadoop.yarn.api.records.Priority"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <doc>
    <![CDATA[The priority assigned to a ResourceRequest or Application or Container
 allocation]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.Priority -->
  <!-- start class org.apache.hadoop.yarn.api.records.QueueACL -->
  <class name="QueueACL" extends="java.lang.Enum"
    abstract="false"
    static="false" final="true" visibility="public"
    deprecated="not deprecated">
    <method name="values" return="org.apache.hadoop.yarn.api.records.QueueACL[]"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="valueOf" return="org.apache.hadoop.yarn.api.records.QueueACL"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="name" type="java.lang.String"/>
    </method>
    <doc>
    <![CDATA[<p>
 <code>QueueACL</code> enumerates the various ACLs for queues.
 </p>

 <p>
 The ACL is one of:
 <ul>
 <li>{@link #SUBMIT_APPLICATIONS} - ACL to submit applications to the
 queue.</li>
 <li>{@link #ADMINISTER_QUEUE} - ACL to administer the queue.</li>
 </ul>
 </p>

 @see QueueInfo
 @see ApplicationClientProtocol#getQueueUserAcls(org.apache.hadoop.yarn.api.protocolrecords.GetQueueUserAclsInfoRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.QueueACL -->
  <!-- start class org.apache.hadoop.yarn.api.records.QueueInfo -->
  <class name="QueueInfo" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="QueueInfo"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getQueueName" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>name</em> of the queue.
 @return <em>name</em> of the queue]]>
      </doc>
    </method>
    <method name="getCapacity" return="float"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>configured capacity</em> of the queue.
 @return <em>configured capacity</em> of the queue]]>
      </doc>
    </method>
    <method name="getMaximumCapacity" return="float"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>maximum capacity</em> of the queue.
 @return <em>maximum capacity</em> of the queue]]>
      </doc>
    </method>
    <method name="getCurrentCapacity" return="float"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>current capacity</em> of the queue.
 @return <em>current capacity</em> of the queue]]>
      </doc>
    </method>
    <method name="getChildQueues" return="java.util.List"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>child queues</em> of the queue.
 @return <em>child queues</em> of the queue]]>
      </doc>
    </method>
    <method name="getApplications" return="java.util.List"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>running applications</em> of the queue.
 @return <em>running applications</em> of the queue]]>
      </doc>
    </method>
    <method name="getQueueState" return="org.apache.hadoop.yarn.api.records.QueueState"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>QueueState</code> of the queue.
 @return <code>QueueState</code> of the queue]]>
      </doc>
    </method>
    <method name="getAccessibleNodeLabels" return="java.util.Set"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>accessible node labels</code> of the queue.
 @return <code>accessible node labels</code> of the queue]]>
      </doc>
    </method>
    <method name="getDefaultNodeLabelExpression" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>default node label expression</code> of the queue, this takes
 affect only when the <code>ApplicationSubmissionContext</code> and
 <code>ResourceRequest</code> don't specify their
 <code>NodeLabelExpression</code>.

 @return <code>default node label expression</code> of the queue]]>
      </doc>
    </method>
    <method name="setDefaultNodeLabelExpression"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="defaultLabelExpression" type="java.lang.String"/>
    </method>
    <doc>
    <![CDATA[<p>QueueInfo is a report of the runtime information of the queue.</p>

 <p>It includes information such as:
   <ul>
     <li>Queue name.</li>
     <li>Capacity of the queue.</li>
     <li>Maximum capacity of the queue.</li>
     <li>Current capacity of the queue.</li>
     <li>Child queues.</li>
     <li>Running applications.</li>
     <li>{@link QueueState} of the queue.</li>
   </ul>
 </p>

 @see QueueState
 @see ApplicationClientProtocol#getQueueInfo(org.apache.hadoop.yarn.api.protocolrecords.GetQueueInfoRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.QueueInfo -->
  <!-- start class org.apache.hadoop.yarn.api.records.QueueState -->
  <class name="QueueState" extends="java.lang.Enum"
    abstract="false"
    static="false" final="true" visibility="public"
    deprecated="not deprecated">
    <method name="values" return="org.apache.hadoop.yarn.api.records.QueueState[]"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="valueOf" return="org.apache.hadoop.yarn.api.records.QueueState"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="name" type="java.lang.String"/>
    </method>
    <doc>
    <![CDATA[<p>State of a Queue.</p>

 <p>A queue is in one of:
   <ul>
     <li>{@link #RUNNING} - normal state.</li>
     <li>{@link #STOPPED} - not accepting new application submissions.
   </ul>
 </p>

 @see QueueInfo
 @see ApplicationClientProtocol#getQueueInfo(org.apache.hadoop.yarn.api.protocolrecords.GetQueueInfoRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.QueueState -->
  <!-- start class org.apache.hadoop.yarn.api.records.QueueUserACLInfo -->
  <class name="QueueUserACLInfo" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="QueueUserACLInfo"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getQueueName" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>queue name</em> of the queue.
 @return <em>queue name</em> of the queue]]>
      </doc>
    </method>
    <method name="getUserAcls" return="java.util.List"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the list of <code>QueueACL</code> for the given user.
 @return list of <code>QueueACL</code> for the given user]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p><code>QueueUserACLInfo</code> provides information {@link QueueACL} for
 the given user.</p>

 @see QueueACL
 @see ApplicationClientProtocol#getQueueUserAcls(org.apache.hadoop.yarn.api.protocolrecords.GetQueueUserAclsInfoRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.QueueUserACLInfo -->
  <!-- start class org.apache.hadoop.yarn.api.records.ReservationDefinition -->
  <class name="ReservationDefinition" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="ReservationDefinition"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.records.ReservationDefinition"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="arrival" type="long"/>
      <param name="deadline" type="long"/>
      <param name="reservationRequests" type="org.apache.hadoop.yarn.api.records.ReservationRequests"/>
      <param name="name" type="java.lang.String"/>
    </method>
    <method name="getArrival" return="long"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the arrival time or the earliest time from which the resource(s) can be
 allocated. Time expressed as UTC.

 @return the earliest valid time for this reservation]]>
      </doc>
    </method>
    <method name="setArrival"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="earliestStartTime" type="long"/>
      <doc>
      <![CDATA[Set the arrival time or the earliest time from which the resource(s) can be
 allocated. Time expressed as UTC.

 @param earliestStartTime the earliest valid time for this reservation]]>
      </doc>
    </method>
    <method name="getDeadline" return="long"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the deadline or the latest time by when the resource(s) must be
 allocated. Time expressed as UTC.

 @return the deadline or the latest time by when the resource(s) must be
         allocated]]>
      </doc>
    </method>
    <method name="setDeadline"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="latestEndTime" type="long"/>
      <doc>
      <![CDATA[Set the deadline or the latest time by when the resource(s) must be
 allocated. Time expressed as UTC.

 @param latestEndTime the deadline or the latest time by when the
          resource(s) should be allocated]]>
      </doc>
    </method>
    <method name="getReservationRequests" return="org.apache.hadoop.yarn.api.records.ReservationRequests"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the list of {@link ReservationRequests} representing the resources
 required by the application

 @return the list of {@link ReservationRequests}]]>
      </doc>
    </method>
    <method name="setReservationRequests"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="reservationRequests" type="org.apache.hadoop.yarn.api.records.ReservationRequests"/>
      <doc>
      <![CDATA[Set the list of {@link ReservationRequests} representing the resources
 required by the application

 @param reservationRequests the list of {@link ReservationRequests}]]>
      </doc>
    </method>
    <method name="getReservationName" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the name for this reservation. The name need-not be unique, and it is
 just a mnemonic for the user (akin to job names). Accepted reservations are
 uniquely identified by a system-generated ReservationId.

 @return string representing the name of the corresponding reserved resource
         allocation in the scheduler]]>
      </doc>
    </method>
    <method name="setReservationName"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="name" type="java.lang.String"/>
      <doc>
      <![CDATA[Set the name for this reservation. The name need-not be unique, and it is
 just a mnemonic for the user (akin to job names). Accepted reservations are
 uniquely identified by a system-generated ReservationId.

 @param name representing the name of the corresponding reserved resource
          allocation in the scheduler]]>
      </doc>
    </method>
    <doc>
    <![CDATA[{@link ReservationDefinition} captures the set of resource and time
 constraints the user cares about regarding a reservation.

 @see ResourceRequest]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.ReservationDefinition -->
  <!-- start class org.apache.hadoop.yarn.api.records.ReservationId -->
  <class name="ReservationId" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <implements name="java.lang.Comparable"/>
    <constructor name="ReservationId"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getId" return="long"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the long identifier of the {@link ReservationId} which is unique for
 all Reservations started by a particular instance of the
 {@code ResourceManager}.

 @return long identifier of the {@link ReservationId}]]>
      </doc>
    </method>
    <method name="getClusterTimestamp" return="long"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <em>start time</em> of the {@code ResourceManager} which is used to
 generate globally unique {@link ReservationId}.

 @return <em>start time</em> of the {@code ResourceManager}]]>
      </doc>
    </method>
    <method name="build"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="protected"
      deprecated="not deprecated">
    </method>
    <method name="compareTo" return="int"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="other" type="org.apache.hadoop.yarn.api.records.ReservationId"/>
    </method>
    <method name="toString" return="java.lang.String"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="parseReservationId" return="org.apache.hadoop.yarn.api.records.ReservationId"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="reservationId" type="java.lang.String"/>
      <exception name="IOException" type="java.io.IOException"/>
      <doc>
      <![CDATA[Parse the string argument as a {@link ReservationId}

 @param reservationId the string representation of the {@link ReservationId}
 @return the {@link ReservationId} corresponding to the input string if
         valid, null if input is null
 @throws IOException if unable to parse the input string]]>
      </doc>
    </method>
    <method name="hashCode" return="int"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="equals" return="boolean"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="obj" type="java.lang.Object"/>
    </method>
    <field name="reserveIdStrPrefix" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="clusterTimestamp" type="long"
      transient="false" volatile="false"
      static="false" final="false" visibility="protected"
      deprecated="not deprecated">
    </field>
    <field name="id" type="long"
      transient="false" volatile="false"
      static="false" final="false" visibility="protected"
      deprecated="not deprecated">
    </field>
    <doc>
    <![CDATA[<p>
 {@link ReservationId} represents the <em>globally unique</em> identifier for
 a reservation.
 </p>

 <p>
 The globally unique nature of the identifier is achieved by using the
 <em>cluster timestamp</em> i.e. start-time of the {@code ResourceManager}
 along with a monotonically increasing counter for the reservation.
 </p>]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.ReservationId -->
  <!-- start class org.apache.hadoop.yarn.api.records.ReservationRequest -->
  <class name="ReservationRequest" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <implements name="java.lang.Comparable"/>
    <constructor name="ReservationRequest"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.records.ReservationRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="capability" type="org.apache.hadoop.yarn.api.records.Resource"/>
      <param name="numContainers" type="int"/>
    </method>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.records.ReservationRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="capability" type="org.apache.hadoop.yarn.api.records.Resource"/>
      <param name="numContainers" type="int"/>
      <param name="concurrency" type="int"/>
      <param name="duration" type="long"/>
    </method>
    <method name="getCapability" return="org.apache.hadoop.yarn.api.records.Resource"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the {@link Resource} capability of the request.

 @return {@link Resource} capability of the request]]>
      </doc>
    </method>
    <method name="setCapability"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="capability" type="org.apache.hadoop.yarn.api.records.Resource"/>
      <doc>
      <![CDATA[Set the {@link Resource} capability of the request

 @param capability {@link Resource} capability of the request]]>
      </doc>
    </method>
    <method name="getNumContainers" return="int"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the number of containers required with the given specifications.

 @return number of containers required with the given specifications]]>
      </doc>
    </method>
    <method name="setNumContainers"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="numContainers" type="int"/>
      <doc>
      <![CDATA[Set the number of containers required with the given specifications

 @param numContainers number of containers required with the given
          specifications]]>
      </doc>
    </method>
    <method name="getConcurrency" return="int"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the number of containers that need to be scheduled concurrently. The
 default value of 1 would fall back to the current non concurrency
 constraints on the scheduling behavior.

 @return the number of containers to be concurrently scheduled]]>
      </doc>
    </method>
    <method name="setConcurrency"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="numContainers" type="int"/>
      <doc>
      <![CDATA[Set the number of containers that need to be scheduled concurrently. The
 default value of 1 would fall back to the current non concurrency
 constraints on the scheduling behavior.

 @param numContainers the number of containers to be concurrently scheduled]]>
      </doc>
    </method>
    <method name="getDuration" return="long"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the duration in milliseconds for which the resource is required. A
 default value of -1, indicates an unspecified lease duration, and fallback
 to current behavior.

 @return the duration in milliseconds for which the resource is required]]>
      </doc>
    </method>
    <method name="setDuration"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="duration" type="long"/>
      <doc>
      <![CDATA[Set the duration in milliseconds for which the resource is required.

 @param duration the duration in milliseconds for which the resource is
          required]]>
      </doc>
    </method>
    <method name="hashCode" return="int"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="equals" return="boolean"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="obj" type="java.lang.Object"/>
    </method>
    <method name="compareTo" return="int"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="other" type="org.apache.hadoop.yarn.api.records.ReservationRequest"/>
    </method>
    <doc>
    <![CDATA[<p>
 {@link ReservationRequest} represents the request made by an application to
 the {@code ResourceManager} to reserve {@link Resource}s.
 </p>

 <p>
 It includes:
 <ul>
 <li>{@link Resource} required for each request.</li>
 <li>
 Number of containers, of above specifications, which are required by the
 application.</li>
 <li>
 Concurrency that indicates the gang size of the request.</li>
 </ul>
 </p>]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.ReservationRequest -->
  <!-- start class org.apache.hadoop.yarn.api.records.ReservationRequest.ReservationRequestComparator -->
  <class name="ReservationRequest.ReservationRequestComparator" extends="java.lang.Object"
    abstract="false"
    static="true" final="false" visibility="public"
    deprecated="not deprecated">
    <implements name="java.util.Comparator"/>
    <implements name="java.io.Serializable"/>
    <constructor name="ReservationRequest.ReservationRequestComparator"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="compare" return="int"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="r1" type="org.apache.hadoop.yarn.api.records.ReservationRequest"/>
      <param name="r2" type="org.apache.hadoop.yarn.api.records.ReservationRequest"/>
    </method>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.ReservationRequest.ReservationRequestComparator -->
  <!-- start class org.apache.hadoop.yarn.api.records.ReservationRequestInterpreter -->
  <class name="ReservationRequestInterpreter" extends="java.lang.Enum"
    abstract="false"
    static="false" final="true" visibility="public"
    deprecated="not deprecated">
    <method name="values" return="org.apache.hadoop.yarn.api.records.ReservationRequestInterpreter[]"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="valueOf" return="org.apache.hadoop.yarn.api.records.ReservationRequestInterpreter"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="name" type="java.lang.String"/>
    </method>
    <doc>
    <![CDATA[Enumeration of various types of dependencies among multiple
 {@link ReservationRequests} within one {@link ReservationDefinition} (from
 least constraining to most constraining).]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.ReservationRequestInterpreter -->
  <!-- start class org.apache.hadoop.yarn.api.records.ReservationRequests -->
  <class name="ReservationRequests" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="ReservationRequests"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.records.ReservationRequests"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="reservationResources" type="java.util.List"/>
      <param name="type" type="org.apache.hadoop.yarn.api.records.ReservationRequestInterpreter"/>
    </method>
    <method name="getReservationResources" return="java.util.List"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the list of {@link ReservationRequest} representing the resources
 required by the application

 @return the list of {@link ReservationRequest}]]>
      </doc>
    </method>
    <method name="setReservationResources"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="reservationResources" type="java.util.List"/>
      <doc>
      <![CDATA[Set the list of {@link ReservationRequest} representing the resources
 required by the application

 @param reservationResources the list of {@link ReservationRequest}]]>
      </doc>
    </method>
    <method name="getInterpreter" return="org.apache.hadoop.yarn.api.records.ReservationRequestInterpreter"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the {@link ReservationRequestInterpreter}, representing how the list of
 resources should be allocated, this captures temporal ordering and other
 constraints.

 @return the list of {@link ReservationRequestInterpreter}]]>
      </doc>
    </method>
    <method name="setInterpreter"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="interpreter" type="org.apache.hadoop.yarn.api.records.ReservationRequestInterpreter"/>
      <doc>
      <![CDATA[Set the {@link ReservationRequestInterpreter}, representing how the list of
 resources should be allocated, this captures temporal ordering and other
 constraints.

 @param interpreter the {@link ReservationRequestInterpreter} for this
          reservation]]>
      </doc>
    </method>
    <doc>
    <![CDATA[{@link ReservationRequests} captures the set of resource and constraints the
 user cares about regarding a reservation.

 @see ReservationRequest]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.ReservationRequests -->
  <!-- start class org.apache.hadoop.yarn.api.records.Resource -->
  <class name="Resource" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <implements name="java.lang.Comparable"/>
    <constructor name="Resource"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.records.Resource"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="memory" type="int"/>
      <param name="vCores" type="int"/>
    </method>
    <method name="getMemory" return="int"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get <em>memory</em> of the resource.
 @return <em>memory</em> of the resource]]>
      </doc>
    </method>
    <method name="setMemory"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="memory" type="int"/>
      <doc>
      <![CDATA[Set <em>memory</em> of the resource.
 @param memory <em>memory</em> of the resource]]>
      </doc>
    </method>
    <method name="getVirtualCores" return="int"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get <em>number of virtual cpu cores</em> of the resource.

 Virtual cores are a unit for expressing CPU parallelism. A node's capacity
 should be configured with virtual cores equal to its number of physical cores.
 A container should be requested with the number of cores it can saturate, i.e.
 the average number of threads it expects to have runnable at a time.

 @return <em>num of virtual cpu cores</em> of the resource]]>
      </doc>
    </method>
    <method name="setVirtualCores"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="vCores" type="int"/>
      <doc>
      <![CDATA[Set <em>number of virtual cpu cores</em> of the resource.

 Virtual cores are a unit for expressing CPU parallelism. A node's capacity
 should be configured with virtual cores equal to its number of physical cores.
 A container should be requested with the number of cores it can saturate, i.e.
 the average number of threads it expects to have runnable at a time.

 @param vCores <em>number of virtual cpu cores</em> of the resource]]>
      </doc>
    </method>
    <method name="hashCode" return="int"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="equals" return="boolean"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="obj" type="java.lang.Object"/>
    </method>
    <method name="toString" return="java.lang.String"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <doc>
    <![CDATA[<p><code>Resource</code> models a set of computer resources in the
 cluster.</p>

 <p>Currently it models both <em>memory</em> and <em>CPU</em>.</p>

 <p>The unit for memory is megabytes. CPU is modeled with virtual cores
 (vcores), a unit for expressing parallelism. A node's capacity should
 be configured with virtual cores equal to its number of physical cores. A
 container should be requested with the number of cores it can saturate, i.e.
 the average number of threads it expects to have runnable at a time.</p>

 <p>Virtual cores take integer values and thus currently CPU-scheduling is
 very coarse.  A complementary axis for CPU requests that represents processing
 power will likely be added in the future to enable finer-grained resource
 configuration.</p>

 <p>Typically, applications request <code>Resource</code> of suitable
 capability to run their component tasks.</p>

 @see ResourceRequest
 @see ApplicationMasterProtocol#allocate(org.apache.hadoop.yarn.api.protocolrecords.AllocateRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.Resource -->
  <!-- start class org.apache.hadoop.yarn.api.records.ResourceBlacklistRequest -->
  <class name="ResourceBlacklistRequest" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="ResourceBlacklistRequest"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.records.ResourceBlacklistRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="additions" type="java.util.List"/>
      <param name="removals" type="java.util.List"/>
    </method>
    <method name="getBlacklistAdditions" return="java.util.List"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the list of resource-names which should be added to the
 application blacklist.

 @return list of resource-names which should be added to the
         application blacklist]]>
      </doc>
    </method>
    <method name="setBlacklistAdditions"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="resourceNames" type="java.util.List"/>
      <doc>
      <![CDATA[Set list of resource-names which should be added to the application blacklist.

 @param resourceNames list of resource-names which should be added to the
                  application blacklist]]>
      </doc>
    </method>
    <method name="getBlacklistRemovals" return="java.util.List"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the list of resource-names which should be removed from the
 application blacklist.

 @return list of resource-names which should be removed from the
         application blacklist]]>
      </doc>
    </method>
    <method name="setBlacklistRemovals"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="resourceNames" type="java.util.List"/>
      <doc>
      <![CDATA[Set list of resource-names which should be removed from the
 application blacklist.

 @param resourceNames list of resource-names which should be removed from the
                  application blacklist]]>
      </doc>
    </method>
    <doc>
    <![CDATA[{@link ResourceBlacklistRequest} encapsulates the list of resource-names
 which should be added or removed from the <em>blacklist</em> of resources
 for the application.

 @see ResourceRequest
 @see ApplicationMasterProtocol#allocate(org.apache.hadoop.yarn.api.protocolrecords.AllocateRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.ResourceBlacklistRequest -->
  <!-- start class org.apache.hadoop.yarn.api.records.ResourceOption -->
  <class name="ResourceOption" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="ResourceOption"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.records.ResourceOption"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="resource" type="org.apache.hadoop.yarn.api.records.Resource"/>
      <param name="overCommitTimeout" type="int"/>
    </method>
    <method name="toString" return="java.lang.String"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.ResourceOption -->
  <!-- start class org.apache.hadoop.yarn.api.records.ResourceRequest -->
  <class name="ResourceRequest" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <implements name="java.lang.Comparable"/>
    <constructor name="ResourceRequest"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.records.ResourceRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="priority" type="org.apache.hadoop.yarn.api.records.Priority"/>
      <param name="hostName" type="java.lang.String"/>
      <param name="capability" type="org.apache.hadoop.yarn.api.records.Resource"/>
      <param name="numContainers" type="int"/>
    </method>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.records.ResourceRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="priority" type="org.apache.hadoop.yarn.api.records.Priority"/>
      <param name="hostName" type="java.lang.String"/>
      <param name="capability" type="org.apache.hadoop.yarn.api.records.Resource"/>
      <param name="numContainers" type="int"/>
      <param name="relaxLocality" type="boolean"/>
    </method>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.records.ResourceRequest"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="priority" type="org.apache.hadoop.yarn.api.records.Priority"/>
      <param name="hostName" type="java.lang.String"/>
      <param name="capability" type="org.apache.hadoop.yarn.api.records.Resource"/>
      <param name="numContainers" type="int"/>
      <param name="relaxLocality" type="boolean"/>
      <param name="labelExpression" type="java.lang.String"/>
    </method>
    <method name="isAnyLocation" return="boolean"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="hostName" type="java.lang.String"/>
      <doc>
      <![CDATA[Check whether the given <em>host/rack</em> string represents an arbitrary
 host name.

 @param hostName <em>host/rack</em> on which the allocation is desired
 @return whether the given <em>host/rack</em> string represents an arbitrary
 host name]]>
      </doc>
    </method>
    <method name="getPriority" return="org.apache.hadoop.yarn.api.records.Priority"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>Priority</code> of the request.
 @return <code>Priority</code> of the request]]>
      </doc>
    </method>
    <method name="setPriority"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="priority" type="org.apache.hadoop.yarn.api.records.Priority"/>
      <doc>
      <![CDATA[Set the <code>Priority</code> of the request
 @param priority <code>Priority</code> of the request]]>
      </doc>
    </method>
    <method name="getResourceName" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the resource (e.g. <em>host/rack</em>) on which the allocation
 is desired.

 A special value of <em>*</em> signifies that <em>any</em> resource
 (host/rack) is acceptable.

 @return resource (e.g. <em>host/rack</em>) on which the allocation
                  is desired]]>
      </doc>
    </method>
    <method name="setResourceName"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="resourceName" type="java.lang.String"/>
      <doc>
      <![CDATA[Set the resource name (e.g. <em>host/rack</em>) on which the allocation
 is desired.

 A special value of <em>*</em> signifies that <em>any</em> resource name
 (e.g. host/rack) is acceptable.

 @param resourceName (e.g. <em>host/rack</em>) on which the
                     allocation is desired]]>
      </doc>
    </method>
    <method name="getCapability" return="org.apache.hadoop.yarn.api.records.Resource"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the <code>Resource</code> capability of the request.
 @return <code>Resource</code> capability of the request]]>
      </doc>
    </method>
    <method name="setCapability"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="capability" type="org.apache.hadoop.yarn.api.records.Resource"/>
      <doc>
      <![CDATA[Set the <code>Resource</code> capability of the request
 @param capability <code>Resource</code> capability of the request]]>
      </doc>
    </method>
    <method name="getNumContainers" return="int"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the number of containers required with the given specifications.
 @return number of containers required with the given specifications]]>
      </doc>
    </method>
    <method name="setNumContainers"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="numContainers" type="int"/>
      <doc>
      <![CDATA[Set the number of containers required with the given specifications
 @param numContainers number of containers required with the given
                      specifications]]>
      </doc>
    </method>
    <method name="getRelaxLocality" return="boolean"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get whether locality relaxation is enabled with this
 <code>ResourceRequest</code>. Defaults to true.

 @return whether locality relaxation is enabled with this
 <code>ResourceRequest</code>.]]>
      </doc>
    </method>
    <method name="setRelaxLocality"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="relaxLocality" type="boolean"/>
      <doc>
      <![CDATA[<p>For a request at a network hierarchy level, set whether locality can be relaxed
 to that level and beyond.<p>

 <p>If the flag is off on a rack-level <code>ResourceRequest</code>,
 containers at that request's priority will not be assigned to nodes on that
 request's rack unless requests specifically for those nodes have also been
 submitted.<p>

 <p>If the flag is off on an {@link ResourceRequest#ANY}-level
 <code>ResourceRequest</code>, containers at that request's priority will
 only be assigned on racks for which specific requests have also been
 submitted.<p>

 <p>For example, to request a container strictly on a specific node, the
 corresponding rack-level and any-level requests should have locality
 relaxation set to false.  Similarly, to request a container strictly on a
 specific rack, the corresponding any-level request should have locality
 relaxation set to false.<p>

 @param relaxLocality whether locality relaxation is enabled with this
 <code>ResourceRequest</code>.]]>
      </doc>
    </method>
    <method name="getNodeLabelExpression" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get node-label-expression for this Resource Request. If this is set, all
 containers allocated to satisfy this resource-request will be only on those
 nodes that satisfy this node-label-expression

 @return node-label-expression]]>
      </doc>
    </method>
    <method name="setNodeLabelExpression"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="nodelabelExpression" type="java.lang.String"/>
      <doc>
      <![CDATA[Set node label expression of this resource request. Now only
 support AND(&&), in the future will provide support for OR(||), NOT(!).

 Examples:
 - GPU && LARGE_MEM, ask for node has label GPU and LARGE_MEM together
 - "" (empty) means ask for node doesn't have label on it, this is default
   behavior

 @param nodelabelExpression node-label-expression of this ResourceRequest]]>
      </doc>
    </method>
    <method name="hashCode" return="int"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="equals" return="boolean"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="obj" type="java.lang.Object"/>
    </method>
    <method name="compareTo" return="int"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="other" type="org.apache.hadoop.yarn.api.records.ResourceRequest"/>
    </method>
    <field name="ANY" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The constant string representing no locality.
 It should be used by all references that want to pass an arbitrary host
 name in.]]>
      </doc>
    </field>
    <doc>
    <![CDATA[<p><code>ResourceRequest</code> represents the request made by an
 application to the <code>ResourceManager</code> to obtain various
 <code>Container</code> allocations.</p>

 <p>It includes:
   <ul>
     <li>{@link Priority} of the request.</li>
     <li>
       The <em>name</em> of the machine or rack on which the allocation is
       desired. A special value of <em>*</em> signifies that
       <em>any</em> host/rack is acceptable to the application.
     </li>
     <li>{@link Resource} required for each request.</li>
     <li>
       Number of containers, of above specifications, which are required
       by the application.
     </li>
     <li>
       A boolean <em>relaxLocality</em> flag, defaulting to <code>true</code>,
       which tells the <code>ResourceManager</code> if the application wants
       locality to be loose (i.e. allows fall-through to rack or <em>any</em>)
       or strict (i.e. specify hard constraint on resource allocation).
     </li>
   </ul>
 </p>

 @see Resource
 @see ApplicationMasterProtocol#allocate(org.apache.hadoop.yarn.api.protocolrecords.AllocateRequest)]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.ResourceRequest -->
  <!-- start class org.apache.hadoop.yarn.api.records.ResourceRequest.ResourceRequestComparator -->
  <class name="ResourceRequest.ResourceRequestComparator" extends="java.lang.Object"
    abstract="false"
    static="true" final="false" visibility="public"
    deprecated="not deprecated">
    <implements name="java.util.Comparator"/>
    <implements name="java.io.Serializable"/>
    <constructor name="ResourceRequest.ResourceRequestComparator"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="compare" return="int"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="r1" type="org.apache.hadoop.yarn.api.records.ResourceRequest"/>
      <param name="r2" type="org.apache.hadoop.yarn.api.records.ResourceRequest"/>
    </method>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.ResourceRequest.ResourceRequestComparator -->
  <!-- start class org.apache.hadoop.yarn.api.records.StrictPreemptionContract -->
  <class name="StrictPreemptionContract" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="StrictPreemptionContract"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getContainers" return="java.util.Set"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the set of {@link PreemptionContainer} specifying containers owned by
 the <code>ApplicationMaster</code> that may be reclaimed by the
 <code>ResourceManager</code>.
 @return the set of {@link ContainerId} to be preempted.]]>
      </doc>
    </method>
    <doc>
    <![CDATA[Enumeration of particular allocations to be reclaimed. The platform will
 reclaim exactly these resources, so the <code>ApplicationMaster</code> (AM)
 may attempt to checkpoint work or adjust its execution plan to accommodate
 it. In contrast to {@link PreemptionContract}, the AM has no flexibility in
 selecting which resources to return to the cluster.
 @see PreemptionMessage]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.StrictPreemptionContract -->
  <!-- start class org.apache.hadoop.yarn.api.records.Token -->
  <class name="Token" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="Token"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getIdentifier" return="java.nio.ByteBuffer"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the token identifier.
 @return token identifier]]>
      </doc>
    </method>
    <method name="getPassword" return="java.nio.ByteBuffer"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the token password
 @return token password]]>
      </doc>
    </method>
    <method name="getKind" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the token kind.
 @return token kind]]>
      </doc>
    </method>
    <method name="getService" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the service to which the token is allocated.
 @return service to which the token is allocated]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p><code>Token</code> is the security entity used by the framework
 to verify authenticity of any resource.</p>]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.Token -->
  <!-- start class org.apache.hadoop.yarn.api.records.URL -->
  <class name="URL" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="URL"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="newInstance" return="org.apache.hadoop.yarn.api.records.URL"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="scheme" type="java.lang.String"/>
      <param name="host" type="java.lang.String"/>
      <param name="port" type="int"/>
      <param name="file" type="java.lang.String"/>
    </method>
    <method name="getScheme" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the scheme of the URL.
 @return scheme of the URL]]>
      </doc>
    </method>
    <method name="setScheme"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="scheme" type="java.lang.String"/>
      <doc>
      <![CDATA[Set the scheme of the URL
 @param scheme scheme of the URL]]>
      </doc>
    </method>
    <method name="getUserInfo" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the user info of the URL.
 @return user info of the URL]]>
      </doc>
    </method>
    <method name="setUserInfo"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="userInfo" type="java.lang.String"/>
      <doc>
      <![CDATA[Set the user info of the URL.
 @param userInfo user info of the URL]]>
      </doc>
    </method>
    <method name="getHost" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the host of the URL.
 @return host of the URL]]>
      </doc>
    </method>
    <method name="setHost"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="host" type="java.lang.String"/>
      <doc>
      <![CDATA[Set the host of the URL.
 @param host host of the URL]]>
      </doc>
    </method>
    <method name="getPort" return="int"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the port of the URL.
 @return port of the URL]]>
      </doc>
    </method>
    <method name="setPort"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="port" type="int"/>
      <doc>
      <![CDATA[Set the port of the URL
 @param port port of the URL]]>
      </doc>
    </method>
    <method name="getFile" return="java.lang.String"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the file of the URL.
 @return file of the URL]]>
      </doc>
    </method>
    <method name="setFile"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="file" type="java.lang.String"/>
      <doc>
      <![CDATA[Set the file of the URL.
 @param file file of the URL]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p><code>URL</code> represents a serializable {@link java.net.URL}.</p>]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.URL -->
  <!-- start class org.apache.hadoop.yarn.api.records.YarnApplicationAttemptState -->
  <class name="YarnApplicationAttemptState" extends="java.lang.Enum"
    abstract="false"
    static="false" final="true" visibility="public"
    deprecated="not deprecated">
    <method name="values" return="org.apache.hadoop.yarn.api.records.YarnApplicationAttemptState[]"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="valueOf" return="org.apache.hadoop.yarn.api.records.YarnApplicationAttemptState"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="name" type="java.lang.String"/>
    </method>
    <doc>
    <![CDATA[Enumeration of various states of a <code>RMAppAttempt</code>.]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.YarnApplicationAttemptState -->
  <!-- start class org.apache.hadoop.yarn.api.records.YarnApplicationState -->
  <class name="YarnApplicationState" extends="java.lang.Enum"
    abstract="false"
    static="false" final="true" visibility="public"
    deprecated="not deprecated">
    <method name="values" return="org.apache.hadoop.yarn.api.records.YarnApplicationState[]"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="valueOf" return="org.apache.hadoop.yarn.api.records.YarnApplicationState"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="name" type="java.lang.String"/>
    </method>
    <doc>
    <![CDATA[Enumeration of various states of an <code>ApplicationMaster</code>.]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.YarnApplicationState -->
  <!-- start class org.apache.hadoop.yarn.api.records.YarnClusterMetrics -->
  <class name="YarnClusterMetrics" extends="java.lang.Object"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="YarnClusterMetrics"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getNumNodeManagers" return="int"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the number of <code>NodeManager</code>s in the cluster.
 @return number of <code>NodeManager</code>s in the cluster]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p><code>YarnClusterMetrics</code> represents cluster metrics.</p>

 <p>Currently only number of <code>NodeManager</code>s is provided.</p>]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.YarnClusterMetrics -->
</package>
<package name="org.apache.hadoop.yarn.api.records.timeline">
  <!-- start class org.apache.hadoop.yarn.api.records.timeline.TimelineDelegationTokenResponse -->
  <class name="TimelineDelegationTokenResponse" extends="java.lang.Object"
    abstract="false"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="TimelineDelegationTokenResponse"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getType" return="java.lang.String"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="setType"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="type" type="java.lang.String"/>
    </method>
    <method name="getContent" return="java.lang.Object"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="setContent"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="content" type="java.lang.Object"/>
    </method>
    <doc>
    <![CDATA[The response of delegation token related request]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.timeline.TimelineDelegationTokenResponse -->
  <!-- start class org.apache.hadoop.yarn.api.records.timeline.TimelineDomain -->
  <class name="TimelineDomain" extends="java.lang.Object"
    abstract="false"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="TimelineDomain"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getId" return="java.lang.String"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the domain ID

 @return the domain ID]]>
      </doc>
    </method>
    <method name="setId"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="id" type="java.lang.String"/>
      <doc>
      <![CDATA[Set the domain ID

 @param id the domain ID]]>
      </doc>
    </method>
    <method name="getDescription" return="java.lang.String"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the domain description

 @return the domain description]]>
      </doc>
    </method>
    <method name="setDescription"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="description" type="java.lang.String"/>
      <doc>
      <![CDATA[Set the domain description

 @param description the domain description]]>
      </doc>
    </method>
    <method name="getOwner" return="java.lang.String"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the domain owner

 @return the domain owner]]>
      </doc>
    </method>
    <method name="setOwner"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="owner" type="java.lang.String"/>
      <doc>
      <![CDATA[Set the domain owner. The user doesn't need to set it, which will
 automatically set to the user who puts the domain.

 @param owner the domain owner]]>
      </doc>
    </method>
    <method name="getReaders" return="java.lang.String"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the reader (and/or reader group) list string

 @return the reader (and/or reader group) list string]]>
      </doc>
    </method>
    <method name="setReaders"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="readers" type="java.lang.String"/>
      <doc>
      <![CDATA[Set the reader (and/or reader group) list string

 @param readers the reader (and/or reader group) list string]]>
      </doc>
    </method>
    <method name="getWriters" return="java.lang.String"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the writer (and/or writer group) list string

 @return the writer (and/or writer group) list string]]>
      </doc>
    </method>
    <method name="setWriters"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="writers" type="java.lang.String"/>
      <doc>
      <![CDATA[Set the writer (and/or writer group) list string

 @param writers the writer (and/or writer group) list string]]>
      </doc>
    </method>
    <method name="getCreatedTime" return="java.lang.Long"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the created time of the domain

 @return the created time of the domain]]>
      </doc>
    </method>
    <method name="setCreatedTime"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="createdTime" type="java.lang.Long"/>
      <doc>
      <![CDATA[Set the created time of the domain

 @param createdTime the created time of the domain]]>
      </doc>
    </method>
    <method name="getModifiedTime" return="java.lang.Long"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the modified time of the domain

 @return the modified time of the domain]]>
      </doc>
    </method>
    <method name="setModifiedTime"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="modifiedTime" type="java.lang.Long"/>
      <doc>
      <![CDATA[Set the modified time of the domain

 @param modifiedTime the modified time of the domain]]>
      </doc>
    </method>
    <doc>
    <![CDATA[<p>
 This class contains the information about a timeline domain, which is used
 to a user to host a number of timeline entities, isolating them from others'.
 The user can also define the reader and writer users/groups for the the
 domain, which is used to control the access to its entities.
 </p>

 <p>
 The reader and writer users/groups pattern that the user can supply is the
 same as what <code>AccessControlList</code> takes.
 </p>]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.timeline.TimelineDomain -->
  <!-- start class org.apache.hadoop.yarn.api.records.timeline.TimelineDomains -->
  <class name="TimelineDomains" extends="java.lang.Object"
    abstract="false"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="TimelineDomains"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getDomains" return="java.util.List"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get a list of domains

 @return a list of domains]]>
      </doc>
    </method>
    <method name="addDomain"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="domain" type="org.apache.hadoop.yarn.api.records.timeline.TimelineDomain"/>
      <doc>
      <![CDATA[Add a single domain into the existing domain list

 @param domain
          a single domain]]>
      </doc>
    </method>
    <method name="addDomains"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="domains" type="java.util.List"/>
      <doc>
      <![CDATA[All a list of domains into the existing domain list

 @param domains
          a list of domains]]>
      </doc>
    </method>
    <method name="setDomains"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="domains" type="java.util.List"/>
      <doc>
      <![CDATA[Set the domain list to the given list of domains

 @param domains
          a list of domains]]>
      </doc>
    </method>
    <doc>
    <![CDATA[The class that hosts a list of timeline domains.]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.timeline.TimelineDomains -->
  <!-- start class org.apache.hadoop.yarn.api.records.timeline.TimelineEntities -->
  <class name="TimelineEntities" extends="java.lang.Object"
    abstract="false"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="TimelineEntities"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getEntities" return="java.util.List"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get a list of entities

 @return a list of entities]]>
      </doc>
    </method>
    <method name="addEntity"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="entity" type="org.apache.hadoop.yarn.api.records.timeline.TimelineEntity"/>
      <doc>
      <![CDATA[Add a single entity into the existing entity list

 @param entity
          a single entity]]>
      </doc>
    </method>
    <method name="addEntities"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="entities" type="java.util.List"/>
      <doc>
      <![CDATA[All a list of entities into the existing entity list

 @param entities
          a list of entities]]>
      </doc>
    </method>
    <method name="setEntities"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="entities" type="java.util.List"/>
      <doc>
      <![CDATA[Set the entity list to the given list of entities

 @param entities
          a list of entities]]>
      </doc>
    </method>
    <doc>
    <![CDATA[The class that hosts a list of timeline entities.]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.timeline.TimelineEntities -->
  <!-- start class org.apache.hadoop.yarn.api.records.timeline.TimelineEntity -->
  <class name="TimelineEntity" extends="java.lang.Object"
    abstract="false"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <implements name="java.lang.Comparable"/>
    <constructor name="TimelineEntity"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getEntityType" return="java.lang.String"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the entity type

 @return the entity type]]>
      </doc>
    </method>
    <method name="setEntityType"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="entityType" type="java.lang.String"/>
      <doc>
      <![CDATA[Set the entity type

 @param entityType
          the entity type]]>
      </doc>
    </method>
    <method name="getEntityId" return="java.lang.String"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the entity Id

 @return the entity Id]]>
      </doc>
    </method>
    <method name="setEntityId"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="entityId" type="java.lang.String"/>
      <doc>
      <![CDATA[Set the entity Id

 @param entityId
          the entity Id]]>
      </doc>
    </method>
    <method name="getStartTime" return="java.lang.Long"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the start time of the entity

 @return the start time of the entity]]>
      </doc>
    </method>
    <method name="setStartTime"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="startTime" type="java.lang.Long"/>
      <doc>
      <![CDATA[Set the start time of the entity

 @param startTime
          the start time of the entity]]>
      </doc>
    </method>
    <method name="getEvents" return="java.util.List"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get a list of events related to the entity

 @return a list of events related to the entity]]>
      </doc>
    </method>
    <method name="addEvent"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="event" type="org.apache.hadoop.yarn.api.records.timeline.TimelineEvent"/>
      <doc>
      <![CDATA[Add a single event related to the entity to the existing event list

 @param event
          a single event related to the entity]]>
      </doc>
    </method>
    <method name="addEvents"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="events" type="java.util.List"/>
      <doc>
      <![CDATA[Add a list of events related to the entity to the existing event list

 @param events
          a list of events related to the entity]]>
      </doc>
    </method>
    <method name="setEvents"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="events" type="java.util.List"/>
      <doc>
      <![CDATA[Set the event list to the given list of events related to the entity

 @param events
          events a list of events related to the entity]]>
      </doc>
    </method>
    <method name="getRelatedEntities" return="java.util.Map"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the related entities

 @return the related entities]]>
      </doc>
    </method>
    <method name="addRelatedEntity"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="entityType" type="java.lang.String"/>
      <param name="entityId" type="java.lang.String"/>
      <doc>
      <![CDATA[Add an entity to the existing related entity map

 @param entityType
          the entity type
 @param entityId
          the entity Id]]>
      </doc>
    </method>
    <method name="addRelatedEntities"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="relatedEntities" type="java.util.Map"/>
      <doc>
      <![CDATA[Add a map of related entities to the existing related entity map

 @param relatedEntities
          a map of related entities]]>
      </doc>
    </method>
    <method name="setRelatedEntities"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="relatedEntities" type="java.util.Map"/>
      <doc>
      <![CDATA[Set the related entity map to the given map of related entities

 @param relatedEntities
          a map of related entities]]>
      </doc>
    </method>
    <method name="getPrimaryFilters" return="java.util.Map"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the primary filters

 @return the primary filters]]>
      </doc>
    </method>
    <method name="addPrimaryFilter"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="key" type="java.lang.String"/>
      <param name="value" type="java.lang.Object"/>
      <doc>
      <![CDATA[Add a single piece of primary filter to the existing primary filter map

 @param key
          the primary filter key
 @param value
          the primary filter value]]>
      </doc>
    </method>
    <method name="addPrimaryFilters"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="primaryFilters" type="java.util.Map"/>
      <doc>
      <![CDATA[Add a map of primary filters to the existing primary filter map

 @param primaryFilters
          a map of primary filters]]>
      </doc>
    </method>
    <method name="setPrimaryFilters"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="primaryFilters" type="java.util.Map"/>
      <doc>
      <![CDATA[Set the primary filter map to the given map of primary filters

 @param primaryFilters
          a map of primary filters]]>
      </doc>
    </method>
    <method name="getOtherInfo" return="java.util.Map"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the other information of the entity

 @return the other information of the entity]]>
      </doc>
    </method>
    <method name="addOtherInfo"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="key" type="java.lang.String"/>
      <param name="value" type="java.lang.Object"/>
      <doc>
      <![CDATA[Add one piece of other information of the entity to the existing other info
 map

 @param key
          the other information key
 @param value
          the other information value]]>
      </doc>
    </method>
    <method name="addOtherInfo"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="otherInfo" type="java.util.Map"/>
      <doc>
      <![CDATA[Add a map of other information of the entity to the existing other info map

 @param otherInfo
          a map of other information]]>
      </doc>
    </method>
    <method name="setOtherInfo"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="otherInfo" type="java.util.Map"/>
      <doc>
      <![CDATA[Set the other info map to the given map of other information

 @param otherInfo
          a map of other information]]>
      </doc>
    </method>
    <method name="getDomainId" return="java.lang.String"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the ID of the domain that the entity is to be put

 @return the domain ID]]>
      </doc>
    </method>
    <method name="setDomainId"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="domainId" type="java.lang.String"/>
      <doc>
      <![CDATA[Set the ID of the domain that the entity is to be put

 @param domainId
          the name space ID]]>
      </doc>
    </method>
    <method name="hashCode" return="int"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <method name="equals" return="boolean"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="obj" type="java.lang.Object"/>
    </method>
    <method name="compareTo" return="int"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="other" type="org.apache.hadoop.yarn.api.records.timeline.TimelineEntity"/>
    </method>
    <doc>
    <![CDATA[<p>
 The class that contains the the meta information of some conceptual entity
 and its related events. The entity can be an application, an application
 attempt, a container or whatever the user-defined object.
 </p>

 <p>
 Primary filters will be used to index the entities in
 <code>TimelineStore</code>, such that users should carefully choose the
 information they want to store as the primary filters. The remaining can be
 stored as other information.
 </p>]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.timeline.TimelineEntity -->
  <!-- start class org.apache.hadoop.yarn.api.records.timeline.TimelineEvent -->
  <class name="TimelineEvent" extends="java.lang.Object"
    abstract="false"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <implements name="java.lang.Comparable"/>
    <constructor name="TimelineEvent"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getTimestamp" return="long"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the timestamp of the event

 @return the timestamp of the event]]>
      </doc>
    </method>
    <method name="setTimestamp"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="timestamp" type="long"/>
      <doc>
      <![CDATA[Set the timestamp of the event

 @param timestamp
          the timestamp of the event]]>
      </doc>
    </method>
    <method name="getEventType" return="java.lang.String"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the event type

 @return the event type]]>
      </doc>
    </method>
    <method name="setEventType"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="eventType" type="java.lang.String"/>
      <doc>
      <![CDATA[Set the event type

 @param eventType
          the event type]]>
      </doc>
    </method>
    <method name="getEventInfo" return="java.util.Map"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Set the information of the event

 @return the information of the event]]>
      </doc>
    </method>
    <method name="addEventInfo"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="key" type="java.lang.String"/>
      <param name="value" type="java.lang.Object"/>
      <doc>
      <![CDATA[Add one piece of the information of the event to the existing information
 map

 @param key
          the information key
 @param value
          the information value]]>
      </doc>
    </method>
    <method name="addEventInfo"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="eventInfo" type="java.util.Map"/>
      <doc>
      <![CDATA[Add a map of the information of the event to the existing information map

 @param eventInfo
          a map of of the information of the event]]>
      </doc>
    </method>
    <method name="setEventInfo"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="eventInfo" type="java.util.Map"/>
      <doc>
      <![CDATA[Set the information map to the given map of the information of the event

 @param eventInfo
          a map of of the information of the event]]>
      </doc>
    </method>
    <method name="compareTo" return="int"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="other" type="org.apache.hadoop.yarn.api.records.timeline.TimelineEvent"/>
    </method>
    <method name="equals" return="boolean"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="o" type="java.lang.Object"/>
    </method>
    <method name="hashCode" return="int"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </method>
    <doc>
    <![CDATA[The class that contains the information of an event that is related to some
 conceptual entity of an application. Users are free to define what the event
 means, such as starting an application, getting allocated a container and
 etc.]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.timeline.TimelineEvent -->
  <!-- start class org.apache.hadoop.yarn.api.records.timeline.TimelineEvents -->
  <class name="TimelineEvents" extends="java.lang.Object"
    abstract="false"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="TimelineEvents"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getAllEvents" return="java.util.List"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get a list of {@link EventsOfOneEntity} instances

 @return a list of {@link EventsOfOneEntity} instances]]>
      </doc>
    </method>
    <method name="addEvent"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="eventsOfOneEntity" type="org.apache.hadoop.yarn.api.records.timeline.TimelineEvents.EventsOfOneEntity"/>
      <doc>
      <![CDATA[Add a single {@link EventsOfOneEntity} instance into the existing list

 @param eventsOfOneEntity
          a single {@link EventsOfOneEntity} instance]]>
      </doc>
    </method>
    <method name="addEvents"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="allEvents" type="java.util.List"/>
      <doc>
      <![CDATA[Add a list of {@link EventsOfOneEntity} instances into the existing list

 @param allEvents
          a list of {@link EventsOfOneEntity} instances]]>
      </doc>
    </method>
    <method name="setEvents"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="allEvents" type="java.util.List"/>
      <doc>
      <![CDATA[Set the list to the given list of {@link EventsOfOneEntity} instances

 @param allEvents
          a list of {@link EventsOfOneEntity} instances]]>
      </doc>
    </method>
    <doc>
    <![CDATA[The class that hosts a list of events, which are categorized according to
 their related entities.]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.timeline.TimelineEvents -->
  <!-- start class org.apache.hadoop.yarn.api.records.timeline.TimelineEvents.EventsOfOneEntity -->
  <class name="TimelineEvents.EventsOfOneEntity" extends="java.lang.Object"
    abstract="false"
    static="true" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="TimelineEvents.EventsOfOneEntity"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getEntityId" return="java.lang.String"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the entity Id

 @return the entity Id]]>
      </doc>
    </method>
    <method name="setEntityId"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="entityId" type="java.lang.String"/>
      <doc>
      <![CDATA[Set the entity Id

 @param entityId
          the entity Id]]>
      </doc>
    </method>
    <method name="getEntityType" return="java.lang.String"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the entity type

 @return the entity type]]>
      </doc>
    </method>
    <method name="setEntityType"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="entityType" type="java.lang.String"/>
      <doc>
      <![CDATA[Set the entity type

 @param entityType
          the entity type]]>
      </doc>
    </method>
    <method name="getEvents" return="java.util.List"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get a list of events

 @return a list of events]]>
      </doc>
    </method>
    <method name="addEvent"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="event" type="org.apache.hadoop.yarn.api.records.timeline.TimelineEvent"/>
      <doc>
      <![CDATA[Add a single event to the existing event list

 @param event
          a single event]]>
      </doc>
    </method>
    <method name="addEvents"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="events" type="java.util.List"/>
      <doc>
      <![CDATA[Add a list of event to the existing event list

 @param events
          a list of events]]>
      </doc>
    </method>
    <method name="setEvents"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="events" type="java.util.List"/>
      <doc>
      <![CDATA[Set the event list to the given list of events

 @param events
          a list of events]]>
      </doc>
    </method>
    <doc>
    <![CDATA[The class that hosts a list of events that are only related to one entity.]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.timeline.TimelineEvents.EventsOfOneEntity -->
  <!-- start class org.apache.hadoop.yarn.api.records.timeline.TimelinePutResponse -->
  <class name="TimelinePutResponse" extends="java.lang.Object"
    abstract="false"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="TimelinePutResponse"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getErrors" return="java.util.List"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get a list of {@link TimelinePutError} instances

 @return a list of {@link TimelinePutError} instances]]>
      </doc>
    </method>
    <method name="addError"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="error" type="org.apache.hadoop.yarn.api.records.timeline.TimelinePutResponse.TimelinePutError"/>
      <doc>
      <![CDATA[Add a single {@link TimelinePutError} instance into the existing list

 @param error
          a single {@link TimelinePutError} instance]]>
      </doc>
    </method>
    <method name="addErrors"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="errors" type="java.util.List"/>
      <doc>
      <![CDATA[Add a list of {@link TimelinePutError} instances into the existing list

 @param errors
          a list of {@link TimelinePutError} instances]]>
      </doc>
    </method>
    <method name="setErrors"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="errors" type="java.util.List"/>
      <doc>
      <![CDATA[Set the list to the given list of {@link TimelinePutError} instances

 @param errors
          a list of {@link TimelinePutError} instances]]>
      </doc>
    </method>
    <doc>
    <![CDATA[A class that holds a list of put errors. This is the response returned when a
 list of {@link TimelineEntity} objects is added to the timeline. If there are errors
 in storing individual entity objects, they will be indicated in the list of
 errors.]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.timeline.TimelinePutResponse -->
  <!-- start class org.apache.hadoop.yarn.api.records.timeline.TimelinePutResponse.TimelinePutError -->
  <class name="TimelinePutResponse.TimelinePutError" extends="java.lang.Object"
    abstract="false"
    static="true" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="TimelinePutResponse.TimelinePutError"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getEntityId" return="java.lang.String"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the entity Id

 @return the entity Id]]>
      </doc>
    </method>
    <method name="setEntityId"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="entityId" type="java.lang.String"/>
      <doc>
      <![CDATA[Set the entity Id

 @param entityId
          the entity Id]]>
      </doc>
    </method>
    <method name="getEntityType" return="java.lang.String"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the entity type

 @return the entity type]]>
      </doc>
    </method>
    <method name="setEntityType"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="entityType" type="java.lang.String"/>
      <doc>
      <![CDATA[Set the entity type

 @param entityType
          the entity type]]>
      </doc>
    </method>
    <method name="getErrorCode" return="int"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the error code

 @return an error code]]>
      </doc>
    </method>
    <method name="setErrorCode"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="errorCode" type="int"/>
      <doc>
      <![CDATA[Set the error code to the given error code

 @param errorCode
          an error code]]>
      </doc>
    </method>
    <field name="NO_START_TIME" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Error code returned when no start time can be found when putting an
 entity. This occurs when the entity does not already exist in the store
 and it is put with no start time or events specified.]]>
      </doc>
    </field>
    <field name="IO_EXCEPTION" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Error code returned if an IOException is encountered when putting an
 entity.]]>
      </doc>
    </field>
    <field name="SYSTEM_FILTER_CONFLICT" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Error code returned if the user specifies the timeline system reserved
 filter key]]>
      </doc>
    </field>
    <field name="ACCESS_DENIED" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Error code returned if the user is denied to access the timeline data]]>
      </doc>
    </field>
    <field name="NO_DOMAIN" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Error code returned if the entity doesn't have an valid domain ID]]>
      </doc>
    </field>
    <field name="FORBIDDEN_RELATION" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Error code returned if the user is denied to relate the entity to another
 one in different domain]]>
      </doc>
    </field>
    <doc>
    <![CDATA[A class that holds the error code for one entity.]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.api.records.timeline.TimelinePutResponse.TimelinePutError -->
</package>
<package name="org.apache.hadoop.yarn.conf">
  <!-- start class org.apache.hadoop.yarn.conf.YarnConfiguration -->
  <class name="YarnConfiguration" extends="org.apache.hadoop.conf.Configuration"
    abstract="false"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="YarnConfiguration"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <constructor name="YarnConfiguration" type="org.apache.hadoop.conf.Configuration"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getSocketAddr" return="java.net.InetSocketAddress"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="name" type="java.lang.String"/>
      <param name="defaultAddress" type="java.lang.String"/>
      <param name="defaultPort" type="int"/>
      <doc>
      <![CDATA[Get the socket address for <code>name</code> property as a
 <code>InetSocketAddress</code>. On an HA cluster,
 this fetches the address corresponding to the RM identified by
 {@link #RM_HA_ID}.
 @param name property name.
 @param defaultAddress the default value
 @param defaultPort the default port
 @return InetSocketAddress]]>
      </doc>
    </method>
    <method name="updateConnectAddr" return="java.net.InetSocketAddress"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="name" type="java.lang.String"/>
      <param name="addr" type="java.net.InetSocketAddress"/>
    </method>
    <method name="useHttps" return="boolean"
      abstract="false" native="false" synchronized="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="conf" type="org.apache.hadoop.conf.Configuration"/>
    </method>
    <field name="CS_CONFIGURATION_FILE" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="HADOOP_POLICY_CONFIGURATION_FILE" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="YARN_SITE_CONFIGURATION_FILE" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="CORE_SITE_CONFIGURATION_FILE" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_CONFIGURATION_FILES" type="java.util.List"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="APPLICATION_MAX_TAGS" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="APPLICATION_MAX_TAG_LENGTH" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="YARN_PREFIX" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEBUG_NM_DELETE_DELAY_SEC" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Delay before deleting resource to ease debugging of NM issues]]>
      </doc>
    </field>
    <field name="IPC_PREFIX" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="IPC_CLIENT_FACTORY_CLASS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Factory to create client IPC classes.]]>
      </doc>
    </field>
    <field name="DEFAULT_IPC_CLIENT_FACTORY_CLASS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="IPC_SERVER_FACTORY_CLASS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Factory to create server IPC classes.]]>
      </doc>
    </field>
    <field name="DEFAULT_IPC_SERVER_FACTORY_CLASS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="IPC_RECORD_FACTORY_CLASS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Factory to create serializeable records.]]>
      </doc>
    </field>
    <field name="DEFAULT_IPC_RECORD_FACTORY_CLASS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="IPC_RPC_IMPL" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[RPC class implementation]]>
      </doc>
    </field>
    <field name="DEFAULT_IPC_RPC_IMPL" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_PREFIX" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_CLUSTER_ID" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_HOSTNAME" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_ADDRESS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The address of the applications manager interface in the RM.]]>
      </doc>
    </field>
    <field name="DEFAULT_RM_PORT" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_RM_ADDRESS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_BIND_HOST" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The actual bind address for the RM.]]>
      </doc>
    </field>
    <field name="RM_CLIENT_THREAD_COUNT" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The number of threads used to handle applications manager requests.]]>
      </doc>
    </field>
    <field name="DEFAULT_RM_CLIENT_THREAD_COUNT" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_PRINCIPAL" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The Kerberos principal for the resource manager.]]>
      </doc>
    </field>
    <field name="RM_SCHEDULER_ADDRESS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The address of the scheduler interface.]]>
      </doc>
    </field>
    <field name="DEFAULT_RM_SCHEDULER_PORT" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_RM_SCHEDULER_ADDRESS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_SCHEDULER_MINIMUM_ALLOCATION_MB" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Miniumum request grant-able by the RM scheduler.]]>
      </doc>
    </field>
    <field name="DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_MB" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_SCHEDULER_MINIMUM_ALLOCATION_VCORES" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_RM_SCHEDULER_MINIMUM_ALLOCATION_VCORES" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_SCHEDULER_MAXIMUM_ALLOCATION_MB" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Maximum request grant-able by the RM scheduler.]]>
      </doc>
    </field>
    <field name="DEFAULT_RM_SCHEDULER_MAXIMUM_ALLOCATION_MB" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_SCHEDULER_MAXIMUM_ALLOCATION_VCORES" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_RM_SCHEDULER_MAXIMUM_ALLOCATION_VCORES" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_SCHEDULER_CLIENT_THREAD_COUNT" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Number of threads to handle scheduler interface.]]>
      </doc>
    </field>
    <field name="DEFAULT_RM_SCHEDULER_CLIENT_THREAD_COUNT" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_SCHEDULER_INCLUDE_PORT_IN_NODE_NAME" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[If the port should be included or not in the node name. The node name
 is used by the scheduler for resource requests allocation location
 matching. Typically this is just the hostname, using the port is needed
 when using minicluster and specific NM are required.]]>
      </doc>
    </field>
    <field name="DEFAULT_RM_SCHEDULER_USE_PORT_FOR_NODE_NAME" type="boolean"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_RESERVATION_SYSTEM_ENABLE" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Whether the RM should enable Reservation System]]>
      </doc>
    </field>
    <field name="DEFAULT_RM_RESERVATION_SYSTEM_ENABLE" type="boolean"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_RESERVATION_SYSTEM_CLASS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The class to use as the Reservation System.]]>
      </doc>
    </field>
    <field name="RM_RESERVATION_SYSTEM_PLAN_FOLLOWER" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The PlanFollower for the Reservation System.]]>
      </doc>
    </field>
    <field name="RM_RESERVATION_SYSTEM_PLAN_FOLLOWER_TIME_STEP" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The step size of the Reservation System.]]>
      </doc>
    </field>
    <field name="DEFAULT_RM_RESERVATION_SYSTEM_PLAN_FOLLOWER_TIME_STEP" type="long"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_SCHEDULER_ENABLE_MONITORS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Enable periodic monitor threads.
 @see #RM_SCHEDULER_MONITOR_POLICIES]]>
      </doc>
    </field>
    <field name="DEFAULT_RM_SCHEDULER_ENABLE_MONITORS" type="boolean"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_SCHEDULER_MONITOR_POLICIES" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[List of SchedulingEditPolicy classes affecting the scheduler.]]>
      </doc>
    </field>
    <field name="RM_WEBAPP_ADDRESS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The address of the RM web application.]]>
      </doc>
    </field>
    <field name="DEFAULT_RM_WEBAPP_PORT" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_RM_WEBAPP_ADDRESS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_WEBAPP_HTTPS_ADDRESS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The https address of the RM web application.]]>
      </doc>
    </field>
    <field name="YARN_SSL_CLIENT_HTTPS_NEED_AUTH_DEFAULT" type="boolean"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="YARN_SSL_SERVER_RESOURCE_DEFAULT" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_RM_WEBAPP_HTTPS_PORT" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_RM_WEBAPP_HTTPS_ADDRESS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_RESOURCE_TRACKER_ADDRESS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_RM_RESOURCE_TRACKER_PORT" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_RM_RESOURCE_TRACKER_ADDRESS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_AM_EXPIRY_INTERVAL_MS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The expiry interval for application master reporting.]]>
      </doc>
    </field>
    <field name="DEFAULT_RM_AM_EXPIRY_INTERVAL_MS" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_NM_EXPIRY_INTERVAL_MS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[How long to wait until a node manager is considered dead.]]>
      </doc>
    </field>
    <field name="DEFAULT_RM_NM_EXPIRY_INTERVAL_MS" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="YARN_ACL_ENABLE" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Are acls enabled.]]>
      </doc>
    </field>
    <field name="DEFAULT_YARN_ACL_ENABLE" type="boolean"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="YARN_ADMIN_ACL" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[ACL of who can be admin of YARN cluster.]]>
      </doc>
    </field>
    <field name="DEFAULT_YARN_ADMIN_ACL" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_YARN_APP_ACL" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[ACL used in case none is found. Allows nothing.]]>
      </doc>
    </field>
    <field name="RM_ADMIN_ADDRESS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The address of the RM admin interface.]]>
      </doc>
    </field>
    <field name="DEFAULT_RM_ADMIN_PORT" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_RM_ADMIN_ADDRESS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_ADMIN_CLIENT_THREAD_COUNT" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Number of threads used to handle RM admin interface.]]>
      </doc>
    </field>
    <field name="DEFAULT_RM_ADMIN_CLIENT_THREAD_COUNT" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_AM_MAX_ATTEMPTS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The maximum number of application attempts.
 It's a global setting for all application masters.]]>
      </doc>
    </field>
    <field name="DEFAULT_RM_AM_MAX_ATTEMPTS" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_KEYTAB" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The keytab for the resource manager.]]>
      </doc>
    </field>
    <field name="RM_WEBAPP_SPNEGO_USER_NAME_KEY" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The kerberos principal to be used for spnego filter for RM.]]>
      </doc>
    </field>
    <field name="RM_WEBAPP_SPNEGO_KEYTAB_FILE_KEY" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The kerberos keytab to be used for spnego filter for RM.]]>
      </doc>
    </field>
    <field name="RM_WEBAPP_DELEGATION_TOKEN_AUTH_FILTER" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Flag to enable override of the default kerberos authentication filter with
 the RM authentication filter to allow authentication using delegation
 tokens(fallback to kerberos if the tokens are missing). Only applicable
 when the http authentication type is kerberos.]]>
      </doc>
    </field>
    <field name="DEFAULT_RM_WEBAPP_DELEGATION_TOKEN_AUTH_FILTER" type="boolean"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_CONTAINER_ALLOC_EXPIRY_INTERVAL_MS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[How long to wait until a container is considered dead.]]>
      </doc>
    </field>
    <field name="DEFAULT_RM_CONTAINER_ALLOC_EXPIRY_INTERVAL_MS" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_NODES_INCLUDE_FILE_PATH" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Path to file with nodes to include.]]>
      </doc>
    </field>
    <field name="DEFAULT_RM_NODES_INCLUDE_FILE_PATH" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_NODES_EXCLUDE_FILE_PATH" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Path to file with nodes to exclude.]]>
      </doc>
    </field>
    <field name="DEFAULT_RM_NODES_EXCLUDE_FILE_PATH" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_RESOURCE_TRACKER_CLIENT_THREAD_COUNT" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Number of threads to handle resource tracker calls.]]>
      </doc>
    </field>
    <field name="DEFAULT_RM_RESOURCE_TRACKER_CLIENT_THREAD_COUNT" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_SCHEDULER" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The class to use as the resource scheduler.]]>
      </doc>
    </field>
    <field name="DEFAULT_RM_SCHEDULER" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_NM_HEARTBEAT_INTERVAL_MS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[RM set next Heartbeat interval for NM]]>
      </doc>
    </field>
    <field name="DEFAULT_RM_NM_HEARTBEAT_INTERVAL_MS" type="long"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_HISTORY_WRITER_MULTI_THREADED_DISPATCHER_POOL_SIZE" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Number of worker threads that write the history data.]]>
      </doc>
    </field>
    <field name="DEFAULT_RM_HISTORY_WRITER_MULTI_THREADED_DISPATCHER_POOL_SIZE" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_SYSTEM_METRICS_PUBLISHER_ENABLED" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The setting that controls whether yarn system metrics is published on the
  timeline server or not by RM.]]>
      </doc>
    </field>
    <field name="DEFAULT_RM_SYSTEM_METRICS_PUBLISHER_ENABLED" type="boolean"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_SYSTEM_METRICS_PUBLISHER_DISPATCHER_POOL_SIZE" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_RM_SYSTEM_METRICS_PUBLISHER_DISPATCHER_POOL_SIZE" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DELEGATION_KEY_UPDATE_INTERVAL_KEY" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DELEGATION_KEY_UPDATE_INTERVAL_DEFAULT" type="long"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DELEGATION_TOKEN_RENEW_INTERVAL_KEY" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DELEGATION_TOKEN_RENEW_INTERVAL_DEFAULT" type="long"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DELEGATION_TOKEN_MAX_LIFETIME_KEY" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DELEGATION_TOKEN_MAX_LIFETIME_DEFAULT" type="long"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RECOVERY_ENABLED" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_RM_RECOVERY_ENABLED" type="boolean"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_WORK_PRESERVING_RECOVERY_ENABLED" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_RM_WORK_PRESERVING_RECOVERY_ENABLED" type="boolean"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_WORK_PRESERVING_RECOVERY_SCHEDULING_WAIT_MS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_RM_WORK_PRESERVING_RECOVERY_SCHEDULING_WAIT_MS" type="long"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_ZK_PREFIX" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Zookeeper interaction configs]]>
      </doc>
    </field>
    <field name="RM_ZK_ADDRESS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_ZK_NUM_RETRIES" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_ZK_RM_NUM_RETRIES" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_ZK_RETRY_INTERVAL_MS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_RM_ZK_RETRY_INTERVAL_MS" type="long"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_ZK_TIMEOUT_MS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_RM_ZK_TIMEOUT_MS" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_ZK_ACL" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_RM_ZK_ACL" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_ZK_AUTH" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="ZK_STATE_STORE_PREFIX" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="ZK_RM_STATE_STORE_PARENT_PATH" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Parent znode path under which ZKRMStateStore will create znodes]]>
      </doc>
    </field>
    <field name="DEFAULT_ZK_RM_STATE_STORE_PARENT_PATH" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="ZK_RM_STATE_STORE_ROOT_NODE_ACL" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Root node ACLs for fencing]]>
      </doc>
    </field>
    <field name="RM_HA_PREFIX" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[HA related configs]]>
      </doc>
    </field>
    <field name="RM_HA_ENABLED" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_RM_HA_ENABLED" type="boolean"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_HA_IDS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_HA_ID" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="FS_BASED_RM_CONF_STORE" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Store the related configuration files in File System]]>
      </doc>
    </field>
    <field name="DEFAULT_FS_BASED_RM_CONF_STORE" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_CONFIGURATION_PROVIDER_CLASS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_RM_CONFIGURATION_PROVIDER_CLASS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="AUTO_FAILOVER_PREFIX" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="AUTO_FAILOVER_ENABLED" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_AUTO_FAILOVER_ENABLED" type="boolean"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="AUTO_FAILOVER_EMBEDDED" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_AUTO_FAILOVER_EMBEDDED" type="boolean"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="AUTO_FAILOVER_ZK_BASE_PATH" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_AUTO_FAILOVER_ZK_BASE_PATH" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="CLIENT_FAILOVER_PREFIX" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="CLIENT_FAILOVER_PROXY_PROVIDER" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_CLIENT_FAILOVER_PROXY_PROVIDER" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="CLIENT_FAILOVER_MAX_ATTEMPTS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="CLIENT_FAILOVER_SLEEPTIME_BASE_MS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="CLIENT_FAILOVER_SLEEPTIME_MAX_MS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="CLIENT_FAILOVER_RETRIES" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_CLIENT_FAILOVER_RETRIES" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="CLIENT_FAILOVER_RETRIES_ON_SOCKET_TIMEOUTS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_CLIENT_FAILOVER_RETRIES_ON_SOCKET_TIMEOUTS" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_STORE" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The class to use as the persistent store.]]>
      </doc>
    </field>
    <field name="FS_RM_STATE_STORE_URI" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[URI for FileSystemRMStateStore]]>
      </doc>
    </field>
    <field name="FS_RM_STATE_STORE_RETRY_POLICY_SPEC" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_FS_RM_STATE_STORE_RETRY_POLICY_SPEC" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_MAX_COMPLETED_APPLICATIONS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The maximum number of completed applications RM keeps.]]>
      </doc>
    </field>
    <field name="DEFAULT_RM_MAX_COMPLETED_APPLICATIONS" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_STATE_STORE_MAX_COMPLETED_APPLICATIONS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The maximum number of completed applications RM state store keeps, by
 default equals to DEFAULT_RM_MAX_COMPLETED_APPLICATIONS]]>
      </doc>
    </field>
    <field name="DEFAULT_RM_STATE_STORE_MAX_COMPLETED_APPLICATIONS" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_APPLICATION_NAME" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Default application name]]>
      </doc>
    </field>
    <field name="DEFAULT_APPLICATION_TYPE" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Default application type]]>
      </doc>
    </field>
    <field name="APPLICATION_TYPE_LENGTH" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Default application type length]]>
      </doc>
    </field>
    <field name="DEFAULT_QUEUE_NAME" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Default queue name]]>
      </doc>
    </field>
    <field name="RM_METRICS_RUNTIME_BUCKETS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Buckets (in minutes) for the number of apps running in each queue.]]>
      </doc>
    </field>
    <field name="DEFAULT_RM_METRICS_RUNTIME_BUCKETS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Default sizes of the runtime metric buckets in minutes.]]>
      </doc>
    </field>
    <field name="RM_AMRM_TOKEN_MASTER_KEY_ROLLING_INTERVAL_SECS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_RM_AMRM_TOKEN_MASTER_KEY_ROLLING_INTERVAL_SECS" type="long"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_CONTAINER_TOKEN_MASTER_KEY_ROLLING_INTERVAL_SECS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_RM_CONTAINER_TOKEN_MASTER_KEY_ROLLING_INTERVAL_SECS" type="long"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_NMTOKEN_MASTER_KEY_ROLLING_INTERVAL_SECS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_RM_NMTOKEN_MASTER_KEY_ROLLING_INTERVAL_SECS" type="long"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_NODEMANAGER_MINIMUM_VERSION" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_RM_NODEMANAGER_MINIMUM_VERSION" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_PROXY_USER_PREFIX" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[RM proxy users' prefix]]>
      </doc>
    </field>
    <field name="NM_PREFIX" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Prefix for all node manager configs.]]>
      </doc>
    </field>
    <field name="NM_ADMIN_USER_ENV" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Environment variables that will be sent to containers.]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_ADMIN_USER_ENV" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_ENV_WHITELIST" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Environment variables that containers may override rather than use NodeManager's default.]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_ENV_WHITELIST" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_ADDRESS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[address of node manager IPC.]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_PORT" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_NM_ADDRESS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_BIND_HOST" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The actual bind address or the NM.]]>
      </doc>
    </field>
    <field name="NM_CONTAINER_EXECUTOR" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[who will execute(launch) the containers.]]>
      </doc>
    </field>
    <field name="NM_CONTAINER_EXECUTOR_SCHED_PRIORITY" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Adjustment to make to the container os scheduling priority.
 The valid values for this could vary depending on the platform.
 On Linux, higher values mean run the containers at a less
 favorable priority than the NM.
 The value specified is an int.]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_CONTAINER_EXECUTOR_SCHED_PRIORITY" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_CONTAINER_MGR_THREAD_COUNT" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Number of threads container manager uses.]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_CONTAINER_MGR_THREAD_COUNT" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_DELETE_THREAD_COUNT" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Number of threads used in cleanup.]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_DELETE_THREAD_COUNT" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_KEYTAB" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Keytab for NM.]]>
      </doc>
    </field>
    <field name="NM_LOCAL_DIRS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[List of directories to store localized files in.]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_LOCAL_DIRS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_LOCAL_CACHE_MAX_FILES_PER_DIRECTORY" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Number of files in each localized directories
 Avoid tuning this too low.]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_LOCAL_CACHE_MAX_FILES_PER_DIRECTORY" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_LOCALIZER_ADDRESS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Address where the localizer IPC is.]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_LOCALIZER_PORT" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_NM_LOCALIZER_ADDRESS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_LOCALIZER_CACHE_CLEANUP_INTERVAL_MS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Interval in between cache cleanups.]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_LOCALIZER_CACHE_CLEANUP_INTERVAL_MS" type="long"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_LOCALIZER_CACHE_TARGET_SIZE_MB" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Target size of localizer cache in MB, per nodemanager. It is a target
 retention size that only includes resources with PUBLIC and PRIVATE
 visibility and excludes resources with APPLICATION visibility]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_LOCALIZER_CACHE_TARGET_SIZE_MB" type="long"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_LOCALIZER_CLIENT_THREAD_COUNT" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Number of threads to handle localization requests.]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_LOCALIZER_CLIENT_THREAD_COUNT" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_LOCALIZER_FETCH_THREAD_COUNT" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Number of threads to use for localization fetching.]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_LOCALIZER_FETCH_THREAD_COUNT" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_LOG_DIRS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Where to store container logs.]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_LOG_DIRS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_RESOURCEMANAGER_MINIMUM_VERSION" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_NM_RESOURCEMANAGER_MINIMUM_VERSION" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_DELAYED_DELEGATION_TOKEN_REMOVAL_INTERVAL_MS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Interval at which the delayed token removal thread runs]]>
      </doc>
    </field>
    <field name="DEFAULT_RM_DELAYED_DELEGATION_TOKEN_REMOVAL_INTERVAL_MS" type="long"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_DELEGATION_TOKEN_RENEWER_THREAD_COUNT" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Delegation Token renewer thread count]]>
      </doc>
    </field>
    <field name="DEFAULT_RM_DELEGATION_TOKEN_RENEWER_THREAD_COUNT" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_PROXY_USER_PRIVILEGES_ENABLED" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_RM_PROXY_USER_PRIVILEGES_ENABLED" type="boolean"
      transient="false" volatile="false"
      static="true" final="false" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="LOG_AGGREGATION_ENABLED" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Whether to enable log aggregation]]>
      </doc>
    </field>
    <field name="DEFAULT_LOG_AGGREGATION_ENABLED" type="boolean"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="LOG_AGGREGATION_RETAIN_SECONDS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[How long to wait before deleting aggregated logs, -1 disables.
 Be careful set this too small and you will spam the name node.]]>
      </doc>
    </field>
    <field name="DEFAULT_LOG_AGGREGATION_RETAIN_SECONDS" type="long"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="LOG_AGGREGATION_RETAIN_CHECK_INTERVAL_SECONDS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[How long to wait between aggregated log retention checks. If set to
 a value <= 0 then the value is computed as one-tenth of the log retention
 setting. Be careful set this too small and you will spam the name node.]]>
      </doc>
    </field>
    <field name="DEFAULT_LOG_AGGREGATION_RETAIN_CHECK_INTERVAL_SECONDS" type="long"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_LOG_RETAIN_SECONDS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Number of seconds to retain logs on the NodeManager. Only applicable if Log
 aggregation is disabled]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_LOG_RETAIN_SECONDS" type="long"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_LOG_AGGREGATION_ROLL_MONITORING_INTERVAL_SECONDS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Define how often NMs wake up and upload log files]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_LOG_AGGREGATION_ROLL_MONITORING_INTERVAL_SECONDS" type="long"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_LOG_DELETION_THREADS_COUNT" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Number of threads used in log cleanup. Only applicable if Log aggregation
 is disabled]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_LOG_DELETE_THREAD_COUNT" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_REMOTE_APP_LOG_DIR" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Where to aggregate logs to.]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_REMOTE_APP_LOG_DIR" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_REMOTE_APP_LOG_DIR_SUFFIX" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The remote log dir will be created at
 NM_REMOTE_APP_LOG_DIR/${user}/NM_REMOTE_APP_LOG_DIR_SUFFIX/${appId}]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_REMOTE_APP_LOG_DIR_SUFFIX" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="YARN_LOG_SERVER_URL" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="YARN_TRACKING_URL_GENERATOR" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_PMEM_MB" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Amount of memory in GB that can be allocated for containers.]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_PMEM_MB" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_PMEM_CHECK_ENABLED" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Specifies whether physical memory check is enabled.]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_PMEM_CHECK_ENABLED" type="boolean"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_VMEM_CHECK_ENABLED" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Specifies whether physical memory check is enabled.]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_VMEM_CHECK_ENABLED" type="boolean"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_VMEM_PMEM_RATIO" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Conversion ratio for physical memory to virtual memory.]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_VMEM_PMEM_RATIO" type="float"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_VCORES" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Number of Virtual CPU Cores which can be allocated for containers.]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_VCORES" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_RESOURCE_PERCENTAGE_PHYSICAL_CPU_LIMIT" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Percentage of overall CPU which can be allocated for containers.]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_RESOURCE_PERCENTAGE_PHYSICAL_CPU_LIMIT" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_WEBAPP_ADDRESS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[NM Webapp address.]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_WEBAPP_PORT" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_NM_WEBAPP_ADDRESS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_WEBAPP_HTTPS_ADDRESS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[NM Webapp https address.]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_WEBAPP_HTTPS_PORT" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_NM_WEBAPP_HTTPS_ADDRESS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_CONTAINER_MON_INTERVAL_MS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[How often to monitor containers.]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_CONTAINER_MON_INTERVAL_MS" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_CONTAINER_MON_RESOURCE_CALCULATOR" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Class that calculates containers current resource utilization.]]>
      </doc>
    </field>
    <field name="NM_CONTAINER_MON_PROCESS_TREE" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Class that calculates process tree resource utilization.]]>
      </doc>
    </field>
    <field name="PROCFS_USE_SMAPS_BASED_RSS_ENABLED" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_PROCFS_USE_SMAPS_BASED_RSS_ENABLED" type="boolean"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_DISK_HEALTH_CHECK_ENABLE" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Enable/Disable disks' health checker. Default is true. An expert level
 configuration property.]]>
      </doc>
    </field>
    <field name="NM_DISK_HEALTH_CHECK_INTERVAL_MS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Frequency of running disks' health checker.]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_DISK_HEALTH_CHECK_INTERVAL_MS" type="long"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[By default, disks' health is checked every 2 minutes.]]>
      </doc>
    </field>
    <field name="NM_MIN_HEALTHY_DISKS_FRACTION" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The minimum fraction of number of disks to be healthy for the nodemanager
 to launch new containers. This applies to nm-local-dirs and nm-log-dirs.]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_MIN_HEALTHY_DISKS_FRACTION" type="float"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[By default, at least 25% of disks are to be healthy to say that the node is
 healthy in terms of disks.]]>
      </doc>
    </field>
    <field name="NM_MAX_PER_DISK_UTILIZATION_PERCENTAGE" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The maximum percentage of disk space that can be used after which a disk is
 marked as offline. Values can range from 0.0 to 100.0. If the value is
 greater than or equal to 100, NM will check for full disk. This applies to
 nm-local-dirs and nm-log-dirs.]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_MAX_PER_DISK_UTILIZATION_PERCENTAGE" type="float"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[By default, 90% of the disk can be used before it is marked as offline.]]>
      </doc>
    </field>
    <field name="NM_MIN_PER_DISK_FREE_SPACE_MB" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The minimum space that must be available on a local dir for it to be used.
 This applies to nm-local-dirs and nm-log-dirs.]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_MIN_PER_DISK_FREE_SPACE_MB" type="long"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[By default, all of the disk can be used before it is marked as offline.]]>
      </doc>
    </field>
    <field name="NM_HEALTH_CHECK_INTERVAL_MS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Frequency of running node health script.]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_HEALTH_CHECK_INTERVAL_MS" type="long"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_HEALTH_CHECK_SCRIPT_TIMEOUT_MS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Health check script time out period.]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_HEALTH_CHECK_SCRIPT_TIMEOUT_MS" type="long"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_HEALTH_CHECK_SCRIPT_PATH" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The health check script to run.]]>
      </doc>
    </field>
    <field name="NM_HEALTH_CHECK_SCRIPT_OPTS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The arguments to pass to the health check script.]]>
      </doc>
    </field>
    <field name="NM_DOCKER_CONTAINER_EXECUTOR_IMAGE_NAME" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The Docker image name(For DockerContainerExecutor).]]>
      </doc>
    </field>
    <field name="NM_DOCKER_CONTAINER_EXECUTOR_EXEC_NAME" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The name of the docker executor (For DockerContainerExecutor).]]>
      </doc>
    </field>
    <field name="NM_DEFAULT_DOCKER_CONTAINER_EXECUTOR_EXEC_NAME" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The default docker executor (For DockerContainerExecutor).]]>
      </doc>
    </field>
    <field name="NM_LINUX_CONTAINER_EXECUTOR_PATH" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The path to the Linux container executor.]]>
      </doc>
    </field>
    <field name="NM_LINUX_CONTAINER_GROUP" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The UNIX group that the linux-container-executor should run as.
 This is intended to be set as part of container-executor.cfg.]]>
      </doc>
    </field>
    <field name="NM_NONSECURE_MODE_LIMIT_USERS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[If linux-container-executor should limit itself to one user
 when running in non-secure mode.]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_NONSECURE_MODE_LIMIT_USERS" type="boolean"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_NONSECURE_MODE_LOCAL_USER_KEY" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The UNIX user that containers will run as when Linux-container-executor
 is used in nonsecure mode (a use case for this is using cgroups).]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_NONSECURE_MODE_LOCAL_USER" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_NONSECURE_MODE_USER_PATTERN_KEY" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The allowed pattern for UNIX user names enforced by
 Linux-container-executor when used in nonsecure mode (use case for this
 is using cgroups). The default value is taken from /usr/sbin/adduser]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_NONSECURE_MODE_USER_PATTERN" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_LINUX_CONTAINER_RESOURCES_HANDLER" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The type of resource enforcement to use with the
  linux container executor.]]>
      </doc>
    </field>
    <field name="NM_LINUX_CONTAINER_CGROUPS_HIERARCHY" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The path the linux container executor should use for cgroups]]>
      </doc>
    </field>
    <field name="NM_LINUX_CONTAINER_CGROUPS_MOUNT" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Whether the linux container executor should mount cgroups if not found]]>
      </doc>
    </field>
    <field name="NM_LINUX_CONTAINER_CGROUPS_MOUNT_PATH" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Where the linux container executor should mount cgroups if not found]]>
      </doc>
    </field>
    <field name="NM_LINUX_CONTAINER_CGROUPS_STRICT_RESOURCE_USAGE" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Whether the apps should run in strict resource usage mode(not allowed to
 use spare CPU)]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_LINUX_CONTAINER_CGROUPS_STRICT_RESOURCE_USAGE" type="boolean"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_LINUX_CONTAINER_CGROUPS_DELETE_TIMEOUT" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Interval of time the linux container executor should try cleaning up
 cgroups entry when cleaning up a container. This is required due to what
 it seems a race condition because the SIGTERM/SIGKILL is asynch.]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_LINUX_CONTAINER_CGROUPS_DELETE_TIMEOUT" type="long"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_WINDOWS_SECURE_CONTAINER_GROUP" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[/* The Windows group that the windows-secure-container-executor should run as.]]>
      </doc>
    </field>
    <field name="NM_LOG_AGG_COMPRESSION_TYPE" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[T-file compression types used to compress aggregated logs.]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_LOG_AGG_COMPRESSION_TYPE" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_PRINCIPAL" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The kerberos principal for the node manager.]]>
      </doc>
    </field>
    <field name="NM_AUX_SERVICES" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_AUX_SERVICE_FMT" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_USER_HOME_DIR" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_WEBAPP_SPNEGO_USER_NAME_KEY" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The kerberos principal to be used for spnego filter for NM.]]>
      </doc>
    </field>
    <field name="NM_WEBAPP_SPNEGO_KEYTAB_FILE_KEY" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The kerberos keytab to be used for spnego filter for NM.]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_USER_HOME_DIR" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_RECOVERY_PREFIX" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_RECOVERY_ENABLED" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_NM_RECOVERY_ENABLED" type="boolean"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_RECOVERY_DIR" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="PROXY_PREFIX" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="PROXY_PRINCIPAL" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The kerberos principal for the proxy.]]>
      </doc>
    </field>
    <field name="PROXY_KEYTAB" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Keytab for Proxy.]]>
      </doc>
    </field>
    <field name="PROXY_ADDRESS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The address for the web proxy.]]>
      </doc>
    </field>
    <field name="DEFAULT_PROXY_PORT" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_PROXY_ADDRESS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="YARN_SECURITY_SERVICE_AUTHORIZATION_RESOURCETRACKER_PROTOCOL" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[YARN Service Level Authorization]]>
      </doc>
    </field>
    <field name="YARN_SECURITY_SERVICE_AUTHORIZATION_APPLICATIONCLIENT_PROTOCOL" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="YARN_SECURITY_SERVICE_AUTHORIZATION_RESOURCEMANAGER_ADMINISTRATION_PROTOCOL" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="YARN_SECURITY_SERVICE_AUTHORIZATION_APPLICATIONMASTER_PROTOCOL" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="YARN_SECURITY_SERVICE_AUTHORIZATION_CONTAINER_MANAGEMENT_PROTOCOL" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="YARN_SECURITY_SERVICE_AUTHORIZATION_RESOURCE_LOCALIZER" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="YARN_SECURITY_SERVICE_AUTHORIZATION_APPLICATIONHISTORY_PROTOCOL" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_SLEEP_DELAY_BEFORE_SIGKILL_MS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[No. of milliseconds to wait between sending a SIGTERM and SIGKILL
 to a running container]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_SLEEP_DELAY_BEFORE_SIGKILL_MS" type="long"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_PROCESS_KILL_WAIT_MS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Max time to wait for a process to come up when trying to cleanup
 container resources]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_PROCESS_KILL_WAIT_MS" type="long"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RESOURCEMANAGER_CONNECT_MAX_WAIT_MS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Max time to wait to establish a connection to RM]]>
      </doc>
    </field>
    <field name="DEFAULT_RESOURCEMANAGER_CONNECT_MAX_WAIT_MS" type="long"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RESOURCEMANAGER_CONNECT_RETRY_INTERVAL_MS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Time interval between each attempt to connect to RM]]>
      </doc>
    </field>
    <field name="DEFAULT_RESOURCEMANAGER_CONNECT_RETRY_INTERVAL_MS" type="long"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="YARN_APPLICATION_CLASSPATH" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[CLASSPATH for YARN applications. A comma-separated list of CLASSPATH
 entries]]>
      </doc>
    </field>
    <field name="DEFAULT_YARN_CROSS_PLATFORM_APPLICATION_CLASSPATH" type="java.lang.String[]"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Default platform-agnostic CLASSPATH for YARN applications. A
 comma-separated list of CLASSPATH entries. The parameter expansion marker
 will be replaced with real parameter expansion marker ('%' for Windows and
 '$' for Linux) by NodeManager on container launch. For example: {{VAR}}
 will be replaced as $VAR on Linux, and %VAR% on Windows.]]>
      </doc>
    </field>
    <field name="DEFAULT_YARN_APPLICATION_CLASSPATH" type="java.lang.String[]"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[<p>
 Default platform-specific CLASSPATH for YARN applications. A
 comma-separated list of CLASSPATH entries constructed based on the client
 OS environment expansion syntax.
 </p>
 <p>
 Note: Use {@link DEFAULT_YARN_CROSS_PLATFORM_APPLICATION_CLASSPATH} for
 cross-platform practice i.e. submit an application from a Windows client to
 a Linux/Unix server or vice versa.
 </p>]]>
      </doc>
    </field>
    <field name="DEFAULT_CONTAINER_TEMP_DIR" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Container temp directory]]>
      </doc>
    </field>
    <field name="IS_MINI_YARN_CLUSTER" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="YARN_MC_PREFIX" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="YARN_MINICLUSTER_FIXED_PORTS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Whether to use fixed ports with the minicluster.]]>
      </doc>
    </field>
    <field name="DEFAULT_YARN_MINICLUSTER_FIXED_PORTS" type="boolean"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Default is false to be able to run tests concurrently without port
 conflicts.]]>
      </doc>
    </field>
    <field name="YARN_MINICLUSTER_USE_RPC" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Whether the NM should use RPC to connect to the RM. Default is false.
 Can be set to true only when using fixed ports.]]>
      </doc>
    </field>
    <field name="DEFAULT_YARN_MINICLUSTER_USE_RPC" type="boolean"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="YARN_MINICLUSTER_CONTROL_RESOURCE_MONITORING" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Whether users are explicitly trying to control resource monitoring
 configuration for the MiniYARNCluster. Disabled by default.]]>
      </doc>
    </field>
    <field name="DEFAULT_YARN_MINICLUSTER_CONTROL_RESOURCE_MONITORING" type="boolean"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="YARN_APP_CONTAINER_LOG_DIR" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The log directory for the containers]]>
      </doc>
    </field>
    <field name="YARN_APP_CONTAINER_LOG_SIZE" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="YARN_APP_CONTAINER_LOG_BACKUPS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="TIMELINE_SERVICE_PREFIX" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="APPLICATION_HISTORY_PREFIX" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="APPLICATION_HISTORY_ENABLED" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The setting that controls whether application history service is
  enabled or not.]]>
      </doc>
    </field>
    <field name="DEFAULT_APPLICATION_HISTORY_ENABLED" type="boolean"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="APPLICATION_HISTORY_STORE" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Application history store class]]>
      </doc>
    </field>
    <field name="FS_APPLICATION_HISTORY_STORE_URI" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[URI for FileSystemApplicationHistoryStore]]>
      </doc>
    </field>
    <field name="FS_APPLICATION_HISTORY_STORE_COMPRESSION_TYPE" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[T-file compression types used to compress history data.]]>
      </doc>
    </field>
    <field name="DEFAULT_FS_APPLICATION_HISTORY_STORE_COMPRESSION_TYPE" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="TIMELINE_SERVICE_ENABLED" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The setting that controls whether timeline service is enabled or not.]]>
      </doc>
    </field>
    <field name="DEFAULT_TIMELINE_SERVICE_ENABLED" type="boolean"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="TIMELINE_SERVICE_ADDRESS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[host:port address for timeline service RPC APIs.]]>
      </doc>
    </field>
    <field name="DEFAULT_TIMELINE_SERVICE_PORT" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_TIMELINE_SERVICE_ADDRESS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="TIMELINE_SERVICE_BIND_HOST" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The listening endpoint for the timeline service application.]]>
      </doc>
    </field>
    <field name="TIMELINE_SERVICE_HANDLER_THREAD_COUNT" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The number of threads to handle client RPC API requests.]]>
      </doc>
    </field>
    <field name="DEFAULT_TIMELINE_SERVICE_CLIENT_THREAD_COUNT" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="TIMELINE_SERVICE_WEBAPP_ADDRESS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The address of the timeline service web application.]]>
      </doc>
    </field>
    <field name="DEFAULT_TIMELINE_SERVICE_WEBAPP_PORT" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_TIMELINE_SERVICE_WEBAPP_ADDRESS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="TIMELINE_SERVICE_WEBAPP_HTTPS_ADDRESS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The https address of the timeline service web application.]]>
      </doc>
    </field>
    <field name="DEFAULT_TIMELINE_SERVICE_WEBAPP_HTTPS_PORT" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_TIMELINE_SERVICE_WEBAPP_HTTPS_ADDRESS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="TIMELINE_SERVICE_STORE" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Timeline service store class]]>
      </doc>
    </field>
    <field name="TIMELINE_SERVICE_TTL_ENABLE" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Timeline service enable data age off]]>
      </doc>
    </field>
    <field name="TIMELINE_SERVICE_TTL_MS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Timeline service length of time to retain data]]>
      </doc>
    </field>
    <field name="DEFAULT_TIMELINE_SERVICE_TTL_MS" type="long"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="TIMELINE_SERVICE_LEVELDB_PREFIX" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="TIMELINE_SERVICE_LEVELDB_PATH" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Timeline service leveldb path]]>
      </doc>
    </field>
    <field name="TIMELINE_SERVICE_LEVELDB_READ_CACHE_SIZE" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Timeline service leveldb read cache (uncompressed blocks)]]>
      </doc>
    </field>
    <field name="DEFAULT_TIMELINE_SERVICE_LEVELDB_READ_CACHE_SIZE" type="long"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="TIMELINE_SERVICE_LEVELDB_START_TIME_READ_CACHE_SIZE" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Timeline service leveldb start time read cache (number of entities)]]>
      </doc>
    </field>
    <field name="DEFAULT_TIMELINE_SERVICE_LEVELDB_START_TIME_READ_CACHE_SIZE" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="TIMELINE_SERVICE_LEVELDB_START_TIME_WRITE_CACHE_SIZE" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Timeline service leveldb start time write cache (number of entities)]]>
      </doc>
    </field>
    <field name="DEFAULT_TIMELINE_SERVICE_LEVELDB_START_TIME_WRITE_CACHE_SIZE" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="TIMELINE_SERVICE_LEVELDB_TTL_INTERVAL_MS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Timeline service leveldb interval to wait between deletion rounds]]>
      </doc>
    </field>
    <field name="DEFAULT_TIMELINE_SERVICE_LEVELDB_TTL_INTERVAL_MS" type="long"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="TIMELINE_SERVICE_PRINCIPAL" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The Kerberos principal for the timeline server.]]>
      </doc>
    </field>
    <field name="TIMELINE_SERVICE_KEYTAB" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The Kerberos keytab for the timeline server.]]>
      </doc>
    </field>
    <field name="TIMELINE_SERVICE_HTTP_CROSS_ORIGIN_ENABLED" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Enables cross origin support for timeline server.]]>
      </doc>
    </field>
    <field name="TIMELINE_SERVICE_HTTP_CROSS_ORIGIN_ENABLED_DEFAULT" type="boolean"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Default value for cross origin support for timeline server.]]>
      </doc>
    </field>
    <field name="TIMELINE_SERVICE_CLIENT_PREFIX" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Timeline client settings]]>
      </doc>
    </field>
    <field name="TIMELINE_SERVICE_CLIENT_MAX_RETRIES" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Timeline client call, max retries (-1 means no limit)]]>
      </doc>
    </field>
    <field name="DEFAULT_TIMELINE_SERVICE_CLIENT_MAX_RETRIES" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="TIMELINE_SERVICE_CLIENT_RETRY_INTERVAL_MS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Timeline client call, retry interval]]>
      </doc>
    </field>
    <field name="DEFAULT_TIMELINE_SERVICE_CLIENT_RETRY_INTERVAL_MS" type="long"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="YARN_CLIENT_APP_SUBMISSION_POLL_INTERVAL_MS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Use YARN_CLIENT_APPLICATION_CLIENT_PROTOCOL_POLL_INTERVAL_MS instead.
 The interval of the yarn client's querying application state after
 application submission. The unit is millisecond.]]>
      </doc>
    </field>
    <field name="YARN_CLIENT_APPLICATION_CLIENT_PROTOCOL_POLL_INTERVAL_MS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The interval that the yarn client library uses to poll the completion
 status of the asynchronous API of application client protocol.]]>
      </doc>
    </field>
    <field name="DEFAULT_YARN_CLIENT_APPLICATION_CLIENT_PROTOCOL_POLL_INTERVAL_MS" type="long"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="YARN_CLIENT_APPLICATION_CLIENT_PROTOCOL_POLL_TIMEOUT_MS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[The duration that the yarn client library waits, cumulatively across polls,
 for an expected state change to occur. Defaults to -1, which indicates no
 limit.]]>
      </doc>
    </field>
    <field name="DEFAULT_YARN_CLIENT_APPLICATION_CLIENT_PROTOCOL_POLL_TIMEOUT_MS" type="long"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_CLIENT_ASYNC_THREAD_POOL_MAX_SIZE" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Max number of threads in NMClientAsync to process container management
 events]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_CLIENT_ASYNC_THREAD_POOL_MAX_SIZE" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NM_CLIENT_MAX_NM_PROXIES" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Maximum number of proxy connections to cache for node managers. If set
 to a value greater than zero then the cache is enabled and the NMClient
 and MRAppMaster will cache the specified number of node manager proxies.
 There will be at max one proxy per node manager. Ex. configuring it to a
 value of 5 will make sure that client will at max have 5 proxies cached
 with 5 different node managers. These connections for these proxies will
 be timed out if idle for more than the system wide idle timeout period.
 Note that this could cause issues on large clusters as many connections
 could linger simultaneously and lead to a large number of connection
 threads. The token used for authentication will be used only at
 connection creation time. If a new token is received then the earlier
 connection should be closed in order to use the new token. This and
 {@link YarnConfiguration#NM_CLIENT_ASYNC_THREAD_POOL_MAX_SIZE} are related
 and should be in sync (no need for them to be equal).
 If the value of this property is zero then the connection cache is
 disabled and connections will use a zero idle timeout to prevent too
 many connection threads on large clusters.]]>
      </doc>
    </field>
    <field name="DEFAULT_NM_CLIENT_MAX_NM_PROXIES" type="int"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="CLIENT_NM_CONNECT_MAX_WAIT_MS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Max time to wait to establish a connection to NM]]>
      </doc>
    </field>
    <field name="DEFAULT_CLIENT_NM_CONNECT_MAX_WAIT_MS" type="long"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="CLIENT_NM_CONNECT_RETRY_INTERVAL_MS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Time interval between each attempt to connect to NM]]>
      </doc>
    </field>
    <field name="DEFAULT_CLIENT_NM_CONNECT_RETRY_INTERVAL_MS" type="long"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="YARN_HTTP_POLICY_KEY" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="YARN_HTTP_POLICY_DEFAULT" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="NODE_LABELS_PREFIX" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="RM_NODE_LABELS_MANAGER_CLASS" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Class for RMNodeLabelsManager Please note this value should be consistent
 in client nodes and RM node(s)]]>
      </doc>
    </field>
    <field name="FS_NODE_LABELS_STORE_ROOT_DIR" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[URI for NodeLabelManager]]>
      </doc>
    </field>
    <field name="FS_NODE_LABELS_STORE_RETRY_POLICY_SPEC" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
    <field name="DEFAULT_FS_NODE_LABELS_STORE_RETRY_POLICY_SPEC" type="java.lang.String"
      transient="false" volatile="false"
      static="true" final="true" visibility="public"
      deprecated="not deprecated">
    </field>
  </class>
  <!-- end class org.apache.hadoop.yarn.conf.YarnConfiguration -->
</package>
<package name="org.apache.hadoop.yarn.exceptions">
  <!-- start class org.apache.hadoop.yarn.exceptions.ApplicationAttemptNotFoundException -->
  <class name="ApplicationAttemptNotFoundException" extends="org.apache.hadoop.yarn.exceptions.YarnException"
    abstract="false"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="ApplicationAttemptNotFoundException" type="java.lang.Throwable"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <constructor name="ApplicationAttemptNotFoundException" type="java.lang.String"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <constructor name="ApplicationAttemptNotFoundException" type="java.lang.String, java.lang.Throwable"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <doc>
    <![CDATA[This exception is thrown on
 {@link ApplicationHistoryProtocol#getApplicationAttemptReport (GetApplicationAttemptReportRequest)}
 API when the Application Attempt doesn't exist in Application History Server or
 {@link ApplicationMasterProtocol#allocate(AllocateRequest)} if application
 doesn't exist in RM.]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.exceptions.ApplicationAttemptNotFoundException -->
  <!-- start class org.apache.hadoop.yarn.exceptions.ApplicationIdNotProvidedException -->
  <class name="ApplicationIdNotProvidedException" extends="org.apache.hadoop.yarn.exceptions.YarnException"
    abstract="false"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="ApplicationIdNotProvidedException" type="java.lang.Throwable"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <constructor name="ApplicationIdNotProvidedException" type="java.lang.String"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <constructor name="ApplicationIdNotProvidedException" type="java.lang.String, java.lang.Throwable"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <doc>
    <![CDATA[Exception to be thrown when Client submit an application without
 providing {@link ApplicationId} in {@link ApplicationSubmissionContext}.]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.exceptions.ApplicationIdNotProvidedException -->
  <!-- start class org.apache.hadoop.yarn.exceptions.ApplicationMasterNotRegisteredException -->
  <class name="ApplicationMasterNotRegisteredException" extends="org.apache.hadoop.yarn.exceptions.YarnException"
    abstract="false"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="ApplicationMasterNotRegisteredException" type="java.lang.Throwable"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <constructor name="ApplicationMasterNotRegisteredException" type="java.lang.String"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <constructor name="ApplicationMasterNotRegisteredException" type="java.lang.String, java.lang.Throwable"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <doc>
    <![CDATA[This exception is thrown when an Application Master tries to unregister by calling
 {@link ApplicationMasterProtocol#finishApplicationMaster(FinishApplicationMasterRequest)}
 API without first registering by calling
 {@link ApplicationMasterProtocol#registerApplicationMaster(RegisterApplicationMasterRequest)}
 or after an RM restart. The ApplicationMaster is expected to call
 {@link ApplicationMasterProtocol#registerApplicationMaster(RegisterApplicationMasterRequest)}
 and retry.]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.exceptions.ApplicationMasterNotRegisteredException -->
  <!-- start class org.apache.hadoop.yarn.exceptions.ApplicationNotFoundException -->
  <class name="ApplicationNotFoundException" extends="org.apache.hadoop.yarn.exceptions.YarnException"
    abstract="false"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="ApplicationNotFoundException" type="java.lang.Throwable"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <constructor name="ApplicationNotFoundException" type="java.lang.String"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <constructor name="ApplicationNotFoundException" type="java.lang.String, java.lang.Throwable"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <doc>
    <![CDATA[This exception is thrown on
 {@link ApplicationClientProtocol#getApplicationReport
 (GetApplicationReportRequest)} API
 when the Application doesn't exist in RM and AHS]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.exceptions.ApplicationNotFoundException -->
  <!-- start class org.apache.hadoop.yarn.exceptions.ContainerNotFoundException -->
  <class name="ContainerNotFoundException" extends="org.apache.hadoop.yarn.exceptions.YarnException"
    abstract="false"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="ContainerNotFoundException" type="java.lang.Throwable"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <constructor name="ContainerNotFoundException" type="java.lang.String"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <constructor name="ContainerNotFoundException" type="java.lang.String, java.lang.Throwable"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <doc>
    <![CDATA[This exception is thrown on
 {@link ApplicationHistoryProtocol#getContainerReport (GetContainerReportRequest)}
 API when the container doesn't exist in AHS]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.exceptions.ContainerNotFoundException -->
  <!-- start class org.apache.hadoop.yarn.exceptions.InvalidApplicationMasterRequestException -->
  <class name="InvalidApplicationMasterRequestException" extends="org.apache.hadoop.yarn.exceptions.YarnException"
    abstract="false"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="InvalidApplicationMasterRequestException" type="java.lang.Throwable"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <constructor name="InvalidApplicationMasterRequestException" type="java.lang.String"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <constructor name="InvalidApplicationMasterRequestException" type="java.lang.String, java.lang.Throwable"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <doc>
    <![CDATA[This exception is thrown when an ApplicationMaster asks for resources by
 calling {@link ApplicationMasterProtocol#allocate(AllocateRequest)}
 without first registering by calling
 {@link ApplicationMasterProtocol#registerApplicationMaster(RegisterApplicationMasterRequest)}
 or if it tries to register more than once.]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.exceptions.InvalidApplicationMasterRequestException -->
  <!-- start class org.apache.hadoop.yarn.exceptions.InvalidAuxServiceException -->
  <class name="InvalidAuxServiceException" extends="org.apache.hadoop.yarn.exceptions.YarnException"
    abstract="false"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="InvalidAuxServiceException" type="java.lang.String"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <doc>
    <![CDATA[This exception is thrown by a NodeManager that is rejecting start-container
 requests via
 {@link ContainerManagementProtocol#startContainers(StartContainersRequest)}
 for auxservices does not exist.]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.exceptions.InvalidAuxServiceException -->
  <!-- start class org.apache.hadoop.yarn.exceptions.InvalidContainerException -->
  <class name="InvalidContainerException" extends="org.apache.hadoop.yarn.exceptions.YarnException"
    abstract="false"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="InvalidContainerException" type="java.lang.String"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <doc>
    <![CDATA[This exception is thrown by a NodeManager that is rejecting start-container
 requests via
 {@link ContainerManagementProtocol#startContainers(StartContainersRequest)}
 for containers allocated by a previous instance of the RM.]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.exceptions.InvalidContainerException -->
  <!-- start class org.apache.hadoop.yarn.exceptions.InvalidContainerReleaseException -->
  <class name="InvalidContainerReleaseException" extends="org.apache.hadoop.yarn.exceptions.YarnException"
    abstract="false"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="InvalidContainerReleaseException" type="java.lang.Throwable"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <constructor name="InvalidContainerReleaseException" type="java.lang.String"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <constructor name="InvalidContainerReleaseException" type="java.lang.String, java.lang.Throwable"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <doc>
    <![CDATA[This exception is thrown when an Application Master tries to release
 containers not belonging to it using
 {@link ApplicationMasterProtocol#allocate(AllocateRequest)} API.]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.exceptions.InvalidContainerReleaseException -->
  <!-- start class org.apache.hadoop.yarn.exceptions.InvalidResourceBlacklistRequestException -->
  <class name="InvalidResourceBlacklistRequestException" extends="org.apache.hadoop.yarn.exceptions.YarnException"
    abstract="false"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="InvalidResourceBlacklistRequestException" type="java.lang.Throwable"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <constructor name="InvalidResourceBlacklistRequestException" type="java.lang.String"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <constructor name="InvalidResourceBlacklistRequestException" type="java.lang.String, java.lang.Throwable"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <doc>
    <![CDATA[This exception is thrown when an application provides an invalid
 {@link ResourceBlacklistRequest} specification for blacklisting of resources
 in {@link ApplicationMasterProtocol#allocate(AllocateRequest)} API.

 Currently this exceptions is thrown when an application tries to
 blacklist {@link ResourceRequest#ANY}.]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.exceptions.InvalidResourceBlacklistRequestException -->
  <!-- start class org.apache.hadoop.yarn.exceptions.InvalidResourceRequestException -->
  <class name="InvalidResourceRequestException" extends="org.apache.hadoop.yarn.exceptions.YarnException"
    abstract="false"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="InvalidResourceRequestException" type="java.lang.Throwable"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <constructor name="InvalidResourceRequestException" type="java.lang.String"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <constructor name="InvalidResourceRequestException" type="java.lang.String, java.lang.Throwable"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <doc>
    <![CDATA[This exception is thrown when a resource requested via
 {@link ResourceRequest} in the
 {@link ApplicationMasterProtocol#allocate(AllocateRequest)} API is out of the
 range of the configured lower and upper limits on resources.]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.exceptions.InvalidResourceRequestException -->
  <!-- start class org.apache.hadoop.yarn.exceptions.NMNotYetReadyException -->
  <class name="NMNotYetReadyException" extends="org.apache.hadoop.yarn.exceptions.YarnException"
    abstract="false"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="NMNotYetReadyException" type="java.lang.String"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <doc>
    <![CDATA[This exception is thrown on
 {@link ContainerManagementProtocol#startContainers(StartContainersRequest)} API
 when an NM starts from scratch but has not yet connected with RM.]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.exceptions.NMNotYetReadyException -->
  <!-- start class org.apache.hadoop.yarn.exceptions.YarnException -->
  <class name="YarnException" extends="java.lang.Exception"
    abstract="false"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="YarnException"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <constructor name="YarnException" type="java.lang.String"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <constructor name="YarnException" type="java.lang.Throwable"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <constructor name="YarnException" type="java.lang.String, java.lang.Throwable"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <doc>
    <![CDATA[YarnException indicates exceptions from yarn servers. On the other hand,
 IOExceptions indicates exceptions from RPC layer.]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.exceptions.YarnException -->
</package>
<package name="org.apache.hadoop.yarn.server.api">
  <!-- start class org.apache.hadoop.yarn.server.api.ApplicationInitializationContext -->
  <class name="ApplicationInitializationContext" extends="java.lang.Object"
    abstract="false"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="ApplicationInitializationContext" type="java.lang.String, org.apache.hadoop.yarn.api.records.ApplicationId, java.nio.ByteBuffer"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getUser" return="java.lang.String"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the user-name of the application-submitter

 @return user-name]]>
      </doc>
    </method>
    <method name="getApplicationId" return="org.apache.hadoop.yarn.api.records.ApplicationId"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get {@link ApplicationId} of the application

 @return applications ID]]>
      </doc>
    </method>
    <method name="getApplicationDataForService" return="java.nio.ByteBuffer"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the data sent to the NodeManager via
 {@link ContainerManagementProtocol#startContainers(StartContainersRequest)}
 as part of {@link ContainerLaunchContext#getServiceData()}

 @return the servicesData for this application.]]>
      </doc>
    </method>
    <doc>
    <![CDATA[Initialization context for {@link AuxiliaryService} when starting an
 application.]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.server.api.ApplicationInitializationContext -->
  <!-- start class org.apache.hadoop.yarn.server.api.ApplicationTerminationContext -->
  <class name="ApplicationTerminationContext" extends="java.lang.Object"
    abstract="false"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="ApplicationTerminationContext" type="org.apache.hadoop.yarn.api.records.ApplicationId"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getApplicationId" return="org.apache.hadoop.yarn.api.records.ApplicationId"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get {@link ApplicationId} of the application being stopped.

 @return applications ID]]>
      </doc>
    </method>
    <doc>
    <![CDATA[Initialization context for {@link AuxiliaryService} when stopping an
 application.]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.server.api.ApplicationTerminationContext -->
  <!-- start class org.apache.hadoop.yarn.server.api.AuxiliaryService -->
  <class name="AuxiliaryService" extends="org.apache.hadoop.service.AbstractService"
    abstract="true"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="AuxiliaryService" type="java.lang.String"
      static="false" final="false" visibility="protected"
      deprecated="not deprecated">
    </constructor>
    <method name="getRecoveryPath" return="org.apache.hadoop.fs.Path"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="protected"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get the path specific to this auxiliary service to use for recovery.

 @return state storage path or null if recovery is not enabled]]>
      </doc>
    </method>
    <method name="initializeApplication"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="initAppContext" type="org.apache.hadoop.yarn.server.api.ApplicationInitializationContext"/>
      <doc>
      <![CDATA[A new application is started on this NodeManager. This is a signal to
 this {@link AuxiliaryService} about the application initialization.

 @param initAppContext context for the application's initialization]]>
      </doc>
    </method>
    <method name="stopApplication"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="stopAppContext" type="org.apache.hadoop.yarn.server.api.ApplicationTerminationContext"/>
      <doc>
      <![CDATA[An application is finishing on this NodeManager. This is a signal to this
 {@link AuxiliaryService} about the same.

 @param stopAppContext context for the application termination]]>
      </doc>
    </method>
    <method name="getMetaData" return="java.nio.ByteBuffer"
      abstract="true" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Retrieve meta-data for this {@link AuxiliaryService}. Applications using
 this {@link AuxiliaryService} SHOULD know the format of the meta-data -
 ideally each service should provide a method to parse out the information
 to the applications. One example of meta-data is contact information so
 that applications can access the service remotely. This will only be called
 after the service's {@link #start()} method has finished. the result may be
 cached.

 <p>
 The information is passed along to applications via
 {@link StartContainersResponse#getAllServicesMetaData()} that is returned by
 {@link ContainerManagementProtocol#startContainers(StartContainersRequest)}
 </p>

 @return meta-data for this service that should be made available to
         applications.]]>
      </doc>
    </method>
    <method name="initializeContainer"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="initContainerContext" type="org.apache.hadoop.yarn.server.api.ContainerInitializationContext"/>
      <doc>
      <![CDATA[A new container is started on this NodeManager. This is a signal to
 this {@link AuxiliaryService} about the container initialization.
 This method is called when the NodeManager receives the container launch
 command from the ApplicationMaster and before the container process is
 launched.

 @param initContainerContext context for the container's initialization]]>
      </doc>
    </method>
    <method name="stopContainer"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="stopContainerContext" type="org.apache.hadoop.yarn.server.api.ContainerTerminationContext"/>
      <doc>
      <![CDATA[A container is finishing on this NodeManager. This is a signal to this
 {@link AuxiliaryService} about the same.

 @param stopContainerContext context for the container termination]]>
      </doc>
    </method>
    <method name="setRecoveryPath"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <param name="recoveryPath" type="org.apache.hadoop.fs.Path"/>
      <doc>
      <![CDATA[Set the path for this auxiliary service to use for storing state
 that will be used during recovery.

 @param recoveryPath where recoverable state should be stored]]>
      </doc>
    </method>
    <doc>
    <![CDATA[A generic service that will be started by the NodeManager. This is a service
 that administrators have to configure on each node by setting
 {@link YarnConfiguration#NM_AUX_SERVICES}.]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.server.api.AuxiliaryService -->
  <!-- start class org.apache.hadoop.yarn.server.api.ContainerContext -->
  <class name="ContainerContext" extends="java.lang.Object"
    abstract="false"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="ContainerContext" type="java.lang.String, org.apache.hadoop.yarn.api.records.ContainerId, org.apache.hadoop.yarn.api.records.Resource"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <method name="getUser" return="java.lang.String"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get user of the container being initialized or stopped.

 @return the user]]>
      </doc>
    </method>
    <method name="getContainerId" return="org.apache.hadoop.yarn.api.records.ContainerId"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get {@link ContainerId} of the container being initialized or stopped.

 @return the container ID]]>
      </doc>
    </method>
    <method name="getResource" return="org.apache.hadoop.yarn.api.records.Resource"
      abstract="false" native="false" synchronized="false"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
      <doc>
      <![CDATA[Get {@link Resource} the resource capability allocated to the container
 being initialized or stopped.

 @return the resource capability.]]>
      </doc>
    </method>
    <doc>
    <![CDATA[Base context class for {@link AuxiliaryService} initializing and stopping a
 container.]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.server.api.ContainerContext -->
  <!-- start class org.apache.hadoop.yarn.server.api.ContainerInitializationContext -->
  <class name="ContainerInitializationContext" extends="org.apache.hadoop.yarn.server.api.ContainerContext"
    abstract="false"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="ContainerInitializationContext" type="java.lang.String, org.apache.hadoop.yarn.api.records.ContainerId, org.apache.hadoop.yarn.api.records.Resource"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <doc>
    <![CDATA[Initialization context for {@link AuxiliaryService} when starting a
 container.]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.server.api.ContainerInitializationContext -->
  <!-- start class org.apache.hadoop.yarn.server.api.ContainerTerminationContext -->
  <class name="ContainerTerminationContext" extends="org.apache.hadoop.yarn.server.api.ContainerContext"
    abstract="false"
    static="false" final="false" visibility="public"
    deprecated="not deprecated">
    <constructor name="ContainerTerminationContext" type="java.lang.String, org.apache.hadoop.yarn.api.records.ContainerId, org.apache.hadoop.yarn.api.records.Resource"
      static="false" final="false" visibility="public"
      deprecated="not deprecated">
    </constructor>
    <doc>
    <![CDATA[Termination context for {@link AuxiliaryService} when stopping a
 container.]]>
    </doc>
  </class>
  <!-- end class org.apache.hadoop.yarn.server.api.ContainerTerminationContext -->
</package>

</api>
