diff --git a/internal/util/crushlocation.go b/internal/util/crushlocation.go index bc68bf4e6..69a302697 100644 --- a/internal/util/crushlocation.go +++ b/internal/util/crushlocation.go @@ -48,6 +48,10 @@ func getCrushLocationMap(crushLocationLabels string, nodeLabels map[string]strin // Determine values for requested labels from node labels crushLocationMap := make(map[string]string, len(labelsIn)) for key, value := range nodeLabels { + // label with empty value is not considered. + if value == "" { + continue + } if _, ok := labelsIn[key]; !ok { continue } diff --git a/internal/util/crushlocation_test.go b/internal/util/crushlocation_test.go index 0e06cefd1..141f64d78 100644 --- a/internal/util/crushlocation_test.go +++ b/internal/util/crushlocation_test.go @@ -100,6 +100,17 @@ func Test_getCrushLocationMap(t *testing.T) { }, want: map[string]string{"host": "worker-1"}, }, + { + name: "matching crushlocation and node labels with empty value", + args: input{ + crushLocationLabels: "topology.io/region,topology.io/zone", + nodeLabels: map[string]string{ + "topology.io/region": "region1", + "topology.io/zone": "", + }, + }, + want: map[string]string{"region": "region1"}, + }, } for _, tt := range tests { currentTT := tt