From ad4c2cada5f011c342feeeb13f78c83805da9204 Mon Sep 17 00:00:00 2001 From: "zengqiang.xu" Date: Wed, 8 Feb 2023 10:49:53 +0800 Subject: [PATCH] HADOOP-18624. Leaked calls in Client.java may cause ObserverNameNode OOM --- .../src/main/java/org/apache/hadoop/ipc/Client.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Client.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Client.java index c0f90d98bc6b4..89f65e2402264 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Client.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Client.java @@ -1467,10 +1467,12 @@ Writable call(RPC.RpcKind rpcKind, Writable rpcRequest, final Connection connection = getConnection(remoteId, call, serviceClass, fallbackToSimpleAuth); + boolean success = false; try { checkAsyncCall(); try { connection.sendRpcRequest(call); // send the rpc request + success = true; } catch (RejectedExecutionException e) { throw new IOException("connection has been closed", e); } catch (InterruptedException ie) { @@ -1485,6 +1487,10 @@ Writable call(RPC.RpcKind rpcKind, Writable rpcRequest, releaseAsyncCall(); } throw e; + } finally { + if (!success) { + connection.calls.remove(call.id); + } } if (isAsynchronousMode()) {