refactor(worker): deduplicate merged success exit codes

This commit is contained in:
yaoge123
2026-04-13 07:17:39 +08:00
parent 43b2e63add
commit 407edbc17e
2 changed files with 64 additions and 0 deletions

View File

@@ -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})
})
}

View File

@@ -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)