diff --git a/pkg/handler/connect.go b/pkg/handler/connect.go index b4f7c966..5279b6b7 100644 --- a/pkg/handler/connect.go +++ b/pkg/handler/connect.go @@ -1108,6 +1108,10 @@ func deletePodImmediately(ctx context.Context, clientset *kubernetes.Clientset, if err != nil { return err } + // delete old pod then delete new pod + sort.SliceStable(result.Items, func(i, j int) bool { + return result.Items[i].DeletionTimestamp != nil + }) for _, item := range result.Items { options := metav1.DeleteOptions{GracePeriodSeconds: ptr.To[int64](0)} err = clientset.CoreV1().Pods(ns).Delete(ctx, item.Name, options) diff --git a/pkg/handler/connect_test.go b/pkg/handler/connect_test.go index 995e3812..35491812 100644 --- a/pkg/handler/connect_test.go +++ b/pkg/handler/connect_test.go @@ -2,10 +2,15 @@ package handler import ( "net" + "reflect" + "sort" "testing" + "time" "github.com/google/gopacket/routing" "github.com/libp2p/go-netroute" + v1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) func TestRoute(t *testing.T) { @@ -149,3 +154,47 @@ func TestRemoveCIDRsContainingIPs(t *testing.T) { }) } } + +func TestSort(t *testing.T) { + list := v1.PodList{ + Items: []v1.Pod{ + { + ObjectMeta: metav1.ObjectMeta{ + Name: "a", + DeletionTimestamp: nil, + }, + }, + { + ObjectMeta: metav1.ObjectMeta{ + Name: "b", + DeletionTimestamp: &metav1.Time{ + Time: time.Now(), + }, + }, + }, + { + ObjectMeta: metav1.ObjectMeta{ + Name: "c", + DeletionTimestamp: nil, + }, + }, + { + ObjectMeta: metav1.ObjectMeta{ + Name: "d", + DeletionTimestamp: nil, + }, + }, + }, + } + sort.SliceStable(list.Items, func(i, j int) bool { + return list.Items[i].DeletionTimestamp != nil + }) + var names []string + for _, item := range list.Items { + names = append(names, item.Name) + } + equal := reflect.DeepEqual(names, []string{"b", "a", "c", "d"}) + if !equal { + t.Fatal() + } +}