diff --git a/app/plugin.go b/app/plugin.go index e9d70a5d77..789ebe2364 100644 --- a/app/plugin.go +++ b/app/plugin.go @@ -180,6 +180,7 @@ func (s *Server) initPlugins(c *request.Context, pluginDir, webappPluginDir stri s.PluginsLock.RUnlock() if pluginsEnvironment != nil || !*s.Config().PluginSettings.Enable { s.syncPluginsActiveState() + pluginsEnvironment.TogglePluginHealthCheckJob(*s.Config().PluginSettings.EnableHealthCheck) return } @@ -208,6 +209,8 @@ func (s *Server) initPlugins(c *request.Context, pluginDir, webappPluginDir stri s.PluginsEnvironment = env s.PluginsLock.Unlock() + s.PluginsEnvironment.TogglePluginHealthCheckJob(*s.Config().PluginSettings.EnableHealthCheck) + if err := s.syncPlugins(); err != nil { mlog.Error("Failed to sync plugins from the file store", mlog.Err(err)) } @@ -327,7 +330,10 @@ func (s *Server) syncPlugins() *model.AppError { } func (s *Server) ShutDownPlugins() { - pluginsEnvironment := s.GetPluginsEnvironment() + // Acquiring lock manually, as plugins might be disabled. See GetPluginsEnvironment. + s.PluginsLock.RLock() + pluginsEnvironment := s.PluginsEnvironment + s.PluginsLock.RUnlock() if pluginsEnvironment == nil { return } diff --git a/app/server.go b/app/server.go index 2e961188e5..b973e0cc42 100644 --- a/app/server.go +++ b/app/server.go @@ -571,20 +571,6 @@ func NewServer(options ...Option) (*Server, error) { s.EmailService.InitEmailBatching() }) - // Start plugin health check job - pluginsEnvironment := s.PluginsEnvironment - if pluginsEnvironment != nil { - pluginsEnvironment.InitPluginHealthCheckJob(*s.Config().PluginSettings.Enable && *s.Config().PluginSettings.EnableHealthCheck) - } - s.AddConfigListener(func(_, c *model.Config) { - s.PluginsLock.RLock() - pluginsEnvironment := s.PluginsEnvironment - s.PluginsLock.RUnlock() - if pluginsEnvironment != nil { - pluginsEnvironment.InitPluginHealthCheckJob(*s.Config().PluginSettings.Enable && *c.PluginSettings.EnableHealthCheck) - } - }) - logCurrentVersion := fmt.Sprintf("Current version is %v (%v/%v/%v/%v)", model.CurrentVersion, model.BuildNumber, model.BuildDate, model.BuildHash, model.BuildHashEnterprise) mlog.Info( logCurrentVersion, diff --git a/plugin/environment.go b/plugin/environment.go index 1071e735af..70c738733a 100644 --- a/plugin/environment.go +++ b/plugin/environment.go @@ -332,9 +332,7 @@ func (env *Environment) RestartPlugin(id string) error { // Shutdown deactivates all plugins and gracefully shuts down the environment. func (env *Environment) Shutdown() { - if env.pluginHealthCheckJob != nil { - env.pluginHealthCheckJob.Cancel() - } + env.TogglePluginHealthCheckJob(false) var wg sync.WaitGroup env.registeredPlugins.Range(func(key, value interface{}) bool { @@ -507,8 +505,8 @@ func newRegisteredPlugin(bundle *model.BundleInfo) registeredPlugin { return registeredPlugin{State: state, BundleInfo: bundle} } -// InitPluginHealthCheckJob starts a new job if one is not running and is set to enabled, or kills an existing one if set to disabled. -func (env *Environment) InitPluginHealthCheckJob(enable bool) { +// TogglePluginHealthCheckJob starts a new job if one is not running and is set to enabled, or kills an existing one if set to disabled. +func (env *Environment) TogglePluginHealthCheckJob(enable bool) { // Config is set to enable. No job exists, start a new job. if enable && env.pluginHealthCheckJob == nil { mlog.Debug("Enabling plugin health check job", mlog.Duration("interval_s", HealthCheckInterval))