mirror of
https://github.com/mattermost/mattermost.git
synced 2025-02-25 18:55:24 -06:00
PLT-4716 fixes cache invalidation issue (#4518)
* PLT-4716 fixes cache invalidation issue * Adding missing interface * Adding cache invalidation to channel notification preferences * Adding cache invalidation to channel notification preferences
This commit is contained in:
committed by
Harrison Healey
parent
b46ced78de
commit
41b31b4c92
@@ -1176,6 +1176,8 @@ func updateNotifyProps(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||
c.Err = result.Err
|
||||
return
|
||||
} else {
|
||||
InvalidateCacheForUser(userId)
|
||||
|
||||
// return the updated notify properties including any unchanged ones
|
||||
w.Write([]byte(model.MapToJson(member.NotifyProps)))
|
||||
}
|
||||
|
||||
@@ -1398,6 +1398,8 @@ func updateUser(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||
go sendEmailChangeUsername(c, rusers[1].Username, rusers[0].Username, rusers[0].Email, c.GetSiteURL())
|
||||
}
|
||||
|
||||
InvalidateCacheForUser(user.Id)
|
||||
|
||||
updatedUser := rusers[0]
|
||||
updatedUser = sanitizeProfile(c, updatedUser)
|
||||
|
||||
@@ -1955,6 +1957,7 @@ func updateUserNotify(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
} else {
|
||||
c.LogAuditWithUserId(user.Id, "")
|
||||
InvalidateCacheForUser(user.Id)
|
||||
|
||||
ruser := result.Data.([2]*model.User)[0]
|
||||
options := utils.Cfg.GetSanitizeOptions()
|
||||
|
||||
@@ -112,6 +112,7 @@ func InvalidateCacheForUser(userId string) {
|
||||
|
||||
func InvalidateCacheForUserSkipClusterSend(userId string) {
|
||||
Srv.Store.Channel().InvalidateAllChannelMembersForUser(userId)
|
||||
Srv.Store.User().InvalidateProfilesInChannelCacheByUser(userId)
|
||||
|
||||
GetHubForUserId(userId).InvalidateUser(userId)
|
||||
}
|
||||
|
||||
@@ -555,6 +555,19 @@ func (us SqlUserStore) GetProfiles(teamId string, offset int, limit int) StoreCh
|
||||
return storeChannel
|
||||
}
|
||||
|
||||
func (us SqlUserStore) InvalidateProfilesInChannelCacheByUser(userId string) {
|
||||
keys := profilesInChannelCache.Keys()
|
||||
|
||||
for _, key := range keys {
|
||||
if cacheItem, ok := profilesInChannelCache.Get(key); ok {
|
||||
userMap := cacheItem.(map[string]*model.User)
|
||||
if _, userInCache := userMap[userId]; userInCache {
|
||||
profilesInChannelCache.Remove(key)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (us SqlUserStore) InvalidateProfilesInChannelCache(channelId string) {
|
||||
profilesInChannelCache.Remove(channelId)
|
||||
}
|
||||
|
||||
@@ -143,6 +143,7 @@ type UserStore interface {
|
||||
UpdateMfaActive(userId string, active bool) StoreChannel
|
||||
Get(id string) StoreChannel
|
||||
GetAll() StoreChannel
|
||||
InvalidateProfilesInChannelCacheByUser(userId string)
|
||||
InvalidateProfilesInChannelCache(channelId string)
|
||||
GetProfilesInChannel(channelId string, offset int, limit int, allowFromCache bool) StoreChannel
|
||||
GetProfilesNotInChannel(teamId string, channelId string, offset int, limit int) StoreChannel
|
||||
|
||||
Reference in New Issue
Block a user