This is an automated email from the ASF dual-hosted git repository.
jinrongtong 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 0b60048 [ISSUE #2421] Fix SelectMessageQueueByHash in case hashcode
is Integer.MIN
0b60048 is described below
commit 0b600484b512f01d752e39ebb42c5a8b6e50fcb5
Author: 张哈希 <[email protected]>
AuthorDate: Thu Nov 12 12:32:17 2020 +0000
[ISSUE #2421] Fix SelectMessageQueueByHash in case hashcode is Integer.MIN
---
.../client/producer/selector/SelectMessageQueueByHash.java | 4 +---
.../client/producer/selector/SelectMessageQueueByHashTest.java | 8 ++++++++
2 files changed, 9 insertions(+), 3 deletions(-)
diff --git
a/client/src/main/java/org/apache/rocketmq/client/producer/selector/SelectMessageQueueByHash.java
b/client/src/main/java/org/apache/rocketmq/client/producer/selector/SelectMessageQueueByHash.java
index 11e2822..ba8ea8b 100644
---
a/client/src/main/java/org/apache/rocketmq/client/producer/selector/SelectMessageQueueByHash.java
+++
b/client/src/main/java/org/apache/rocketmq/client/producer/selector/SelectMessageQueueByHash.java
@@ -25,12 +25,10 @@ public class SelectMessageQueueByHash implements
MessageQueueSelector {
@Override
public MessageQueue select(List<MessageQueue> mqs, Message msg, Object
arg) {
- int value = arg.hashCode();
+ int value = arg.hashCode() % mqs.size();
if (value < 0) {
value = Math.abs(value);
}
-
- value = value % mqs.size();
return mqs.get(value);
}
}
diff --git
a/client/src/test/java/org/apache/rocketmq/client/producer/selector/SelectMessageQueueByHashTest.java
b/client/src/test/java/org/apache/rocketmq/client/producer/selector/SelectMessageQueueByHashTest.java
index 056e910..8f286ee 100644
---
a/client/src/test/java/org/apache/rocketmq/client/producer/selector/SelectMessageQueueByHashTest.java
+++
b/client/src/test/java/org/apache/rocketmq/client/producer/selector/SelectMessageQueueByHashTest.java
@@ -44,6 +44,14 @@ public class SelectMessageQueueByHashTest {
String anotherOrderId = "234";
MessageQueue selected = selector.select(messageQueues, message,
orderId);
assertThat(selector.select(messageQueues, message,
anotherOrderId)).isNotEqualTo(selected);
+
+ //No exception is thrown while order Id hashcode is Integer.MIN
+ anotherOrderId = "polygenelubricants";
+ selector.select(messageQueues, message, anotherOrderId);
+ anotherOrderId = "GydZG_";
+ selector.select(messageQueues, message, anotherOrderId);
+ anotherOrderId = "DESIGNING WORKHOUSES";
+ selector.select(messageQueues, message, anotherOrderId);
}
}
\ No newline at end of file