Skip to content

Commit ca8cc0b

Browse files
authored
Use sync.Map instead of normal map for terragrunt project dependencies (diggerhq#878)
Former-commit-id: d8e241e
1 parent 86a8fea commit ca8cc0b

File tree

1 file changed

+14
-11
lines changed

1 file changed

+14
-11
lines changed

libs/digger_config/terragrunt/atlantis/generate.go

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@ package atlantis
22

33
import (
44
"context"
5+
"regexp"
6+
"sort"
7+
58
"github.com/gruntwork-io/terragrunt/cli/commands/terraform"
69
"github.com/gruntwork-io/terragrunt/config"
710
"github.com/gruntwork-io/terragrunt/options"
811
"golang.org/x/sync/errgroup"
912
"golang.org/x/sync/semaphore"
10-
"regexp"
11-
"sort"
1213

1314
"github.com/hashicorp/go-getter"
1415
log "github.com/sirupsen/logrus"
@@ -693,7 +694,7 @@ func Parse(gitRoot string, projectHclFiles []string, createHclProjectExternalChi
693694
ctx := context.Background()
694695
errGroup, _ := errgroup.WithContext(ctx)
695696
sem := semaphore.NewWeighted(10)
696-
potentialProjectDependencies := make(map[string][]string)
697+
projectDependenciesMap := sync.Map{}
697698
for _, workingDir := range workingDirs {
698699
terragruntFiles, err := getAllTerragruntFiles(filterPath, projectHclFiles, workingDir)
699700
if err != nil {
@@ -734,7 +735,7 @@ func Parse(gitRoot string, projectHclFiles []string, createHclProjectExternalChi
734735
return nil
735736
}
736737

737-
potentialProjectDependencies[project.Name] = projDeps
738+
projectDependenciesMap.Store(project.Name, projDeps)
738739

739740
// Lock the list as only one goroutine should be writing to atlantisConfig.Projects at a time
740741
lock.Lock()
@@ -864,19 +865,21 @@ func Parse(gitRoot string, projectHclFiles []string, createHclProjectExternalChi
864865

865866
dependsOn := make(map[string][]string)
866867

867-
for projectName, dependencies := range potentialProjectDependencies {
868-
for _, dep := range dependencies {
869-
_, ok := potentialProjectDependencies[dep]
868+
projectDependenciesMap.Range(func(projectName, dependencies interface{}) bool {
869+
project := projectName.(string)
870+
for _, dep := range dependencies.([]string) {
871+
_, ok := projectDependenciesMap.Load(dep)
870872
if ok {
871-
deps, ok := dependsOn[projectName]
873+
deps, ok := dependsOn[project]
872874
if ok {
873-
dependsOn[projectName] = append(deps, dep)
875+
dependsOn[project] = append(deps, dep)
874876
} else {
875-
dependsOn[projectName] = []string{dep}
877+
dependsOn[project] = []string{dep}
876878
}
877879
}
878880
}
879-
}
881+
return true
882+
})
880883

881884
return &atlantisConfig, dependsOn, nil
882885
}

0 commit comments

Comments
 (0)