fix: reserve seq for p2p system messages

This commit is contained in:
richjohnrambo
2026-09-24 10:03:27 +08:00
parent a3df9d269c
commit 9893452817
2 changed files with 22 additions and 12 deletions
+7 -1
View File
@@ -10726,11 +10726,17 @@ func publishIMConversationSystemNotice(tenantID types.TenantID, topic, msgType,
}, },
Content: content, Content: content,
} }
_, err = store.Messages.Save(tenantID, msg, nil, false) saved, err := saveMessageMaybeKafka(context.Background(), tenantID, msg, nil, false)
if err != nil && !errors.Is(err, types.ErrDuplicate) { if err != nil && !errors.Is(err, types.ErrDuplicate) {
logs.Warn.Printf("im system message: failed to save %s for topic %s: %v", template, topic, err) logs.Warn.Printf("im system message: failed to save %s for topic %s: %v", template, topic, err)
return return
} }
if saved != nil && saved.SeqId > 0 {
msg.SeqId = saved.SeqId
}
if saved != nil && saved.Duplicate {
return
}
broadcastIMConversationSystemMessage(tenantID, msg, now) broadcastIMConversationSystemMessage(tenantID, msg, now)
sendPushForStoredGroupMessage(tenantID, msg) sendPushForStoredGroupMessage(tenantID, msg)
} }
+15 -11
View File
@@ -3397,18 +3397,20 @@ func (messagesMapper) PreparePersist(tenantID types.TenantID, msg *types.Message
msg.InitTimes() msg.InitTimes()
fromUid := types.ParseUid(msg.From) fromUid := types.ParseUid(msg.From)
isGroupMessage := types.GetTopicCat(msg.Topic) == types.TopicCatGrp isGroupMessage := types.GetTopicCat(msg.Topic) == types.TopicCatGrp
if isGroupMessage && groupMsgRuntime != nil { if groupMsgRuntime != nil {
if clientMsgID != "" { if clientMsgID != "" {
claim, claimed, err := groupMsgRuntime.Claim(tenantID, msg.Topic, fromUid, clientMsgID) if isGroupMessage {
if err != nil { claim, claimed, err := groupMsgRuntime.Claim(tenantID, msg.Topic, fromUid, clientMsgID)
return nil, err if err != nil {
} return nil, err
if !claimed { }
if claim != nil && claim.Status == "done" && claim.Seq > 0 { if !claimed {
msg.SeqId = claim.Seq if claim != nil && claim.Status == "done" && claim.Seq > 0 {
return &types.MessageSaveResult{SeqId: claim.Seq, Duplicate: true}, nil msg.SeqId = claim.Seq
return &types.MessageSaveResult{SeqId: claim.Seq, Duplicate: true}, nil
}
return nil, types.ErrDuplicate
} }
return nil, types.ErrDuplicate
} }
} }
seq, shardMonth, err := nextMessageSeqWithFloor(tenantID, msg.Topic, msg.SeqId-1, msg.CreatedAt.UTC().Format("200601")) seq, shardMonth, err := nextMessageSeqWithFloor(tenantID, msg.Topic, msg.SeqId-1, msg.CreatedAt.UTC().Format("200601"))
@@ -3419,7 +3421,9 @@ func (messagesMapper) PreparePersist(tenantID types.TenantID, msg *types.Message
return nil, err return nil, err
} }
msg.SeqId = seq msg.SeqId = seq
msg.ShardMonth = shardMonth if isGroupMessage {
msg.ShardMonth = shardMonth
}
} }
if isGroupMessage && msg.ShardMonth == "" { if isGroupMessage && msg.ShardMonth == "" {
msg.ShardMonth = msg.CreatedAt.UTC().Format("200601") msg.ShardMonth = msg.CreatedAt.UTC().Format("200601")