MCPcopy
hub / github.com/tuna/tunasync / ReloadMirrorConfig

Method ReloadMirrorConfig

worker/worker.go:93–157  ·  view source on GitHub ↗

ReloadMirrorConfig refresh the providers and jobs from new mirror configs TODO: deleted job should be removed from manager-side mirror list

(newMirrors []mirrorConfig)

Source from the content-addressed store, hash-verified

91// from new mirror configs
92// TODO: deleted job should be removed from manager-side mirror list
93func (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)

Callers 1

startWorkerFunction · 0.80

Calls 15

disableJobMethod · 0.95
diffMirrorConfigFunction · 0.85
newMirrorProviderFunction · 0.85
newMirrorJobFunction · 0.85
InfoMethod · 0.80
WarningfMethod · 0.80
NoticefMethod · 0.80
StateMethod · 0.80
SetProviderMethod · 0.80
ErrorfMethod · 0.80
ErrorMethod · 0.80
SetStateMethod · 0.80

Tested by

no test coverage detected