You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-issues@hadoop.apache.org by GitBox <gi...@apache.org> on 2021/09/08 09:21:40 UTC

[GitHub] [hadoop] tomicooler opened a new pull request #3403: YARN-10917. Investigate and simplify CapacitySchedulerConfigValidator…

tomicooler opened a new pull request #3403:
URL: https://github.com/apache/hadoop/pull/3403


   …#validateQueueHierarchy.
   
   Change-Id: I721799bd66df45303e324153d8d042fd6b1edc8e
   
   <!--
     Thanks for sending a pull request!
       1. If this is your first time, please read our contributor guidelines: https://cwiki.apache.org/confluence/display/HADOOP/How+To+Contribute
       2. Make sure your PR title starts with JIRA issue id, e.g., 'HADOOP-17799. Your PR title ...'.
   -->
   
   ### Description of PR
   
   
   ### How was this patch tested?
   
   
   This was just a refactor, existing tests should cover this method.
   
   I checked the if - elif statements, fortunately they did not utilise the previous if branch, proof:
   
   ```
     // if (oldQueue instanceof ParentQueue && !(oldQueue instanceof ManagedParentQueue) && newQueue instanceof ManagedParentQueue)
     // a: oldQueue instanceof ParentQueue
     // b: oldQueue instanceof ManagedParentQueue
     // c: newQueue instanceof ManagedParentQueue
     // a && !b && c                  --> a && !b && c
   
     // else if (oldQueue instanceof ManagedParentQueue && !(newQueue instanceof ManagedParentQueue))
     // !(a && !b && c) && (b && !c)  --> b && !c
     //                               --> (oldQueue instanceof ManagedParentQueue && !(newQueue instanceof ManagedParentQueue))
   
     // else if (oldQueue instanceof LeafQueue && newQueue instanceof ParentQueue)
     // d: oldQueue instanceof LeafQueue
     // !(!(a && !b && c) && (b && !c)) && (d && c)  --> c && d
     //                                              --> newQueue instanceof ManagedParentQueue && oldQueue instanceof LeafQueue
   
   
     // else if (oldQueue instanceof ParentQueue && newQueue instanceof LeafQueue)
     // e: newQueue instanceof LeafQueue
     // !(!(!(a && !b && c) && (b && !c)) && (d && c)) && (a && e)  --> (a && !c && e) || (a && !d && e)
     //                                                             --> (oldQueue instanceof ParentQueue && !(newQueue instanceof ManagedParentQueue) && newQueue instanceof LeafQueue) || (oldQueue instanceof ParentQueue && !(oldQueue instanceof LeafQueue) && newQueue instanceof LeafQueue)
     //                                                             --> (oldQueue instanceof ParentQueue && !(newQueue instanceof ManagedParentQueue) && newQueue instanceof LeafQueue) || (oldQueue instanceof ParentQueue && newQueue instanceof LeafQueue)
     //                                                             --> oldQueue instanceof ParentQueue && newQueue instanceof LeafQueue
   ```
   
   ### For code changes:
   
   - [ ] Does the title or this PR starts with the corresponding JIRA issue id (e.g. 'HADOOP-17799. Your PR title ...')?
   - [ ] Object storage: have the integration tests been executed and the endpoint declared according to the connector-specific documentation?
   - [ ] If adding new dependencies to the code, are these dependencies licensed in a way that is compatible for inclusion under [ASF 2.0](http://www.apache.org/legal/resolved.html#category-a)?
   - [ ] If applicable, have you updated the `LICENSE`, `LICENSE-binary`, `NOTICE-binary` files?
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: common-issues-unsubscribe@hadoop.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



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


[GitHub] [hadoop] hadoop-yetus commented on pull request #3403: YARN-10917. Investigate and simplify CapacitySchedulerConfigValidator…

Posted by GitBox <gi...@apache.org>.
hadoop-yetus commented on pull request #3403:
URL: https://github.com/apache/hadoop/pull/3403#issuecomment-916802953


   :broken_heart: **-1 overall**
   
   
   
   
   
   
   | Vote | Subsystem | Runtime |  Logfile | Comment |
   |:----:|----------:|--------:|:--------:|:-------:|
   | +0 :ok: |  reexec  |   0m 59s |  |  Docker mode activated.  |
   |||| _ Prechecks _ |
   | +1 :green_heart: |  dupname  |   0m  0s |  |  No case conflicting files found.  |
   | +0 :ok: |  codespell  |   0m  0s |  |  codespell was not available.  |
   | +1 :green_heart: |  @author  |   0m  0s |  |  The patch does not contain any @author tags.  |
   | -1 :x: |  test4tests  |   0m  0s |  |  The patch doesn't appear to include any new or modified tests. Please justify why no new tests are needed for this patch. Also please list what manual steps were performed to verify this patch.  |
   |||| _ trunk Compile Tests _ |
   | +1 :green_heart: |  mvninstall  |  32m 46s |  |  trunk passed  |
   | +1 :green_heart: |  compile  |   1m  4s |  |  trunk passed with JDK Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04  |
   | +1 :green_heart: |  compile  |   0m 54s |  |  trunk passed with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10  |
   | +1 :green_heart: |  checkstyle  |   0m 46s |  |  trunk passed  |
   | +1 :green_heart: |  mvnsite  |   1m  2s |  |  trunk passed  |
   | +1 :green_heart: |  javadoc  |   0m 44s |  |  trunk passed with JDK Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04  |
   | +1 :green_heart: |  javadoc  |   0m 41s |  |  trunk passed with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10  |
   | +1 :green_heart: |  spotbugs  |   1m 56s |  |  trunk passed  |
   | +1 :green_heart: |  shadedclient  |  17m 28s |  |  branch has no errors when building and testing our client artifacts.  |
   |||| _ Patch Compile Tests _ |
   | +1 :green_heart: |  mvninstall  |   0m 51s |  |  the patch passed  |
   | +1 :green_heart: |  compile  |   0m 58s |  |  the patch passed with JDK Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04  |
   | +1 :green_heart: |  javac  |   0m 58s |  |  the patch passed  |
   | +1 :green_heart: |  compile  |   0m 48s |  |  the patch passed with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10  |
   | +1 :green_heart: |  javac  |   0m 48s |  |  the patch passed  |
   | +1 :green_heart: |  blanks  |   0m  0s |  |  The patch has no blanks issues.  |
   | -0 :warning: |  checkstyle  |   0m 39s | [/results-checkstyle-hadoop-yarn-project_hadoop-yarn_hadoop-yarn-server_hadoop-yarn-server-resourcemanager.txt](https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-3403/2/artifact/out/results-checkstyle-hadoop-yarn-project_hadoop-yarn_hadoop-yarn-server_hadoop-yarn-server-resourcemanager.txt) |  hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager: The patch generated 2 new + 0 unchanged - 0 fixed = 2 total (was 0)  |
   | +1 :green_heart: |  mvnsite  |   0m 50s |  |  the patch passed  |
   | +1 :green_heart: |  javadoc  |   0m 37s |  |  the patch passed with JDK Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04  |
   | +1 :green_heart: |  javadoc  |   0m 33s |  |  the patch passed with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10  |
   | +1 :green_heart: |  spotbugs  |   1m 56s |  |  the patch passed  |
   | +1 :green_heart: |  shadedclient  |  17m 33s |  |  patch has no errors when building and testing our client artifacts.  |
   |||| _ Other Tests _ |
   | +1 :green_heart: |  unit  | 101m  4s |  |  hadoop-yarn-server-resourcemanager in the patch passed.  |
   | +1 :green_heart: |  asflicense  |   0m 30s |  |  The patch does not generate ASF License warnings.  |
   |  |   | 183m 35s |  |  |
   
   
   | Subsystem | Report/Notes |
   |----------:|:-------------|
   | Docker | ClientAPI=1.41 ServerAPI=1.41 base: https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-3403/2/artifact/out/Dockerfile |
   | GITHUB PR | https://github.com/apache/hadoop/pull/3403 |
   | Optional Tests | dupname asflicense compile javac javadoc mvninstall mvnsite unit shadedclient spotbugs checkstyle codespell |
   | uname | Linux 821eb707e022 4.15.0-142-generic #146-Ubuntu SMP Tue Apr 13 01:11:19 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux |
   | Build tool | maven |
   | Personality | dev-support/bin/hadoop.sh |
   | git revision | trunk / cc55a7199c5fee6ad2adc4e82544fea00728a186 |
   | Default Java | Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10 |
   | Multi-JDK versions | /usr/lib/jvm/java-11-openjdk-amd64:Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04 /usr/lib/jvm/java-8-openjdk-amd64:Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10 |
   |  Test Results | https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-3403/2/testReport/ |
   | Max. process+thread count | 925 (vs. ulimit of 5500) |
   | modules | C: hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager U: hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager |
   | Console output | https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-3403/2/console |
   | versions | git=2.25.1 maven=3.6.3 spotbugs=4.2.2 |
   | Powered by | Apache Yetus 0.14.0-SNAPSHOT https://yetus.apache.org |
   
   
   This message was automatically generated.
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: common-issues-unsubscribe@hadoop.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



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


[GitHub] [hadoop] szilard-nemeth merged pull request #3403: YARN-10917. Investigate and simplify CapacitySchedulerConfigValidator…

Posted by GitBox <gi...@apache.org>.
szilard-nemeth merged pull request #3403:
URL: https://github.com/apache/hadoop/pull/3403


   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: common-issues-unsubscribe@hadoop.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



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


[GitHub] [hadoop] tomicooler commented on a change in pull request #3403: YARN-10917. Investigate and simplify CapacitySchedulerConfigValidator…

Posted by GitBox <gi...@apache.org>.
tomicooler commented on a change in pull request #3403:
URL: https://github.com/apache/hadoop/pull/3403#discussion_r705956902



##########
File path: hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacitySchedulerConfigValidator.java
##########
@@ -27,14 +27,26 @@
 import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.LinkedHashSet;
+import java.util.List;
 import java.util.Set;
 
 public final class CapacitySchedulerConfigValidator {
   private static final Logger LOG = LoggerFactory.getLogger(
           CapacitySchedulerConfigValidator.class);
 
+  private interface QueueChangeValidator {
+    void validate(CSQueue oldQueue, CSQueue newQueue) throws IOException;
+  }
+
+  private static final List<QueueChangeValidator> QUEUE_CHANGE_VALIDATORS = Arrays.asList(

Review comment:
       It was a bit over engineered, yeah. I changed it to 3 static methods, and I call them without a cycle.




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: common-issues-unsubscribe@hadoop.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



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


[GitHub] [hadoop] 9uapaw commented on a change in pull request #3403: YARN-10917. Investigate and simplify CapacitySchedulerConfigValidator…

Posted by GitBox <gi...@apache.org>.
9uapaw commented on a change in pull request #3403:
URL: https://github.com/apache/hadoop/pull/3403#discussion_r705458694



##########
File path: hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacitySchedulerConfigValidator.java
##########
@@ -125,76 +133,107 @@ public static void validateQueueHierarchy(
       CapacitySchedulerConfiguration newConf) throws IOException {
     // check that all static queues are included in the newQueues list
     for (CSQueue oldQueue : queues.getQueues()) {
-      if (!(AbstractAutoCreatedLeafQueue.class.isAssignableFrom(
-          oldQueue.getClass()))) {
-        String queuePath = oldQueue.getQueuePath();
-        CSQueue newQueue = newQueues.get(queuePath);
-        String configPrefix = newConf.getQueuePrefix(
-            oldQueue.getQueuePath());
-        String state = newConf.get(configPrefix + "state");
-        QueueState newQueueState = null;
-        if (state != null) {
-          try {
-            newQueueState = QueueState.valueOf(state);
-          } catch (Exception ex) {
-            LOG.warn("Not a valid queue state for queue "
-                + oldQueue.getQueuePath());
+      if (AbstractAutoCreatedLeafQueue.class.isAssignableFrom(oldQueue.getClass())) {
+        continue;
+      }
+
+      final String queuePath = oldQueue.getQueuePath();
+      final String configPrefix = CapacitySchedulerConfiguration.getQueuePrefix(
+          oldQueue.getQueuePath());
+      final QueueState newQueueState = getQueueState(oldQueue, newConf.get(configPrefix + "state"));
+      final CSQueue newQueue = newQueues.get(queuePath);
+
+      if (null == newQueue) {
+        // old queue doesn't exist in the new XML
+        if (oldQueue.getState() == QueueState.STOPPED || newQueueState == QueueState.STOPPED) {
+          LOG.info("Deleting Queue {}, as it is not present in the modified capacity " +
+              "configuration xml", queuePath);
+        } else {
+          if (!isDynamicQueue(oldQueue)) {
+            throw new IOException(oldQueue.getQueuePath() + " cannot be"
+                + " deleted from the capacity scheduler configuration, as the"
+                + " queue is not yet in stopped state. Current State : "
+                + oldQueue.getState());
           }
         }
-        if (null == newQueue) {
-          // old queue doesn't exist in the new XML
-          if (oldQueue.getState() == QueueState.STOPPED ||
-              newQueueState == QueueState.STOPPED) {
-            LOG.info("Deleting Queue " + queuePath + ", as it is not"
-                + " present in the modified capacity configuration xml");
-          } else {
-            if (!isDynamicQueue(oldQueue)) {
-              throw new IOException(oldQueue.getQueuePath() + " cannot be"
-                  + " deleted from the capacity scheduler configuration, as the"
-                  + " queue is not yet in stopped state. Current State : "
-                  + oldQueue.getState());
-            }
-          }
-        } else if (!oldQueue.getQueuePath().equals(newQueue.getQueuePath())) {
-          //Queue's cannot be moved from one hierarchy to other
-          throw new IOException(
-            queuePath + " is moved from:" + oldQueue.getQueuePath() + " to:"
-              + newQueue.getQueuePath()
-              + " after refresh, which is not allowed.");
-        } else if (oldQueue instanceof ParentQueue
-            && !(oldQueue instanceof ManagedParentQueue)
-            && newQueue instanceof ManagedParentQueue) {
+      } else {
+        for (QueueChangeValidator validator : QUEUE_CHANGE_VALIDATORS) {
+          validator.validate(oldQueue, newQueue);
+        }
+      }
+    }
+  }
+
+  private static QueueState getQueueState(CSQueue queue, String state) {

Review comment:
       This method is a bit misleading. It is creating a new state from a string. Also it does not need the full queue as its argument, only the path.

##########
File path: hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacitySchedulerConfigValidator.java
##########
@@ -125,76 +133,107 @@ public static void validateQueueHierarchy(
       CapacitySchedulerConfiguration newConf) throws IOException {
     // check that all static queues are included in the newQueues list
     for (CSQueue oldQueue : queues.getQueues()) {
-      if (!(AbstractAutoCreatedLeafQueue.class.isAssignableFrom(
-          oldQueue.getClass()))) {
-        String queuePath = oldQueue.getQueuePath();
-        CSQueue newQueue = newQueues.get(queuePath);
-        String configPrefix = newConf.getQueuePrefix(
-            oldQueue.getQueuePath());
-        String state = newConf.get(configPrefix + "state");
-        QueueState newQueueState = null;
-        if (state != null) {
-          try {
-            newQueueState = QueueState.valueOf(state);
-          } catch (Exception ex) {
-            LOG.warn("Not a valid queue state for queue "
-                + oldQueue.getQueuePath());
+      if (AbstractAutoCreatedLeafQueue.class.isAssignableFrom(oldQueue.getClass())) {
+        continue;
+      }
+
+      final String queuePath = oldQueue.getQueuePath();
+      final String configPrefix = CapacitySchedulerConfiguration.getQueuePrefix(
+          oldQueue.getQueuePath());
+      final QueueState newQueueState = getQueueState(oldQueue, newConf.get(configPrefix + "state"));
+      final CSQueue newQueue = newQueues.get(queuePath);
+
+      if (null == newQueue) {
+        // old queue doesn't exist in the new XML
+        if (oldQueue.getState() == QueueState.STOPPED || newQueueState == QueueState.STOPPED) {
+          LOG.info("Deleting Queue {}, as it is not present in the modified capacity " +
+              "configuration xml", queuePath);
+        } else {
+          if (!isDynamicQueue(oldQueue)) {
+            throw new IOException(oldQueue.getQueuePath() + " cannot be"
+                + " deleted from the capacity scheduler configuration, as the"
+                + " queue is not yet in stopped state. Current State : "
+                + oldQueue.getState());
           }
         }
-        if (null == newQueue) {
-          // old queue doesn't exist in the new XML
-          if (oldQueue.getState() == QueueState.STOPPED ||
-              newQueueState == QueueState.STOPPED) {
-            LOG.info("Deleting Queue " + queuePath + ", as it is not"
-                + " present in the modified capacity configuration xml");
-          } else {
-            if (!isDynamicQueue(oldQueue)) {
-              throw new IOException(oldQueue.getQueuePath() + " cannot be"
-                  + " deleted from the capacity scheduler configuration, as the"
-                  + " queue is not yet in stopped state. Current State : "
-                  + oldQueue.getState());
-            }
-          }
-        } else if (!oldQueue.getQueuePath().equals(newQueue.getQueuePath())) {
-          //Queue's cannot be moved from one hierarchy to other
-          throw new IOException(
-            queuePath + " is moved from:" + oldQueue.getQueuePath() + " to:"
-              + newQueue.getQueuePath()
-              + " after refresh, which is not allowed.");
-        } else if (oldQueue instanceof ParentQueue
-            && !(oldQueue instanceof ManagedParentQueue)
-            && newQueue instanceof ManagedParentQueue) {
+      } else {
+        for (QueueChangeValidator validator : QUEUE_CHANGE_VALIDATORS) {
+          validator.validate(oldQueue, newQueue);
+        }
+      }
+    }
+  }
+
+  private static QueueState getQueueState(CSQueue queue, String state) {
+    if (state != null) {
+      try {
+        return QueueState.valueOf(state);
+      } catch (Exception ex) {
+        LOG.warn("Not a valid queue state for queue: {}, state: {}", queue.getQueuePath(), state);
+      }
+    }
+    return null;
+  }
+
+  private static boolean isDynamicQueue(CSQueue csQueue) {
+    return ((AbstractCSQueue)csQueue).isDynamicQueue();
+  }
+
+  private static class SamePathValidator implements QueueChangeValidator {
+    @Override
+    public void validate(CSQueue oldQueue, CSQueue newQueue) throws IOException {
+      if (!oldQueue.getQueuePath().equals(newQueue.getQueuePath())) {
+        // Queue's cannot be moved from one hierarchy to other

Review comment:
       Nit: its a typo.

##########
File path: hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacitySchedulerConfigValidator.java
##########
@@ -125,76 +133,107 @@ public static void validateQueueHierarchy(
       CapacitySchedulerConfiguration newConf) throws IOException {
     // check that all static queues are included in the newQueues list
     for (CSQueue oldQueue : queues.getQueues()) {
-      if (!(AbstractAutoCreatedLeafQueue.class.isAssignableFrom(
-          oldQueue.getClass()))) {
-        String queuePath = oldQueue.getQueuePath();
-        CSQueue newQueue = newQueues.get(queuePath);
-        String configPrefix = newConf.getQueuePrefix(
-            oldQueue.getQueuePath());
-        String state = newConf.get(configPrefix + "state");
-        QueueState newQueueState = null;
-        if (state != null) {
-          try {
-            newQueueState = QueueState.valueOf(state);
-          } catch (Exception ex) {
-            LOG.warn("Not a valid queue state for queue "
-                + oldQueue.getQueuePath());
+      if (AbstractAutoCreatedLeafQueue.class.isAssignableFrom(oldQueue.getClass())) {
+        continue;
+      }
+
+      final String queuePath = oldQueue.getQueuePath();
+      final String configPrefix = CapacitySchedulerConfiguration.getQueuePrefix(
+          oldQueue.getQueuePath());
+      final QueueState newQueueState = getQueueState(oldQueue, newConf.get(configPrefix + "state"));
+      final CSQueue newQueue = newQueues.get(queuePath);
+
+      if (null == newQueue) {
+        // old queue doesn't exist in the new XML
+        if (oldQueue.getState() == QueueState.STOPPED || newQueueState == QueueState.STOPPED) {

Review comment:
       This idiom is repeated. It could be extracted as isEitherQueueStopped or something similar.

##########
File path: hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacitySchedulerConfigValidator.java
##########
@@ -27,14 +27,26 @@
 import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.LinkedHashSet;
+import java.util.List;
 import java.util.Set;
 
 public final class CapacitySchedulerConfigValidator {
   private static final Logger LOG = LoggerFactory.getLogger(
           CapacitySchedulerConfigValidator.class);
 
+  private interface QueueChangeValidator {
+    void validate(CSQueue oldQueue, CSQueue newQueue) throws IOException;
+  }
+
+  private static final List<QueueChangeValidator> QUEUE_CHANGE_VALIDATORS = Arrays.asList(

Review comment:
       This is a good idea, I like it, however I think it would be a better to define the validators as static methods instead, because you are basically using them as functions anyway. 




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: common-issues-unsubscribe@hadoop.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



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


[GitHub] [hadoop] 9uapaw commented on a change in pull request #3403: YARN-10917. Investigate and simplify CapacitySchedulerConfigValidator…

Posted by GitBox <gi...@apache.org>.
9uapaw commented on a change in pull request #3403:
URL: https://github.com/apache/hadoop/pull/3403#discussion_r705970384



##########
File path: hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacitySchedulerConfigValidator.java
##########
@@ -27,14 +27,26 @@
 import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.LinkedHashSet;
+import java.util.List;
 import java.util.Set;
 
 public final class CapacitySchedulerConfigValidator {
   private static final Logger LOG = LoggerFactory.getLogger(
           CapacitySchedulerConfigValidator.class);
 
+  private interface QueueChangeValidator {
+    void validate(CSQueue oldQueue, CSQueue newQueue) throws IOException;
+  }
+
+  private static final List<QueueChangeValidator> QUEUE_CHANGE_VALIDATORS = Arrays.asList(

Review comment:
       I actually liked the cycle-based solution. What I meant is that you do not need to explicitly create new class to implement a functional interface (an interface with only one method), but use an existing method or a lambda.




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: common-issues-unsubscribe@hadoop.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



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


[GitHub] [hadoop] szilard-nemeth commented on pull request #3403: YARN-10917. Investigate and simplify CapacitySchedulerConfigValidator…

Posted by GitBox <gi...@apache.org>.
szilard-nemeth commented on pull request #3403:
URL: https://github.com/apache/hadoop/pull/3403#issuecomment-919283755


   Thanks @tomicooler for working on this.
   Latest state LGTM, committed to trunk.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: common-issues-unsubscribe@hadoop.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



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


[GitHub] [hadoop] tomicooler commented on a change in pull request #3403: YARN-10917. Investigate and simplify CapacitySchedulerConfigValidator…

Posted by GitBox <gi...@apache.org>.
tomicooler commented on a change in pull request #3403:
URL: https://github.com/apache/hadoop/pull/3403#discussion_r705956112



##########
File path: hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacitySchedulerConfigValidator.java
##########
@@ -125,76 +133,107 @@ public static void validateQueueHierarchy(
       CapacitySchedulerConfiguration newConf) throws IOException {
     // check that all static queues are included in the newQueues list
     for (CSQueue oldQueue : queues.getQueues()) {
-      if (!(AbstractAutoCreatedLeafQueue.class.isAssignableFrom(
-          oldQueue.getClass()))) {
-        String queuePath = oldQueue.getQueuePath();
-        CSQueue newQueue = newQueues.get(queuePath);
-        String configPrefix = newConf.getQueuePrefix(
-            oldQueue.getQueuePath());
-        String state = newConf.get(configPrefix + "state");
-        QueueState newQueueState = null;
-        if (state != null) {
-          try {
-            newQueueState = QueueState.valueOf(state);
-          } catch (Exception ex) {
-            LOG.warn("Not a valid queue state for queue "
-                + oldQueue.getQueuePath());
+      if (AbstractAutoCreatedLeafQueue.class.isAssignableFrom(oldQueue.getClass())) {
+        continue;
+      }
+
+      final String queuePath = oldQueue.getQueuePath();
+      final String configPrefix = CapacitySchedulerConfiguration.getQueuePrefix(
+          oldQueue.getQueuePath());
+      final QueueState newQueueState = getQueueState(oldQueue, newConf.get(configPrefix + "state"));
+      final CSQueue newQueue = newQueues.get(queuePath);
+
+      if (null == newQueue) {
+        // old queue doesn't exist in the new XML
+        if (oldQueue.getState() == QueueState.STOPPED || newQueueState == QueueState.STOPPED) {
+          LOG.info("Deleting Queue {}, as it is not present in the modified capacity " +
+              "configuration xml", queuePath);
+        } else {
+          if (!isDynamicQueue(oldQueue)) {
+            throw new IOException(oldQueue.getQueuePath() + " cannot be"
+                + " deleted from the capacity scheduler configuration, as the"
+                + " queue is not yet in stopped state. Current State : "
+                + oldQueue.getState());
           }
         }
-        if (null == newQueue) {
-          // old queue doesn't exist in the new XML
-          if (oldQueue.getState() == QueueState.STOPPED ||
-              newQueueState == QueueState.STOPPED) {
-            LOG.info("Deleting Queue " + queuePath + ", as it is not"
-                + " present in the modified capacity configuration xml");
-          } else {
-            if (!isDynamicQueue(oldQueue)) {
-              throw new IOException(oldQueue.getQueuePath() + " cannot be"
-                  + " deleted from the capacity scheduler configuration, as the"
-                  + " queue is not yet in stopped state. Current State : "
-                  + oldQueue.getState());
-            }
-          }
-        } else if (!oldQueue.getQueuePath().equals(newQueue.getQueuePath())) {
-          //Queue's cannot be moved from one hierarchy to other
-          throw new IOException(
-            queuePath + " is moved from:" + oldQueue.getQueuePath() + " to:"
-              + newQueue.getQueuePath()
-              + " after refresh, which is not allowed.");
-        } else if (oldQueue instanceof ParentQueue
-            && !(oldQueue instanceof ManagedParentQueue)
-            && newQueue instanceof ManagedParentQueue) {
+      } else {
+        for (QueueChangeValidator validator : QUEUE_CHANGE_VALIDATORS) {
+          validator.validate(oldQueue, newQueue);
+        }
+      }
+    }
+  }
+
+  private static QueueState getQueueState(CSQueue queue, String state) {
+    if (state != null) {
+      try {
+        return QueueState.valueOf(state);
+      } catch (Exception ex) {
+        LOG.warn("Not a valid queue state for queue: {}, state: {}", queue.getQueuePath(), state);
+      }
+    }
+    return null;
+  }
+
+  private static boolean isDynamicQueue(CSQueue csQueue) {
+    return ((AbstractCSQueue)csQueue).isDynamicQueue();
+  }
+
+  private static class SamePathValidator implements QueueChangeValidator {
+    @Override
+    public void validate(CSQueue oldQueue, CSQueue newQueue) throws IOException {
+      if (!oldQueue.getQueuePath().equals(newQueue.getQueuePath())) {
+        // Queue's cannot be moved from one hierarchy to other

Review comment:
       Fixed.




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: common-issues-unsubscribe@hadoop.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



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


[GitHub] [hadoop] tomicooler commented on a change in pull request #3403: YARN-10917. Investigate and simplify CapacitySchedulerConfigValidator…

Posted by GitBox <gi...@apache.org>.
tomicooler commented on a change in pull request #3403:
URL: https://github.com/apache/hadoop/pull/3403#discussion_r705957131



##########
File path: hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacitySchedulerConfigValidator.java
##########
@@ -125,76 +133,107 @@ public static void validateQueueHierarchy(
       CapacitySchedulerConfiguration newConf) throws IOException {
     // check that all static queues are included in the newQueues list
     for (CSQueue oldQueue : queues.getQueues()) {
-      if (!(AbstractAutoCreatedLeafQueue.class.isAssignableFrom(
-          oldQueue.getClass()))) {
-        String queuePath = oldQueue.getQueuePath();
-        CSQueue newQueue = newQueues.get(queuePath);
-        String configPrefix = newConf.getQueuePrefix(
-            oldQueue.getQueuePath());
-        String state = newConf.get(configPrefix + "state");
-        QueueState newQueueState = null;
-        if (state != null) {
-          try {
-            newQueueState = QueueState.valueOf(state);
-          } catch (Exception ex) {
-            LOG.warn("Not a valid queue state for queue "
-                + oldQueue.getQueuePath());
+      if (AbstractAutoCreatedLeafQueue.class.isAssignableFrom(oldQueue.getClass())) {
+        continue;
+      }
+
+      final String queuePath = oldQueue.getQueuePath();
+      final String configPrefix = CapacitySchedulerConfiguration.getQueuePrefix(
+          oldQueue.getQueuePath());
+      final QueueState newQueueState = getQueueState(oldQueue, newConf.get(configPrefix + "state"));
+      final CSQueue newQueue = newQueues.get(queuePath);
+
+      if (null == newQueue) {
+        // old queue doesn't exist in the new XML
+        if (oldQueue.getState() == QueueState.STOPPED || newQueueState == QueueState.STOPPED) {

Review comment:
       Good catch, extracted to a helper function.




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: common-issues-unsubscribe@hadoop.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



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


[GitHub] [hadoop] hadoop-yetus commented on pull request #3403: YARN-10917. Investigate and simplify CapacitySchedulerConfigValidator…

Posted by GitBox <gi...@apache.org>.
hadoop-yetus commented on pull request #3403:
URL: https://github.com/apache/hadoop/pull/3403#issuecomment-916917284


   :broken_heart: **-1 overall**
   
   
   
   
   
   
   | Vote | Subsystem | Runtime |  Logfile | Comment |
   |:----:|----------:|--------:|:--------:|:-------:|
   | +0 :ok: |  reexec  |   1m  1s |  |  Docker mode activated.  |
   |||| _ Prechecks _ |
   | +1 :green_heart: |  dupname  |   0m  0s |  |  No case conflicting files found.  |
   | +0 :ok: |  codespell  |   0m  1s |  |  codespell was not available.  |
   | +1 :green_heart: |  @author  |   0m  0s |  |  The patch does not contain any @author tags.  |
   | -1 :x: |  test4tests  |   0m  0s |  |  The patch doesn't appear to include any new or modified tests. Please justify why no new tests are needed for this patch. Also please list what manual steps were performed to verify this patch.  |
   |||| _ trunk Compile Tests _ |
   | +1 :green_heart: |  mvninstall  |  32m 30s |  |  trunk passed  |
   | +1 :green_heart: |  compile  |   1m  2s |  |  trunk passed with JDK Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04  |
   | +1 :green_heart: |  compile  |   0m 53s |  |  trunk passed with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10  |
   | +1 :green_heart: |  checkstyle  |   0m 45s |  |  trunk passed  |
   | +1 :green_heart: |  mvnsite  |   0m 58s |  |  trunk passed  |
   | +1 :green_heart: |  javadoc  |   0m 43s |  |  trunk passed with JDK Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04  |
   | +1 :green_heart: |  javadoc  |   0m 41s |  |  trunk passed with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10  |
   | +1 :green_heart: |  spotbugs  |   1m 53s |  |  trunk passed  |
   | +1 :green_heart: |  shadedclient  |  17m 38s |  |  branch has no errors when building and testing our client artifacts.  |
   |||| _ Patch Compile Tests _ |
   | +1 :green_heart: |  mvninstall  |   0m 51s |  |  the patch passed  |
   | +1 :green_heart: |  compile  |   0m 57s |  |  the patch passed with JDK Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04  |
   | +1 :green_heart: |  javac  |   0m 57s |  |  the patch passed  |
   | +1 :green_heart: |  compile  |   0m 47s |  |  the patch passed with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10  |
   | +1 :green_heart: |  javac  |   0m 47s |  |  the patch passed  |
   | +1 :green_heart: |  blanks  |   0m  0s |  |  The patch has no blanks issues.  |
   | +1 :green_heart: |  checkstyle  |   0m 38s |  |  the patch passed  |
   | +1 :green_heart: |  mvnsite  |   0m 51s |  |  the patch passed  |
   | +1 :green_heart: |  javadoc  |   0m 39s |  |  the patch passed with JDK Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04  |
   | +1 :green_heart: |  javadoc  |   0m 34s |  |  the patch passed with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10  |
   | +1 :green_heart: |  spotbugs  |   1m 58s |  |  the patch passed  |
   | +1 :green_heart: |  shadedclient  |  17m 49s |  |  patch has no errors when building and testing our client artifacts.  |
   |||| _ Other Tests _ |
   | +1 :green_heart: |  unit  |  99m 55s |  |  hadoop-yarn-server-resourcemanager in the patch passed.  |
   | +1 :green_heart: |  asflicense  |   0m 31s |  |  The patch does not generate ASF License warnings.  |
   |  |   | 182m 44s |  |  |
   
   
   | Subsystem | Report/Notes |
   |----------:|:-------------|
   | Docker | ClientAPI=1.41 ServerAPI=1.41 base: https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-3403/3/artifact/out/Dockerfile |
   | GITHUB PR | https://github.com/apache/hadoop/pull/3403 |
   | Optional Tests | dupname asflicense compile javac javadoc mvninstall mvnsite unit shadedclient spotbugs checkstyle codespell |
   | uname | Linux 65a559567aec 4.15.0-142-generic #146-Ubuntu SMP Tue Apr 13 01:11:19 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux |
   | Build tool | maven |
   | Personality | dev-support/bin/hadoop.sh |
   | git revision | trunk / 444fb7a62b7f27e5589d8943c385647c2a6e1c9c |
   | Default Java | Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10 |
   | Multi-JDK versions | /usr/lib/jvm/java-11-openjdk-amd64:Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04 /usr/lib/jvm/java-8-openjdk-amd64:Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10 |
   |  Test Results | https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-3403/3/testReport/ |
   | Max. process+thread count | 899 (vs. ulimit of 5500) |
   | modules | C: hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager U: hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager |
   | Console output | https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-3403/3/console |
   | versions | git=2.25.1 maven=3.6.3 spotbugs=4.2.2 |
   | Powered by | Apache Yetus 0.14.0-SNAPSHOT https://yetus.apache.org |
   
   
   This message was automatically generated.
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: common-issues-unsubscribe@hadoop.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



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


[GitHub] [hadoop] szilard-nemeth edited a comment on pull request #3403: YARN-10917. Investigate and simplify CapacitySchedulerConfigValidator…

Posted by GitBox <gi...@apache.org>.
szilard-nemeth edited a comment on pull request #3403:
URL: https://github.com/apache/hadoop/pull/3403#issuecomment-919283755


   Thanks @tomicooler for working on this.
   Latest state LGTM, committed to trunk.
   Thanks @9uapaw for the review.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: common-issues-unsubscribe@hadoop.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



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


[GitHub] [hadoop] tomicooler commented on a change in pull request #3403: YARN-10917. Investigate and simplify CapacitySchedulerConfigValidator…

Posted by GitBox <gi...@apache.org>.
tomicooler commented on a change in pull request #3403:
URL: https://github.com/apache/hadoop/pull/3403#discussion_r705956415



##########
File path: hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacitySchedulerConfigValidator.java
##########
@@ -125,76 +133,107 @@ public static void validateQueueHierarchy(
       CapacitySchedulerConfiguration newConf) throws IOException {
     // check that all static queues are included in the newQueues list
     for (CSQueue oldQueue : queues.getQueues()) {
-      if (!(AbstractAutoCreatedLeafQueue.class.isAssignableFrom(
-          oldQueue.getClass()))) {
-        String queuePath = oldQueue.getQueuePath();
-        CSQueue newQueue = newQueues.get(queuePath);
-        String configPrefix = newConf.getQueuePrefix(
-            oldQueue.getQueuePath());
-        String state = newConf.get(configPrefix + "state");
-        QueueState newQueueState = null;
-        if (state != null) {
-          try {
-            newQueueState = QueueState.valueOf(state);
-          } catch (Exception ex) {
-            LOG.warn("Not a valid queue state for queue "
-                + oldQueue.getQueuePath());
+      if (AbstractAutoCreatedLeafQueue.class.isAssignableFrom(oldQueue.getClass())) {
+        continue;
+      }
+
+      final String queuePath = oldQueue.getQueuePath();
+      final String configPrefix = CapacitySchedulerConfiguration.getQueuePrefix(
+          oldQueue.getQueuePath());
+      final QueueState newQueueState = getQueueState(oldQueue, newConf.get(configPrefix + "state"));
+      final CSQueue newQueue = newQueues.get(queuePath);
+
+      if (null == newQueue) {
+        // old queue doesn't exist in the new XML
+        if (oldQueue.getState() == QueueState.STOPPED || newQueueState == QueueState.STOPPED) {
+          LOG.info("Deleting Queue {}, as it is not present in the modified capacity " +
+              "configuration xml", queuePath);
+        } else {
+          if (!isDynamicQueue(oldQueue)) {
+            throw new IOException(oldQueue.getQueuePath() + " cannot be"
+                + " deleted from the capacity scheduler configuration, as the"
+                + " queue is not yet in stopped state. Current State : "
+                + oldQueue.getState());
           }
         }
-        if (null == newQueue) {
-          // old queue doesn't exist in the new XML
-          if (oldQueue.getState() == QueueState.STOPPED ||
-              newQueueState == QueueState.STOPPED) {
-            LOG.info("Deleting Queue " + queuePath + ", as it is not"
-                + " present in the modified capacity configuration xml");
-          } else {
-            if (!isDynamicQueue(oldQueue)) {
-              throw new IOException(oldQueue.getQueuePath() + " cannot be"
-                  + " deleted from the capacity scheduler configuration, as the"
-                  + " queue is not yet in stopped state. Current State : "
-                  + oldQueue.getState());
-            }
-          }
-        } else if (!oldQueue.getQueuePath().equals(newQueue.getQueuePath())) {
-          //Queue's cannot be moved from one hierarchy to other
-          throw new IOException(
-            queuePath + " is moved from:" + oldQueue.getQueuePath() + " to:"
-              + newQueue.getQueuePath()
-              + " after refresh, which is not allowed.");
-        } else if (oldQueue instanceof ParentQueue
-            && !(oldQueue instanceof ManagedParentQueue)
-            && newQueue instanceof ManagedParentQueue) {
+      } else {
+        for (QueueChangeValidator validator : QUEUE_CHANGE_VALIDATORS) {
+          validator.validate(oldQueue, newQueue);
+        }
+      }
+    }
+  }
+
+  private static QueueState getQueueState(CSQueue queue, String state) {

Review comment:
       Renamed it to createQueueState and it gets the queue path instead of the queue as the second argument.




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: common-issues-unsubscribe@hadoop.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



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


[GitHub] [hadoop] hadoop-yetus commented on pull request #3403: YARN-10917. Investigate and simplify CapacitySchedulerConfigValidator…

Posted by GitBox <gi...@apache.org>.
hadoop-yetus commented on pull request #3403:
URL: https://github.com/apache/hadoop/pull/3403#issuecomment-915181803


   :broken_heart: **-1 overall**
   
   
   
   
   
   
   | Vote | Subsystem | Runtime |  Logfile | Comment |
   |:----:|----------:|--------:|:--------:|:-------:|
   | +0 :ok: |  reexec  |   0m 51s |  |  Docker mode activated.  |
   |||| _ Prechecks _ |
   | +1 :green_heart: |  dupname  |   0m  0s |  |  No case conflicting files found.  |
   | +0 :ok: |  codespell  |   0m  1s |  |  codespell was not available.  |
   | +1 :green_heart: |  @author  |   0m  0s |  |  The patch does not contain any @author tags.  |
   | -1 :x: |  test4tests  |   0m  0s |  |  The patch doesn't appear to include any new or modified tests. Please justify why no new tests are needed for this patch. Also please list what manual steps were performed to verify this patch.  |
   |||| _ trunk Compile Tests _ |
   | +1 :green_heart: |  mvninstall  |  31m 10s |  |  trunk passed  |
   | +1 :green_heart: |  compile  |   1m  3s |  |  trunk passed with JDK Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04  |
   | +1 :green_heart: |  compile  |   0m 55s |  |  trunk passed with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10  |
   | +1 :green_heart: |  checkstyle  |   0m 47s |  |  trunk passed  |
   | +1 :green_heart: |  mvnsite  |   1m  0s |  |  trunk passed  |
   | +1 :green_heart: |  javadoc  |   0m 46s |  |  trunk passed with JDK Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04  |
   | +1 :green_heart: |  javadoc  |   0m 44s |  |  trunk passed with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10  |
   | +1 :green_heart: |  spotbugs  |   1m 52s |  |  trunk passed  |
   | +1 :green_heart: |  shadedclient  |  15m  7s |  |  branch has no errors when building and testing our client artifacts.  |
   |||| _ Patch Compile Tests _ |
   | +1 :green_heart: |  mvninstall  |   0m 51s |  |  the patch passed  |
   | +1 :green_heart: |  compile  |   0m 54s |  |  the patch passed with JDK Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04  |
   | +1 :green_heart: |  javac  |   0m 54s |  |  the patch passed  |
   | +1 :green_heart: |  compile  |   0m 47s |  |  the patch passed with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10  |
   | +1 :green_heart: |  javac  |   0m 47s |  |  the patch passed  |
   | +1 :green_heart: |  blanks  |   0m  0s |  |  The patch has no blanks issues.  |
   | +1 :green_heart: |  checkstyle  |   0m 40s |  |  the patch passed  |
   | +1 :green_heart: |  mvnsite  |   0m 50s |  |  the patch passed  |
   | +1 :green_heart: |  javadoc  |   0m 38s |  |  the patch passed with JDK Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04  |
   | +1 :green_heart: |  javadoc  |   0m 35s |  |  the patch passed with JDK Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10  |
   | +1 :green_heart: |  spotbugs  |   1m 53s |  |  the patch passed  |
   | +1 :green_heart: |  shadedclient  |  15m 10s |  |  patch has no errors when building and testing our client artifacts.  |
   |||| _ Other Tests _ |
   | +1 :green_heart: |  unit  |  95m 40s |  |  hadoop-yarn-server-resourcemanager in the patch passed.  |
   | +1 :green_heart: |  asflicense  |   0m 33s |  |  The patch does not generate ASF License warnings.  |
   |  |   | 172m 25s |  |  |
   
   
   | Subsystem | Report/Notes |
   |----------:|:-------------|
   | Docker | ClientAPI=1.41 ServerAPI=1.41 base: https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-3403/1/artifact/out/Dockerfile |
   | GITHUB PR | https://github.com/apache/hadoop/pull/3403 |
   | Optional Tests | dupname asflicense compile javac javadoc mvninstall mvnsite unit shadedclient spotbugs checkstyle codespell |
   | uname | Linux a7acd4dd256f 4.15.0-112-generic #113-Ubuntu SMP Thu Jul 9 23:41:39 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux |
   | Build tool | maven |
   | Personality | dev-support/bin/hadoop.sh |
   | git revision | trunk / c4d7617cfbae0174a3ebc115f4faf441fec28bfc |
   | Default Java | Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10 |
   | Multi-JDK versions | /usr/lib/jvm/java-11-openjdk-amd64:Ubuntu-11.0.11+9-Ubuntu-0ubuntu2.20.04 /usr/lib/jvm/java-8-openjdk-amd64:Private Build-1.8.0_292-8u292-b10-0ubuntu1~20.04-b10 |
   |  Test Results | https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-3403/1/testReport/ |
   | Max. process+thread count | 1007 (vs. ulimit of 5500) |
   | modules | C: hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager U: hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager |
   | Console output | https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-3403/1/console |
   | versions | git=2.25.1 maven=3.6.3 spotbugs=4.2.2 |
   | Powered by | Apache Yetus 0.14.0-SNAPSHOT https://yetus.apache.org |
   
   
   This message was automatically generated.
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: common-issues-unsubscribe@hadoop.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



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