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.Private;
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.util.Records;
026    
027    /**
028     * <p><code>ContainerStatus</code> represents the current status of a 
029     * <code>Container</code>.</p>
030     * 
031     * <p>It provides details such as:
032     *   <ul>
033     *     <li><code>ContainerId</code> of the container.</li>
034     *     <li><code>ContainerState</code> of the container.</li>
035     *     <li><em>Exit status</em> of a completed container.</li>
036     *     <li><em>Diagnostic</em> message for a failed container.</li>
037     *   </ul>
038     * </p>
039     */
040    @Public
041    @Stable
042    public abstract class ContainerStatus {
043    
044      @Private
045      @Unstable
046      public static ContainerStatus newInstance(ContainerId containerId,
047          ContainerState containerState, String diagnostics, int exitStatus) {
048        ContainerStatus containerStatus = Records.newRecord(ContainerStatus.class);
049        containerStatus.setState(containerState);
050        containerStatus.setContainerId(containerId);
051        containerStatus.setDiagnostics(diagnostics);
052        containerStatus.setExitStatus(exitStatus);
053        return containerStatus;
054      }
055    
056      /**
057       * Get the <code>ContainerId</code> of the container.
058       * @return <code>ContainerId</code> of the container
059       */
060      @Public
061      @Stable
062      public abstract ContainerId getContainerId();
063      
064      @Private
065      @Unstable
066      public abstract void setContainerId(ContainerId containerId);
067    
068      /**
069       * Get the <code>ContainerState</code> of the container.
070       * @return <code>ContainerState</code> of the container
071       */
072      @Public
073      @Stable
074      public abstract ContainerState getState();
075      
076      @Private
077      @Unstable
078      public abstract void setState(ContainerState state);
079    
080      /**
081       * <p>Get the <em>exit status</em> for the container.</p>
082       *  
083       * <p>Note: This is valid only for completed containers i.e. containers
084       * with state {@link ContainerState#COMPLETE}. 
085       * Otherwise, it returns an ContainerExitStatus.INVALID.
086       * </p>
087       * 
088       * <p>Containers killed by the framework, either due to being released by
089       * the application or being 'lost' due to node failures etc. have a special
090       * exit code of ContainerExitStatus.ABORTED.</p>
091       * 
092       * <p>When threshold number of the nodemanager-local-directories or
093       * threshold number of the nodemanager-log-directories become bad, then
094       * container is not launched and is exited with ContainersExitStatus.DISKS_FAILED.
095       * </p>
096       *  
097       * @return <em>exit status</em> for the container
098       */
099      @Public
100      @Unstable
101      public abstract int getExitStatus();
102      
103      @Private
104      @Unstable
105      public abstract void setExitStatus(int exitStatus);
106    
107      /**
108       * Get <em>diagnostic messages</em> for failed containers.
109       * @return <em>diagnostic messages</em> for failed containers
110       */
111      @Public
112      @Stable
113      public abstract String getDiagnostics();
114      
115      @Private
116      @Unstable
117      public abstract void setDiagnostics(String diagnostics);
118    }