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

slfan1989 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 e9a7a0b62cd YARN-11802. Avoid reflection in TestAsyncDispatcher 
(#7541) Contributed by Istvan Toth.
e9a7a0b62cd is described below

commit e9a7a0b62cd8cca4e9433525969bc7940a08f1d0
Author: Istvan Toth <st...@apache.org>
AuthorDate: Mon Mar 31 04:27:48 2025 +0200

    YARN-11802. Avoid reflection in TestAsyncDispatcher (#7541) Contributed by 
Istvan Toth.
    
    * YARN-11802. Avoid reflection in TestAsyncDispatcher
    
    Signed-off-by: Shilun Fan <slfan1...@apache.org>
---
 .../apache/hadoop/yarn/event/AsyncDispatcher.java  |  9 ++++-
 .../hadoop/yarn/event/TestAsyncDispatcher.java     | 47 ++++++++--------------
 2 files changed, 23 insertions(+), 33 deletions(-)

diff --git 
a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/event/AsyncDispatcher.java
 
b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/event/AsyncDispatcher.java
index 1a072b0efc6..8a76ff40a6d 100644
--- 
a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/event/AsyncDispatcher.java
+++ 
b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/event/AsyncDispatcher.java
@@ -57,7 +57,7 @@
 @Evolving
 public class AsyncDispatcher extends AbstractService implements Dispatcher {
 
-  private static final Logger LOG =
+  protected static final Logger LOG =
       LoggerFactory.getLogger(AsyncDispatcher.class);
   private static final Marker FATAL =
       MarkerFactory.getMarker("FATAL");
@@ -164,7 +164,7 @@ public void run() {
             if (printTrigger) {
               //Log the latest dispatch event type
               // may cause the too many events queued
-              LOG.info("Latest dispatch event type: " + event.getType());
+              logTriggered("Latest dispatch event type: " + event.getType());
               printTrigger = false;
             }
           }
@@ -173,6 +173,11 @@ public void run() {
     };
   }
 
+  // This is a separate method to make it overridable for testing
+  protected void logTriggered(String message) {
+    LOG.info(message);
+  }
+
   @VisibleForTesting
   public void disableExitOnDispatchException() {
     exitOnDispatchException = false;
diff --git 
a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/event/TestAsyncDispatcher.java
 
b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/event/TestAsyncDispatcher.java
index def51fb1cc2..34a06b0a160 100644
--- 
a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/event/TestAsyncDispatcher.java
+++ 
b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/event/TestAsyncDispatcher.java
@@ -18,8 +18,6 @@
 
 package org.apache.hadoop.yarn.event;
 
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
@@ -29,15 +27,12 @@
 
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.Timeout;
-import org.slf4j.Logger;
-
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.metrics2.AbstractMetric;
 import org.apache.hadoop.metrics2.MetricsRecord;
 import org.apache.hadoop.metrics2.impl.MetricsCollectorImpl;
 import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem;
 import org.apache.hadoop.test.GenericTestUtils;
-import org.apache.hadoop.test.ReflectionUtils;
 import org.apache.hadoop.yarn.conf.YarnConfiguration;
 import org.apache.hadoop.yarn.exceptions.YarnRuntimeException;
 import org.apache.hadoop.yarn.metrics.GenericEventTypeMetrics;
@@ -46,11 +41,9 @@
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
-import static org.mockito.Mockito.atLeastOnce;
 import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 public class TestAsyncDispatcher {
@@ -178,19 +171,10 @@ void testPrintDispatcherEventDetails() throws Exception {
     YarnConfiguration conf = new YarnConfiguration();
     conf.setInt(YarnConfiguration.
         YARN_DISPATCHER_PRINT_EVENTS_INFO_THRESHOLD, 5000);
-    Logger log = mock(Logger.class);
-    AsyncDispatcher dispatcher = new AsyncDispatcher();
+    AsyncDispatcherForTest dispatcher = new AsyncDispatcherForTest();
     dispatcher.init(conf);
 
-    Field logger = AsyncDispatcher.class.getDeclaredField("LOG");
-    logger.setAccessible(true);
-    Field modifiers = ReflectionUtils.getModifiersField();
-    modifiers.setAccessible(true);
-    modifiers.setInt(logger, logger.getModifiers() & ~Modifier.FINAL);
-    Object oldLog = logger.get(null);
-
     try {
-      logger.set(null, log);
       dispatcher.register(TestEnum.class, new TestHandler());
       dispatcher.start();
 
@@ -201,11 +185,9 @@ void testPrintDispatcherEventDetails() throws Exception {
       }
       Thread.sleep(2000);
       //Make sure more than one event to take
-      verify(log, atLeastOnce()).
-          info("Latest dispatch event type: TestEventType");
+      assertEquals(dispatcher.getLastTriggered(), "Latest dispatch event type: 
TestEventType");
     } finally {
       //... restore logger object
-      logger.set(null, oldLog);
       dispatcher.stop();
     }
   }
@@ -224,19 +206,10 @@ public void 
testPrintDispatcherEventDetailsAvoidDeadLoopInternal()
     YarnConfiguration conf = new YarnConfiguration();
     conf.setInt(YarnConfiguration.
         YARN_DISPATCHER_PRINT_EVENTS_INFO_THRESHOLD, 10);
-    Logger log = mock(Logger.class);
     AsyncDispatcher dispatcher = new AsyncDispatcher();
     dispatcher.init(conf);
 
-    Field logger = AsyncDispatcher.class.getDeclaredField("LOG");
-    logger.setAccessible(true);
-    Field modifiers = ReflectionUtils.getModifiersField();
-    modifiers.setAccessible(true);
-    modifiers.setInt(logger, logger.getModifiers() & ~Modifier.FINAL);
-    Object oldLog = logger.get(null);
-
     try {
-      logger.set(null, log);
       dispatcher.register(TestEnum.class, new TestHandler(0));
       dispatcher.start();
 
@@ -247,8 +220,6 @@ public void 
testPrintDispatcherEventDetailsAvoidDeadLoopInternal()
       }
       Thread.sleep(3000);
     } finally {
-      //... restore logger object
-      logger.set(null, oldLog);
       dispatcher.stop();
     }
   }
@@ -419,4 +390,18 @@ void testDispatcherMetricsHistogram() throws Exception {
     }
 
   }
+
+  private class AsyncDispatcherForTest extends AsyncDispatcher {
+    private String lastTriggered = "";
+
+    @Override
+    protected void logTriggered(String message) {
+      LOG.info(message);
+      lastTriggered = message;
+    }
+
+    public String getLastTriggered() {
+      return lastTriggered;
+    }
+  };
 }
\ No newline at end of file


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

Reply via email to