ReloadMirrorConfig refresh the providers and jobs from new mirror configs TODO: deleted job should be removed from manager-side mirror list
(newMirrors []mirrorConfig)
| 91 | // from new mirror configs |
| 92 | // TODO: deleted job should be removed from manager-side mirror list |
| 93 | func (w *Worker) ReloadMirrorConfig(newMirrors []mirrorConfig) { |
| 94 | w.L.Lock() |
| 95 | defer w.L.Unlock() |
| 96 | logger.Info("Reloading mirror configs") |
| 97 | |
| 98 | oldMirrors := w.cfg.Mirrors |
| 99 | difference := diffMirrorConfig(oldMirrors, newMirrors) |
| 100 | |
| 101 | // first deal with deletion and modifications |
| 102 | for _, op := range difference { |
| 103 | if op.diffOp == diffAdd { |
| 104 | continue |
| 105 | } |
| 106 | name := op.mirCfg.Name |
| 107 | job, ok := w.jobs[name] |
| 108 | if !ok { |
| 109 | logger.Warningf("Job %s not found", name) |
| 110 | continue |
| 111 | } |
| 112 | switch op.diffOp { |
| 113 | case diffDelete: |
| 114 | w.disableJob(job) |
| 115 | delete(w.jobs, name) |
| 116 | logger.Noticef("Deleted job %s", name) |
| 117 | case diffModify: |
| 118 | jobState := job.State() |
| 119 | w.disableJob(job) |
| 120 | // set new provider |
| 121 | provider := newMirrorProvider(op.mirCfg, w.cfg) |
| 122 | if err := job.SetProvider(provider); err != nil { |
| 123 | logger.Errorf("Error setting job provider of %s: %s", name, err.Error()) |
| 124 | continue |
| 125 | } |
| 126 | |
| 127 | // re-schedule job according to its previous state |
| 128 | if jobState == stateDisabled { |
| 129 | job.SetState(stateDisabled) |
| 130 | } else if jobState == statePaused { |
| 131 | job.SetState(statePaused) |
| 132 | go job.Run(w.managerChan, w.semaphore) |
| 133 | } else { |
| 134 | job.SetState(stateNone) |
| 135 | go job.Run(w.managerChan, w.semaphore) |
| 136 | w.schedule.AddJob(time.Now(), job) |
| 137 | } |
| 138 | logger.Noticef("Reloaded job %s", name) |
| 139 | } |
| 140 | } |
| 141 | // for added new jobs, just start new jobs |
| 142 | for _, op := range difference { |
| 143 | if op.diffOp != diffAdd { |
| 144 | continue |
| 145 | } |
| 146 | provider := newMirrorProvider(op.mirCfg, w.cfg) |
| 147 | job := newMirrorJob(provider) |
| 148 | w.jobs[provider.Name()] = job |
| 149 | |
| 150 | job.SetState(stateNone) |
no test coverage detected