]> granicus.if.org Git - ejabberd/commitdiff
mod_mam: Sort messages returned by Mnesia
authorHolger Weiss <holger@zedat.fu-berlin.de>
Thu, 14 Jan 2016 01:27:02 +0000 (02:27 +0100)
committerHolger Weiss <holger@zedat.fu-berlin.de>
Thu, 14 Jan 2016 01:27:02 +0000 (02:27 +0100)
Sort the messages retrieved from an Mnesia archive before selecting the
subset limited by the <max/> value.  This makes sure the desired subset
of messages is sent to the client.

src/mod_mam.erl

index 6bc8c0c01852fa4da324bd6ddd17626fbc9bee0d..c20a941df713913075e1f4961b07770e8a098494 100644 (file)
@@ -898,7 +898,8 @@ select(_LServer, #jid{luser = LUser, lserver = LServer} = JidRequestor,
        Start, End, With, RSM, MsgType, mnesia) ->
     MS = make_matchspec(LUser, LServer, Start, End, With),
     Msgs = mnesia:dirty_select(archive_msg, MS),
-    {FilteredMsgs, IsComplete} = filter_by_rsm(Msgs, RSM),
+    SortedMsgs = lists:keysort(#archive_msg.timestamp, Msgs),
+    {FilteredMsgs, IsComplete} = filter_by_rsm(SortedMsgs, RSM),
     Count = length(Msgs),
     {lists:map(
        fun(Msg) ->