This is an automated email from the ASF dual-hosted git repository. gosonzhang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/inlong.git
The following commit(s) were added to refs/heads/master by this push: new 17de673753 [INLONG-11717][SDK] Add out-of-bounds check when in getClientByRoundRobin() (#11718) 17de673753 is described below commit 17de673753e184af146e02aa2279e7663676c609 Author: Goson Zhang <4675...@qq.com> AuthorDate: Fri Feb 7 11:23:34 2025 +0800 [INLONG-11717][SDK] Add out-of-bounds check when in getClientByRoundRobin() (#11718) * [INLONG-11717][SDK] Add out-of-bounds check when in getClientByRoundRobin() * [INLONG-11717][SDK] Add out-of-bounds check when in getClientByRoundRobin() --------- Co-authored-by: gosonzhang <gosonzh...@tencent.com> --- .../apache/inlong/sdk/dataproxy/network/DefClientMgr.java | 13 ++++++++++++- .../inlong/sdk/dataproxy/network/tcp/TcpClientMgr.java | 13 ++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/inlong-sdk/dataproxy-sdk/src/main/java/org/apache/inlong/sdk/dataproxy/network/DefClientMgr.java b/inlong-sdk/dataproxy-sdk/src/main/java/org/apache/inlong/sdk/dataproxy/network/DefClientMgr.java index 21167e13cc..cbf63546a0 100644 --- a/inlong-sdk/dataproxy-sdk/src/main/java/org/apache/inlong/sdk/dataproxy/network/DefClientMgr.java +++ b/inlong-sdk/dataproxy-sdk/src/main/java/org/apache/inlong/sdk/dataproxy/network/DefClientMgr.java @@ -58,6 +58,7 @@ public class DefClientMgr implements ConfigHolder { private static final Logger logger = LoggerFactory.getLogger(DefClientMgr.class); private static final LogCounter logCounter = new LogCounter(10, 100000, 60 * 1000L); private static final LogCounter updConExptCnt = new LogCounter(10, 100000, 60 * 1000L); + private static final LogCounter indexExptCnt = new LogCounter(10, 100000, 60 * 1000L); private static final LogCounter exptCounter = new LogCounter(10, 100000, 60 * 1000L); private static final byte[] hbMsgBody = ProxyUtils.getLocalIp().getBytes(StandardCharsets.UTF_8); @@ -197,6 +198,7 @@ public class DefClientMgr implements ConfigHolder { if (curNodeSize == 0) { return new Tuple2<>(SendResult.EMPTY_ACTIVE_NODE_SET, null); } + int indexPos; String curNode; NettyClient client; NettyClient backClient = null; @@ -204,7 +206,16 @@ public class DefClientMgr implements ConfigHolder { int incFlightFailCnt = 0; int startPos = reqSendIndex.getAndIncrement(); for (int step = 0; step < curNodeSize; step++) { - curNode = curNodes.get(Math.abs(startPos++) % curNodeSize); + startPos = Math.abs(startPos + 1); + indexPos = startPos % curNodeSize; + if (indexPos >= curNodes.size()) { + if (indexExptCnt.shouldPrint()) { + logger.warn("IndexOutOfBounds, startPos={}, curNodeSize={}, indexPos={}, realSize={}", + startPos, curNodeSize, indexPos, curNodes.size()); + } + continue; + } + curNode = curNodes.get(indexPos); client = usingClientMaps.get(curNode); if (client == null) { nullClientCnt++; diff --git a/inlong-sdk/dataproxy-sdk/src/main/java/org/apache/inlong/sdk/dataproxy/network/tcp/TcpClientMgr.java b/inlong-sdk/dataproxy-sdk/src/main/java/org/apache/inlong/sdk/dataproxy/network/tcp/TcpClientMgr.java index 210b2b109e..5b4bf601c0 100644 --- a/inlong-sdk/dataproxy-sdk/src/main/java/org/apache/inlong/sdk/dataproxy/network/tcp/TcpClientMgr.java +++ b/inlong-sdk/dataproxy-sdk/src/main/java/org/apache/inlong/sdk/dataproxy/network/tcp/TcpClientMgr.java @@ -67,6 +67,7 @@ public class TcpClientMgr implements ClientMgr { private static final Logger logger = LoggerFactory.getLogger(TcpClientMgr.class); private static final LogCounter sendExceptCnt = new LogCounter(10, 100000, 60 * 1000L); private static final LogCounter updConExptCnt = new LogCounter(10, 100000, 60 * 1000L); + private static final LogCounter indexExptCnt = new LogCounter(10, 100000, 60 * 1000L); private static final LogCounter exptCounter = new LogCounter(10, 100000, 60 * 1000L); private static final LogCounter callbackExceptCnt = new LogCounter(10, 100000, 60 * 1000L); private static final AtomicLong timerRefCnt = new AtomicLong(0); @@ -326,6 +327,7 @@ public class TcpClientMgr implements ClientMgr { if (curNodeSize == 0) { return procResult.setFailResult(ErrorCode.EMPTY_ACTIVE_NODE_SET); } + int indexPos; String curNode; TcpNettyClient client; TcpNettyClient back1thClient = null; @@ -333,7 +335,16 @@ public class TcpClientMgr implements ClientMgr { int unWritableCnt = 0; int startPos = reqSendIndex.getAndIncrement(); for (int step = 0; step < curNodeSize; step++) { - curNode = curNodes.get(Math.abs(startPos++) % curNodeSize); + startPos = Math.abs(startPos + 1); + indexPos = startPos % curNodeSize; + if (indexPos >= curNodes.size()) { + if (indexExptCnt.shouldPrint()) { + logger.warn("IndexOutOfBounds, startPos={}, curNodeSize={}, indexPos={}, realSize={}", + startPos, curNodeSize, indexPos, curNodes.size()); + } + continue; + } + curNode = curNodes.get(indexPos); client = usingClientMaps.get(curNode); if (client == null) { nullClientCnt++;