You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rocketmq.apache.org by du...@apache.org on 2022/06/13 01:39:52 UTC
[rocketmq] branch develop updated: [ISSUE #4349] fix negative index when index reach Integer.MAX_VALUE (#4447)
This is an automated email from the ASF dual-hosted git repository.
duhengforever pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/rocketmq.git
The following commit(s) were added to refs/heads/develop by this push:
new f08c79ff9 [ISSUE #4349] fix negative index when index reach Integer.MAX_VALUE (#4447)
f08c79ff9 is described below
commit f08c79ff9f9681f26046cb552f2c14a1ee1de10f
Author: Wushiyii <31...@users.noreply.github.com>
AuthorDate: Mon Jun 13 09:39:40 2022 +0800
[ISSUE #4349] fix negative index when index reach Integer.MAX_VALUE (#4447)
Co-authored-by: wuguoqing <wu...@zhuanzhuan.com>
---
.../apache/rocketmq/client/common/ThreadLocalIndex.java | 3 ++-
.../rocketmq/client/common/ThreadLocalIndexTest.java | 15 +++++++++++++++
2 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/client/src/main/java/org/apache/rocketmq/client/common/ThreadLocalIndex.java b/client/src/main/java/org/apache/rocketmq/client/common/ThreadLocalIndex.java
index 891c17e3b..41056fac6 100644
--- a/client/src/main/java/org/apache/rocketmq/client/common/ThreadLocalIndex.java
+++ b/client/src/main/java/org/apache/rocketmq/client/common/ThreadLocalIndex.java
@@ -22,6 +22,7 @@ import java.util.Random;
public class ThreadLocalIndex {
private final ThreadLocal<Integer> threadLocalIndex = new ThreadLocal<Integer>();
private final Random random = new Random();
+ private final static int POSITIVE_MASK = 0x7FFFFFFF;
public int incrementAndGet() {
Integer index = this.threadLocalIndex.get();
@@ -31,7 +32,7 @@ public class ThreadLocalIndex {
}
this.threadLocalIndex.set(++index);
- return Math.abs(index);
+ return Math.abs(index & POSITIVE_MASK);
}
@Override
diff --git a/client/src/test/java/org/apache/rocketmq/client/common/ThreadLocalIndexTest.java b/client/src/test/java/org/apache/rocketmq/client/common/ThreadLocalIndexTest.java
index 22ce28113..ce7ec1bee 100644
--- a/client/src/test/java/org/apache/rocketmq/client/common/ThreadLocalIndexTest.java
+++ b/client/src/test/java/org/apache/rocketmq/client/common/ThreadLocalIndexTest.java
@@ -16,6 +16,7 @@
*/
package org.apache.rocketmq.client.common;
+import java.lang.reflect.Field;
import org.junit.Test;
import static org.assertj.core.api.Assertions.assertThat;
@@ -36,4 +37,18 @@ public class ThreadLocalIndexTest {
assertThat(initialVal >= 0).isTrue();
}
+ @Test
+ public void testIncrementAndGet3() throws Exception {
+ ThreadLocalIndex localIndex = new ThreadLocalIndex();
+ Field threadLocalIndexField = ThreadLocalIndex.class.getDeclaredField("threadLocalIndex");
+ ThreadLocal<Integer> mockThreadLocal = new ThreadLocal<Integer>();
+ mockThreadLocal.set(Integer.MAX_VALUE);
+
+ threadLocalIndexField.setAccessible(true);
+ threadLocalIndexField.set(localIndex, mockThreadLocal);
+
+ int initialVal = localIndex.incrementAndGet();
+ assertThat(initialVal >= 0).isTrue();
+ }
+
}
\ No newline at end of file