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 2021/09/08 17:37:15 UTC

[hadoop] branch trunk updated: YARN-10829. Follow up: Adding null checks before merging ResourceUsage Report (#3252)

This is an automated email from the ASF dual-hosted git repository.

inigoiri pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/hadoop.git


The following commit(s) were added to refs/heads/trunk by this push:
     new a186460  YARN-10829. Follow up: Adding null checks before merging ResourceUsage Report (#3252)
a186460 is described below

commit a1864600049f81fae434554003a2e7046d73ccb8
Author: Akshat Bordia <31...@users.noreply.github.com>
AuthorDate: Wed Sep 8 23:06:56 2021 +0530

    YARN-10829. Follow up: Adding null checks before merging ResourceUsage Report (#3252)
---
 .../router/clientrm/RouterYarnClientUtils.java     | 61 ++++++++++++----------
 .../router/clientrm/TestRouterYarnClientUtils.java | 42 +++++++++++++++
 2 files changed, 75 insertions(+), 28 deletions(-)

diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/clientrm/RouterYarnClientUtils.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/clientrm/RouterYarnClientUtils.java
index 9c36f30..934636b 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/clientrm/RouterYarnClientUtils.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/clientrm/RouterYarnClientUtils.java
@@ -133,43 +133,48 @@ public final class RouterYarnClientUtils {
     ApplicationResourceUsageReport uamResourceReport =
         uam.getApplicationResourceUsageReport();
 
-    amResourceReport.setNumUsedContainers(
-        amResourceReport.getNumUsedContainers() +
-            uamResourceReport.getNumUsedContainers());
+    if (amResourceReport == null) {
+      am.setApplicationResourceUsageReport(uamResourceReport);
+    } else if (uamResourceReport != null) {
 
-    amResourceReport.setNumReservedContainers(
-        amResourceReport.getNumReservedContainers() +
-            uamResourceReport.getNumReservedContainers());
+      amResourceReport.setNumUsedContainers(
+          amResourceReport.getNumUsedContainers() +
+              uamResourceReport.getNumUsedContainers());
 
-    amResourceReport.setUsedResources(Resources.add(
-        amResourceReport.getUsedResources(),
-        uamResourceReport.getUsedResources()));
+      amResourceReport.setNumReservedContainers(
+          amResourceReport.getNumReservedContainers() +
+              uamResourceReport.getNumReservedContainers());
 
-    amResourceReport.setReservedResources(Resources.add(
-        amResourceReport.getReservedResources(),
-        uamResourceReport.getReservedResources()));
+      amResourceReport.setUsedResources(Resources.add(
+          amResourceReport.getUsedResources(),
+          uamResourceReport.getUsedResources()));
 
-    amResourceReport.setNeededResources(Resources.add(
-        amResourceReport.getNeededResources(),
-        uamResourceReport.getNeededResources()));
+      amResourceReport.setReservedResources(Resources.add(
+          amResourceReport.getReservedResources(),
+          uamResourceReport.getReservedResources()));
 
-    amResourceReport.setMemorySeconds(
-        amResourceReport.getMemorySeconds() +
-            uamResourceReport.getMemorySeconds());
+      amResourceReport.setNeededResources(Resources.add(
+          amResourceReport.getNeededResources(),
+          uamResourceReport.getNeededResources()));
 
-    amResourceReport.setVcoreSeconds(
-        amResourceReport.getVcoreSeconds() +
-            uamResourceReport.getVcoreSeconds());
+      amResourceReport.setMemorySeconds(
+          amResourceReport.getMemorySeconds() +
+              uamResourceReport.getMemorySeconds());
 
-    amResourceReport.setQueueUsagePercentage(
-        amResourceReport.getQueueUsagePercentage() +
-            uamResourceReport.getQueueUsagePercentage());
+      amResourceReport.setVcoreSeconds(
+          amResourceReport.getVcoreSeconds() +
+              uamResourceReport.getVcoreSeconds());
 
-    amResourceReport.setClusterUsagePercentage(
-        amResourceReport.getClusterUsagePercentage() +
-            uamResourceReport.getClusterUsagePercentage());
+      amResourceReport.setQueueUsagePercentage(
+          amResourceReport.getQueueUsagePercentage() +
+              uamResourceReport.getQueueUsagePercentage());
 
-    am.setApplicationResourceUsageReport(amResourceReport);
+      amResourceReport.setClusterUsagePercentage(
+          amResourceReport.getClusterUsagePercentage() +
+              uamResourceReport.getClusterUsagePercentage());
+
+      am.setApplicationResourceUsageReport(amResourceReport);
+    }
   }
 
   /**
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/TestRouterYarnClientUtils.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/clientrm/TestRouterYarnClientUtils.java
index 3b64c23..c91da35 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/clientrm/TestRouterYarnClientUtils.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/clientrm/TestRouterYarnClientUtils.java
@@ -125,6 +125,48 @@ public class TestRouterYarnClientUtils {
   }
 
   /**
+   * This test validates the correctness of
+   * RouterYarnClientUtils#mergeApplications when
+   * ApplicationResourceUsageReport might be null.
+   */
+  @Test
+  public void testMergeApplicationsNullResourceUsage() {
+    ApplicationId appId = ApplicationId.newInstance(1234, 1);
+    ApplicationReport appReport = ApplicationReport.newInstance(
+        appId, ApplicationAttemptId.newInstance(appId, 1),
+        "user", "queue", "app1", "host",
+        124, null, YarnApplicationState.RUNNING,
+        "diagnostics", "url", 0, 0,
+        0, FinalApplicationStatus.SUCCEEDED, null, "N/A",
+        0.53789f, "YARN", null, null, false, null, null, null);
+
+    ApplicationReport uamAppReport = ApplicationReport.newInstance(
+        appId, ApplicationAttemptId.newInstance(appId, 1),
+        "user", "queue", "app1", "host",
+        124, null, YarnApplicationState.RUNNING,
+        "diagnostics", "url", 0, 0,
+        0, FinalApplicationStatus.SUCCEEDED, null, "N/A",
+        0.53789f, "YARN", null, null, true, null, null, null);
+
+
+    ArrayList<GetApplicationsResponse> responses = new ArrayList<>();
+    List<ApplicationReport> applications = new ArrayList<>();
+    applications.add(appReport);
+    applications.add(uamAppReport);
+    responses.add(GetApplicationsResponse.newInstance(applications));
+
+    GetApplicationsResponse result = RouterYarnClientUtils.
+        mergeApplications(responses, false);
+    Assert.assertNotNull(result);
+    Assert.assertEquals(1, result.getApplicationList().size());
+
+    String appName = result.getApplicationList().get(0).getName();
+
+    // Check that no Unmanaged applications are added to the result
+    Assert.assertFalse(appName.contains(UnmanagedApplicationManager.APP_NAME));
+  }
+
+  /**
    * This generates a GetApplicationsResponse with 2 applications with
    * same ApplicationId.
    * @param value Used as Id in ApplicationId

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