diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 8904e8edf..af80de0ff 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -634,7 +634,7 @@ func (s *groupServer) JoinGroup(ctx context.Context, req *pbGroup.JoinGroupReq) _, err = s.GroupDatabase.TakeGroupMember(ctx, req.GroupID, req.InviterUserID) if err == nil { return nil, errs.ErrArgs.Wrap("already in group") - } else if !s.IsNotFound(err) { + } else if !s.IsNotFound(err) && utils.Unwrap(err) != errs.ErrRecordNotFound { return nil, err } resp = &pbGroup.JoinGroupResp{} diff --git a/pkg/common/db/cache/rockscache.go b/pkg/common/db/cache/rockscache.go index 2a7b0fe7d..f498e5d64 100644 --- a/pkg/common/db/cache/rockscache.go +++ b/pkg/common/db/cache/rockscache.go @@ -7,6 +7,7 @@ import ( "time" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" + "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" "github.com/dtm-labs/rockscache" ) @@ -85,6 +86,9 @@ func getCache[T any](ctx context.Context, rcClient *rockscache.Client, key strin if write { return t, nil } + if v == "" { + return t, errs.ErrRecordNotFound + } err = json.Unmarshal([]byte(v), &t) if err != nil { log.ZError(ctx, "cache json.Unmarshal failed", err, "key", key, "value", v, "expire", expire) diff --git a/pkg/common/db/controller/group.go b/pkg/common/db/controller/group.go index 6aced79dc..519c863f3 100644 --- a/pkg/common/db/controller/group.go +++ b/pkg/common/db/controller/group.go @@ -127,7 +127,7 @@ func (g *groupDatabase) CreateGroup(ctx context.Context, groups []*relationTb.Gr m[groupMember.GroupID] = struct{}{} cache = cache.DelGroupMemberIDs(groupMember.GroupID).DelGroupMembersHash(groupMember.GroupID).DelGroupsMemberNum(groupMember.GroupID) } - cache.DelJoinedGroupID(groupMember.UserID) + cache.DelJoinedGroupID(groupMember.UserID).DelGroupMembersInfo(groupMember.GroupID, groupMember.UserID) } return cache.ExecDel(ctx) })