Explorar o código

Make field map access concurrency-safe (#2476) (#2537)

* Make field map access concurrency-safe



* Move fieldMap init to init()



---------

Signed-off-by: Michael Dresser <michaelmdresser@gmail.com>
Michael Dresser %!s(int64=2) %!d(string=hai) anos
pai
achega
35dbc243a9

+ 8 - 8
core/pkg/filter/allocation/parser.go

@@ -26,16 +26,16 @@ var allocationFilterFields []*ast.Field = []*ast.Field{
 // fieldMap is a lazily loaded mapping from AllocationField to ast.Field
 var fieldMap map[AllocationField]*ast.Field
 
-// DefaultFieldByName returns only default allocation filter fields by name.
-func DefaultFieldByName(field AllocationField) *ast.Field {
-	if fieldMap == nil {
-		fieldMap = make(map[AllocationField]*ast.Field, len(allocationFilterFields))
-		for _, f := range allocationFilterFields {
-			ff := *f
-			fieldMap[AllocationField(ff.Name)] = &ff
-		}
+func init() {
+	fieldMap = make(map[AllocationField]*ast.Field, len(allocationFilterFields))
+	for _, f := range allocationFilterFields {
+		ff := *f
+		fieldMap[AllocationField(ff.Name)] = &ff
 	}
+}
 
+// DefaultFieldByName returns only default allocation filter fields by name.
+func DefaultFieldByName(field AllocationField) *ast.Field {
 	if af, ok := fieldMap[field]; ok {
 		afcopy := *af
 		return &afcopy

+ 8 - 8
core/pkg/filter/asset/parser.go

@@ -25,16 +25,16 @@ var assetFilterFields []*ast.Field = []*ast.Field{
 // fieldMap is a lazily loaded mapping from AllocationField to ast.Field
 var fieldMap map[AssetField]*ast.Field
 
-// DefaultFieldByName returns only default allocation filter fields by name.
-func DefaultFieldByName(field AssetField) *ast.Field {
-	if fieldMap == nil {
-		fieldMap = make(map[AssetField]*ast.Field, len(assetFilterFields))
-		for _, f := range assetFilterFields {
-			ff := *f
-			fieldMap[AssetField(ff.Name)] = &ff
-		}
+func init() {
+	fieldMap = make(map[AssetField]*ast.Field, len(assetFilterFields))
+	for _, f := range assetFilterFields {
+		ff := *f
+		fieldMap[AssetField(ff.Name)] = &ff
 	}
+}
 
+// DefaultFieldByName returns only default allocation filter fields by name.
+func DefaultFieldByName(field AssetField) *ast.Field {
 	if af, ok := fieldMap[field]; ok {
 		afcopy := *af
 		return &afcopy

+ 8 - 8
core/pkg/filter/cloudcost/parser.go

@@ -17,16 +17,16 @@ var cloudCostFilterFields []*ast.Field = []*ast.Field{
 // fieldMap is a lazily loaded mapping from CloudAggregationField to ast.Field
 var fieldMap map[CloudCostField]*ast.Field
 
-// DefaultFieldByName returns only default cloud cost filter fields by name.
-func DefaultFieldByName(field CloudCostField) *ast.Field {
-	if fieldMap == nil {
-		fieldMap = make(map[CloudCostField]*ast.Field, len(cloudCostFilterFields))
-		for _, f := range cloudCostFilterFields {
-			ff := *f
-			fieldMap[CloudCostField(ff.Name)] = &ff
-		}
+func init() {
+	fieldMap = make(map[CloudCostField]*ast.Field, len(cloudCostFilterFields))
+	for _, f := range cloudCostFilterFields {
+		ff := *f
+		fieldMap[CloudCostField(ff.Name)] = &ff
 	}
+}
 
+// DefaultFieldByName returns only default cloud cost filter fields by name.
+func DefaultFieldByName(field CloudCostField) *ast.Field {
 	if af, ok := fieldMap[field]; ok {
 		afcopy := *af
 		return &afcopy