From 54714686bc69d0b41c6a4ba680adda83ca363ab1 Mon Sep 17 00:00:00 2001 From: Aleksandra Malinowska Date: Wed, 11 Oct 2023 13:24:15 +0200 Subject: [PATCH 1/2] Modify test PVC to detect concurrent map write bug --- pkg/controller/statefulset/stateful_set_control_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/controller/statefulset/stateful_set_control_test.go b/pkg/controller/statefulset/stateful_set_control_test.go index f018646d3af..08af86bedc4 100644 --- a/pkg/controller/statefulset/stateful_set_control_test.go +++ b/pkg/controller/statefulset/stateful_set_control_test.go @@ -2933,6 +2933,7 @@ func TestParallelScale(t *testing.T) { } { t.Run(tc.desc, func(t *testing.T) { set := burst(newStatefulSet(0)) + set.Spec.VolumeClaimTemplates[0].ObjectMeta.Labels = map[string]string{"test": "test"} parallelScale(t, set, tc.replicas, tc.desiredReplicas, assertBurstInvariants) }) } From 7989400bef51dde8b9e3d8a30fbbe1e19fd7eda8 Mon Sep 17 00:00:00 2001 From: Aleksandra Malinowska Date: Wed, 11 Oct 2023 13:35:10 +0200 Subject: [PATCH 2/2] Fix concurrent write when filling PVC labels --- pkg/controller/statefulset/stateful_set_utils.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/controller/statefulset/stateful_set_utils.go b/pkg/controller/statefulset/stateful_set_utils.go index 6898aabe56e..5a80f368386 100644 --- a/pkg/controller/statefulset/stateful_set_utils.go +++ b/pkg/controller/statefulset/stateful_set_utils.go @@ -339,8 +339,8 @@ func getPersistentVolumeClaims(set *apps.StatefulSet, pod *v1.Pod) map[string]v1 templates := set.Spec.VolumeClaimTemplates claims := make(map[string]v1.PersistentVolumeClaim, len(templates)) for i := range templates { - claim := templates[i] - claim.Name = getPersistentVolumeClaimName(set, &claim, ordinal) + claim := templates[i].DeepCopy() + claim.Name = getPersistentVolumeClaimName(set, claim, ordinal) claim.Namespace = set.Namespace if claim.Labels != nil { for key, value := range set.Spec.Selector.MatchLabels { @@ -349,7 +349,7 @@ func getPersistentVolumeClaims(set *apps.StatefulSet, pod *v1.Pod) map[string]v1 } else { claim.Labels = set.Spec.Selector.MatchLabels } - claims[templates[i].Name] = claim + claims[templates[i].Name] = *claim } return claims }