You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by in...@apache.org on 2018/04/19 23:49:35 UTC
hadoop git commit: YARN-8186. [Router] Federation: routing
getAppState REST invocations transparently to multiple RMs. Contributed by
Giovanni Matteo Fumarola.
Repository: hadoop
Updated Branches:
refs/heads/trunk 1134af9ad -> da5bcf5f7
YARN-8186. [Router] Federation: routing getAppState REST invocations transparently to multiple RMs. Contributed by Giovanni Matteo Fumarola.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/da5bcf5f
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/da5bcf5f
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/da5bcf5f
Branch: refs/heads/trunk
Commit: da5bcf5f7d40913de2981731e951d662a3279562
Parents: 1134af9
Author: Inigo Goiri <in...@apache.org>
Authored: Thu Apr 19 16:49:29 2018 -0700
Committer: Inigo Goiri <in...@apache.org>
Committed: Thu Apr 19 16:49:29 2018 -0700
----------------------------------------------------------------------
.../webapp/FederationInterceptorREST.java | 52 +++++++++++++++---
.../MockDefaultRequestInterceptorREST.java | 16 ++++++
.../webapp/TestFederationInterceptorREST.java | 56 ++++++++++++++++++++
3 files changed, 118 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/da5bcf5f/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/webapp/FederationInterceptorREST.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/webapp/FederationInterceptorREST.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/webapp/FederationInterceptorREST.java
index fad5d96..d1d49ec 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/webapp/FederationInterceptorREST.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/webapp/FederationInterceptorREST.java
@@ -987,6 +987,52 @@ public class FederationInterceptorREST extends AbstractRESTRequestInterceptor {
return metrics;
}
+ /**
+ * The YARN Router will forward to the respective YARN RM in which the AM is
+ * running.
+ * <p>
+ * Possible failure:
+ * <p>
+ * Client: identical behavior as {@code RMWebServices}.
+ * <p>
+ * Router: the Client will timeout and resubmit the request.
+ * <p>
+ * ResourceManager: the Router will timeout and the call will fail.
+ * <p>
+ * State Store: the Router will timeout and it will retry depending on the
+ * FederationFacade settings - if the failure happened before the select
+ * operation.
+ */
+ @Override
+ public AppState getAppState(HttpServletRequest hsr, String appId)
+ throws AuthorizationException {
+
+ ApplicationId applicationId = null;
+ try {
+ applicationId = ApplicationId.fromString(appId);
+ } catch (IllegalArgumentException e) {
+ return null;
+ }
+
+ SubClusterInfo subClusterInfo = null;
+ SubClusterId subClusterId = null;
+ try {
+ subClusterId =
+ federationFacade.getApplicationHomeSubCluster(applicationId);
+ if (subClusterId == null) {
+ return null;
+ }
+ subClusterInfo = federationFacade.getSubCluster(subClusterId);
+ } catch (YarnException e) {
+ return null;
+ }
+
+ DefaultRequestInterceptorREST interceptor =
+ getOrCreateInterceptorForSubCluster(subClusterId,
+ subClusterInfo.getRMWebServiceAddress());
+ return interceptor.getAppState(hsr, appId);
+ }
+
@Override
public ClusterInfo get() {
return getClusterInfo();
@@ -1026,12 +1072,6 @@ public class FederationInterceptorREST extends AbstractRESTRequestInterceptor {
}
@Override
- public AppState getAppState(HttpServletRequest hsr, String appId)
- throws AuthorizationException {
- throw new NotImplementedException();
- }
-
- @Override
public NodeToLabelsInfo getNodeToLabels(HttpServletRequest hsr)
throws IOException {
throw new NotImplementedException();
http://git-wip-us.apache.org/repos/asf/hadoop/blob/da5bcf5f/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/webapp/MockDefaultRequestInterceptorREST.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/webapp/MockDefaultRequestInterceptorREST.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/webapp/MockDefaultRequestInterceptorREST.java
index 9f54582..63de9ac 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/webapp/MockDefaultRequestInterceptorREST.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/webapp/MockDefaultRequestInterceptorREST.java
@@ -61,6 +61,7 @@ public class MockDefaultRequestInterceptorREST
// down e.g. network issue, failover.
private boolean isRunning = true;
private HashSet<ApplicationId> applicationMap = new HashSet<>();
+ public static final String APP_STATE_RUNNING = "RUNNING";
private void validateRunning() throws ConnectException {
if (!isRunning) {
@@ -192,6 +193,21 @@ public class MockDefaultRequestInterceptorREST
return metrics;
}
+ @Override
+ public AppState getAppState(HttpServletRequest hsr, String appId)
+ throws AuthorizationException {
+ if (!isRunning) {
+ throw new RuntimeException("RM is stopped");
+ }
+
+ ApplicationId applicationId = ApplicationId.fromString(appId);
+ if (!applicationMap.contains(applicationId)) {
+ throw new NotFoundException("app with id: " + appId + " not found");
+ }
+
+ return new AppState(APP_STATE_RUNNING);
+ }
+
public void setSubClusterId(int subClusterId) {
setSubClusterId(SubClusterId.newInstance(Integer.toString(subClusterId)));
}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/da5bcf5f/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/webapp/TestFederationInterceptorREST.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/webapp/TestFederationInterceptorREST.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/webapp/TestFederationInterceptorREST.java
index fae4ecf..dc60043 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/webapp/TestFederationInterceptorREST.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/webapp/TestFederationInterceptorREST.java
@@ -443,4 +443,60 @@ public class TestFederationInterceptorREST extends BaseRouterWebServicesTest {
// The merge operations is tested in TestRouterWebServiceUtil
}
+ /**
+ * This test validates the correctness of GetApplicationState in case the
+ * application exists in the cluster.
+ */
+ @Test
+ public void testGetApplicationState()
+ throws YarnException, IOException, InterruptedException {
+
+ ApplicationId appId =
+ ApplicationId.newInstance(System.currentTimeMillis(), 1);
+ ApplicationSubmissionContextInfo context =
+ new ApplicationSubmissionContextInfo();
+ context.setApplicationId(appId.toString());
+
+ // Submit the application we want the report later
+ Response response = interceptor.submitApplication(context, null);
+
+ Assert.assertNotNull(response);
+ Assert.assertNotNull(stateStoreUtil.queryApplicationHomeSC(appId));
+
+ AppState responseGet = interceptor.getAppState(null, appId.toString());
+
+ Assert.assertNotNull(responseGet);
+ Assert.assertEquals(MockDefaultRequestInterceptorREST.APP_STATE_RUNNING,
+ responseGet.getState());
+ }
+
+ /**
+ * This test validates the correctness of GetApplicationState in case the
+ * application does not exist in StateStore.
+ */
+ @Test
+ public void testGetApplicationStateNotExists()
+ throws YarnException, IOException, InterruptedException {
+
+ ApplicationId appId =
+ ApplicationId.newInstance(System.currentTimeMillis(), 1);
+
+ AppState response = interceptor.getAppState(null, appId.toString());
+
+ Assert.assertNull(response);
+ }
+
+ /**
+ * This test validates the correctness of GetApplicationState in case of
+ * application in wrong format.
+ */
+ @Test
+ public void testGetApplicationStateWrongFormat()
+ throws YarnException, IOException, InterruptedException {
+
+ AppState response = interceptor.getAppState(null, "Application_wrong_id");
+
+ Assert.assertNull(response);
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org