diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/sink/client/IoTDBDataNodeSyncClientManager.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/sink/client/IoTDBDataNodeSyncClientManager.java index 9177eb04531ff..2a05fe6137800 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/sink/client/IoTDBDataNodeSyncClientManager.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/sink/client/IoTDBDataNodeSyncClientManager.java @@ -93,6 +93,7 @@ public Pair getClient(final String deviceId) { && endPoint != null && endPoint2ClientAndStatus.containsKey(endPoint) && Boolean.TRUE.equals(endPoint2ClientAndStatus.get(endPoint).getRight()) + && endPoint2ClientAndStatus.get(endPoint).getLeft() != null ? endPoint2ClientAndStatus.get(endPoint) : getClient(); } @@ -102,6 +103,7 @@ public Pair getClient(final TEndPoint endPoint) { && endPoint != null && endPoint2ClientAndStatus.containsKey(endPoint) && Boolean.TRUE.equals(endPoint2ClientAndStatus.get(endPoint).getRight()) + && endPoint2ClientAndStatus.get(endPoint).getLeft() != null ? endPoint2ClientAndStatus.get(endPoint) : getClient(); } diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/pipe/sink/client/IoTDBSyncClientManager.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/pipe/sink/client/IoTDBSyncClientManager.java index 789bb71ecda7c..7dc92b8cba241 100644 --- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/pipe/sink/client/IoTDBSyncClientManager.java +++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/pipe/sink/client/IoTDBSyncClientManager.java @@ -119,7 +119,7 @@ public void checkClientStatusAndTryReconstructIfNecessary() { // Check whether any clients are available, if any client is available, return directly for (final Pair clientAndStatus : endPoint2ClientAndStatus.values()) { - if (Boolean.TRUE.equals(clientAndStatus.getRight())) { + if (Boolean.TRUE.equals(clientAndStatus.getRight()) && clientAndStatus.getLeft() != null) { return; } } @@ -128,7 +128,7 @@ public void checkClientStatusAndTryReconstructIfNecessary() { // Reconstruct all dead clients for (final Map.Entry> entry : endPoint2ClientAndStatus.entrySet()) { - if (Boolean.TRUE.equals(entry.getValue().getRight())) { + if (Boolean.TRUE.equals(entry.getValue().getRight()) && entry.getValue().getLeft() != null) { continue; } @@ -137,7 +137,7 @@ public void checkClientStatusAndTryReconstructIfNecessary() { // Check whether any clients are available for (final Pair clientAndStatus : endPoint2ClientAndStatus.values()) { - if (Boolean.TRUE.equals(clientAndStatus.getRight())) { + if (Boolean.TRUE.equals(clientAndStatus.getRight()) && clientAndStatus.getLeft() != null) { lastCheckClientStatusTimestamp = System.currentTimeMillis(); return; } @@ -304,7 +304,6 @@ public void close() { try { if (clientAndStatus.getLeft() != null) { clientAndStatus.getLeft().close(); - clientAndStatus.setLeft(null); } LOGGER.info("Client {}:{} closed.", endPoint.getIp(), endPoint.getPort()); } catch (Exception e) { @@ -335,7 +334,7 @@ public Pair getClient() { final int clientIndex = (int) (currentClientIndex++ % clientSize); final Pair clientAndStatus = endPoint2ClientAndStatus.get(endPointList.get(clientIndex)); - if (Boolean.TRUE.equals(clientAndStatus.getRight())) { + if (Boolean.TRUE.equals(clientAndStatus.getRight()) && clientAndStatus.getLeft() != null) { return clientAndStatus; } } @@ -352,7 +351,7 @@ public Pair getClient() { final int clientIndex = (int) (Math.random() * clientSize); final Pair clientAndStatus = endPoint2ClientAndStatus.get(endPointList.get(clientIndex)); - if (Boolean.TRUE.equals(clientAndStatus.getRight())) { + if (Boolean.TRUE.equals(clientAndStatus.getRight()) && clientAndStatus.getLeft() != null) { return clientAndStatus; } @@ -361,7 +360,8 @@ public Pair getClient() { final int nextClientIndex = (clientIndex + tryCount + 1) % clientSize; final Pair nextClientAndStatus = endPoint2ClientAndStatus.get(endPointList.get(nextClientIndex)); - if (Boolean.TRUE.equals(nextClientAndStatus.getRight())) { + if (Boolean.TRUE.equals(nextClientAndStatus.getRight()) + && clientAndStatus.getLeft() != null) { return nextClientAndStatus; } } @@ -378,7 +378,7 @@ public Pair getClient() { for (final TEndPoint endPoint : endPointList) { final Pair clientAndStatus = endPoint2ClientAndStatus.get(endPoint); - if (Boolean.TRUE.equals(clientAndStatus.getRight())) { + if (Boolean.TRUE.equals(clientAndStatus.getRight()) && clientAndStatus.getLeft() != null) { return clientAndStatus; } }