|
@@ -1,9 +1,6 @@
|
|
package worker
|
|
package worker
|
|
|
|
|
|
-import (
|
|
|
|
- "errors"
|
|
|
|
- "time"
|
|
|
|
-)
|
|
|
|
|
|
+import "errors"
|
|
|
|
|
|
// this file contains the workflow of a mirror jb
|
|
// this file contains the workflow of a mirror jb
|
|
|
|
|
|
@@ -41,7 +38,8 @@ func runMirrorJob(provider mirrorProvider, ctrlChan <-chan ctrlAction, managerCh
|
|
}
|
|
}
|
|
|
|
|
|
runJobWrapper := func(kill <-chan empty, jobDone chan<- empty) error {
|
|
runJobWrapper := func(kill <-chan empty, jobDone chan<- empty) error {
|
|
- defer func() { jobDone <- empty{} }()
|
|
|
|
|
|
+ defer close(jobDone)
|
|
|
|
+
|
|
logger.Info("start syncing: %s", provider.Name())
|
|
logger.Info("start syncing: %s", provider.Name())
|
|
|
|
|
|
Hooks := provider.Hooks()
|
|
Hooks := provider.Hooks()
|
|
@@ -89,6 +87,7 @@ func runMirrorJob(provider mirrorProvider, ctrlChan <-chan ctrlAction, managerCh
|
|
case syncErr = <-syncDone:
|
|
case syncErr = <-syncDone:
|
|
logger.Debug("syncing done")
|
|
logger.Debug("syncing done")
|
|
case <-kill:
|
|
case <-kill:
|
|
|
|
+ logger.Debug("received kill")
|
|
stopASAP = true
|
|
stopASAP = true
|
|
err := provider.Terminate()
|
|
err := provider.Terminate()
|
|
if err != nil {
|
|
if err != nil {
|
|
@@ -118,15 +117,18 @@ func runMirrorJob(provider mirrorProvider, ctrlChan <-chan ctrlAction, managerCh
|
|
}
|
|
}
|
|
|
|
|
|
// syncing failed
|
|
// syncing failed
|
|
- logger.Info("failed syncing %s: %s", provider.Name(), err.Error())
|
|
|
|
|
|
+ logger.Warning("failed syncing %s: %s", provider.Name(), syncErr.Error())
|
|
managerChan <- struct{}{}
|
|
managerChan <- struct{}{}
|
|
|
|
+
|
|
// post-fail hooks
|
|
// post-fail hooks
|
|
|
|
+ logger.Debug("post-fail hooks")
|
|
err = runHooks(rHooks, func(h jobHook) error { return h.postFail() }, "post-fail")
|
|
err = runHooks(rHooks, func(h jobHook) error { return h.postFail() }, "post-fail")
|
|
if err != nil {
|
|
if err != nil {
|
|
return err
|
|
return err
|
|
}
|
|
}
|
|
// gracefully exit
|
|
// gracefully exit
|
|
if stopASAP {
|
|
if stopASAP {
|
|
|
|
+ logger.Debug("No retry, exit directly")
|
|
return nil
|
|
return nil
|
|
}
|
|
}
|
|
// continue to next retry
|
|
// continue to next retry
|
|
@@ -140,6 +142,7 @@ func runMirrorJob(provider mirrorProvider, ctrlChan <-chan ctrlAction, managerCh
|
|
defer func() { semaphore <- empty{} }()
|
|
defer func() { semaphore <- empty{} }()
|
|
runJobWrapper(kill, jobDone)
|
|
runJobWrapper(kill, jobDone)
|
|
case <-kill:
|
|
case <-kill:
|
|
|
|
+ jobDone <- empty{}
|
|
return
|
|
return
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -160,12 +163,15 @@ func runMirrorJob(provider mirrorProvider, ctrlChan <-chan ctrlAction, managerCh
|
|
case jobStop:
|
|
case jobStop:
|
|
enabled = false
|
|
enabled = false
|
|
close(kill)
|
|
close(kill)
|
|
|
|
+ <-jobDone
|
|
case jobDisable:
|
|
case jobDisable:
|
|
close(kill)
|
|
close(kill)
|
|
|
|
+ <-jobDone
|
|
return nil
|
|
return nil
|
|
case jobRestart:
|
|
case jobRestart:
|
|
enabled = true
|
|
enabled = true
|
|
close(kill)
|
|
close(kill)
|
|
|
|
+ <-jobDone
|
|
continue
|
|
continue
|
|
case jobStart:
|
|
case jobStart:
|
|
enabled = true
|
|
enabled = true
|
|
@@ -178,25 +184,19 @@ func runMirrorJob(provider mirrorProvider, ctrlChan <-chan ctrlAction, managerCh
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- select {
|
|
|
|
- case <-time.After(provider.Interval()):
|
|
|
|
- continue
|
|
|
|
- case ctrl := <-ctrlChan:
|
|
|
|
- switch ctrl {
|
|
|
|
- case jobStop:
|
|
|
|
- enabled = false
|
|
|
|
- case jobDisable:
|
|
|
|
- return nil
|
|
|
|
- case jobRestart:
|
|
|
|
- enabled = true
|
|
|
|
- case jobStart:
|
|
|
|
- enabled = true
|
|
|
|
- default:
|
|
|
|
- // TODO
|
|
|
|
- return nil
|
|
|
|
- }
|
|
|
|
|
|
+ ctrl := <-ctrlChan
|
|
|
|
+ switch ctrl {
|
|
|
|
+ case jobStop:
|
|
|
|
+ enabled = false
|
|
|
|
+ case jobDisable:
|
|
|
|
+ return nil
|
|
|
|
+ case jobRestart:
|
|
|
|
+ enabled = true
|
|
|
|
+ case jobStart:
|
|
|
|
+ enabled = true
|
|
|
|
+ default:
|
|
|
|
+ // TODO
|
|
|
|
+ return nil
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
- return nil
|
|
|
|
}
|
|
}
|