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.Private;
023    import org.apache.hadoop.classification.InterfaceAudience.Public;
024    import org.apache.hadoop.classification.InterfaceStability.Stable;
025    import org.apache.hadoop.classification.InterfaceStability.Unstable;
026    import 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
051    public 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    }