Skip to content
This repository was archived by the owner on Jul 30, 2021. It is now read-only.

Commit 99095c4

Browse files
diegsrphillips
authored andcommitted
e2e: better delete api wait condition. (#900)
This waits for the real pods to be deleted instead of an apiserver liveness check, since that is racy and doesn't convey much.
1 parent 1960a0e commit 99095c4

File tree

1 file changed

+17
-25
lines changed

1 file changed

+17
-25
lines changed

e2e/deleteapi_test.go

Lines changed: 17 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -15,36 +15,28 @@ func TestDeleteAPI(t *testing.T) {
1515
}
1616

1717
// delete any api-server pods
18-
for i, pod := range apiPods.Items {
19-
err := client.CoreV1().Pods("kube-system").Delete(pod.ObjectMeta.Name, &metav1.DeleteOptions{})
20-
if err != nil {
21-
// TODO: if HA we should be able to successfully
22-
// delete all. Until then just log if we can't delete
23-
// something that isn't the first pod.
24-
if i == 0 {
25-
t.Fatalf("error deleting api-server pod: %v", err)
26-
} else {
27-
t.Logf("error deleting api-server pod: %v", err)
28-
}
18+
deletedPods := make(map[string]struct{})
19+
for _, pod := range apiPods.Items {
20+
if err := client.CoreV1().Pods("kube-system").Delete(pod.ObjectMeta.Name, &metav1.DeleteOptions{}); err != nil {
21+
t.Fatalf("error deleting api-server pod: %v", err)
2922
}
23+
deletedPods[pod.ObjectMeta.Name] = struct{}{}
3024
}
3125

32-
// wait for api-server to go down by waiting until listing pods returns
33-
// errors. This is potentially error prone, but without waiting for the
34-
// apiserver to go down the next step will return sucess before the
35-
// apiserver is ever destroyed.
36-
waitDestroy := func() error {
37-
// only checking api being down , specific function not important
38-
_, err := client.Discovery().ServerVersion()
39-
40-
if err == nil {
41-
return fmt.Errorf("waiting for apiserver to go down: %v", err)
26+
// wait for pods to be completely deleted.
27+
if err := retry(100, 1*time.Second, func() error {
28+
remainingPods, err := client.CoreV1().Pods("kube-system").List(metav1.ListOptions{LabelSelector: "k8s-app=kube-apiserver"})
29+
if err != nil {
30+
return fmt.Errorf("error checking for remaining apiserver pods: %v", err)
31+
}
32+
for _, pod := range remainingPods.Items {
33+
if _, ok := deletedPods[pod.ObjectMeta.Name]; ok {
34+
return fmt.Errorf("pod %s is still not deleted", pod.ObjectMeta.Name)
35+
}
4236
}
4337
return nil
44-
}
45-
46-
if err := retry(100, 500*time.Millisecond, waitDestroy); err != nil {
47-
t.Fatal(err)
38+
}); err != nil {
39+
t.Fatalf("error waiting for apiserver pods to be deleted: %v", err)
4840
}
4941

5042
// wait until api server is back up

0 commit comments

Comments
 (0)