From a027b23698833dc3852e799e640beb83807ed52a Mon Sep 17 00:00:00 2001 From: Steven Davidovitz <13248+steved@users.noreply.github.com> Date: Tue, 13 Feb 2024 15:56:16 -0800 Subject: [PATCH] fix: use finer-grained locking when listing releases for diff (#1343) `isReleaseInstalled` will call `helm list` which can take a bit of time. in order to allow parallelism, we need to use a finer mutex lock. Signed-off-by: Steven Davidovitz --- pkg/state/state.go | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/pkg/state/state.go b/pkg/state/state.go index 061109ff..402cc46f 100644 --- a/pkg/state/state.go +++ b/pkg/state/state.go @@ -1772,16 +1772,17 @@ func (st *HelmState) prepareDiffReleases(helm helmexec.Interface, additionalValu o.Apply(opt) } - mu := &sync.Mutex{} + mu := &sync.RWMutex{} installedReleases := map[string]bool{} isInstalled := func(r *ReleaseSpec) bool { - mu.Lock() - defer mu.Unlock() - id := ReleaseToID(r) - if v, ok := installedReleases[id]; ok { + mu.RLock() + v, ok := installedReleases[id] + mu.RUnlock() + + if ok { return v } @@ -1789,7 +1790,9 @@ func (st *HelmState) prepareDiffReleases(helm helmexec.Interface, additionalValu if err != nil { st.logger.Warnf("confirming if the release is already installed or not: %v", err) } else { + mu.Lock() installedReleases[id] = v + mu.Unlock() } return v