mirror of
https://github.com/tuna/tunasync.git
synced 2026-07-03 12:28:07 +08:00
refactor(worker): deduplicate merged success exit codes
This commit is contained in:
@@ -652,4 +652,55 @@ rsync_success_exit_codes = [99]
|
||||
So(ok, ShouldBeTrue)
|
||||
So(cp.successExitCodes, ShouldResemble, []int{10, 40})
|
||||
})
|
||||
|
||||
Convey("success exit codes should be deduplicated after merge", t, func() {
|
||||
tmpfile, err := os.CreateTemp("", "tunasync")
|
||||
So(err, ShouldEqual, nil)
|
||||
defer os.Remove(tmpfile.Name())
|
||||
|
||||
cfgBlob1 := `
|
||||
[global]
|
||||
name = "test_worker"
|
||||
log_dir = "/var/log/tunasync/{{.Name}}"
|
||||
mirror_dir = "/data/mirrors"
|
||||
concurrent = 10
|
||||
interval = 240
|
||||
retry = 3
|
||||
timeout = 86400
|
||||
dangerous_global_success_exit_codes = [10, 20, 10]
|
||||
dangerous_global_rsync_success_exit_codes = [23, 24, 23]
|
||||
|
||||
[manager]
|
||||
api_base = "https://127.0.0.1:5000"
|
||||
|
||||
[server]
|
||||
hostname = "worker1.example.com"
|
||||
listen_addr = "127.0.0.1"
|
||||
listen_port = 6000
|
||||
|
||||
[[mirrors]]
|
||||
name = "foo"
|
||||
provider = "rsync"
|
||||
upstream = "rsync://foo.bar/"
|
||||
success_exit_codes = [20, 30, 20]
|
||||
rsync_success_exit_codes = [24, 25, 24]
|
||||
`
|
||||
|
||||
err = os.WriteFile(tmpfile.Name(), []byte(cfgBlob1), 0644)
|
||||
So(err, ShouldEqual, nil)
|
||||
defer tmpfile.Close()
|
||||
|
||||
cfg, err := LoadConfig(tmpfile.Name())
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
providers := map[string]mirrorProvider{}
|
||||
for _, m := range cfg.Mirrors {
|
||||
p := newMirrorProvider(m, cfg)
|
||||
providers[p.Name()] = p
|
||||
}
|
||||
|
||||
rp, ok := providers["foo"].(*rsyncProvider)
|
||||
So(ok, ShouldBeTrue)
|
||||
So(rp.successExitCodes, ShouldResemble, []int{10, 20, 30, 23, 24, 25})
|
||||
})
|
||||
}
|
||||
|
||||
@@ -276,6 +276,19 @@ func newMirrorProvider(mirror mirrorConfig, cfg *Config) mirrorProvider {
|
||||
)
|
||||
}
|
||||
|
||||
if len(successExitCodes) > 1 {
|
||||
seen := map[int]struct{}{}
|
||||
deduplicatedCodes := make([]int, 0, len(successExitCodes))
|
||||
for _, code := range successExitCodes {
|
||||
if _, ok := seen[code]; ok {
|
||||
continue
|
||||
}
|
||||
seen[code] = struct{}{}
|
||||
deduplicatedCodes = append(deduplicatedCodes, code)
|
||||
}
|
||||
successExitCodes = deduplicatedCodes
|
||||
}
|
||||
|
||||
if len(successExitCodes) > 0 {
|
||||
logger.Infof("Non-zero success exit codes set for mirror %s: %v", mirror.Name, successExitCodes)
|
||||
provider.SetSuccessExitCodes(successExitCodes)
|
||||
|
||||
Reference in New Issue
Block a user