<?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 a 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>
