Merge pull request #121142 from aleksandra-malinowska/sts-concurrent-write-fix

Fix concurrent map writes on missing PVC creation in StatefulSet controller
This commit is contained in:
Kubernetes Prow Robot 2023-10-12 17:11:19 +02:00 committed by GitHub
commit bae6911b11
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 4 additions and 3 deletions

View File

@ -2933,6 +2933,7 @@ func TestParallelScale(t *testing.T) {
} { } {
t.Run(tc.desc, func(t *testing.T) { t.Run(tc.desc, func(t *testing.T) {
set := burst(newStatefulSet(0)) set := burst(newStatefulSet(0))
set.Spec.VolumeClaimTemplates[0].ObjectMeta.Labels = map[string]string{"test": "test"}
parallelScale(t, set, tc.replicas, tc.desiredReplicas, assertBurstInvariants) parallelScale(t, set, tc.replicas, tc.desiredReplicas, assertBurstInvariants)
}) })
} }

View File

@ -339,8 +339,8 @@ func getPersistentVolumeClaims(set *apps.StatefulSet, pod *v1.Pod) map[string]v1
templates := set.Spec.VolumeClaimTemplates templates := set.Spec.VolumeClaimTemplates
claims := make(map[string]v1.PersistentVolumeClaim, len(templates)) claims := make(map[string]v1.PersistentVolumeClaim, len(templates))
for i := range templates { for i := range templates {
claim := templates[i] claim := templates[i].DeepCopy()
claim.Name = getPersistentVolumeClaimName(set, &claim, ordinal) claim.Name = getPersistentVolumeClaimName(set, claim, ordinal)
claim.Namespace = set.Namespace claim.Namespace = set.Namespace
if claim.Labels != nil { if claim.Labels != nil {
for key, value := range set.Spec.Selector.MatchLabels { for key, value := range set.Spec.Selector.MatchLabels {
@ -349,7 +349,7 @@ func getPersistentVolumeClaims(set *apps.StatefulSet, pod *v1.Pod) map[string]v1
} else { } else {
claim.Labels = set.Spec.Selector.MatchLabels claim.Labels = set.Spec.Selector.MatchLabels
} }
claims[templates[i].Name] = claim claims[templates[i].Name] = *claim
} }
return claims return claims
} }