From db547d60dfc8f129bfddedd4b36b054dde51a6d4 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 4 Aug 2022 18:24:17 +0800 Subject: [PATCH 1/4] callback fix --- internal/rpc/group/group.go | 2 +- pkg/common/db/rocks_cache/rocks_cache.go | 64 +++++++++++------------- 2 files changed, 31 insertions(+), 35 deletions(-) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 640b7eb07..a86398ee1 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -721,7 +721,7 @@ func (s *groupServer) GetGroupMembersInfo(ctx context.Context, req *pbGroup.GetG resp.MemberList = []*open_im_sdk.GroupMemberFullInfo{} for _, userID := range req.MemberList { - groupMember, err := rocksCache.GetGroupMemberInfoFromCache(req.GroupID, userID, "") + groupMember, err := rocksCache.GetGroupMemberInfoFromCache(req.GroupID, userID) if err != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), req.GroupID, userID, err.Error()) continue diff --git a/pkg/common/db/rocks_cache/rocks_cache.go b/pkg/common/db/rocks_cache/rocks_cache.go index 6f8cfe562..0227869a3 100644 --- a/pkg/common/db/rocks_cache/rocks_cache.go +++ b/pkg/common/db/rocks_cache/rocks_cache.go @@ -186,7 +186,7 @@ func DelUserInfoFromCache(userID string) error { return db.DB.Rc.TagAsDeleted(userInfoCache + userID) } -func GetGroupMemberInfoFromCache(groupID, userID, fullKey string) (*db.GroupMember, error) { +func GetGroupMemberInfoFromCache(groupID, userID string) (*db.GroupMember, error) { getGroupMemberInfo := func() (string, error) { groupMemberInfo, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(groupID, userID) if err != nil { @@ -195,10 +195,7 @@ func GetGroupMemberInfoFromCache(groupID, userID, fullKey string) (*db.GroupMemb bytes, err := json.Marshal(groupMemberInfo) return string(bytes), utils.Wrap(err, "") } - if fullKey == "" { - fullKey = groupMemberInfoCache + groupID + "-" + userID - } - groupMemberInfoStr, err := db.DB.Rc.Fetch(fullKey, time.Second*30*60, getGroupMemberInfo) + groupMemberInfoStr, err := db.DB.Rc.Fetch(groupMemberInfoCache+groupID+"-"+userID, time.Second*30*60, getGroupMemberInfo) if err != nil { return nil, utils.Wrap(err, "") } @@ -212,38 +209,37 @@ func DelGroupMemberInfoFromCache(groupID, userID string) error { } func GetGroupMembersInfoFromCache(count, offset int32, groupID string) ([]*db.GroupMember, error) { - var cursor uint64 - var err error - var keys, currentKeys []string - key := groupMemberInfoCache + groupID + "-" - if count != 0 { - keys, cursor, err = db.DB.RDB.Scan(context.Background(), uint64(offset), key, int64(count)).Result() - if err != nil { - return nil, err - } - keys = append(keys, currentKeys...) - } else { - for { - var currentKeys []string - currentKeys, cursor, err = db.DB.RDB.Scan(context.Background(), cursor, key, int64(count)).Result() - if err != nil { - return nil, err - } - keys = append(keys, currentKeys...) - if cursor == 0 { - break - } - } + groupMemberIDList, err := GetGroupMemberIDListFromCache(groupID) + if err != nil { + return nil, err + } + if count < 0 || offset < 0 { + return nil, nil } - var groupMemberList []*db.GroupMember - for _, key := range keys { - v, err := GetGroupMemberInfoFromCache("", "", key) - if err != nil { - log.NewError("", utils.GetSelfFuncName(), key, err.Error()) - continue + if count != 0 { + l := int32(len(groupMemberIDList)) + var start, stop int32 + start = offset + stop = offset + count + if start > stop { + return nil, nil } - groupMemberList = append(groupMemberList, v) + if start >= l { + return nil, nil + } + if stop >= l { + stop = l + } + groupMemberIDList = groupMemberIDList[start:stop] + } + log.NewDebug("", utils.GetSelfFuncName(), "ID list: ", groupMemberIDList) + for _, userID := range groupMemberIDList { + groupMembers, err := GetGroupMemberInfoFromCache(groupID, userID) + if err != nil { + log.NewError("", utils.GetSelfFuncName(), err.Error(), groupID, userID) + } + groupMemberList = append(groupMemberList, groupMembers) } return groupMemberList, nil } From 576348b1f26582f300f7e158508fcf3699d6d1f7 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 4 Aug 2022 18:55:38 +0800 Subject: [PATCH 2/4] callback fix --- pkg/common/db/rocks_cache/rocks_cache.go | 29 +++++++++++++++--------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/pkg/common/db/rocks_cache/rocks_cache.go b/pkg/common/db/rocks_cache/rocks_cache.go index 0227869a3..9d91aad66 100644 --- a/pkg/common/db/rocks_cache/rocks_cache.go +++ b/pkg/common/db/rocks_cache/rocks_cache.go @@ -217,23 +217,30 @@ func GetGroupMembersInfoFromCache(count, offset int32, groupID string) ([]*db.Gr return nil, nil } var groupMemberList []*db.GroupMember + var start, stop int32 + start = offset + stop = offset + count + l := int32(len(groupMemberIDList)) + if start > stop { + return nil, nil + } + if start >= l { + return nil, nil + } if count != 0 { - l := int32(len(groupMemberIDList)) - var start, stop int32 - start = offset - stop = offset + count - if start > stop { - return nil, nil - } - if start >= l { - return nil, nil - } if stop >= l { stop = l } groupMemberIDList = groupMemberIDList[start:stop] + } else { + if l < 1000 { + stop = l + } else { + stop = 1000 + } + groupMemberIDList = groupMemberIDList[start:stop] } - log.NewDebug("", utils.GetSelfFuncName(), "ID list: ", groupMemberIDList) + //log.NewDebug("", utils.GetSelfFuncName(), "ID list: ", groupMemberIDList) for _, userID := range groupMemberIDList { groupMembers, err := GetGroupMemberInfoFromCache(groupID, userID) if err != nil { From 4e69ff196a7fa6bfd0e08d3cebce9b9f36a9578c Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 4 Aug 2022 19:08:08 +0800 Subject: [PATCH 3/4] cache get group --- internal/rpc/group/group.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index a86398ee1..8e279d82b 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -510,7 +510,7 @@ func (s *groupServer) GetGroupAllMember(ctx context.Context, req *pbGroup.GetGro resp.MemberList = append(resp.MemberList, &node) } } - log.NewInfo(req.OperationID, "GetGroupAllMember rpc return ", resp.String()) + log.NewInfo(req.OperationID, "GetGroupAllMember rpc return ", len(resp.MemberList)) return &resp, nil } From 91a767b4fb72d2c31e528b4bd52d8327b12c85bc Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 4 Aug 2022 19:18:31 +0800 Subject: [PATCH 4/4] callback fix --- internal/api/group/group.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/api/group/group.go b/internal/api/group/group.go index ac4e43b41..925b33c26 100644 --- a/internal/api/group/group.go +++ b/internal/api/group/group.go @@ -239,7 +239,7 @@ func GetGroupAllMemberList(c *gin.Context) { memberListResp := api.GetGroupAllMemberResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}, MemberList: RpcResp.MemberList} memberListResp.Data = jsonData.JsonDataList(memberListResp.MemberList) - log.NewInfo(req.OperationID, "GetGroupAllMember api return ", memberListResp) + log.NewInfo(req.OperationID, "GetGroupAllMember api return ", len(memberListResp.MemberList)) c.JSON(http.StatusOK, memberListResp) }