Adding caching to get channel member (#5518)

Этот коммит содержится в:
Christopher Speller
2017-02-24 09:15:36 -05:00
коммит произвёл Corey Hulen
родитель 7fc5dc236a
Коммит ba028ed74b
8 изменённых файлов: 67 добавлений и 13 удалений

Просмотреть файл

@@ -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)