From 68a735ba998ffe345368e3480fe37b962402ca9b Mon Sep 17 00:00:00 2001 From: icey-yu <119291641+icey-yu@users.noreply.github.com> Date: Tue, 19 Aug 2025 16:23:27 +0800 Subject: [PATCH 1/3] feat: enable redis aof-use-rdb-preamble && disable auto rdb (#3529) --- docker-compose.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 233348619..8eac64c9f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -63,7 +63,12 @@ services: restart: always sysctls: net.core.somaxconn: 1024 - command: redis-server /usr/local/redis/config/redis.conf --requirepass openIM123 --appendonly yes + command: > + redis-server + --requirepass openIM123 + --appendonly yes + --aof-use-rdb-preamble yes + --save "" networks: - openim From 929c6704f3e68164666b336386fbbdfcefd77ef9 Mon Sep 17 00:00:00 2001 From: Monet Lee Date: Tue, 19 Aug 2025 17:20:58 +0800 Subject: [PATCH 2/3] fix: solve incorrect batchGetIncrGroupMember when group dismissed. (#3526) --- internal/rpc/group/sync.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/internal/rpc/group/sync.go b/internal/rpc/group/sync.go index baee2f2d4..b864fbf53 100644 --- a/internal/rpc/group/sync.go +++ b/internal/rpc/group/sync.go @@ -2,6 +2,7 @@ package group import ( "context" + "errors" "github.com/openimsdk/open-im-server/v3/internal/rpc/incrversion" "github.com/openimsdk/open-im-server/v3/pkg/authverify" @@ -11,6 +12,7 @@ import ( "github.com/openimsdk/protocol/constant" pbgroup "github.com/openimsdk/protocol/group" "github.com/openimsdk/protocol/sdkws" + "github.com/openimsdk/tools/log" ) const versionSyncLimit = 500 @@ -170,19 +172,26 @@ func (g *groupServer) GetIncrementalJoinGroup(ctx context.Context, req *pbgroup. func (g *groupServer) BatchGetIncrementalGroupMember(ctx context.Context, req *pbgroup.BatchGetIncrementalGroupMemberReq) (*pbgroup.BatchGetIncrementalGroupMemberResp, error) { var num int resp := make(map[string]*pbgroup.GetIncrementalGroupMemberResp) + for _, memberReq := range req.ReqList { if _, ok := resp[memberReq.GroupID]; ok { continue } memberResp, err := g.GetIncrementalGroupMember(ctx, memberReq) if err != nil { + if errors.Is(err, servererrs.ErrDismissedAlready) { + log.ZWarn(ctx, "Failed to get incremental group member", err, "groupID", memberReq.GroupID, "request", memberReq) + continue + } return nil, err } + resp[memberReq.GroupID] = memberResp num += len(memberResp.Insert) + len(memberResp.Update) + len(memberResp.Delete) if num >= versionSyncLimit { break } } + return &pbgroup.BatchGetIncrementalGroupMemberResp{RespList: resp}, nil } From 349a8cd9afaace99a527b469fc4aaaa095ea570d Mon Sep 17 00:00:00 2001 From: Monet Lee Date: Tue, 19 Aug 2025 17:22:09 +0800 Subject: [PATCH 3/3] fix: nil pointer when chatlog not found. (#3531) --- internal/rpc/conversation/conversation.go | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/internal/rpc/conversation/conversation.go b/internal/rpc/conversation/conversation.go index a2b72ddfb..c9bfd3c56 100644 --- a/internal/rpc/conversation/conversation.go +++ b/internal/rpc/conversation/conversation.go @@ -132,6 +132,7 @@ func (c *conversationServer) GetConversation(ctx context.Context, req *pbconvers return resp, nil } +// Deprecated: Use `GetConversations` instead. func (c *conversationServer) GetSortedConversationList(ctx context.Context, req *pbconversation.GetSortedConversationListReq) (resp *pbconversation.GetSortedConversationListResp, err error) { if err := authverify.CheckAccess(ctx, req.UserID); err != nil { return nil, err @@ -183,9 +184,21 @@ func (c *conversationServer) GetSortedConversationList(ctx context.Context, req conversation_isPinTime := make(map[int64]string) conversation_notPinTime := make(map[int64]string) + for _, v := range conversations { conversationID := v.ConversationID - time := conversationMsg[conversationID].MsgInfo.LatestMsgRecvTime + var time int64 + if _, ok := conversationMsg[conversationID]; ok { + time = conversationMsg[conversationID].MsgInfo.LatestMsgRecvTime + } else { + conversationMsg[conversationID] = &pbconversation.ConversationElem{ + ConversationID: conversationID, + IsPinned: v.IsPinned, + MsgInfo: nil, + } + time = v.CreateTime.UnixMilli() + } + conversationMsg[conversationID].RecvMsgOpt = v.RecvMsgOpt if v.IsPinned { conversationMsg[conversationID].IsPinned = v.IsPinned