You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rocketmq.apache.org by ji...@apache.org on 2020/11/12 12:32:38 UTC

[rocketmq] branch develop updated: [ISSUE #2421] Fix SelectMessageQueueByHash in case hashcode is Integer.MIN

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: 张哈希 <zh...@vip.sina.com>
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