Skip to content

Commit aeb7d5f

Browse files
authored
[PodSetInfo] Skip duplicate Tolerations during merge. (#2498)
1 parent 4ec7bb4 commit aeb7d5f

File tree

3 files changed

+59
-1
lines changed

3 files changed

+59
-1
lines changed

‎pkg/podset/podset.go‎

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,13 @@ func (podSetInfo *PodSetInfo) Merge(o PodSetInfo) error {
108108
podSetInfo.Annotations = utilmaps.MergeKeepFirst(podSetInfo.Annotations, o.Annotations)
109109
podSetInfo.Labels = utilmaps.MergeKeepFirst(podSetInfo.Labels, o.Labels)
110110
podSetInfo.NodeSelector = utilmaps.MergeKeepFirst(podSetInfo.NodeSelector, o.NodeSelector)
111-
podSetInfo.Tolerations = append(podSetInfo.Tolerations, o.Tolerations...)
111+
112+
// make sure we don't duplicate tolerations
113+
for _, t := range o.Tolerations {
114+
if slices.Index(podSetInfo.Tolerations, t) == -1 {
115+
podSetInfo.Tolerations = append(podSetInfo.Tolerations, t)
116+
}
117+
}
112118
return nil
113119
}
114120

‎pkg/podset/podset_test.go‎

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,40 @@ func TestMergeRestore(t *testing.T) {
248248
Obj(),
249249
wantRestoreChanges: true,
250250
},
251+
"don't duplicate tolerations": {
252+
podSet: basePodSet.DeepCopy(),
253+
info: PodSetInfo{
254+
Annotations: map[string]string{
255+
"a1": "a1v",
256+
},
257+
Labels: map[string]string{
258+
"l1": "l1v",
259+
},
260+
NodeSelector: map[string]string{
261+
"ns1": "ns1v",
262+
},
263+
Tolerations: []corev1.Toleration{
264+
{
265+
Key: "t0",
266+
Operator: corev1.TolerationOpEqual,
267+
Value: "t0v",
268+
Effect: corev1.TaintEffectNoSchedule,
269+
},
270+
},
271+
},
272+
wantPodSet: utiltesting.MakePodSet("", 1).
273+
NodeSelector(map[string]string{"ns0": "ns0v", "ns1": "ns1v"}).
274+
Labels(map[string]string{"l0": "l0v", "l1": "l1v"}).
275+
Annotations(map[string]string{"a0": "a0v", "a1": "a1v"}).
276+
Toleration(corev1.Toleration{
277+
Key: "t0",
278+
Operator: corev1.TolerationOpEqual,
279+
Value: "t0v",
280+
Effect: corev1.TaintEffectNoSchedule,
281+
}).
282+
Obj(),
283+
wantRestoreChanges: true,
284+
},
251285
"conflicting label": {
252286
podSet: basePodSet.DeepCopy(),
253287
info: PodSetInfo{

‎test/integration/controller/jobs/job/job_controller_test.go‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -627,6 +627,12 @@ var _ = ginkgo.Describe("Job controller", ginkgo.Ordered, ginkgo.ContinueOnFailu
627627
Queue(localQueue.Name).
628628
Request(corev1.ResourceCPU, "5").
629629
PodAnnotation("old-ann-key", "old-ann-value").
630+
Toleration(corev1.Toleration{
631+
Key: "selector0",
632+
Value: "selector-value1",
633+
Operator: corev1.TolerationOpEqual,
634+
Effect: corev1.TaintEffectNoSchedule,
635+
}).
630636
PodLabel("old-label-key", "old-label-value").
631637
Obj()
632638

@@ -668,6 +674,12 @@ var _ = ginkgo.Describe("Job controller", ginkgo.Ordered, ginkgo.ContinueOnFailu
668674
"selector1": "selector-value1",
669675
},
670676
Tolerations: []corev1.Toleration{
677+
{
678+
Key: "selector0",
679+
Value: "selector-value1",
680+
Operator: corev1.TolerationOpEqual,
681+
Effect: corev1.TaintEffectNoSchedule,
682+
},
671683
{
672684
Key: "selector1",
673685
Value: "selector-value1",
@@ -708,6 +720,12 @@ var _ = ginkgo.Describe("Job controller", ginkgo.Ordered, ginkgo.ContinueOnFailu
708720
gomega.Expect(createdJob.Spec.Template.Spec.NodeSelector).Should(gomega.HaveKeyWithValue("selector1", "selector-value1"))
709721
gomega.Expect(createdJob.Spec.Template.Spec.Tolerations).Should(gomega.BeComparableTo(
710722
[]corev1.Toleration{
723+
{
724+
Key: "selector0",
725+
Value: "selector-value1",
726+
Operator: corev1.TolerationOpEqual,
727+
Effect: corev1.TaintEffectNoSchedule,
728+
},
711729
{
712730
Key: "selector1",
713731
Value: "selector-value1",

0 commit comments

Comments
 (0)