Adding caching to get channel member (#5518)
Этот коммит содержится в:
коммит произвёл
Corey Hulen
родитель
7fc5dc236a
Коммит
ba028ed74b
@@ -175,7 +175,7 @@ func WaitForChannelMembership(channelId string, userId string) {
|
||||
|
||||
time.Sleep(100 * time.Millisecond)
|
||||
|
||||
result := <-Srv.Store.Channel().GetMember(channelId, userId)
|
||||
result := <-Srv.Store.Channel().GetMember(channelId, userId, true)
|
||||
|
||||
// If the membership was found then return
|
||||
if result.Err == nil {
|
||||
@@ -214,6 +214,7 @@ func UpdateChannelMemberRoles(channelId string, userId string, newRoles string)
|
||||
return nil, result.Err
|
||||
}
|
||||
|
||||
InvalidateCacheForChannelMember(channelId, userId)
|
||||
InvalidateCacheForUser(userId)
|
||||
return member, nil
|
||||
}
|
||||
@@ -245,6 +246,7 @@ func UpdateChannelMemberNotifyProps(data map[string]string, channelId string, us
|
||||
if result := <-Srv.Store.Channel().UpdateMember(member); result.Err != nil {
|
||||
return nil, result.Err
|
||||
} else {
|
||||
InvalidateCacheForChannelMember(channelId, userId)
|
||||
InvalidateCacheForUser(userId)
|
||||
InvalidateCacheForChannelMembersNotifyProps(channelId)
|
||||
return member, nil
|
||||
@@ -333,7 +335,7 @@ func addUserToChannel(user *model.User, channel *model.Channel) (*model.ChannelM
|
||||
}
|
||||
|
||||
tmchan := Srv.Store.Team().GetMember(channel.TeamId, user.Id)
|
||||
cmchan := Srv.Store.Channel().GetMember(channel.Id, user.Id)
|
||||
cmchan := Srv.Store.Channel().GetMember(channel.Id, user.Id, true)
|
||||
|
||||
if result := <-tmchan; result.Err != nil {
|
||||
return nil, result.Err
|
||||
@@ -588,7 +590,7 @@ func GetChannelsUserNotIn(teamId string, userId string, offset int, limit int) (
|
||||
}
|
||||
|
||||
func GetChannelMember(channelId string, userId string) (*model.ChannelMember, *model.AppError) {
|
||||
if result := <-Srv.Store.Channel().GetMember(channelId, userId); result.Err != nil {
|
||||
if result := <-Srv.Store.Channel().GetMember(channelId, userId, true); result.Err != nil {
|
||||
return nil, result.Err
|
||||
} else {
|
||||
return result.Data.(*model.ChannelMember), nil
|
||||
@@ -637,7 +639,7 @@ func GetChannelCounts(teamId string, userId string) (*model.ChannelCounts, *mode
|
||||
|
||||
func JoinChannel(channel *model.Channel, userId string) *model.AppError {
|
||||
userChan := Srv.Store.User().Get(userId)
|
||||
memberChan := Srv.Store.Channel().GetMember(channel.Id, userId)
|
||||
memberChan := Srv.Store.Channel().GetMember(channel.Id, userId, true)
|
||||
|
||||
if uresult := <-userChan; uresult.Err != nil {
|
||||
return uresult.Err
|
||||
@@ -790,6 +792,7 @@ func removeUserFromChannel(userIdToRemove string, removerUserId string, channel
|
||||
}
|
||||
|
||||
InvalidateCacheForUser(userIdToRemove)
|
||||
InvalidateCacheForChannelMember(channel.Id, userIdToRemove)
|
||||
InvalidateCacheForChannelMembers(channel.Id)
|
||||
|
||||
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_USER_REMOVED, "", channel.Id, "", nil)
|
||||
|
||||
@@ -424,6 +424,7 @@ func LeaveTeam(team *model.Team, user *model.User) *model.AppError {
|
||||
for _, channel := range *channelList {
|
||||
if channel.Type != model.CHANNEL_DIRECT {
|
||||
InvalidateCacheForChannelMembers(channel.Id)
|
||||
InvalidateCacheForChannelMember(channel.Id, user.Id)
|
||||
if result := <-Srv.Store.Channel().RemoveMember(channel.Id, user.Id); result.Err != nil {
|
||||
return result.Err
|
||||
}
|
||||
|
||||
@@ -170,6 +170,18 @@ func InvalidateCacheForUser(userId string) {
|
||||
}
|
||||
}
|
||||
|
||||
func InvalidateCacheForChannelMember(channelId string, userId string) {
|
||||
InvalidateCacheForChannelMemberSkipClusterSend(channelId, userId)
|
||||
|
||||
if einterfaces.GetClusterInterface() != nil {
|
||||
einterfaces.GetClusterInterface().InvalidateCacheForChannelMember(channelId, userId)
|
||||
}
|
||||
}
|
||||
|
||||
func InvalidateCacheForChannelMemberSkipClusterSend(channelId string, userId string) {
|
||||
Srv.Store.Channel().InvalidateMember(channelId, userId)
|
||||
}
|
||||
|
||||
func InvalidateCacheForUserSkipClusterSend(userId string) {
|
||||
Srv.Store.Channel().InvalidateAllChannelMembersForUser(userId)
|
||||
Srv.Store.User().InvalidateProfilesInChannelCacheByUser(userId)
|
||||
|
||||
Ссылка в новой задаче
Block a user