Fix racy unit tests by protecting service ref with a mutex (#26183)

Этот коммит содержится в:
Doug Lauder
2024-02-09 16:07:37 -05:00
коммит произвёл GitHub
родитель 2116bf5498
Коммит 4c8a134659
2 изменённых файлов: 12 добавлений и 2 удалений

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

@@ -98,7 +98,9 @@ type PlatformService struct {
goroutineBuffered chan struct{} goroutineBuffered chan struct{}
additionalClusterHandlers map[model.ClusterEvent]einterfaces.ClusterMessageHandler additionalClusterHandlers map[model.ClusterEvent]einterfaces.ClusterMessageHandler
sharedChannelService SharedChannelServiceIFace
shareChannelServiceMux sync.RWMutex
sharedChannelService SharedChannelServiceIFace
pluginEnv HookRunner pluginEnv HookRunner
} }
@@ -471,9 +473,17 @@ func (ps *PlatformService) SetSqlStore(s *sqlstore.SqlStore) {
} }
func (ps *PlatformService) SetSharedChannelService(s SharedChannelServiceIFace) { func (ps *PlatformService) SetSharedChannelService(s SharedChannelServiceIFace) {
ps.shareChannelServiceMux.Lock()
defer ps.shareChannelServiceMux.Unlock()
ps.sharedChannelService = s ps.sharedChannelService = s
} }
func (ps *PlatformService) GetSharedChannelService() SharedChannelServiceIFace {
ps.shareChannelServiceMux.RLock()
defer ps.shareChannelServiceMux.RUnlock()
return ps.sharedChannelService
}
func (ps *PlatformService) SetPluginsEnvironment(runner HookRunner) { func (ps *PlatformService) SetPluginsEnvironment(runner HookRunner) {
ps.pluginEnv = runner ps.pluginEnv = runner
} }

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

@@ -31,7 +31,7 @@ var sharedChannelEventsForInvitation = []model.WebsocketEventType{
// Only on the leader node it will notify the sync service to perform necessary updates to the remote for the given // Only on the leader node it will notify the sync service to perform necessary updates to the remote for the given
// shared channel. // shared channel.
func (ps *PlatformService) SharedChannelSyncHandler(event *model.WebSocketEvent) { func (ps *PlatformService) SharedChannelSyncHandler(event *model.WebSocketEvent) {
syncService := ps.sharedChannelService syncService := ps.GetSharedChannelService()
if syncService == nil { if syncService == nil {
return return
} }