From 9c3acb3018674cbd8ac533cf85a076111671e23c Mon Sep 17 00:00:00 2001 From: Eric Badger Date: Mon, 19 Apr 2021 20:18:20 +0000 Subject: [PATCH] YARN-10460. Upgrading to JUnit 4.13 causes tests in TestNodeStatusUpdater to fail. Contributed by Peter Bacsko. (cherry picked from commit bf0d058b698b15d1c51927b8fd8cf678ab95661a) --- .../src/main/java/org/apache/hadoop/ipc/ClientCache.java | 8 ++++++++ .../java/org/apache/hadoop/ipc/ProtobufRpcEngine.java | 5 ++++- .../yarn/server/nodemanager/TestNodeStatusUpdater.java | 7 +++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/ClientCache.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/ClientCache.java index ee5f8bbea15..8a5e324e226 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/ClientCache.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/ClientCache.java @@ -29,6 +29,8 @@ import org.apache.hadoop.io.ObjectWritable; import org.apache.hadoop.io.Writable; +import com.google.common.annotations.VisibleForTesting; + /* Cache a client using its socket factory as the hash key */ @InterfaceAudience.LimitedPrivate({"HDFS", "MapReduce"}) @InterfaceStability.Evolving @@ -114,4 +116,10 @@ public void stopClient(Client client) { client.stop(); } } + + @VisibleForTesting + public void clearCache() { + clients.values().forEach(c -> c.stop()); + clients.clear(); + } } diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/ProtobufRpcEngine.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/ProtobufRpcEngine.java index 26aaa7c6ae3..959f701f5d2 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/ProtobufRpcEngine.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/ProtobufRpcEngine.java @@ -335,7 +335,10 @@ static Client getClient(Configuration conf) { RpcWritable.Buffer.class); } - + @VisibleForTesting + public static void clearClientCache() { + CLIENTS.clearCache(); + } @Override public RPC.Server getServer(Class protocol, Object protocolImpl, diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestNodeStatusUpdater.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestNodeStatusUpdater.java index 43a8d3b6921..e916e731ee2 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestNodeStatusUpdater.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestNodeStatusUpdater.java @@ -52,6 +52,7 @@ import org.apache.hadoop.io.Text; import org.apache.hadoop.io.retry.RetryPolicy; import org.apache.hadoop.io.retry.RetryProxy; +import org.apache.hadoop.ipc.ProtobufRpcEngine; import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem; import org.apache.hadoop.net.NetUtils; import org.apache.hadoop.net.ServerSocketUtil; @@ -122,6 +123,12 @@ public class TestNodeStatusUpdater extends NodeManagerTestBase { private NodeManager nm; private AtomicBoolean assertionFailedInThread = new AtomicBoolean(false); + @Before + public void before() { + // to avoid threading issues with JUnit 4.13+ + ProtobufRpcEngine.clearClientCache(); + } + @After public void tearDown() { this.registeredNodes.clear();