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 <[email protected]>
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 <[email protected]>
---
.../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++;