This is an automated email from the ASF dual-hosted git repository. jhung pushed a commit to branch branch-2.10 in repository https://gitbox.apache.org/repos/asf/hadoop.git
The following commit(s) were added to refs/heads/branch-2.10 by this push: new c4a8c83 YARN-10039. Allow disabling app submission from REST endpoints c4a8c83 is described below commit c4a8c834e5a850af0304130418dacf0ee9c96ba4 Author: Jonathan Hung <jh...@linkedin.com> AuthorDate: Wed Dec 18 10:48:05 2019 -0800 YARN-10039. Allow disabling app submission from REST endpoints (cherry picked from commit 406c35dd1213ef354570f8337e54a4fb4bbf5bad) --- .../apache/hadoop/yarn/conf/YarnConfiguration.java | 4 ++++ .../src/main/resources/yarn-default.xml | 6 ++++++ .../server/resourcemanager/webapp/RMWebServices.java | 12 ++++++++++++ .../resourcemanager/webapp/TestRMWebServices.java | 20 ++++++++++++++++++++ 4 files changed, 42 insertions(+) diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java index 45fe311..208bc76 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java @@ -3367,6 +3367,10 @@ public class YarnConfiguration extends Configuration { RM_PREFIX + "display.per-user-apps"; public static final boolean DEFAULT_DISPLAY_APPS_FOR_LOGGED_IN_USER = false; + public static final String ENABLE_REST_APP_SUBMISSIONS = + "yarn.webapp.enable-rest-app-submissions"; + public static final boolean DEFAULT_ENABLE_REST_APP_SUBMISSIONS = true; + // RM and NM CSRF props public static final String REST_CSRF = "webapp.rest-csrf."; public static final String RM_CSRF_PREFIX = RM_PREFIX + REST_CSRF; diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/yarn-default.xml b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/yarn-default.xml index ba1d077..31e4c20 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/yarn-default.xml +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/yarn-default.xml @@ -3590,4 +3590,10 @@ <name>yarn.workflow-id.tag-prefix</name> <value>workflowid:</value> </property> + + <property> + <description>Whether or not to allow application submissions via REST. Default is true.</description> + <name>yarn.webapp.enable-rest-app-submissions</name> + <value>true</value> + </property> </configuration> 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 cded2ec..3724469 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 @@ -230,6 +230,7 @@ public class RMWebServices extends WebServices implements RMWebServiceProtocol { @VisibleForTesting boolean isCentralizedNodeLabelConfiguration = true; private boolean displayPerUserApps = false; + private boolean enableRestAppSubmissions = true; public final static String DELEGATION_TOKEN_HEADER = "Hadoop-YARN-RM-Delegation-Token"; @@ -245,6 +246,9 @@ public class RMWebServices extends WebServices implements RMWebServiceProtocol { this.displayPerUserApps = conf.getBoolean( YarnConfiguration.DISPLAY_APPS_FOR_LOGGED_IN_USER, YarnConfiguration.DEFAULT_DISPLAY_APPS_FOR_LOGGED_IN_USER); + this.enableRestAppSubmissions = conf.getBoolean( + YarnConfiguration.ENABLE_REST_APP_SUBMISSIONS, + YarnConfiguration.DEFAULT_ENABLE_REST_APP_SUBMISSIONS); } RMWebServices(ResourceManager rm, Configuration conf, @@ -1535,6 +1539,10 @@ public class RMWebServices extends WebServices implements RMWebServiceProtocol { @Override public Response createNewApplication(@Context HttpServletRequest hsr) throws AuthorizationException, IOException, InterruptedException { + if (!enableRestAppSubmissions) { + String msg = "App submission via REST is disabled."; + return Response.status(Status.FORBIDDEN).entity(msg).build(); + } UserGroupInformation callerUGI = getCallerUserGroupInformation(hsr, true); initForWritableEndpoints(callerUGI, false); @@ -1554,6 +1562,10 @@ public class RMWebServices extends WebServices implements RMWebServiceProtocol { public Response submitApplication(ApplicationSubmissionContextInfo newApp, @Context HttpServletRequest hsr) throws AuthorizationException, IOException, InterruptedException { + if (!enableRestAppSubmissions) { + String msg = "App submission via REST is disabled."; + return Response.status(Status.FORBIDDEN).entity(msg).build(); + } UserGroupInformation callerUGI = getCallerUserGroupInformation(hsr, true); initForWritableEndpoints(callerUGI, false); 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/TestRMWebServices.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServices.java index c4504b5..7060b6d 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServices.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServices.java @@ -35,6 +35,7 @@ import java.util.Set; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; @@ -61,6 +62,7 @@ import org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceScheduler import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fifo.FifoScheduler; +import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ApplicationSubmissionContextInfo; import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.AppsInfo; import org.apache.hadoop.yarn.server.security.ApplicationACLsManager; import org.apache.hadoop.yarn.util.AdHocLogDumper; @@ -748,4 +750,22 @@ public class TestRMWebServices extends JerseyTestBase { when(mockHsr.getUserPrincipal()).thenReturn(principal); return mockHsr; } + + @Test + public void testDisableRestAppSubmission() throws Exception { + Configuration conf = new YarnConfiguration(); + conf.setBoolean(YarnConfiguration.ENABLE_REST_APP_SUBMISSIONS, false); + RMWebServices webSvc = new RMWebServices(mock(ResourceManager.class), conf, + mock(HttpServletResponse.class)); + HttpServletRequest request = mock(HttpServletRequest.class); + + Response response = webSvc.createNewApplication(request); + assertEquals(Status.FORBIDDEN.getStatusCode(), response.getStatus()); + assertEquals("App submission via REST is disabled.", response.getEntity()); + + response = webSvc.submitApplication( + mock(ApplicationSubmissionContextInfo.class), request); + assertEquals(Status.FORBIDDEN.getStatusCode(), response.getStatus()); + assertEquals("App submission via REST is disabled.", response.getEntity()); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org