Skip to content

Commit e9a7a0b

Browse files
authored
YARN-11802. Avoid reflection in TestAsyncDispatcher (#7541) Contributed by Istvan Toth.
* YARN-11802. Avoid reflection in TestAsyncDispatcher Signed-off-by: Shilun Fan <slfan1989@apache.org>
1 parent 5ccb0dc commit e9a7a0b

File tree

2 files changed

+23
-33
lines changed

2 files changed

+23
-33
lines changed

hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/event/AsyncDispatcher.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@
5757
@Evolving
5858
public class AsyncDispatcher extends AbstractService implements Dispatcher {
5959

60-
private static final Logger LOG =
60+
protected static final Logger LOG =
6161
LoggerFactory.getLogger(AsyncDispatcher.class);
6262
private static final Marker FATAL =
6363
MarkerFactory.getMarker("FATAL");
@@ -164,7 +164,7 @@ public void run() {
164164
if (printTrigger) {
165165
//Log the latest dispatch event type
166166
// may cause the too many events queued
167-
LOG.info("Latest dispatch event type: " + event.getType());
167+
logTriggered("Latest dispatch event type: " + event.getType());
168168
printTrigger = false;
169169
}
170170
}
@@ -173,6 +173,11 @@ public void run() {
173173
};
174174
}
175175

176+
// This is a separate method to make it overridable for testing
177+
protected void logTriggered(String message) {
178+
LOG.info(message);
179+
}
180+
176181
@VisibleForTesting
177182
public void disableExitOnDispatchException() {
178183
exitOnDispatchException = false;

hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/event/TestAsyncDispatcher.java

Lines changed: 16 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818

1919
package org.apache.hadoop.yarn.event;
2020

21-
import java.lang.reflect.Field;
22-
import java.lang.reflect.Modifier;
2321
import java.util.HashMap;
2422
import java.util.HashSet;
2523
import java.util.Map;
@@ -29,15 +27,12 @@
2927

3028
import org.junit.jupiter.api.Test;
3129
import org.junit.jupiter.api.Timeout;
32-
import org.slf4j.Logger;
33-
3430
import org.apache.hadoop.conf.Configuration;
3531
import org.apache.hadoop.metrics2.AbstractMetric;
3632
import org.apache.hadoop.metrics2.MetricsRecord;
3733
import org.apache.hadoop.metrics2.impl.MetricsCollectorImpl;
3834
import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem;
3935
import org.apache.hadoop.test.GenericTestUtils;
40-
import org.apache.hadoop.test.ReflectionUtils;
4136
import org.apache.hadoop.yarn.conf.YarnConfiguration;
4237
import org.apache.hadoop.yarn.exceptions.YarnRuntimeException;
4338
import org.apache.hadoop.yarn.metrics.GenericEventTypeMetrics;
@@ -46,11 +41,9 @@
4641
import static org.junit.jupiter.api.Assertions.assertEquals;
4742
import static org.junit.jupiter.api.Assertions.assertTrue;
4843
import static org.junit.jupiter.api.Assertions.fail;
49-
import static org.mockito.Mockito.atLeastOnce;
5044
import static org.mockito.Mockito.doThrow;
5145
import static org.mockito.Mockito.mock;
5246
import static org.mockito.Mockito.spy;
53-
import static org.mockito.Mockito.verify;
5447
import static org.mockito.Mockito.when;
5548

5649
public class TestAsyncDispatcher {
@@ -178,19 +171,10 @@ void testPrintDispatcherEventDetails() throws Exception {
178171
YarnConfiguration conf = new YarnConfiguration();
179172
conf.setInt(YarnConfiguration.
180173
YARN_DISPATCHER_PRINT_EVENTS_INFO_THRESHOLD, 5000);
181-
Logger log = mock(Logger.class);
182-
AsyncDispatcher dispatcher = new AsyncDispatcher();
174+
AsyncDispatcherForTest dispatcher = new AsyncDispatcherForTest();
183175
dispatcher.init(conf);
184176

185-
Field logger = AsyncDispatcher.class.getDeclaredField("LOG");
186-
logger.setAccessible(true);
187-
Field modifiers = ReflectionUtils.getModifiersField();
188-
modifiers.setAccessible(true);
189-
modifiers.setInt(logger, logger.getModifiers() & ~Modifier.FINAL);
190-
Object oldLog = logger.get(null);
191-
192177
try {
193-
logger.set(null, log);
194178
dispatcher.register(TestEnum.class, new TestHandler());
195179
dispatcher.start();
196180

@@ -201,11 +185,9 @@ void testPrintDispatcherEventDetails() throws Exception {
201185
}
202186
Thread.sleep(2000);
203187
//Make sure more than one event to take
204-
verify(log, atLeastOnce()).
205-
info("Latest dispatch event type: TestEventType");
188+
assertEquals(dispatcher.getLastTriggered(), "Latest dispatch event type: TestEventType");
206189
} finally {
207190
//... restore logger object
208-
logger.set(null, oldLog);
209191
dispatcher.stop();
210192
}
211193
}
@@ -224,19 +206,10 @@ public void testPrintDispatcherEventDetailsAvoidDeadLoopInternal()
224206
YarnConfiguration conf = new YarnConfiguration();
225207
conf.setInt(YarnConfiguration.
226208
YARN_DISPATCHER_PRINT_EVENTS_INFO_THRESHOLD, 10);
227-
Logger log = mock(Logger.class);
228209
AsyncDispatcher dispatcher = new AsyncDispatcher();
229210
dispatcher.init(conf);
230211

231-
Field logger = AsyncDispatcher.class.getDeclaredField("LOG");
232-
logger.setAccessible(true);
233-
Field modifiers = ReflectionUtils.getModifiersField();
234-
modifiers.setAccessible(true);
235-
modifiers.setInt(logger, logger.getModifiers() & ~Modifier.FINAL);
236-
Object oldLog = logger.get(null);
237-
238212
try {
239-
logger.set(null, log);
240213
dispatcher.register(TestEnum.class, new TestHandler(0));
241214
dispatcher.start();
242215

@@ -247,8 +220,6 @@ public void testPrintDispatcherEventDetailsAvoidDeadLoopInternal()
247220
}
248221
Thread.sleep(3000);
249222
} finally {
250-
//... restore logger object
251-
logger.set(null, oldLog);
252223
dispatcher.stop();
253224
}
254225
}
@@ -419,4 +390,18 @@ void testDispatcherMetricsHistogram() throws Exception {
419390
}
420391

421392
}
393+
394+
private class AsyncDispatcherForTest extends AsyncDispatcher {
395+
private String lastTriggered = "";
396+
397+
@Override
398+
protected void logTriggered(String message) {
399+
LOG.info(message);
400+
lastTriggered = message;
401+
}
402+
403+
public String getLastTriggered() {
404+
return lastTriggered;
405+
}
406+
};
422407
}

0 commit comments

Comments
 (0)