github.com/keys-pub/mattermost-server@v4.10.10+incompatible/jobs/workers.go (about) 1 // Copyright (c) 2017-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/mattermost/mattermost-server/mlog" 10 "github.com/mattermost/mattermost-server/model" 11 ) 12 13 type Workers struct { 14 startOnce sync.Once 15 ConfigService ConfigService 16 Watcher *Watcher 17 18 DataRetention model.Worker 19 MessageExport model.Worker 20 ElasticsearchIndexing model.Worker 21 ElasticsearchAggregation model.Worker 22 LdapSync model.Worker 23 24 listenerId string 25 } 26 27 func (srv *JobServer) InitWorkers() *Workers { 28 workers := &Workers{ 29 ConfigService: srv.ConfigService, 30 } 31 workers.Watcher = srv.MakeWatcher(workers, DEFAULT_WATCHER_POLLING_INTERVAL) 32 33 if srv.DataRetentionJob != nil { 34 workers.DataRetention = srv.DataRetentionJob.MakeWorker() 35 } 36 37 if srv.MessageExportJob != nil { 38 workers.MessageExport = srv.MessageExportJob.MakeWorker() 39 } 40 41 if elasticsearchIndexerInterface := srv.ElasticsearchIndexer; elasticsearchIndexerInterface != nil { 42 workers.ElasticsearchIndexing = elasticsearchIndexerInterface.MakeWorker() 43 } 44 45 if elasticsearchAggregatorInterface := srv.ElasticsearchAggregator; elasticsearchAggregatorInterface != nil { 46 workers.ElasticsearchAggregation = elasticsearchAggregatorInterface.MakeWorker() 47 } 48 49 if ldapSyncInterface := srv.LdapSync; ldapSyncInterface != nil { 50 workers.LdapSync = ldapSyncInterface.MakeWorker() 51 } 52 53 return workers 54 } 55 56 func (workers *Workers) Start() *Workers { 57 mlog.Info("Starting workers") 58 59 workers.startOnce.Do(func() { 60 if workers.DataRetention != nil && (*workers.ConfigService.Config().DataRetentionSettings.EnableMessageDeletion || *workers.ConfigService.Config().DataRetentionSettings.EnableFileDeletion) { 61 go workers.DataRetention.Run() 62 } 63 64 if workers.MessageExport != nil && *workers.ConfigService.Config().MessageExportSettings.EnableExport { 65 go workers.MessageExport.Run() 66 } 67 68 if workers.ElasticsearchIndexing != nil && *workers.ConfigService.Config().ElasticsearchSettings.EnableIndexing { 69 go workers.ElasticsearchIndexing.Run() 70 } 71 72 if workers.ElasticsearchAggregation != nil && *workers.ConfigService.Config().ElasticsearchSettings.EnableIndexing { 73 go workers.ElasticsearchAggregation.Run() 74 } 75 76 if workers.LdapSync != nil && *workers.ConfigService.Config().LdapSettings.EnableSync { 77 go workers.LdapSync.Run() 78 } 79 80 go workers.Watcher.Start() 81 }) 82 83 workers.listenerId = workers.ConfigService.AddConfigListener(workers.handleConfigChange) 84 85 return workers 86 } 87 88 func (workers *Workers) handleConfigChange(oldConfig *model.Config, newConfig *model.Config) { 89 if workers.DataRetention != nil { 90 if (!*oldConfig.DataRetentionSettings.EnableMessageDeletion && !*oldConfig.DataRetentionSettings.EnableFileDeletion) && (*newConfig.DataRetentionSettings.EnableMessageDeletion || *newConfig.DataRetentionSettings.EnableFileDeletion) { 91 go workers.DataRetention.Run() 92 } else if (*oldConfig.DataRetentionSettings.EnableMessageDeletion || *oldConfig.DataRetentionSettings.EnableFileDeletion) && (!*newConfig.DataRetentionSettings.EnableMessageDeletion && !*newConfig.DataRetentionSettings.EnableFileDeletion) { 93 workers.DataRetention.Stop() 94 } 95 } 96 97 if workers.MessageExport != nil { 98 if !*oldConfig.MessageExportSettings.EnableExport && *newConfig.MessageExportSettings.EnableExport { 99 go workers.MessageExport.Run() 100 } else if *oldConfig.MessageExportSettings.EnableExport && !*newConfig.MessageExportSettings.EnableExport { 101 workers.MessageExport.Stop() 102 } 103 } 104 105 if workers.ElasticsearchIndexing != nil { 106 if !*oldConfig.ElasticsearchSettings.EnableIndexing && *newConfig.ElasticsearchSettings.EnableIndexing { 107 go workers.ElasticsearchIndexing.Run() 108 } else if *oldConfig.ElasticsearchSettings.EnableIndexing && !*newConfig.ElasticsearchSettings.EnableIndexing { 109 workers.ElasticsearchIndexing.Stop() 110 } 111 } 112 113 if workers.ElasticsearchAggregation != nil { 114 if !*oldConfig.ElasticsearchSettings.EnableIndexing && *newConfig.ElasticsearchSettings.EnableIndexing { 115 go workers.ElasticsearchAggregation.Run() 116 } else if *oldConfig.ElasticsearchSettings.EnableIndexing && !*newConfig.ElasticsearchSettings.EnableIndexing { 117 workers.ElasticsearchAggregation.Stop() 118 } 119 } 120 121 if workers.LdapSync != nil { 122 if !*oldConfig.LdapSettings.EnableSync && *newConfig.LdapSettings.EnableSync { 123 go workers.LdapSync.Run() 124 } else if *oldConfig.LdapSettings.EnableSync && !*newConfig.LdapSettings.EnableSync { 125 workers.LdapSync.Stop() 126 } 127 } 128 } 129 130 func (workers *Workers) Stop() *Workers { 131 workers.ConfigService.RemoveConfigListener(workers.listenerId) 132 133 workers.Watcher.Stop() 134 135 if workers.DataRetention != nil && (*workers.ConfigService.Config().DataRetentionSettings.EnableMessageDeletion || *workers.ConfigService.Config().DataRetentionSettings.EnableFileDeletion) { 136 workers.DataRetention.Stop() 137 } 138 139 if workers.MessageExport != nil && *workers.ConfigService.Config().MessageExportSettings.EnableExport { 140 workers.MessageExport.Stop() 141 } 142 143 if workers.ElasticsearchIndexing != nil && *workers.ConfigService.Config().ElasticsearchSettings.EnableIndexing { 144 workers.ElasticsearchIndexing.Stop() 145 } 146 147 if workers.ElasticsearchAggregation != nil && *workers.ConfigService.Config().ElasticsearchSettings.EnableIndexing { 148 workers.ElasticsearchAggregation.Stop() 149 } 150 151 if workers.LdapSync != nil && *workers.ConfigService.Config().LdapSettings.EnableSync { 152 workers.LdapSync.Stop() 153 } 154 155 mlog.Info("Stopped workers") 156 157 return workers 158 }