YARN-654. AMRMClient: Perform sanity checks for parameters of public methods (Xuan Gong via bikas)

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1503353 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Bikas Saha 2013-07-15 17:13:05 +00:00
parent adfd2fa314
commit fe735f237c
3 changed files with 32 additions and 3 deletions

View File

@ -689,6 +689,9 @@ Release 2.1.0-beta - 2013-07-02
YARN-763. AMRMClientAsync should stop heartbeating after receiving YARN-763. AMRMClientAsync should stop heartbeating after receiving
shutdown from RM (Xuan Gong via bikas) shutdown from RM (Xuan Gong via bikas)
YARN-654. AMRMClient: Perform sanity checks for parameters of public
methods (Xuan Gong via bikas)"
BREAKDOWN OF HADOOP-8562 SUBTASKS AND RELATED JIRAS BREAKDOWN OF HADOOP-8562 SUBTASKS AND RELATED JIRAS
YARN-158. Yarn creating package-info.java must not depend on sh. YARN-158. Yarn creating package-info.java must not depend on sh.

View File

@ -36,8 +36,8 @@ import org.apache.hadoop.yarn.api.records.Priority;
import org.apache.hadoop.yarn.api.records.Resource; import org.apache.hadoop.yarn.api.records.Resource;
import org.apache.hadoop.yarn.client.api.impl.AMRMClientImpl; import org.apache.hadoop.yarn.client.api.impl.AMRMClientImpl;
import org.apache.hadoop.yarn.exceptions.YarnException; import org.apache.hadoop.yarn.exceptions.YarnException;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.google.common.base.Preconditions;
@InterfaceAudience.Public @InterfaceAudience.Public
@InterfaceStability.Stable @InterfaceStability.Stable
@ -57,6 +57,8 @@ public abstract class AMRMClient<T extends AMRMClient.ContainerRequest> extends
@Public @Public
public static <T extends ContainerRequest> AMRMClient<T> createAMRMClient( public static <T extends ContainerRequest> AMRMClient<T> createAMRMClient(
ApplicationAttemptId appAttemptId) { ApplicationAttemptId appAttemptId) {
Preconditions.checkArgument(appAttemptId != null,
"ApplicationAttempId should not be null");
AMRMClient<T> client = new AMRMClientImpl<T>(appAttemptId); AMRMClient<T> client = new AMRMClientImpl<T>(appAttemptId);
return client; return client;
} }
@ -95,6 +97,13 @@ public abstract class AMRMClient<T extends AMRMClient.ContainerRequest> extends
public ContainerRequest(Resource capability, String[] nodes, public ContainerRequest(Resource capability, String[] nodes,
String[] racks, Priority priority, int containerCount) { String[] racks, Priority priority, int containerCount) {
Preconditions.checkArgument(capability != null,
"The Resource to be requested for each container " +
"should not be null ");
Preconditions.checkArgument(priority != null,
"The priority at which to request containers should not be null ");
Preconditions.checkArgument(containerCount > 0,
"The number of containers to request should larger than 0");
this.capability = capability; this.capability = capability;
this.nodes = (nodes != null ? ImmutableList.copyOf(nodes) : null); this.nodes = (nodes != null ? ImmutableList.copyOf(nodes) : null);
this.racks = (racks != null ? ImmutableList.copyOf(racks) : null); this.racks = (racks != null ? ImmutableList.copyOf(racks) : null);

View File

@ -68,8 +68,7 @@ import org.apache.hadoop.yarn.util.RackResolver;
import com.google.common.annotations.VisibleForTesting; import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Joiner; import com.google.common.base.Joiner;
import com.google.common.base.Preconditions;
// TODO check inputs for null etc. YARN-654
@Private @Private
@Unstable @Unstable
@ -204,6 +203,10 @@ public class AMRMClientImpl<T extends ContainerRequest> extends AMRMClient<T> {
public RegisterApplicationMasterResponse registerApplicationMaster( public RegisterApplicationMasterResponse registerApplicationMaster(
String appHostName, int appHostPort, String appTrackingUrl) String appHostName, int appHostPort, String appTrackingUrl)
throws YarnException, IOException { throws YarnException, IOException {
Preconditions.checkArgument(appHostName != null,
"The host name should not be null");
Preconditions.checkArgument(appHostPort >= 0,
"Port number of the host should not be negative");
// do this only once ??? // do this only once ???
RegisterApplicationMasterRequest request = recordFactory RegisterApplicationMasterRequest request = recordFactory
.newRecordInstance(RegisterApplicationMasterRequest.class); .newRecordInstance(RegisterApplicationMasterRequest.class);
@ -223,6 +226,8 @@ public class AMRMClientImpl<T extends ContainerRequest> extends AMRMClient<T> {
@Override @Override
public AllocateResponse allocate(float progressIndicator) public AllocateResponse allocate(float progressIndicator)
throws YarnException, IOException { throws YarnException, IOException {
Preconditions.checkArgument(progressIndicator > 0,
"Progress indicator should not be negative");
AllocateResponse allocateResponse = null; AllocateResponse allocateResponse = null;
ArrayList<ResourceRequest> askList = null; ArrayList<ResourceRequest> askList = null;
ArrayList<ContainerId> releaseList = null; ArrayList<ContainerId> releaseList = null;
@ -302,6 +307,8 @@ public class AMRMClientImpl<T extends ContainerRequest> extends AMRMClient<T> {
public void unregisterApplicationMaster(FinalApplicationStatus appStatus, public void unregisterApplicationMaster(FinalApplicationStatus appStatus,
String appMessage, String appTrackingUrl) throws YarnException, String appMessage, String appTrackingUrl) throws YarnException,
IOException { IOException {
Preconditions.checkArgument(appStatus != null,
"AppStatus should not be null.");
FinishApplicationMasterRequest request = recordFactory FinishApplicationMasterRequest request = recordFactory
.newRecordInstance(FinishApplicationMasterRequest.class); .newRecordInstance(FinishApplicationMasterRequest.class);
request.setAppAttemptId(appAttemptId); request.setAppAttemptId(appAttemptId);
@ -317,6 +324,8 @@ public class AMRMClientImpl<T extends ContainerRequest> extends AMRMClient<T> {
@Override @Override
public synchronized void addContainerRequest(T req) { public synchronized void addContainerRequest(T req) {
Preconditions.checkArgument(req != null,
"Resource request can not be null.");
Set<String> allRacks = new HashSet<String>(); Set<String> allRacks = new HashSet<String>();
if (req.getRacks() != null) { if (req.getRacks() != null) {
allRacks.addAll(req.getRacks()); allRacks.addAll(req.getRacks());
@ -355,6 +364,8 @@ public class AMRMClientImpl<T extends ContainerRequest> extends AMRMClient<T> {
@Override @Override
public synchronized void removeContainerRequest(T req) { public synchronized void removeContainerRequest(T req) {
Preconditions.checkArgument(req != null,
"Resource request can not be null.");
Set<String> allRacks = new HashSet<String>(); Set<String> allRacks = new HashSet<String>();
if (req.getRacks() != null) { if (req.getRacks() != null) {
allRacks.addAll(req.getRacks()); allRacks.addAll(req.getRacks());
@ -380,6 +391,8 @@ public class AMRMClientImpl<T extends ContainerRequest> extends AMRMClient<T> {
@Override @Override
public synchronized void releaseAssignedContainer(ContainerId containerId) { public synchronized void releaseAssignedContainer(ContainerId containerId) {
Preconditions.checkArgument(containerId != null,
"ContainerId can not be null.");
release.add(containerId); release.add(containerId);
} }
@ -398,6 +411,10 @@ public class AMRMClientImpl<T extends ContainerRequest> extends AMRMClient<T> {
Priority priority, Priority priority,
String resourceName, String resourceName,
Resource capability) { Resource capability) {
Preconditions.checkArgument(capability != null,
"The Resource to be requested should not be null ");
Preconditions.checkArgument(priority != null,
"The priority at which to request containers should not be null ");
List<LinkedHashSet<T>> list = new LinkedList<LinkedHashSet<T>>(); List<LinkedHashSet<T>> list = new LinkedList<LinkedHashSet<T>>();
Map<String, TreeMap<Resource, ResourceRequestInfo>> remoteRequests = Map<String, TreeMap<Resource, ResourceRequestInfo>> remoteRequests =
this.remoteRequestsTable.get(priority); this.remoteRequestsTable.get(priority);