MM-21396: fix duplicate channel cluster invalidations (#13537)
While invalidating a channel, we send out a cluster message from the app layer as well as from the localcachelayer. This causes multiple redundant messages to be sent out. And additionally multiple cluster handlers were being registered from the app layer as well as the localcachelayer. We fix this by removing the cluster broadcast from the app layer and directly calling the store method. We also remove the duplicate event handler registration.
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
e27969adbc
Коммит
88fecdb1a3
@@ -18,7 +18,6 @@ func (a *App) RegisterAllClusterMessageHandlers() {
|
||||
a.Cluster.RegisterClusterMessageHandler(model.CLUSTER_EVENT_INVALIDATE_CACHE_FOR_CHANNEL_MEMBERS_NOTIFY_PROPS, a.ClusterInvalidateCacheForChannelMembersNotifyPropHandler)
|
||||
a.Cluster.RegisterClusterMessageHandler(model.CLUSTER_EVENT_INVALIDATE_CACHE_FOR_CHANNEL_MEMBERS, a.ClusterInvalidateCacheForChannelMembersHandler)
|
||||
a.Cluster.RegisterClusterMessageHandler(model.CLUSTER_EVENT_INVALIDATE_CACHE_FOR_CHANNEL_BY_NAME, a.ClusterInvalidateCacheForChannelByNameHandler)
|
||||
a.Cluster.RegisterClusterMessageHandler(model.CLUSTER_EVENT_INVALIDATE_CACHE_FOR_CHANNEL, a.ClusterInvalidateCacheForChannelHandler)
|
||||
a.Cluster.RegisterClusterMessageHandler(model.CLUSTER_EVENT_INVALIDATE_CACHE_FOR_USER, a.ClusterInvalidateCacheForUserHandler)
|
||||
a.Cluster.RegisterClusterMessageHandler(model.CLUSTER_EVENT_INVALIDATE_CACHE_FOR_USER_TEAMS, a.ClusterInvalidateCacheForUserTeamsHandler)
|
||||
a.Cluster.RegisterClusterMessageHandler(model.CLUSTER_EVENT_CLEAR_SESSION_CACHE_FOR_USER, a.ClusterClearSessionCacheForUserHandler)
|
||||
@@ -63,10 +62,6 @@ func (a *App) ClusterInvalidateCacheForChannelByNameHandler(msg *model.ClusterMe
|
||||
a.InvalidateCacheForChannelByNameSkipClusterSend(msg.Props["id"], msg.Props["name"])
|
||||
}
|
||||
|
||||
func (a *App) ClusterInvalidateCacheForChannelHandler(msg *model.ClusterMessage) {
|
||||
a.InvalidateCacheForChannelSkipClusterSend(msg.Data)
|
||||
}
|
||||
|
||||
func (a *App) ClusterInvalidateCacheForUserHandler(msg *model.ClusterMessage) {
|
||||
a.InvalidateCacheForUserSkipClusterSend(msg.Data)
|
||||
}
|
||||
|
||||
@@ -202,18 +202,10 @@ func (a *App) PublishSkipClusterSend(message *model.WebSocketEvent) {
|
||||
}
|
||||
|
||||
func (a *App) InvalidateCacheForChannel(channel *model.Channel) {
|
||||
a.InvalidateCacheForChannelSkipClusterSend(channel.Id)
|
||||
a.Srv.Store.Channel().InvalidateChannel(channel.Id)
|
||||
a.InvalidateCacheForChannelByNameSkipClusterSend(channel.TeamId, channel.Name)
|
||||
|
||||
if a.Cluster != nil {
|
||||
msg := &model.ClusterMessage{
|
||||
Event: model.CLUSTER_EVENT_INVALIDATE_CACHE_FOR_CHANNEL,
|
||||
SendType: model.CLUSTER_SEND_BEST_EFFORT,
|
||||
Data: channel.Id,
|
||||
}
|
||||
|
||||
a.Cluster.SendClusterMessage(msg)
|
||||
|
||||
nameMsg := &model.ClusterMessage{
|
||||
Event: model.CLUSTER_EVENT_INVALIDATE_CACHE_FOR_CHANNEL_BY_NAME,
|
||||
SendType: model.CLUSTER_SEND_BEST_EFFORT,
|
||||
@@ -231,10 +223,6 @@ func (a *App) InvalidateCacheForChannel(channel *model.Channel) {
|
||||
}
|
||||
}
|
||||
|
||||
func (a *App) InvalidateCacheForChannelSkipClusterSend(channelId string) {
|
||||
a.Srv.Store.Channel().InvalidateChannel(channelId)
|
||||
}
|
||||
|
||||
func (a *App) InvalidateCacheForChannelMembers(channelId string) {
|
||||
a.InvalidateCacheForChannelMembersSkipClusterSend(channelId)
|
||||
|
||||
|
||||
Ссылка в новой задаче
Block a user