From 06bcfea16e5a6c78eddcd7f241a7edc3b1d02004 Mon Sep 17 00:00:00 2001 From: imhao183 Date: Thu, 22 Oct 2020 08:09:48 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8B=89=E5=8F=96=E5=8E=86=E5=8F=B2=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E6=97=B6=EF=BC=8C=E5=A4=84=E7=90=86=E4=B8=AD=E9=97=B4?= =?UTF-8?q?=E5=87=A0=E4=B8=AA=E6=9C=88=E6=97=B6=E9=97=B4=E6=B2=A1=E6=9C=89?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E7=9A=84=E6=83=85=E5=86=B5=EF=BC=8C=E6=9C=80?= =?UTF-8?q?=E9=95=BF=E9=97=B4=E9=9A=94=E6=97=B624=E4=B8=AA=E6=9C=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../moquette/persistence/DatabaseStore.java | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/broker/src/main/java/io/moquette/persistence/DatabaseStore.java b/broker/src/main/java/io/moquette/persistence/DatabaseStore.java index 7a7c60e1..24f2934e 100644 --- a/broker/src/main/java/io/moquette/persistence/DatabaseStore.java +++ b/broker/src/main/java/io/moquette/persistence/DatabaseStore.java @@ -755,14 +755,22 @@ public class DatabaseStore { long[] before = new long[1]; before[0] = beforeUid; boolean hasMore = loadRemoteMessagesFromTable(user, conversation, before, count, MessageShardingUtil.getMessageTable(beforeUid), messages); - if (messages.size() < count) { - if (hasMore) { - loadRemoteMessagesFromTable(user, conversation, before, count - messages.size(), MessageShardingUtil.getMessageTable(beforeUid), messages); - } else { - String nexTable = MessageShardingUtil.getPreviousMessageTable(before[0]); - if (!StringUtil.isNullOrEmpty(nexTable)) { - loadRemoteMessagesFromTable(user, conversation, before, count - messages.size(), nexTable, messages); - } + while (messages.size() < count && hasMore) { + hasMore = loadRemoteMessagesFromTable(user, conversation, before, count - messages.size(), MessageShardingUtil.getMessageTable(beforeUid), messages); + } + + int month = 0; + while (messages.size() < count && !DBUtil.IsEmbedDB && month++ < 24) { + String nexTable = MessageShardingUtil.getPreviousMessageTable(before[0]); + + int size = messages.size(); + hasMore = true; + while (size == messages.size() && hasMore) { + hasMore = loadRemoteMessagesFromTable(user, conversation, before, count - messages.size(), nexTable, messages); + } + + if (size < messages.size()) { + break; } }