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 cu...@apache.org on 2017/09/22 00:58:45 UTC

[24/50] [abbrv] hadoop git commit: YARN-5411. Create a proxy chain for ApplicationClientProtocol in the Router. (Giovanni Matteo Fumarola via Subru).

http://git-wip-us.apache.org/repos/asf/hadoop/blob/dc0a2e6c/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/clientrm/TestRouterClientRMService.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/clientrm/TestRouterClientRMService.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/clientrm/TestRouterClientRMService.java
new file mode 100644
index 0000000..a9c3729
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/clientrm/TestRouterClientRMService.java
@@ -0,0 +1,210 @@
+/**
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package org.apache.hadoop.yarn.server.router.clientrm;
+
+import java.io.IOException;
+import java.util.Map;
+
+import org.apache.hadoop.yarn.api.protocolrecords.GetClusterMetricsResponse;
+import org.apache.hadoop.yarn.api.protocolrecords.GetClusterNodeLabelsResponse;
+import org.apache.hadoop.yarn.api.protocolrecords.GetClusterNodesResponse;
+import org.apache.hadoop.yarn.api.protocolrecords.GetNewApplicationResponse;
+import org.apache.hadoop.yarn.api.protocolrecords.GetNewReservationResponse;
+import org.apache.hadoop.yarn.api.protocolrecords.GetQueueInfoResponse;
+import org.apache.hadoop.yarn.api.protocolrecords.GetQueueUserAclsInfoResponse;
+import org.apache.hadoop.yarn.api.protocolrecords.KillApplicationResponse;
+import org.apache.hadoop.yarn.api.protocolrecords.MoveApplicationAcrossQueuesResponse;
+import org.apache.hadoop.yarn.api.protocolrecords.ReservationDeleteResponse;
+import org.apache.hadoop.yarn.api.protocolrecords.ReservationSubmissionResponse;
+import org.apache.hadoop.yarn.api.protocolrecords.ReservationUpdateResponse;
+import org.apache.hadoop.yarn.api.protocolrecords.SubmitApplicationResponse;
+import org.apache.hadoop.yarn.exceptions.YarnException;
+import org.apache.hadoop.yarn.server.router.clientrm.RouterClientRMService.RequestInterceptorChainWrapper;
+import org.junit.Assert;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Test class to validate the ClientRM Service inside the Router.
+ */
+public class TestRouterClientRMService extends BaseRouterClientRMTest {
+
+  private static final Logger LOG =
+      LoggerFactory.getLogger(TestRouterClientRMService.class);
+
+  /**
+   * Tests if the pipeline is created properly.
+   */
+  @Test
+  public void testRequestInterceptorChainCreation() throws Exception {
+    ClientRequestInterceptor root =
+        super.getRouterClientRMService().createRequestInterceptorChain();
+    int index = 0;
+    while (root != null) {
+      // The current pipeline is:
+      // PassThroughClientRequestInterceptor - index = 0
+      // PassThroughClientRequestInterceptor - index = 1
+      // PassThroughClientRequestInterceptor - index = 2
+      // MockClientRequestInterceptor - index = 3
+      switch (index) {
+      case 0: // Fall to the next case
+      case 1: // Fall to the next case
+      case 2:
+        // If index is equal to 0,1 or 2 we fall in this check
+        Assert.assertEquals(PassThroughClientRequestInterceptor.class.getName(),
+            root.getClass().getName());
+        break;
+      case 3:
+        Assert.assertEquals(MockClientRequestInterceptor.class.getName(),
+            root.getClass().getName());
+        break;
+      default:
+        Assert.fail();
+      }
+      root = root.getNextInterceptor();
+      index++;
+    }
+    Assert.assertEquals("The number of interceptors in chain does not match", 4,
+        index);
+  }
+
+  /**
+   * Test if the RouterClientRM forwards all the requests to the MockRM and get
+   * back the responses.
+   */
+  @Test
+  public void testRouterClientRMServiceE2E() throws Exception {
+
+    String user = "test1";
+
+    LOG.info("testRouterClientRMServiceE2E - Get New Application");
+
+    GetNewApplicationResponse responseGetNewApp = getNewApplication(user);
+    Assert.assertNotNull(responseGetNewApp);
+
+    LOG.info("testRouterClientRMServiceE2E - Submit Application");
+
+    SubmitApplicationResponse responseSubmitApp =
+        submitApplication(responseGetNewApp.getApplicationId(), user);
+    Assert.assertNotNull(responseSubmitApp);
+
+    LOG.info("testRouterClientRMServiceE2E - Kill Application");
+
+    KillApplicationResponse responseKillApp =
+        forceKillApplication(responseGetNewApp.getApplicationId(), user);
+    Assert.assertNotNull(responseKillApp);
+
+    LOG.info("testRouterClientRMServiceE2E - Get Cluster Metrics");
+
+    GetClusterMetricsResponse responseGetClusterMetrics =
+        getClusterMetrics(user);
+    Assert.assertNotNull(responseGetClusterMetrics);
+
+    LOG.info("testRouterClientRMServiceE2E - Get Cluster Nodes");
+
+    GetClusterNodesResponse responseGetClusterNodes = getClusterNodes(user);
+    Assert.assertNotNull(responseGetClusterNodes);
+
+    LOG.info("testRouterClientRMServiceE2E - Get Queue Info");
+
+    GetQueueInfoResponse responseGetQueueInfo = getQueueInfo(user);
+    Assert.assertNotNull(responseGetQueueInfo);
+
+    LOG.info("testRouterClientRMServiceE2E - Get Queue User");
+
+    GetQueueUserAclsInfoResponse responseGetQueueUser = getQueueUserAcls(user);
+    Assert.assertNotNull(responseGetQueueUser);
+
+    LOG.info("testRouterClientRMServiceE2E - Get Cluster Node");
+
+    GetClusterNodeLabelsResponse responseGetClusterNode =
+        getClusterNodeLabels(user);
+    Assert.assertNotNull(responseGetClusterNode);
+
+    LOG.info("testRouterClientRMServiceE2E - Move Application Across Queues");
+
+    MoveApplicationAcrossQueuesResponse responseMoveApp =
+        moveApplicationAcrossQueues(user, responseGetNewApp.getApplicationId());
+    Assert.assertNotNull(responseMoveApp);
+
+    LOG.info("testRouterClientRMServiceE2E - Get New Reservation");
+
+    GetNewReservationResponse getNewReservationResponse =
+        getNewReservation(user);
+
+    LOG.info("testRouterClientRMServiceE2E - Submit Reservation");
+
+    ReservationSubmissionResponse responseSubmitReser =
+        submitReservation(user, getNewReservationResponse.getReservationId());
+    Assert.assertNotNull(responseSubmitReser);
+
+    LOG.info("testRouterClientRMServiceE2E - Update Reservation");
+
+    ReservationUpdateResponse responseUpdateReser =
+        updateReservation(user, getNewReservationResponse.getReservationId());
+    Assert.assertNotNull(responseUpdateReser);
+
+    LOG.info("testRouterClientRMServiceE2E - Delete Reservation");
+
+    ReservationDeleteResponse responseDeleteReser =
+        deleteReservation(user, getNewReservationResponse.getReservationId());
+    Assert.assertNotNull(responseDeleteReser);
+  }
+
+  /**
+   * Test if the different chains for users are generated, and LRU cache is
+   * working as expected.
+   */
+  @Test
+  public void testUsersChainMapWithLRUCache()
+      throws YarnException, IOException, InterruptedException {
+
+    Map<String, RequestInterceptorChainWrapper> pipelines;
+    RequestInterceptorChainWrapper chain;
+
+    getNewApplication("test1");
+    getNewApplication("test2");
+    getNewApplication("test3");
+    getNewApplication("test4");
+    getNewApplication("test5");
+    getNewApplication("test6");
+    getNewApplication("test7");
+    getNewApplication("test8");
+
+    pipelines = super.getRouterClientRMService().getPipelines();
+    Assert.assertEquals(8, pipelines.size());
+
+    getNewApplication("test9");
+    getNewApplication("test10");
+    getNewApplication("test1");
+    getNewApplication("test11");
+
+    // The cache max size is defined in
+    // BaseRouterClientRMTest.TEST_MAX_CACHE_SIZE
+    Assert.assertEquals(10, pipelines.size());
+
+    chain = pipelines.get("test1");
+    Assert.assertNotNull("test1 should not be evicted", chain);
+
+    chain = pipelines.get("test2");
+    Assert.assertNull("test2 should have been evicted", chain);
+  }
+
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org