fix: improve conversation and report stability
This commit is contained in:
@@ -3136,6 +3136,9 @@ func (messagesMapper) Save(tenantID types.TenantID, msg *types.Message, attachme
|
||||
err = tenantAdp.TenantGroupMessageSave(tenantID, msg)
|
||||
} else {
|
||||
err = tenantAdp.TenantMessageSave(tenantID, msg)
|
||||
if err == types.ErrDuplicate && clientMsgID == "" {
|
||||
err = retryTenantMessageSaveAfterSeqConflict(tenantAdp, tenantID, msg)
|
||||
}
|
||||
}
|
||||
if err != nil {
|
||||
if isGroupMessage && err == types.ErrDuplicate && clientMsgID != "" {
|
||||
@@ -3217,6 +3220,21 @@ func (messagesMapper) Save(tenantID types.TenantID, msg *types.Message, attachme
|
||||
return &types.MessageSaveResult{SeqId: msg.SeqId, MarkedReadBySender: markedReadBySender}, nil
|
||||
}
|
||||
|
||||
func retryTenantMessageSaveAfterSeqConflict(tenantAdp adapter.TenantBusinessAdapter, tenantID types.TenantID, msg *types.Message) error {
|
||||
latest, err := tenantAdp.TenantMessageGetAll(tenantID, msg.Topic, types.ZeroUid, &types.QueryOpt{Before: 1 << 62, Limit: 1})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if len(latest) == 0 || latest[0].SeqId < msg.SeqId {
|
||||
return types.ErrDuplicate
|
||||
}
|
||||
msg.SeqId = latest[0].SeqId + 1
|
||||
if err = tenantAdp.TenantTopicUpdateOnMessage(tenantID, msg.Topic, msg); err != nil {
|
||||
return err
|
||||
}
|
||||
return tenantAdp.TenantMessageSave(tenantID, msg)
|
||||
}
|
||||
|
||||
func normalizeClientMsgID(head types.KVMap) (string, error) {
|
||||
if head == nil {
|
||||
return "", nil
|
||||
|
||||
Reference in New Issue
Block a user