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 java.nio.ByteBuffer;
022    import java.util.List;
023    import java.util.Map;
024    
025    import org.apache.hadoop.classification.InterfaceAudience.Public;
026    import org.apache.hadoop.classification.InterfaceStability.Stable;
027    import org.apache.hadoop.yarn.api.ContainerManager;
028    
029    /**
030     * <p><code>ContainerLaunchContext</code> represents all of the information
031     * needed by the <code>NodeManager</code> to launch a container.</p>
032     * 
033     * <p>It includes details such as:
034     *   <ul>
035     *     <li>{@link ContainerId} of the container.</li>
036     *     <li>{@link Resource} allocated to the container.</li>
037     *     <li>User to whom the container is allocated.</li>
038     *     <li>Security tokens (if security is enabled).</li>
039     *     <li>
040     *       {@link LocalResource} necessary for running the container such
041     *       as binaries, jar, shared-objects, side-files etc. 
042     *     </li>
043     *     <li>Optional, application-specific binary service data.</li>
044     *     <li>Environment variables for the launched process.</li>
045     *     <li>Command to launch the container.</li>
046     *   </ul>
047     * </p>
048     * 
049     * @see ContainerManager#startContainer(org.apache.hadoop.yarn.api.protocolrecords.StartContainerRequest)
050     */
051    @Public
052    @Stable
053    public interface ContainerLaunchContext {
054      /**
055       * Get <code>ContainerId</code> of container to be launched.
056       * @return <code>ContainerId</code> of container to be launched
057       */
058      @Public
059      @Stable
060      ContainerId getContainerId();
061    
062      /**
063       * Set <code>ContainerId</code> of container to be launched.
064       * @param containerId et <code>ContainerId</code> of container to be launched
065       */
066      @Public
067      @Stable
068      void setContainerId(ContainerId containerId);
069    
070      /**
071       * Get the <em>user</em> to whom the container has been allocated.
072       * @return the <em>user</em> to whom the container has been allocated
073       */
074      @Public
075      @Stable
076      String getUser();
077      
078      /**
079       * Set the <em>user</em> to whom the container has been allocated
080       * @param user <em>user</em> to whom the container has been allocated
081       */
082      @Public
083      @Stable
084      void setUser(String user);
085    
086      /**
087       * Get the <code>Resource</code> allocated to the container by the
088       * <code>ResourceManager</code>.
089       * @return <code>Resource</code> allocated to the container by the
090       *         <code>ResourceManager</code>
091       */
092      @Public
093      @Stable
094      Resource getResource();
095    
096      /**
097       * Set the <code>Resource</code> allocated to the container by the
098       * <code>ResourceManager</code>.
099       * @param resource allocated resource
100       */
101      @Public
102      @Stable
103      void setResource(Resource resource);
104    
105      /**
106       * Get security tokens (if security is enabled).
107       * @return security tokens (if security is enabled)
108       */
109      @Public
110      @Stable
111      ByteBuffer getContainerTokens();
112    
113      /**
114       * Set security tokens (if security is enabled).
115       * @param containerToken security tokens 
116       */
117      @Public
118      @Stable
119      void setContainerTokens(ByteBuffer containerToken);
120    
121      /**
122       * Get <code>LocalResource</code> required by the container.
123       * @return all <code>LocalResource</code> required by the container
124       */
125      @Public
126      @Stable
127      Map<String, LocalResource> getLocalResources();
128      
129      /**
130       * Set <code>LocalResource</code> required by the container. All pre-existing
131       * Map entries are cleared before adding the new Map
132       * @param localResources <code>LocalResource</code> required by the container
133       */
134      @Public
135      @Stable
136      void setLocalResources(Map<String, LocalResource> localResources);
137    
138      /**
139       * Get application-specific binary <em>service data</em>.
140       * @return application-specific binary <em>service data</em>
141       */
142      @Public
143      @Stable
144      Map<String, ByteBuffer> getServiceData();
145      
146      /**
147       * Set application-specific binary <em>service data</em>. All pre-existing Map
148       * entries are preserved.
149       * @param serviceData application-specific binary <em>service data</em>
150       */
151      @Public
152      @Stable
153      void setServiceData(Map<String, ByteBuffer> serviceData);
154    
155      /**
156       * Get <em>environment variables</em> for the container.
157       * @return <em>environment variables</em> for the container
158       */
159      @Public
160      @Stable
161      Map<String, String> getEnvironment();
162        
163      /**
164       * Add <em>environment variables</em> for the container. All pre-existing Map
165       * entries are cleared before adding the new Map
166       * @param environment <em>environment variables</em> for the container
167       */
168      @Public
169      @Stable
170      void setEnvironment(Map<String, String> environment);
171    
172      /**
173       * Get the list of <em>commands</em> for launching the container.
174       * @return the list of <em>commands</em> for launching the container
175       */
176      @Public
177      @Stable
178      List<String> getCommands();
179      
180      /**
181       * Add the list of <em>commands</em> for launching the container. All
182       * pre-existing List entries are cleared before adding the new List
183       * @param commands the list of <em>commands</em> for launching the container
184       */
185      @Public
186      @Stable
187      void setCommands(List<String> commands);
188    
189      /**
190       * Get the <code>ApplicationACL</code>s for the application. 
191       * @return all the <code>ApplicationACL</code>s
192       */
193      @Public
194      @Stable
195      public Map<ApplicationAccessType, String> getApplicationACLs();
196    
197      /**
198       * Set the <code>ApplicationACL</code>s for the application. All pre-existing
199       * Map entries are cleared before adding the new Map
200       * @param acls <code>ApplicationACL</code>s for the application
201       */
202      @Public
203      @Stable
204      public void setApplicationACLs(Map<ApplicationAccessType, String> acls);
205    }