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