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.Public;
022    import org.apache.hadoop.classification.InterfaceStability.Stable;
023    import org.apache.hadoop.yarn.api.ContainerManagementProtocol;
024    import org.apache.hadoop.yarn.util.Records;
025    
026    /**
027     * <p><code>LocalResource</code> represents a local resource required to
028     * run a container.</p>
029     * 
030     * <p>The <code>NodeManager</code> is responsible for localizing the resource 
031     * prior to launching the container.</p>
032     * 
033     * <p>Applications can specify {@link LocalResourceType} and 
034     * {@link LocalResourceVisibility}.</p>
035     * 
036     * @see LocalResourceType
037     * @see LocalResourceVisibility
038     * @see ContainerLaunchContext
039     * @see ApplicationSubmissionContext
040     * @see ContainerManagementProtocol#startContainers(org.apache.hadoop.yarn.api.protocolrecords.StartContainersRequest)
041     */
042    @Public
043    @Stable
044    public abstract class LocalResource {
045    
046      @Public
047      @Stable
048      public static LocalResource newInstance(URL url, LocalResourceType type,
049          LocalResourceVisibility visibility, long size, long timestamp,
050          String pattern) {
051        LocalResource resource = Records.newRecord(LocalResource.class);
052        resource.setResource(url);
053        resource.setType(type);
054        resource.setVisibility(visibility);
055        resource.setSize(size);
056        resource.setTimestamp(timestamp);
057        resource.setPattern(pattern);
058        return resource;
059      }
060    
061      @Public
062      @Stable
063      public static LocalResource newInstance(URL url, LocalResourceType type,
064          LocalResourceVisibility visibility, long size, long timestamp) {
065        return newInstance(url, type, visibility, size, timestamp, null);
066      }
067    
068      /**
069       * Get the <em>location</em> of the resource to be localized.
070       * @return <em>location</em> of the resource to be localized
071       */
072      @Public
073      @Stable
074      public abstract URL getResource();
075      
076      /**
077       * Set <em>location</em> of the resource to be localized.
078       * @param resource <em>location</em> of the resource to be localized
079       */
080      @Public
081      @Stable
082      public abstract void setResource(URL resource);
083      
084      /**
085       * Get the <em>size</em> of the resource to be localized.
086       * @return <em>size</em> of the resource to be localized
087       */
088      @Public
089      @Stable
090      public abstract long getSize();
091      
092      /**
093       * Set the <em>size</em> of the resource to be localized.
094       * @param size <em>size</em> of the resource to be localized
095       */
096      @Public
097      @Stable
098      public abstract void setSize(long size);
099      
100      /**
101       * Get the original <em>timestamp</em> of the resource to be localized, used
102       * for verification.
103       * @return <em>timestamp</em> of the resource to be localized
104       */
105      @Public
106      @Stable
107      public abstract long getTimestamp();
108      
109      /**
110       * Set the <em>timestamp</em> of the resource to be localized, used
111       * for verification.
112       * @param timestamp <em>timestamp</em> of the resource to be localized
113       */
114      @Public
115      @Stable
116      public abstract void setTimestamp(long timestamp);
117      
118      /**
119       * Get the <code>LocalResourceType</code> of the resource to be localized.
120       * @return <code>LocalResourceType</code> of the resource to be localized
121       */
122      @Public
123      @Stable
124      public abstract LocalResourceType getType();
125      
126      /**
127       * Set the <code>LocalResourceType</code> of the resource to be localized.
128       * @param type <code>LocalResourceType</code> of the resource to be localized
129       */
130      @Public
131      @Stable
132      public abstract void setType(LocalResourceType type);
133      
134      /**
135       * Get the <code>LocalResourceVisibility</code> of the resource to be 
136       * localized.
137       * @return <code>LocalResourceVisibility</code> of the resource to be 
138       *         localized
139       */
140      @Public
141      @Stable
142      public abstract LocalResourceVisibility getVisibility();
143      
144      /**
145       * Set the <code>LocalResourceVisibility</code> of the resource to be 
146       * localized.
147       * @param visibility <code>LocalResourceVisibility</code> of the resource to be 
148       *                   localized
149       */
150      @Public
151      @Stable
152      public abstract void setVisibility(LocalResourceVisibility visibility);
153      
154      /**
155       * Get the <em>pattern</em> that should be used to extract entries from the
156       * archive (only used when type is <code>PATTERN</code>).
157       * @return <em>pattern</em> that should be used to extract entries from the 
158       * archive. 
159       */
160      @Public
161      @Stable
162      public abstract String getPattern();
163      
164      /**
165       * Set the <em>pattern</em> that should be used to extract entries from the
166       * archive (only used when type is <code>PATTERN</code>).
167       * @param pattern <em>pattern</em> that should be used to extract entries 
168       * from the archive.
169       */
170      @Public
171      @Stable
172      public abstract void setPattern(String pattern);
173    }