From 48566233a510bd8f3214ca875e1fe548ff3c01e4 Mon Sep 17 00:00:00 2001 From: yuluo-yx Date: Sat, 8 Aug 2026 15:12:03 +0800 Subject: [PATCH] [ISSUE #10852] fix(broker): sort revive offsets without overflow --- .../broker/processor/PopReviveService.java | 2 +- .../broker/processor/PopReviveServiceTest.java | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/broker/src/main/java/org/apache/rocketmq/broker/processor/PopReviveService.java b/broker/src/main/java/org/apache/rocketmq/broker/processor/PopReviveService.java index 07f16e98965..16669f41716 100644 --- a/broker/src/main/java/org/apache/rocketmq/broker/processor/PopReviveService.java +++ b/broker/src/main/java/org/apache/rocketmq/broker/processor/PopReviveService.java @@ -725,7 +725,7 @@ ArrayList genSortList() { return sortList; } sortList = new ArrayList<>(map.values()); - sortList.sort((o1, o2) -> (int) (o1.getReviveOffset() - o2.getReviveOffset())); + sortList.sort((o1, o2) -> Long.compare(o1.getReviveOffset(), o2.getReviveOffset())); return sortList; } } diff --git a/broker/src/test/java/org/apache/rocketmq/broker/processor/PopReviveServiceTest.java b/broker/src/test/java/org/apache/rocketmq/broker/processor/PopReviveServiceTest.java index fa7e9982e1f..5349936679e 100644 --- a/broker/src/test/java/org/apache/rocketmq/broker/processor/PopReviveServiceTest.java +++ b/broker/src/test/java/org/apache/rocketmq/broker/processor/PopReviveServiceTest.java @@ -86,6 +86,20 @@ public class PopReviveServiceTest { private static final SocketAddress STORE_HOST = NetworkUtil.string2SocketAddress("127.0.0.1:8080"); private static final Long INVISIBLE_TIME = 1000L; + @Test + public void testConsumeReviveObjSortsLargeOffsetsWithoutOverflow() { + PopCheckPoint earliest = buildPopCheckPoint(0, 0, 0); + PopCheckPoint latest = buildPopCheckPoint(1, 0, Long.MAX_VALUE); + PopReviveService.ConsumeReviveObj consumeReviveObj = new PopReviveService.ConsumeReviveObj(); + consumeReviveObj.map.put("latest", latest); + consumeReviveObj.map.put("earliest", earliest); + + List result = consumeReviveObj.genSortList(); + + assertEquals(earliest, result.get(0)); + assertEquals(latest, result.get(1)); + } + @Mock private MessageStore messageStore; @Mock