Skip to content

Commit dfe6c22

Browse files
Merge pull request #513 from damemi/bz1876918
Bug 1876918: Move deferred taint cleanup call to ensure all are removed
2 parents 26f8888 + 60ee482 commit dfe6c22

File tree

2 files changed

+41
-10
lines changed

2 files changed

+41
-10
lines changed

test/e2e/framework/node/resource.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -584,6 +584,14 @@ func CreatePodsPerNodeForSimpleApp(c clientset.Interface, namespace, appName str
584584
return podLabels
585585
}
586586

587+
// RemoveTaintsOffNode removes a list of taints from the given node
588+
// It is simply a helper wrapper for RemoveTaintOffNode
589+
func RemoveTaintsOffNode(c clientset.Interface, nodeName string, taints []v1.Taint) {
590+
for _, taint := range taints {
591+
RemoveTaintOffNode(c, nodeName, taint)
592+
}
593+
}
594+
587595
// RemoveTaintOffNode removes the given taint from the given node.
588596
func RemoveTaintOffNode(c clientset.Interface, nodeName string, taint v1.Taint) {
589597
err := removeNodeTaint(c, nodeName, nil, &taint)

test/e2e/scheduling/priorities.go

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -307,19 +307,40 @@ var _ = SIGDescribe("SchedulerPriorities [Serial]", func() {
307307
// Apply 10 taints to first node
308308
nodeName := nodeList.Items[0].Name
309309

310-
ginkgo.By("Trying to apply 10 (tolerable) taints on the first node.")
310+
// First, create a set of tolerable taints (+tolerations) for the first node.
311+
// Generate 10 tolerable taints for the first node (and matching tolerations)
312+
tolerableTaints := make([]v1.Taint, 0)
311313
var tolerations []v1.Toleration
312314
for i := 0; i < 10; i++ {
313-
testTaint := addRandomTaintToNode(cs, nodeName)
315+
testTaint := getRandomTaint()
316+
tolerableTaints = append(tolerableTaints, testTaint)
314317
tolerations = append(tolerations, v1.Toleration{Key: testTaint.Key, Value: testTaint.Value, Effect: testTaint.Effect})
315-
defer e2enode.RemoveTaintOffNode(cs, nodeName, *testTaint)
316318
}
319+
// Generate 10 intolerable taints for each of the remaining nodes
320+
intolerableTaints := make(map[string][]v1.Taint)
321+
for i := 1; i < len(nodeList.Items); i++ {
322+
nodeTaints := make([]v1.Taint, 0)
323+
for i := 0; i < 10; i++ {
324+
nodeTaints = append(nodeTaints, getRandomTaint())
325+
}
326+
intolerableTaints[nodeList.Items[i].Name] = nodeTaints
327+
}
328+
329+
// Apply the tolerable taints generated above to the first node
330+
ginkgo.By("Trying to apply 10 (tolerable) taints on the first node.")
331+
// We immediately defer the removal of these taints because addTaintToNode can
332+
// panic and RemoveTaintsOffNode does not return an error if the taint does not exist.
333+
defer e2enode.RemoveTaintsOffNode(cs, nodeName, tolerableTaints)
334+
for _, taint := range tolerableTaints {
335+
addTaintToNode(cs, nodeName, taint)
336+
}
337+
// Apply the intolerable taints to each of the following nodes
317338
ginkgo.By("Adding 10 intolerable taints to all other nodes")
318339
for i := 1; i < len(nodeList.Items); i++ {
319340
node := nodeList.Items[i]
320-
for i := 0; i < 10; i++ {
321-
testTaint := addRandomTaintToNode(cs, node.Name)
322-
defer e2enode.RemoveTaintOffNode(cs, node.Name, *testTaint)
341+
defer e2enode.RemoveTaintsOffNode(cs, node.Name, intolerableTaints[node.Name])
342+
for _, taint := range intolerableTaints[node.Name] {
343+
addTaintToNode(cs, node.Name, taint)
323344
}
324345
}
325346

@@ -614,13 +635,15 @@ func createRC(ns, rsName string, replicas int32, rcPodLabels map[string]string,
614635
return rc
615636
}
616637

617-
func addRandomTaintToNode(cs clientset.Interface, nodeName string) *v1.Taint {
618-
testTaint := v1.Taint{
619-
Key: fmt.Sprintf("kubernetes.io/e2e-taint-key-%s", string(uuid.NewUUID())),
638+
func getRandomTaint() v1.Taint {
639+
return v1.Taint{
640+
Key: fmt.Sprintf("kubernetes.io/e2e-scheduling-priorities-%s", string(uuid.NewUUID()[:23])),
620641
Value: fmt.Sprintf("testing-taint-value-%s", string(uuid.NewUUID())),
621642
Effect: v1.TaintEffectPreferNoSchedule,
622643
}
644+
}
645+
646+
func addTaintToNode(cs clientset.Interface, nodeName string, testTaint v1.Taint) {
623647
e2enode.AddOrUpdateTaintOnNode(cs, nodeName, testTaint)
624648
framework.ExpectNodeHasTaint(cs, nodeName, &testTaint)
625-
return &testTaint
626649
}

0 commit comments

Comments
 (0)