mirror of https://github.com/helm/helm
Manager.downloadAll derives its scratch directory as tmpcharts-<pid> (added in #13120 to fix #13110, a race between separate helm process invocations sharing a chart directory). That fix does not cover the case where downloadAll is called concurrently by multiple goroutines within a single process - e.g. a caller embedding Helm as a library that renders several profiles against the same chart path in parallel (this is how Skaffold's built-in Helm renderer works). All such calls share one PID, so they still resolve to the same tmpcharts-<pid> path and race on it: one goroutine's deferred os.RemoveAll can delete the directory out from under another goroutine's in-flight download, surfacing as: lstat .../tmpcharts-<pid>: no such file or directory Switch to os.MkdirTemp, which atomically allocates a directory with a guaranteed-unique name, while keeping the PID as a prefix for debuggability. Adds TestDownloadAllConcurrent, which reproduces the race under -race with the old code and passes reliably with the fix. Fixes #32532 Signed-off-by: Anis Khan <2815766+aniskhan001@users.noreply.github.com>pull/32533/head
parent
f3d68cdbea
commit
7b067935b3
Loading…
Reference in new issue