fix: reduce persistence lag and retry audit deadlocks

This commit is contained in:
richjohnrambo
2026-09-27 16:33:05 +08:00
parent 704c65a7a4
commit d96f661f30
8 changed files with 185 additions and 18 deletions
+42
View File
@@ -0,0 +1,42 @@
package store
import (
"testing"
"github.com/tinode/chat/server/store/types"
)
func TestAggregatePreparedMessageBatchUpdatesKeepsLatestSeq(t *testing.T) {
user1 := types.Uid(1)
user2 := types.Uid(2)
items := []PreparedMessageBatchItem{
{Message: &types.Message{Topic: "p2p-b", From: user1.String(), SeqId: 3}, ReadBySender: true},
{Message: &types.Message{Topic: "p2p-a", From: user1.String(), SeqId: 2}, ReadBySender: true},
{Message: &types.Message{Topic: "p2p-a", From: user2.String(), SeqId: 5}, ReadBySender: true},
{Message: &types.Message{Topic: "p2p-a", From: user1.String(), SeqId: 6}, ReadBySender: true},
{Message: &types.Message{Topic: "p2p-b", From: user1.String(), SeqId: 7}, ReadBySender: false},
{},
}
topics, reads := aggregatePreparedMessageBatchUpdates(items)
if len(topics) != 2 || topics[0].topic != "p2p-a" || topics[0].message.SeqId != 6 ||
topics[1].topic != "p2p-b" || topics[1].message.SeqId != 7 {
t.Fatalf("unexpected topic updates: %+v", topics)
}
if len(reads) != 3 {
t.Fatalf("read updates=%d want=3: %+v", len(reads), reads)
}
got := make(map[string]int64, len(reads))
for _, update := range reads {
got[update.topic+":"+update.from.String()] = update.message.SeqId
}
for key, want := range map[string]int64{
"p2p-a:" + user1.String(): 6,
"p2p-a:" + user2.String(): 5,
"p2p-b:" + user1.String(): 3,
} {
if got[key] != want {
t.Fatalf("read update %s=%d want=%d; all=%v", key, got[key], want, got)
}
}
}