From c744cb42747268b09e97364fb6cbb90d9770afb5 Mon Sep 17 00:00:00 2001 From: YC27 <76414902+YC27@users.noreply.github.com> Date: Fri, 13 Sep 2024 10:53:59 +0800 Subject: [PATCH] Pipe: Fix asynchronous connector manager leak when the receiverAttributes exists on constructing (#13501) --- .../client/IoTDBDataNodeAsyncClientManager.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/connector/client/IoTDBDataNodeAsyncClientManager.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/connector/client/IoTDBDataNodeAsyncClientManager.java index 391545b741960..549923882d5a8 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/connector/client/IoTDBDataNodeAsyncClientManager.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/connector/client/IoTDBDataNodeAsyncClientManager.java @@ -89,11 +89,13 @@ public IoTDBDataNodeAsyncClientManager( receiverAttributes = String.format("%s-%s", shouldReceiverConvertOnTypeMismatch, loadTsFileStrategy); synchronized (IoTDBDataNodeAsyncClientManager.class) { - ASYNC_PIPE_DATA_TRANSFER_CLIENT_MANAGER_HOLDER.putIfAbsent( - receiverAttributes, - new IClientManager.Factory() - .createClientManager( - new ClientPoolFactory.AsyncPipeDataTransferServiceClientPoolFactory())); + if (!ASYNC_PIPE_DATA_TRANSFER_CLIENT_MANAGER_HOLDER.containsKey(receiverAttributes)) { + ASYNC_PIPE_DATA_TRANSFER_CLIENT_MANAGER_HOLDER.putIfAbsent( + receiverAttributes, + new IClientManager.Factory() + .createClientManager( + new ClientPoolFactory.AsyncPipeDataTransferServiceClientPoolFactory())); + } endPoint2Client = ASYNC_PIPE_DATA_TRANSFER_CLIENT_MANAGER_HOLDER.get(receiverAttributes); RECEIVER_ATTRIBUTES_REF_COUNT.compute(