Skip to content

Commit 0b60048

Browse files
[ISSUE apache#2421] Fix SelectMessageQueueByHash in case hashcode is Integer.MIN
1 parent 872f37d commit 0b60048

File tree

2 files changed

+9
-3
lines changed

2 files changed

+9
-3
lines changed

client/src/main/java/org/apache/rocketmq/client/producer/selector/SelectMessageQueueByHash.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,10 @@ public class SelectMessageQueueByHash implements MessageQueueSelector {
2525

2626
@Override
2727
public MessageQueue select(List<MessageQueue> mqs, Message msg, Object arg) {
28-
int value = arg.hashCode();
28+
int value = arg.hashCode() % mqs.size();
2929
if (value < 0) {
3030
value = Math.abs(value);
3131
}
32-
33-
value = value % mqs.size();
3432
return mqs.get(value);
3533
}
3634
}

client/src/test/java/org/apache/rocketmq/client/producer/selector/SelectMessageQueueByHashTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,14 @@ public void testSelect() throws Exception {
4444
String anotherOrderId = "234";
4545
MessageQueue selected = selector.select(messageQueues, message, orderId);
4646
assertThat(selector.select(messageQueues, message, anotherOrderId)).isNotEqualTo(selected);
47+
48+
//No exception is thrown while order Id hashcode is Integer.MIN
49+
anotherOrderId = "polygenelubricants";
50+
selector.select(messageQueues, message, anotherOrderId);
51+
anotherOrderId = "GydZG_";
52+
selector.select(messageQueues, message, anotherOrderId);
53+
anotherOrderId = "DESIGNING WORKHOUSES";
54+
selector.select(messageQueues, message, anotherOrderId);
4755
}
4856

4957
}

0 commit comments

Comments
 (0)