fix: Setting concurrency>1 with single release breaks sync (#290)

Fixes #287
This commit is contained in:
KUOKA Yusuke 2018-09-04 20:59:24 +09:00 committed by GitHub
parent 53dea091e3
commit 60843cc224
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 7 additions and 9 deletions

View File

@ -223,7 +223,7 @@ func (state *HelmState) SyncReleases(helm helmexec.Interface, additionalValues [
return prepErrs return prepErrs
} }
jobQueue := make(chan *ReleaseSpec) jobQueue := make(chan *syncPrepareResult)
results := make(chan syncResult) results := make(chan syncResult)
if workerLimit < 1 { if workerLimit < 1 {
@ -231,7 +231,7 @@ func (state *HelmState) SyncReleases(helm helmexec.Interface, additionalValues [
} }
for w := 1; w <= workerLimit; w++ { for w := 1; w <= workerLimit; w++ {
go func() { go func() {
for _, prep := range preps { for prep := range jobQueue {
release := prep.release release := prep.release
flags := prep.flags flags := prep.flags
chart := normalizeChart(state.basePath, release.Chart) chart := normalizeChart(state.basePath, release.Chart)
@ -244,15 +244,13 @@ func (state *HelmState) SyncReleases(helm helmexec.Interface, additionalValues [
}() }()
} }
go func() { for i := 0; i < len(preps); i++ {
for i := 0; i < len(state.Releases); i++ { jobQueue <- &preps[i]
jobQueue <- &state.Releases[i] }
} close(jobQueue)
close(jobQueue)
}()
errs := []error{} errs := []error{}
for i := 0; i < len(state.Releases); { for i := 0; i < len(preps); {
select { select {
case res := <-results: case res := <-results:
if len(res.errors) > 0 { if len(res.errors) > 0 {