001    /**
002     * Licensed to the Apache Software Foundation (ASF) under one
003     * or more contributor license agreements.  See the NOTICE file
004     * distributed with this work for additional information
005     * regarding copyright ownership.  The ASF licenses this file
006     * to you under the Apache License, Version 2.0 (the
007     * "License"); you may not use this file except in compliance
008     * with the License.  You may obtain a copy of the License at
009     *
010     *     http://www.apache.org/licenses/LICENSE-2.0
011     *
012     * Unless required by applicable law or agreed to in writing, software
013     * distributed under the License is distributed on an "AS IS" BASIS,
014     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015     * See the License for the specific language governing permissions and
016     * limitations under the License.
017     */
018    
019    package org.apache.hadoop.yarn.api.records;
020    
021    import org.apache.hadoop.classification.InterfaceAudience.LimitedPrivate;
022    import org.apache.hadoop.classification.InterfaceAudience.Public;
023    import org.apache.hadoop.classification.InterfaceStability.Stable;
024    import org.apache.hadoop.classification.InterfaceStability.Unstable;
025    import org.apache.hadoop.yarn.api.ClientRMProtocol;
026    
027    /**
028     * <p><code>ApplicationSubmissionContext</code> represents all of the
029     * information needed by the <code>ResourceManager</code> to launch 
030     * the <code>ApplicationMaster</code> for an application.</p>
031     * 
032     * <p>It includes details such as:
033     *   <ul>
034     *     <li>{@link ApplicationId} of the application.</li>
035     *     <li>Application user.</li>
036     *     <li>Application name.</li>
037     *     <li>{@link Priority} of the application.</li>
038     *     <li>
039     *       {@link ContainerLaunchContext} of the container in which the 
040     *       <code>ApplicationMaster</code> is executed.
041     *     </li>
042     *   </ul>
043     * </p>
044     * 
045     * @see ContainerLaunchContext
046     * @see ClientRMProtocol#submitApplication(org.apache.hadoop.yarn.api.protocolrecords.SubmitApplicationRequest)
047     */
048    @Public
049    @Stable
050    public interface ApplicationSubmissionContext {
051      /**
052       * Get the <code>ApplicationId</code> of the submitted application.
053       * @return <code>ApplicationId</code> of the submitted application
054       */
055      @Public
056      @Stable
057      public ApplicationId getApplicationId();
058      
059      /**
060       * Set the <code>ApplicationId</code> of the submitted application.
061       * @param appplicationId <code>ApplicationId</code> of the submitted 
062       *                       application
063       */
064      @Public
065      @Stable
066      public void setApplicationId(ApplicationId appplicationId);
067    
068      /**
069       * Get the application <em>name</em>.
070       * @return application name
071       */
072      @Public
073      @Stable
074      public String getApplicationName();
075      
076      /**
077       * Set the application <em>name</em>.
078       * @param applicationName application name
079       */
080      @Public
081      @Stable
082      public void setApplicationName(String applicationName);
083      
084      /**
085       * Get the <em>queue</em> to which the application is being submitted.
086       * @return <em>queue</em> to which the application is being submitted
087       */
088      @Public
089      @Stable
090      public String getQueue();
091      
092      /**
093       * Set the <em>queue</em> to which the application is being submitted
094       * @param queue <em>queue</em> to which the application is being submitted
095       */
096      @Public
097      @Stable
098      public void setQueue(String queue);
099      
100      /**
101       * Get the <code>Priority</code> of the application.
102       * @return <code>Priority</code> of the application
103       */
104      @Public
105      @Stable
106      public Priority getPriority();
107    
108      /**
109       * Set the <code>Priority</code> of the application.
110       * @param priority <code>Priority</code> of the application
111       */
112      @Public
113      @Stable
114      public void setPriority(Priority priority);
115      
116      /**
117       * Get the <em>user</em> submitting the application.
118       * @return <em>user</em> submitting the application
119       */
120      @Public
121      @Stable
122      public String getUser();
123      
124      /**
125       * Set the <em>user</em> submitting the application.
126       * @param user <em>user</em> submitting the application
127       */
128      @Public
129      @Stable
130      public void setUser(String user);
131    
132      /**
133       * Get the <code>ContainerLaunchContext</code> to describe the 
134       * <code>Container</code> with which the <code>ApplicationMaster</code> is
135       * launched.
136       * @return <code>ContainerLaunchContext</code> for the 
137       *         <code>ApplicationMaster</code> container
138       */
139      @Public
140      @Stable
141      public ContainerLaunchContext getAMContainerSpec();
142      
143      /**
144       * Set the <code>ContainerLaunchContext</code> to describe the 
145       * <code>Container</code> with which the <code>ApplicationMaster</code> is
146       * launched.
147       * @param amContainer <code>ContainerLaunchContext</code> for the 
148       *                    <code>ApplicationMaster</code> container
149       */
150      @Public
151      @Stable
152      public void setAMContainerSpec(ContainerLaunchContext amContainer);
153      
154      /**
155       * Get if the RM should manage the execution of the AM. 
156       * If true, then the RM 
157       * will not allocate a container for the AM and start it. It will expect the 
158       * AM to be launched and connect to the RM within the AM liveliness period and 
159       * fail the app otherwise. The client should launch the AM only after the RM 
160       * has ACCEPTED the application and changed the <code>YarnApplicationState</code>.
161       * Such apps will not be retried by the RM on app attempt failure.
162       * The default value is false.
163       * @return true if the AM is not managed by the RM
164       */
165      @Public
166      @Unstable
167      public boolean getUnmanagedAM();
168      
169      /**
170       * @param value true if RM should not manage the AM
171       */
172      @Public
173      @Unstable
174      public void setUnmanagedAM(boolean value);
175    
176      /**
177       * @return true if tokens should be canceled when the app completes.
178       */
179      @LimitedPrivate("mapreduce")
180      @Unstable
181      public boolean getCancelTokensWhenComplete();
182      
183      /**
184       * Set to false if tokens should not be canceled when the app finished else
185       * false.  WARNING: this is not recommended unless you want your single job
186       * tokens to be reused by others jobs.
187       * @param cancel true if tokens should be canceled when the app finishes. 
188       */
189      @LimitedPrivate("mapreduce")
190      @Unstable
191      public void setCancelTokensWhenComplete(boolean cancel);
192    }