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.Public;
022import org.apache.hadoop.classification.InterfaceStability.Stable;
023import org.apache.hadoop.yarn.api.ContainerManagementProtocol;
024import 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
044public 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}