github.com/adacta-ru/mattermost-server/v5@v5.31.1/jobs/workers.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package jobs 5 6 import ( 7 "sync" 8 9 "github.com/adacta-ru/mattermost-server/v5/mlog" 10 "github.com/adacta-ru/mattermost-server/v5/model" 11 "github.com/adacta-ru/mattermost-server/v5/services/configservice" 12 ) 13 14 type Workers struct { 15 startOnce sync.Once 16 ConfigService configservice.ConfigService 17 Watcher *Watcher 18 19 DataRetention model.Worker 20 MessageExport model.Worker 21 ElasticsearchIndexing model.Worker 22 ElasticsearchAggregation model.Worker 23 LdapSync model.Worker 24 Migrations model.Worker 25 Plugins model.Worker 26 BleveIndexing model.Worker 27 ExpiryNotify model.Worker 28 ProductNotices model.Worker 29 ActiveUsers model.Worker 30 ImportProcess model.Worker 31 Cloud model.Worker 32 33 listenerId string 34 } 35 36 func (srv *JobServer) InitWorkers() *Workers { 37 workers := &Workers{ 38 ConfigService: srv.ConfigService, 39 } 40 workers.Watcher = srv.MakeWatcher(workers, DEFAULT_WATCHER_POLLING_INTERVAL) 41 42 if srv.DataRetentionJob != nil { 43 workers.DataRetention = srv.DataRetentionJob.MakeWorker() 44 } 45 46 if srv.MessageExportJob != nil { 47 workers.MessageExport = srv.MessageExportJob.MakeWorker() 48 } 49 50 if elasticsearchIndexerInterface := srv.ElasticsearchIndexer; elasticsearchIndexerInterface != nil { 51 workers.ElasticsearchIndexing = elasticsearchIndexerInterface.MakeWorker() 52 } 53 54 if elasticsearchAggregatorInterface := srv.ElasticsearchAggregator; elasticsearchAggregatorInterface != nil { 55 workers.ElasticsearchAggregation = elasticsearchAggregatorInterface.MakeWorker() 56 } 57 58 if ldapSyncInterface := srv.LdapSync; ldapSyncInterface != nil { 59 workers.LdapSync = ldapSyncInterface.MakeWorker() 60 } 61 62 if migrationsInterface := srv.Migrations; migrationsInterface != nil { 63 workers.Migrations = migrationsInterface.MakeWorker() 64 } 65 66 if pluginsInterface := srv.Plugins; pluginsInterface != nil { 67 workers.Plugins = pluginsInterface.MakeWorker() 68 } 69 70 if bleveIndexerInterface := srv.BleveIndexer; bleveIndexerInterface != nil { 71 workers.BleveIndexing = bleveIndexerInterface.MakeWorker() 72 } 73 74 if expiryNotifyInterface := srv.ExpiryNotify; expiryNotifyInterface != nil { 75 workers.ExpiryNotify = expiryNotifyInterface.MakeWorker() 76 } 77 78 if activeUsersInterface := srv.ActiveUsers; activeUsersInterface != nil { 79 workers.ActiveUsers = activeUsersInterface.MakeWorker() 80 } 81 82 if productNoticesInterface := srv.ProductNotices; productNoticesInterface != nil { 83 workers.ProductNotices = productNoticesInterface.MakeWorker() 84 } 85 86 if importProcessInterface := srv.ImportProcess; importProcessInterface != nil { 87 workers.ImportProcess = importProcessInterface.MakeWorker() 88 } 89 90 if cloudInterface := srv.Cloud; cloudInterface != nil { 91 workers.Cloud = cloudInterface.MakeWorker() 92 } 93 94 return workers 95 } 96 97 func (workers *Workers) Start() *Workers { 98 mlog.Info("Starting workers") 99 100 workers.startOnce.Do(func() { 101 if workers.DataRetention != nil && (*workers.ConfigService.Config().DataRetentionSettings.EnableMessageDeletion || *workers.ConfigService.Config().DataRetentionSettings.EnableFileDeletion) { 102 go workers.DataRetention.Run() 103 } 104 105 if workers.MessageExport != nil && *workers.ConfigService.Config().MessageExportSettings.EnableExport { 106 go workers.MessageExport.Run() 107 } 108 109 if workers.ElasticsearchIndexing != nil && *workers.ConfigService.Config().ElasticsearchSettings.EnableIndexing { 110 go workers.ElasticsearchIndexing.Run() 111 } 112 113 if workers.ElasticsearchAggregation != nil && *workers.ConfigService.Config().ElasticsearchSettings.EnableIndexing { 114 go workers.ElasticsearchAggregation.Run() 115 } 116 117 if workers.LdapSync != nil && *workers.ConfigService.Config().LdapSettings.EnableSync { 118 go workers.LdapSync.Run() 119 } 120 121 if workers.Migrations != nil { 122 go workers.Migrations.Run() 123 } 124 125 if workers.Plugins != nil { 126 go workers.Plugins.Run() 127 } 128 129 if workers.BleveIndexing != nil && *workers.ConfigService.Config().BleveSettings.EnableIndexing && *workers.ConfigService.Config().BleveSettings.IndexDir != "" { 130 go workers.BleveIndexing.Run() 131 } 132 133 if workers.ExpiryNotify != nil { 134 go workers.ExpiryNotify.Run() 135 } 136 137 if workers.ActiveUsers != nil { 138 go workers.ActiveUsers.Run() 139 } 140 141 if workers.ProductNotices != nil { 142 go workers.ProductNotices.Run() 143 } 144 145 if workers.ImportProcess != nil { 146 go workers.ImportProcess.Run() 147 } 148 149 if workers.Cloud != nil { 150 go workers.Cloud.Run() 151 } 152 153 go workers.Watcher.Start() 154 }) 155 156 workers.listenerId = workers.ConfigService.AddConfigListener(workers.handleConfigChange) 157 158 return workers 159 } 160 161 func (workers *Workers) handleConfigChange(oldConfig *model.Config, newConfig *model.Config) { 162 mlog.Debug("Workers received config change.") 163 164 if workers.DataRetention != nil { 165 if (!*oldConfig.DataRetentionSettings.EnableMessageDeletion && !*oldConfig.DataRetentionSettings.EnableFileDeletion) && (*newConfig.DataRetentionSettings.EnableMessageDeletion || *newConfig.DataRetentionSettings.EnableFileDeletion) { 166 go workers.DataRetention.Run() 167 } else if (*oldConfig.DataRetentionSettings.EnableMessageDeletion || *oldConfig.DataRetentionSettings.EnableFileDeletion) && (!*newConfig.DataRetentionSettings.EnableMessageDeletion && !*newConfig.DataRetentionSettings.EnableFileDeletion) { 168 workers.DataRetention.Stop() 169 } 170 } 171 172 if workers.MessageExport != nil { 173 if !*oldConfig.MessageExportSettings.EnableExport && *newConfig.MessageExportSettings.EnableExport { 174 go workers.MessageExport.Run() 175 } else if *oldConfig.MessageExportSettings.EnableExport && !*newConfig.MessageExportSettings.EnableExport { 176 workers.MessageExport.Stop() 177 } 178 } 179 180 if workers.ElasticsearchIndexing != nil { 181 if !*oldConfig.ElasticsearchSettings.EnableIndexing && *newConfig.ElasticsearchSettings.EnableIndexing { 182 go workers.ElasticsearchIndexing.Run() 183 } else if *oldConfig.ElasticsearchSettings.EnableIndexing && !*newConfig.ElasticsearchSettings.EnableIndexing { 184 workers.ElasticsearchIndexing.Stop() 185 } 186 } 187 188 if workers.ElasticsearchAggregation != nil { 189 if !*oldConfig.ElasticsearchSettings.EnableIndexing && *newConfig.ElasticsearchSettings.EnableIndexing { 190 go workers.ElasticsearchAggregation.Run() 191 } else if *oldConfig.ElasticsearchSettings.EnableIndexing && !*newConfig.ElasticsearchSettings.EnableIndexing { 192 workers.ElasticsearchAggregation.Stop() 193 } 194 } 195 196 if workers.LdapSync != nil { 197 if !*oldConfig.LdapSettings.EnableSync && *newConfig.LdapSettings.EnableSync { 198 go workers.LdapSync.Run() 199 } else if *oldConfig.LdapSettings.EnableSync && !*newConfig.LdapSettings.EnableSync { 200 workers.LdapSync.Stop() 201 } 202 } 203 204 if workers.BleveIndexing != nil { 205 if !*oldConfig.BleveSettings.EnableIndexing && *newConfig.BleveSettings.EnableIndexing { 206 go workers.BleveIndexing.Run() 207 } else if *oldConfig.BleveSettings.EnableIndexing && !*newConfig.BleveSettings.EnableIndexing { 208 workers.BleveIndexing.Stop() 209 } 210 } 211 } 212 213 func (workers *Workers) Stop() *Workers { 214 workers.ConfigService.RemoveConfigListener(workers.listenerId) 215 216 workers.Watcher.Stop() 217 218 if workers.DataRetention != nil && (*workers.ConfigService.Config().DataRetentionSettings.EnableMessageDeletion || *workers.ConfigService.Config().DataRetentionSettings.EnableFileDeletion) { 219 workers.DataRetention.Stop() 220 } 221 222 if workers.MessageExport != nil && *workers.ConfigService.Config().MessageExportSettings.EnableExport { 223 workers.MessageExport.Stop() 224 } 225 226 if workers.ElasticsearchIndexing != nil && *workers.ConfigService.Config().ElasticsearchSettings.EnableIndexing { 227 workers.ElasticsearchIndexing.Stop() 228 } 229 230 if workers.ElasticsearchAggregation != nil && *workers.ConfigService.Config().ElasticsearchSettings.EnableIndexing { 231 workers.ElasticsearchAggregation.Stop() 232 } 233 234 if workers.LdapSync != nil && *workers.ConfigService.Config().LdapSettings.EnableSync { 235 workers.LdapSync.Stop() 236 } 237 238 if workers.Migrations != nil { 239 workers.Migrations.Stop() 240 } 241 242 if workers.Plugins != nil { 243 workers.Plugins.Stop() 244 } 245 246 if workers.BleveIndexing != nil && *workers.ConfigService.Config().BleveSettings.EnableIndexing { 247 workers.BleveIndexing.Stop() 248 } 249 250 if workers.ExpiryNotify != nil { 251 workers.ExpiryNotify.Stop() 252 } 253 254 if workers.ActiveUsers != nil { 255 workers.ActiveUsers.Stop() 256 } 257 258 if workers.ProductNotices != nil { 259 workers.ProductNotices.Stop() 260 } 261 262 if workers.ImportProcess != nil { 263 workers.ImportProcess.Stop() 264 } 265 266 if workers.Cloud != nil { 267 workers.Cloud.Stop() 268 } 269 270 mlog.Info("Stopped workers") 271 272 return workers 273 }