diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/Resource.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/Resource.java index 71a6b54352b..762590c7d7c 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/Resource.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/Resource.java @@ -255,18 +255,15 @@ public void setMemorySize(long memory) { * * @param resource name of the resource * @return the ResourceInformation object for the resource - * @throws ResourceNotFoundException if the resource can't be found */ @Public @InterfaceStability.Unstable - public ResourceInformation getResourceInformation(String resource) - throws ResourceNotFoundException { + public ResourceInformation getResourceInformation(String resource) { Integer index = ResourceUtils.getResourceTypeIndex().get(resource); if (index != null) { return resources[index]; } - throw new ResourceNotFoundException("Unknown resource '" + resource - + "'. Known resources are " + Arrays.toString(resources)); + throw new ResourceNotFoundException(this, resource); } /** @@ -297,12 +294,10 @@ public ResourceInformation getResourceInformation(int index) * * @param resource name of the resource * @return the value for the resource - * @throws ResourceNotFoundException if the resource can't be found */ @Public @InterfaceStability.Unstable - public long getResourceValue(String resource) - throws ResourceNotFoundException { + public long getResourceValue(String resource) { return getResourceInformation(resource).getValue(); } @@ -311,13 +306,11 @@ public long getResourceValue(String resource) * * @param resource the resource for which the ResourceInformation is provided * @param resourceInformation ResourceInformation object - * @throws ResourceNotFoundException if the resource is not found */ @Public @InterfaceStability.Unstable public void setResourceInformation(String resource, - ResourceInformation resourceInformation) - throws ResourceNotFoundException { + ResourceInformation resourceInformation) { if (resource.equals(ResourceInformation.MEMORY_URI)) { this.setMemorySize(resourceInformation.getValue()); return; @@ -346,8 +339,7 @@ public void setResourceInformation(int index, ResourceInformation resourceInformation) throws ResourceNotFoundException { if (index < 0 || index >= resources.length) { - throw new ResourceNotFoundException("Unknown resource at index '" + index - + "'. Valid resources are " + Arrays.toString(resources)); + throwExceptionWhenArrayOutOfBound(index); } ResourceInformation.copy(resourceInformation, resources[index]); } @@ -358,12 +350,10 @@ public void setResourceInformation(int index, * * @param resource the resource for which the value is provided. * @param value the value to set - * @throws ResourceNotFoundException if the resource is not found */ @Public @InterfaceStability.Unstable - public void setResourceValue(String resource, long value) - throws ResourceNotFoundException { + public void setResourceValue(String resource, long value) { if (resource.equals(ResourceInformation.MEMORY_URI)) { this.setMemorySize(value); return; diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/exceptions/ResourceNotFoundException.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/exceptions/ResourceNotFoundException.java index b5fece7dc8c..dd1cca7ed89 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/exceptions/ResourceNotFoundException.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/exceptions/ResourceNotFoundException.java @@ -18,8 +18,10 @@ package org.apache.hadoop.yarn.exceptions; +import org.apache.commons.lang.exception.ExceptionUtils; import org.apache.hadoop.classification.InterfaceAudience; import org.apache.hadoop.classification.InterfaceStability; +import org.apache.hadoop.yarn.api.records.Resource; /** * This exception is thrown when details of an unknown resource type @@ -28,18 +30,31 @@ @InterfaceAudience.Public @InterfaceStability.Unstable public class ResourceNotFoundException extends YarnRuntimeException { - private static final long serialVersionUID = 10081982L; + private static final String MESSAGE = "The resource manager encountered a " + + "problem that should not occur under normal circumstances. " + + "Please report this error to the Hadoop community by opening a " + + "JIRA ticket at http://issues.apache.org/jira and including the " + + "following information:\n* Resource type requested: %s\n* Resource " + + "object: %s\n* The stack trace for this exception: %s\n" + + "After encountering this error, the resource manager is " + + "in an inconsistent state. It is safe for the resource manager " + + "to be restarted as the error encountered should be transitive. " + + "If high availability is enabled, failing over to " + + "a standby resource manager is also safe."; - public ResourceNotFoundException(String message) { - super(message); + public ResourceNotFoundException(Resource resource, String type) { + this(String.format(MESSAGE, type, resource, + ExceptionUtils.getStackTrace(new Exception()))); } - public ResourceNotFoundException(Throwable cause) { - super(cause); + public ResourceNotFoundException(Resource resource, String type, + Throwable cause) { + super(String.format(MESSAGE, type, resource, + ExceptionUtils.getStackTrace(cause)), cause); } - public ResourceNotFoundException(String message, Throwable cause) { - super(message, cause); + public ResourceNotFoundException(String message) { + super(message); } } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ResourcePBImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ResourcePBImpl.java index 6ebed6e0576..15d2470840c 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ResourcePBImpl.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ResourcePBImpl.java @@ -193,8 +193,7 @@ public void setResourceInformation(String resource, } @Override - public void setResourceValue(String resource, long value) - throws ResourceNotFoundException { + public void setResourceValue(String resource, long value) { maybeInitBuilder(); if (resource == null) { throw new IllegalArgumentException("resource type object cannot be null"); @@ -203,14 +202,13 @@ public void setResourceValue(String resource, long value) } @Override - public ResourceInformation getResourceInformation(String resource) - throws ResourceNotFoundException { + public ResourceInformation getResourceInformation(String resource) { + initResources(); return super.getResourceInformation(resource); } @Override - public long getResourceValue(String resource) - throws ResourceNotFoundException { + public long getResourceValue(String resource) { return super.getResourceValue(resource); } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/Resources.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/Resources.java index 7826f51cd4d..aa2e937a2cd 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/Resources.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/Resources.java @@ -107,14 +107,12 @@ public void setResourceValue(int index, long value) @Override public void setResourceInformation(String resource, - ResourceInformation resourceInformation) - throws ResourceNotFoundException { + ResourceInformation resourceInformation) { throw new RuntimeException(name + " cannot be modified!"); } @Override - public void setResourceValue(String resource, long value) - throws ResourceNotFoundException { + public void setResourceValue(String resource, long value) { throw new RuntimeException(name + " cannot be modified!"); }