From 9f19fd46e7828ce384cc496c0ac80c3e7fde4808 Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Fri, 24 Mar 2023 17:43:52 +0800 Subject: [PATCH 01/10] ctx --- pkg/apiresp/resp.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkg/apiresp/resp.go b/pkg/apiresp/resp.go index b724e1703..cd215a984 100644 --- a/pkg/apiresp/resp.go +++ b/pkg/apiresp/resp.go @@ -14,6 +14,9 @@ type ApiResponse struct { func isAllFieldsPrivate(v any) bool { typeOf := reflect.TypeOf(v) + if typeOf == nil { + return false + } if typeOf.Kind() == reflect.Ptr { typeOf = typeOf.Elem() } From 2fa02983fb1871ba34a2cdd638a91709165f9164 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 24 Mar 2023 17:59:20 +0800 Subject: [PATCH 02/10] cache --- pkg/common/db/cache/rockscache.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pkg/common/db/cache/rockscache.go b/pkg/common/db/cache/rockscache.go index 7c6a43bed..fc7aae02b 100644 --- a/pkg/common/db/cache/rockscache.go +++ b/pkg/common/db/cache/rockscache.go @@ -4,8 +4,10 @@ import ( "context" "encoding/json" "errors" + "time" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" "github.com/dtm-labs/rockscache" ) @@ -33,6 +35,7 @@ type metaCacheRedis struct { func (m *metaCacheRedis) ExecDel(ctx context.Context) error { if len(m.keys) > 0 { + log.ZDebug(ctx, "DelKey", "keys", m.keys) return m.rcClient.TagAsDeletedBatch2(ctx, m.keys) } return nil @@ -86,10 +89,9 @@ func getCache[T any](ctx context.Context, rcClient *rockscache.Client, key strin } func batchGetCache[T any](ctx context.Context, rcClient *rockscache.Client, keys []string, expire time.Duration, keyIndexFn func(t T, keys []string) (int, error), fn func(ctx context.Context) ([]T, error)) ([]T, error) { - var tArrays []T batchMap, err := rcClient.FetchBatch2(ctx, keys, expire, func(idxs []int) (m map[int]string, err error) { values := make(map[int]string) - tArrays, err = fn(ctx) + tArrays, err := fn(ctx) if err != nil { return nil, err } @@ -109,6 +111,7 @@ func batchGetCache[T any](ctx context.Context, rcClient *rockscache.Client, keys if err != nil { return nil, err } + var tArrays []T for _, v := range batchMap { if v != "" { var t T From 81d6ca8b3164974bc646f9ae0677ef842100eb44 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 24 Mar 2023 18:09:54 +0800 Subject: [PATCH 03/10] conversation --- internal/rpc/conversation/conversaion.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/rpc/conversation/conversaion.go b/internal/rpc/conversation/conversaion.go index e2177c895..67b0fba83 100644 --- a/internal/rpc/conversation/conversaion.go +++ b/internal/rpc/conversation/conversaion.go @@ -38,6 +38,7 @@ func Start(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) e } conversationDB := relation.NewConversationGorm(db) pbConversation.RegisterConversationServer(server, &conversationServer{ + notify: notification.NewCheck(client), groupChecker: check.NewGroupChecker(client), ConversationDatabase: controller.NewConversationDatabase(conversationDB, cache.NewConversationRedis(rdb, cache.GetDefaultOpt(), conversationDB), tx.NewGorm(db)), }) From 9158b627897c6d06a9db7c750aceb13b0de22839 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 24 Mar 2023 18:27:17 +0800 Subject: [PATCH 04/10] cache fix bug --- pkg/common/db/cache/black.go | 1 + pkg/common/db/cache/conversation.go | 12 +----------- 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/pkg/common/db/cache/black.go b/pkg/common/db/cache/black.go index ae4e9d680..e4a8b1f4f 100644 --- a/pkg/common/db/cache/black.go +++ b/pkg/common/db/cache/black.go @@ -46,6 +46,7 @@ func (b *BlackCacheRedis) NewCache() BlackCache { expireTime: b.expireTime, rcClient: b.rcClient, blackDB: b.blackDB, + metaCache: NewMetaCacheRedis(b.rcClient), } } diff --git a/pkg/common/db/cache/conversation.go b/pkg/common/db/cache/conversation.go index 073f6ff55..add27b3c3 100644 --- a/pkg/common/db/cache/conversation.go +++ b/pkg/common/db/cache/conversation.go @@ -68,7 +68,7 @@ func NewNewConversationRedis(rdb redis.UniversalClient, conversationDB *relation } func (c *ConversationRedisCache) NewCache() ConversationCache { - return &ConversationRedisCache{rcClient: c.rcClient, metaCache: c.metaCache, conversationDB: c.conversationDB, expireTime: c.expireTime} + return &ConversationRedisCache{rcClient: c.rcClient, metaCache: NewMetaCacheRedis(c.rcClient), conversationDB: c.conversationDB, expireTime: c.expireTime} } func (c *ConversationRedisCache) getConversationKey(ownerUserID, conversationID string) string { @@ -157,16 +157,6 @@ func (c *ConversationRedisCache) GetUserAllConversations(ctx context.Context, ow }) } -func (c *ConversationRedisCache) DelUserConversations(ctx context.Context, ownerUserID string, conversationIDs []string) ConversationCache { - var keys []string - for _, conversationID := range conversationIDs { - keys = append(keys, c.getConversationKey(ownerUserID, conversationID)) - } - cache := c.NewCache() - cache.AddKeys(keys...) - return cache -} - func (c *ConversationRedisCache) GetUserRecvMsgOpt(ctx context.Context, ownerUserID, conversationID string) (opt int, err error) { return getCache(ctx, c.rcClient, c.getRecvMsgOptKey(ownerUserID, conversationID), c.expireTime, func(ctx context.Context) (opt int, err error) { return c.conversationDB.GetUserRecvMsgOpt(ctx, ownerUserID, conversationID) From 83d91c7dc99adbe6fb03aaf7be4057b5fcd3ab5a Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 24 Mar 2023 18:32:25 +0800 Subject: [PATCH 05/10] cache --- pkg/common/db/controller/conversation.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/controller/conversation.go b/pkg/common/db/controller/conversation.go index 0a3b90f84..9e764e02d 100644 --- a/pkg/common/db/controller/conversation.go +++ b/pkg/common/db/controller/conversation.go @@ -77,7 +77,7 @@ func (c *ConversationDataBase) SetUsersConversationFiledTx(ctx context.Context, cache = cache.DelConversationIDs(NotUserIDs) } // clear cache - return cache.DelUsersConversation(haveUserIDs, conversation.ConversationID).ExecDel(ctx) + return cache.DelUsersConversation(haveUserIDs, conversation.ConversationID).DelConversationIDs(NotUserIDs).ExecDel(ctx) }) } From 862fca1019c220bccfcaaf0e1c3180df899b18e0 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 24 Mar 2023 18:38:14 +0800 Subject: [PATCH 06/10] cache --- pkg/common/db/controller/conversation.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/db/controller/conversation.go b/pkg/common/db/controller/conversation.go index 9e764e02d..0a3b90f84 100644 --- a/pkg/common/db/controller/conversation.go +++ b/pkg/common/db/controller/conversation.go @@ -77,7 +77,7 @@ func (c *ConversationDataBase) SetUsersConversationFiledTx(ctx context.Context, cache = cache.DelConversationIDs(NotUserIDs) } // clear cache - return cache.DelUsersConversation(haveUserIDs, conversation.ConversationID).DelConversationIDs(NotUserIDs).ExecDel(ctx) + return cache.DelUsersConversation(haveUserIDs, conversation.ConversationID).ExecDel(ctx) }) } From fa477c2d17ac29c7bd44f96efecc8badcfd5f80f Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 24 Mar 2023 18:42:19 +0800 Subject: [PATCH 07/10] cache --- pkg/common/db/controller/conversation.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkg/common/db/controller/conversation.go b/pkg/common/db/controller/conversation.go index 0a3b90f84..e72b06850 100644 --- a/pkg/common/db/controller/conversation.go +++ b/pkg/common/db/controller/conversation.go @@ -75,8 +75,10 @@ func (c *ConversationDataBase) SetUsersConversationFiledTx(ctx context.Context, return err } cache = cache.DelConversationIDs(NotUserIDs) + log.ZDebug(ctx, "SetUsersConversationFiledTx", "cache", cache.GetPreDeleteKeys(), "addr", &cache) } // clear cache + log.ZDebug(ctx, "SetUsersConversationFiledTx", "cache", cache.GetPreDeleteKeys(), "addr", &cache) return cache.DelUsersConversation(haveUserIDs, conversation.ConversationID).ExecDel(ctx) }) } From becbba877a73d15b392791969983e2b8c720468e Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 24 Mar 2023 18:53:49 +0800 Subject: [PATCH 08/10] cache --- pkg/common/db/cache/black.go | 2 +- pkg/common/db/cache/conversation.go | 2 +- pkg/common/db/cache/extend_msg_set.go | 2 +- pkg/common/db/cache/friend.go | 2 +- pkg/common/db/cache/group.go | 2 +- pkg/common/db/cache/rockscache.go | 4 ++-- pkg/common/db/cache/user.go | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/pkg/common/db/cache/black.go b/pkg/common/db/cache/black.go index e4a8b1f4f..bd4640eba 100644 --- a/pkg/common/db/cache/black.go +++ b/pkg/common/db/cache/black.go @@ -46,7 +46,7 @@ func (b *BlackCacheRedis) NewCache() BlackCache { expireTime: b.expireTime, rcClient: b.rcClient, blackDB: b.blackDB, - metaCache: NewMetaCacheRedis(b.rcClient), + metaCache: NewMetaCacheRedis(b.rcClient, b.metaCache.GetPreDeleteKeys()...), } } diff --git a/pkg/common/db/cache/conversation.go b/pkg/common/db/cache/conversation.go index add27b3c3..57b97c165 100644 --- a/pkg/common/db/cache/conversation.go +++ b/pkg/common/db/cache/conversation.go @@ -68,7 +68,7 @@ func NewNewConversationRedis(rdb redis.UniversalClient, conversationDB *relation } func (c *ConversationRedisCache) NewCache() ConversationCache { - return &ConversationRedisCache{rcClient: c.rcClient, metaCache: NewMetaCacheRedis(c.rcClient), conversationDB: c.conversationDB, expireTime: c.expireTime} + return &ConversationRedisCache{rcClient: c.rcClient, metaCache: NewMetaCacheRedis(c.rcClient, c.metaCache.GetPreDeleteKeys()...), conversationDB: c.conversationDB, expireTime: c.expireTime} } func (c *ConversationRedisCache) getConversationKey(ownerUserID, conversationID string) string { diff --git a/pkg/common/db/cache/extend_msg_set.go b/pkg/common/db/cache/extend_msg_set.go index 37ef2cf42..a4440437a 100644 --- a/pkg/common/db/cache/extend_msg_set.go +++ b/pkg/common/db/cache/extend_msg_set.go @@ -40,7 +40,7 @@ func NewExtendMsgSetCacheRedis(rdb redis.UniversalClient, extendMsgSetDB unrelat func (e *ExtendMsgSetCacheRedis) NewCache() ExtendMsgSetCache { return &ExtendMsgSetCacheRedis{ - metaCache: e.metaCache, + metaCache: NewMetaCacheRedis(e.rcClient, e.metaCache.GetPreDeleteKeys()...), expireTime: e.expireTime, extendMsgSetDB: e.extendMsgSetDB, rcClient: e.rcClient, diff --git a/pkg/common/db/cache/friend.go b/pkg/common/db/cache/friend.go index f74df8975..a7540c56e 100644 --- a/pkg/common/db/cache/friend.go +++ b/pkg/common/db/cache/friend.go @@ -48,7 +48,7 @@ func NewFriendCacheRedis(rdb redis.UniversalClient, friendDB relationTb.FriendMo } func (c *FriendCacheRedis) NewCache() FriendCache { - return &FriendCacheRedis{rcClient: c.rcClient, metaCache: c.metaCache, friendDB: c.friendDB, expireTime: c.expireTime} + return &FriendCacheRedis{rcClient: c.rcClient, metaCache: NewMetaCacheRedis(c.rcClient, c.metaCache.GetPreDeleteKeys()...), friendDB: c.friendDB, expireTime: c.expireTime} } func (f *FriendCacheRedis) getFriendIDsKey(ownerUserID string) string { diff --git a/pkg/common/db/cache/group.go b/pkg/common/db/cache/group.go index 657452f31..93954f3e1 100644 --- a/pkg/common/db/cache/group.go +++ b/pkg/common/db/cache/group.go @@ -70,7 +70,7 @@ func NewGroupCacheRedis(rdb redis.UniversalClient, groupDB relationTb.GroupModel } func (g *GroupCacheRedis) NewCache() GroupCache { - return &GroupCacheRedis{rcClient: g.rcClient, expireTime: g.expireTime, groupDB: g.groupDB, groupMemberDB: g.groupMemberDB, groupRequestDB: g.groupRequestDB, mongoDB: g.mongoDB, metaCache: g.metaCache} + return &GroupCacheRedis{rcClient: g.rcClient, expireTime: g.expireTime, groupDB: g.groupDB, groupMemberDB: g.groupMemberDB, groupRequestDB: g.groupRequestDB, mongoDB: g.mongoDB, metaCache: NewMetaCacheRedis(g.rcClient, g.metaCache.GetPreDeleteKeys()...)} } func (g *GroupCacheRedis) getGroupInfoKey(groupID string) string { diff --git a/pkg/common/db/cache/rockscache.go b/pkg/common/db/cache/rockscache.go index fc7aae02b..36c2f449c 100644 --- a/pkg/common/db/cache/rockscache.go +++ b/pkg/common/db/cache/rockscache.go @@ -24,8 +24,8 @@ type metaCache interface { GetPreDeleteKeys() []string } -func NewMetaCacheRedis(rcClient *rockscache.Client) metaCache { - return &metaCacheRedis{rcClient: rcClient} +func NewMetaCacheRedis(rcClient *rockscache.Client, keys ...string) metaCache { + return &metaCacheRedis{rcClient: rcClient, keys: keys} } type metaCacheRedis struct { diff --git a/pkg/common/db/cache/user.go b/pkg/common/db/cache/user.go index 60ed9d8c9..0679720d2 100644 --- a/pkg/common/db/cache/user.go +++ b/pkg/common/db/cache/user.go @@ -44,7 +44,7 @@ func NewUserCacheRedis(rdb redis.UniversalClient, userDB relationTb.UserModelInt func (u *UserCacheRedis) NewCache() UserCache { return &UserCacheRedis{ - metaCache: u.metaCache, + metaCache: NewMetaCacheRedis(u.rcClient, u.metaCache.GetPreDeleteKeys()...), userDB: u.userDB, expireTime: u.expireTime, rcClient: u.rcClient, From aea5525de3ff7b6ebc3e5fc2d97455d211e779f5 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 24 Mar 2023 18:59:37 +0800 Subject: [PATCH 09/10] group --- internal/rpc/group/group.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index a5c2d77d2..3e94dfa14 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -152,6 +152,7 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR groupMember.JoinSource = constant.JoinByInvitation groupMember.InviterUserID = mcontext.GetOpUserID(ctx) groupMember.JoinTime = time.Now() + groupMember.MuteEndTime = time.Unix(0, 0) if err := CallbackBeforeMemberJoinGroup(ctx, groupMember, group.Ex); err != nil && err != errs.ErrCallbackContinue { return err } @@ -313,6 +314,8 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite member.OperatorUserID = opUserID member.InviterUserID = opUserID member.JoinSource = constant.JoinByInvitation + member.JoinTime = time.Now() + member.MuteEndTime = time.Unix(0, 0) if err := CallbackBeforeMemberJoinGroup(ctx, member, group.Ex); err != nil && err != errs.ErrCallbackContinue { return nil, err } @@ -640,6 +643,8 @@ func (s *groupServer) JoinGroup(ctx context.Context, req *pbGroup.JoinGroupReq) groupMember.OperatorUserID = mcontext.GetOpUserID(ctx) groupMember.JoinSource = constant.JoinByInvitation groupMember.InviterUserID = mcontext.GetOpUserID(ctx) + groupMember.JoinTime = time.Now() + groupMember.MuteEndTime = time.Unix(0, 0) if err := CallbackBeforeMemberJoinGroup(ctx, groupMember, group.Ex); err != nil && err != errs.ErrCallbackContinue { return nil, err } From 53abc2703d2e44f5a92db664c3851cd90fc8c750 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 24 Mar 2023 19:03:20 +0800 Subject: [PATCH 10/10] group --- internal/rpc/group/group.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 3e94dfa14..cb6e42778 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -49,6 +49,7 @@ func Start(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) e pbGroup.RegisterGroupServer(server, &groupServer{ GroupDatabase: controller.InitGroupDatabase(db, rdb, mongo.GetDatabase()), UserCheck: check.NewUserCheck(client), + Notification: notification.NewCheck(client), ConversationChecker: check.NewConversationChecker(client), }) return nil