From 8e894e49b33c54ffeacfa98c7aceffed93326911 Mon Sep 17 00:00:00 2001 From: imhao183 Date: Fri, 23 Oct 2020 11:24:44 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E6=8B=89=E5=8F=96=E5=8E=86?= =?UTF-8?q?=E5=8F=B2=E6=B6=88=E6=81=AF=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/moquette/persistence/DatabaseStore.java | 2 +- .../win/liyufan/im/MessageShardingUtil.java | 18 ++++++++++++++---- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/broker/src/main/java/io/moquette/persistence/DatabaseStore.java b/broker/src/main/java/io/moquette/persistence/DatabaseStore.java index 24f2934e..b9174314 100644 --- a/broker/src/main/java/io/moquette/persistence/DatabaseStore.java +++ b/broker/src/main/java/io/moquette/persistence/DatabaseStore.java @@ -761,7 +761,7 @@ public class DatabaseStore { int month = 0; while (messages.size() < count && !DBUtil.IsEmbedDB && month++ < 24) { - String nexTable = MessageShardingUtil.getPreviousMessageTable(before[0]); + String nexTable = MessageShardingUtil.getMessageTable(beforeUid, -month); int size = messages.size(); hasMore = true; diff --git a/broker/src/main/java/win/liyufan/im/MessageShardingUtil.java b/broker/src/main/java/win/liyufan/im/MessageShardingUtil.java index 6cd733aa..1b8f04a3 100644 --- a/broker/src/main/java/win/liyufan/im/MessageShardingUtil.java +++ b/broker/src/main/java/win/liyufan/im/MessageShardingUtil.java @@ -84,7 +84,7 @@ public class MessageShardingUtil { } Calendar calendar = Calendar.getInstance(); - if (mid != Long.MAX_VALUE) { + if (mid != Long.MAX_VALUE && mid != 0) { mid >>= (nodeIdWidth + rotateIdWidth); Date date = new Date(mid + T201801010000); calendar.setTime(date); @@ -99,6 +99,10 @@ public class MessageShardingUtil { } public static String getPreviousMessageTable(long mid) { + return getMessageTable(mid, -1); + } + + public static String getMessageTable(long mid, int offset) { if (DBUtil.IsEmbedDB) { return null; } @@ -110,11 +114,17 @@ public class MessageShardingUtil { int month = calendar.get(Calendar.MONTH); int year = calendar.get(Calendar.YEAR); year %= 3; - month = month - 1; - if (month == -1) { - month = 11; + + month = month + offset; + while (month < 0) { + month += 12; year = (year + 3 - 1)%3; } + while (month >= 12) { + month -= 12; + year = (year + 1)%3; + } + return "t_messages_" + (year * 12 + month); } }