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