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 <steven.davidovitz@dominodatalab.com>
This commit is contained in:
parent
99a4d8b62f
commit
a027b23698
|
|
@ -1772,16 +1772,17 @@ func (st *HelmState) prepareDiffReleases(helm helmexec.Interface, additionalValu
|
||||||
o.Apply(opt)
|
o.Apply(opt)
|
||||||
}
|
}
|
||||||
|
|
||||||
mu := &sync.Mutex{}
|
mu := &sync.RWMutex{}
|
||||||
installedReleases := map[string]bool{}
|
installedReleases := map[string]bool{}
|
||||||
|
|
||||||
isInstalled := func(r *ReleaseSpec) bool {
|
isInstalled := func(r *ReleaseSpec) bool {
|
||||||
mu.Lock()
|
|
||||||
defer mu.Unlock()
|
|
||||||
|
|
||||||
id := ReleaseToID(r)
|
id := ReleaseToID(r)
|
||||||
|
|
||||||
if v, ok := installedReleases[id]; ok {
|
mu.RLock()
|
||||||
|
v, ok := installedReleases[id]
|
||||||
|
mu.RUnlock()
|
||||||
|
|
||||||
|
if ok {
|
||||||
return v
|
return v
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1789,7 +1790,9 @@ func (st *HelmState) prepareDiffReleases(helm helmexec.Interface, additionalValu
|
||||||
if err != nil {
|
if err != nil {
|
||||||
st.logger.Warnf("confirming if the release is already installed or not: %v", err)
|
st.logger.Warnf("confirming if the release is already installed or not: %v", err)
|
||||||
} else {
|
} else {
|
||||||
|
mu.Lock()
|
||||||
installedReleases[id] = v
|
installedReleases[id] = v
|
||||||
|
mu.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
return v
|
return v
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue