YARN-5970. Validate application update timeout request parameters. Contributed by Rohith Sharma K S.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/74d0066d Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/74d0066d Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/74d0066d Branch: refs/heads/YARN-5734 Commit: 74d0066d3392169bec872f438a0818e2f5323010 Parents: 9ef89ed Author: Sunil G <sun...@apache.org> Authored: Thu Dec 8 15:53:56 2016 +0530 Committer: Sunil G <sun...@apache.org> Committed: Thu Dec 8 15:53:56 2016 +0530 ---------------------------------------------------------------------- .../java/org/apache/hadoop/yarn/util/Times.java | 3 ++ .../server/resourcemanager/RMServerUtils.java | 3 +- .../resourcemanager/webapp/RMWebServices.java | 10 ++--- .../TestRMWebServicesAppsModification.java | 39 ++++++++++++++------ 4 files changed, 38 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/74d0066d/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/Times.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/Times.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/Times.java index f113bd3..3c41558 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/Times.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/Times.java @@ -105,6 +105,9 @@ public class Times { */ public static long parseISO8601ToLocalTimeInMillis(String isoString) throws ParseException { + if (isoString == null) { + throw new ParseException("Invalid input.", -1); + } return isoFormat.get().parse(isoString).getTime(); } } http://git-wip-us.apache.org/repos/asf/hadoop/blob/74d0066d/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMServerUtils.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMServerUtils.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMServerUtils.java index a0cdf68..74898ca 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMServerUtils.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMServerUtils.java @@ -507,7 +507,8 @@ public class RMServerUtils { } catch (ParseException ex) { String message = "Expire time is not in ISO8601 format. ISO8601 supported " - + "format is yyyy-MM-dd'T'HH:mm:ss.SSSZ"; + + "format is yyyy-MM-dd'T'HH:mm:ss.SSSZ. Configured " + + "timeout value is " + timeout.getValue(); throw new YarnException(message, ex); } if (expireTime < currentTimeMillis) { http://git-wip-us.apache.org/repos/asf/hadoop/blob/74d0066d/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebServices.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebServices.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebServices.java index a46fb81..bd0602b 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebServices.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebServices.java @@ -2434,7 +2434,7 @@ public class RMWebServices extends WebServices { } @GET - @Path("/apps/{appid}/timeout/{type}") + @Path("/apps/{appid}/timeouts/{type}") @Produces({ MediaType.APPLICATION_JSON + "; " + JettyUtils.UTF_8, MediaType.APPLICATION_XML + "; " + JettyUtils.UTF_8 }) public AppTimeoutInfo getAppTimeout(@Context HttpServletRequest hsr, @@ -2571,10 +2571,10 @@ public class RMWebServices extends WebServices { private Response updateApplicationTimeouts(final RMApp app, UserGroupInformation callerUGI, final AppTimeoutInfo appTimeout) throws IOException, InterruptedException { - - if (appTimeout.getTimeoutType() == null) { - return Response.status(Status.BAD_REQUEST).entity("Timeout type is null.") - .build(); + if (appTimeout.getTimeoutType() == null + || appTimeout.getExpireTime() == null) { + return Response.status(Status.BAD_REQUEST) + .entity("Timeout type or ExpiryTime is null.").build(); } String userName = callerUGI.getUserName(); http://git-wip-us.apache.org/repos/asf/hadoop/blob/74d0066d/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppsModification.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppsModification.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppsModification.java index 6458471..5d99e0d 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppsModification.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppsModification.java @@ -1328,19 +1328,11 @@ public class TestRMWebServicesAppsModification extends JerseyTestBase { ApplicationTimeoutType.LIFETIME, "UNLIMITED", -1); } - AppTimeoutInfo timeoutUpdate = new AppTimeoutInfo(); long timeOutFromNow = 60; String expireTime = Times .formatISO8601(System.currentTimeMillis() + timeOutFromNow * 1000); - timeoutUpdate.setTimeoutType(ApplicationTimeoutType.LIFETIME); - timeoutUpdate.setExpiryTime(expireTime); - - Object entity; - if (contentType.equals(MediaType.APPLICATION_JSON_TYPE)) { - entity = appTimeoutToJSON(timeoutUpdate); - } else { - entity = timeoutUpdate; - } + Object entity = getAppTimeoutInfoEntity(ApplicationTimeoutType.LIFETIME, + contentType, expireTime); response = this .constructWebResource("apps", app.getApplicationId().toString(), "timeout") @@ -1361,10 +1353,20 @@ public class TestRMWebServicesAppsModification extends JerseyTestBase { expireTime, timeOutFromNow); } + // verify for negative cases + entity = getAppTimeoutInfoEntity(null, + contentType, null); + response = this + .constructWebResource("apps", app.getApplicationId().toString(), + "timeout") + .entity(entity, contentType).accept(mediaType) + .put(ClientResponse.class); + assertResponseStatusCode(Status.BAD_REQUEST, response.getStatusInfo()); + // invoke get response = this.constructWebResource("apps", app.getApplicationId().toString(), - "timeout", ApplicationTimeoutType.LIFETIME.toString()) + "timeouts", ApplicationTimeoutType.LIFETIME.toString()) .accept(mediaType).get(ClientResponse.class); assertResponseStatusCode(Status.OK, response.getStatusInfo()); if (mediaType.contains(MediaType.APPLICATION_JSON)) { @@ -1376,6 +1378,21 @@ public class TestRMWebServicesAppsModification extends JerseyTestBase { rm.stop(); } + private Object getAppTimeoutInfoEntity(ApplicationTimeoutType type, + MediaType contentType, String expireTime) throws Exception { + AppTimeoutInfo timeoutUpdate = new AppTimeoutInfo(); + timeoutUpdate.setTimeoutType(type); + timeoutUpdate.setExpiryTime(expireTime); + + Object entity; + if (contentType.equals(MediaType.APPLICATION_JSON_TYPE)) { + entity = appTimeoutToJSON(timeoutUpdate); + } else { + entity = timeoutUpdate; + } + return entity; + } + protected static void verifyAppTimeoutJson(ClientResponse response, ApplicationTimeoutType type, String expireTime, long timeOutFromNow) throws JSONException { --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org