Skip to content

Commit 712cf40

Browse files
authored
Merge pull request #6755 from zhzhuang-zju/rbvalidation
fix nil pointer dereference error
2 parents f9cd5c9 + 825d700 commit 712cf40

File tree

2 files changed

+486
-7
lines changed

2 files changed

+486
-7
lines changed

pkg/webhook/resourcebinding/validating.go

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,16 @@ func isQuotaRelevantFieldChanged(oldRB, newRB *workv1alpha2.ResourceBinding) boo
350350
if oldRB == nil || newRB == nil {
351351
return true
352352
}
353+
if isResourceRequestChanged(oldRB, newRB) {
354+
return true
355+
}
356+
if isScheduledReplicasChanged(oldRB, newRB) {
357+
return true
358+
}
359+
return isComponentsChanged(oldRB, newRB)
360+
}
361+
362+
func isResourceRequestChanged(oldRB, newRB *workv1alpha2.ResourceBinding) bool {
353363
oldReq := corev1.ResourceList{}
354364
if oldRB.Spec.ReplicaRequirements != nil {
355365
oldReq = oldRB.Spec.ReplicaRequirements.ResourceRequest
@@ -358,9 +368,10 @@ func isQuotaRelevantFieldChanged(oldRB, newRB *workv1alpha2.ResourceBinding) boo
358368
if newRB.Spec.ReplicaRequirements != nil {
359369
newReq = newRB.Spec.ReplicaRequirements.ResourceRequest
360370
}
361-
if !areResourceListsEqual(oldReq, newReq) {
362-
return true
363-
}
371+
return !areResourceListsEqual(oldReq, newReq)
372+
}
373+
374+
func isScheduledReplicasChanged(oldRB, newRB *workv1alpha2.ResourceBinding) bool {
364375
oldScheduledReplicas := int32(0)
365376
for _, c := range oldRB.Spec.Clusters {
366377
oldScheduledReplicas += c.Replicas
@@ -369,9 +380,10 @@ func isQuotaRelevantFieldChanged(oldRB, newRB *workv1alpha2.ResourceBinding) boo
369380
for _, c := range newRB.Spec.Clusters {
370381
newScheduledReplicas += c.Replicas
371382
}
372-
if oldScheduledReplicas != newScheduledReplicas {
373-
return true
374-
}
383+
return oldScheduledReplicas != newScheduledReplicas
384+
}
385+
386+
func isComponentsChanged(oldRB, newRB *workv1alpha2.ResourceBinding) bool {
375387
if len(oldRB.Spec.Components) != len(newRB.Spec.Components) {
376388
return true
377389
}
@@ -381,7 +393,12 @@ func isQuotaRelevantFieldChanged(oldRB, newRB *workv1alpha2.ResourceBinding) boo
381393
if oldComponent.Replicas != newComponent.Replicas {
382394
return true
383395
}
384-
if !areResourceListsEqual(oldComponent.ReplicaRequirements.ResourceRequest, newComponent.ReplicaRequirements.ResourceRequest) {
396+
397+
if (oldComponent.ReplicaRequirements == nil) != (newComponent.ReplicaRequirements == nil) {
398+
return true
399+
}
400+
401+
if oldComponent.ReplicaRequirements != nil && newComponent.ReplicaRequirements != nil && !areResourceListsEqual(oldComponent.ReplicaRequirements.ResourceRequest, newComponent.ReplicaRequirements.ResourceRequest) {
385402
return true
386403
}
387404
}

0 commit comments

Comments
 (0)