From a56cd09f29b083af554dd9cbeff6008e8780a9fa Mon Sep 17 00:00:00 2001 From: shuangkun Date: Tue, 19 Mar 2024 21:44:55 +0800 Subject: [PATCH] fix: containerset does not stop container when pod removed. Fixes: #12210 Signed-off-by: shuangkun --- workflow/controller/controller_test.go | 2 +- workflow/controller/operator.go | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/workflow/controller/controller_test.go b/workflow/controller/controller_test.go index 16bf6c0fa88a..61ba8a854ad7 100644 --- a/workflow/controller/controller_test.go +++ b/workflow/controller/controller_test.go @@ -548,7 +548,7 @@ func makePodsPhase(ctx context.Context, woc *wfOperationCtx, phase apiv1.PodPhas func deletePods(ctx context.Context, woc *wfOperationCtx) { for _, obj := range woc.controller.podInformer.GetStore().List() { pod := obj.(*apiv1.Pod) - err := woc.controller.kubeclientset.CoreV1().Pods(pod.Namespace).Delete(ctx, pod.Name, metav1.DeleteOptions{}) + err := woc.controller.kubeclientset.CoreV1().Pods(pod.Namespace).Delete(ctx, pod.Name, metav1.DeleteOptions{GracePeriodSeconds: pointer.Int64Ptr(0)}) if err != nil { panic(err) } diff --git a/workflow/controller/operator.go b/workflow/controller/operator.go index 9a830aed186b..15ddec3671d3 100644 --- a/workflow/controller/operator.go +++ b/workflow/controller/operator.go @@ -1224,6 +1224,17 @@ func (woc *wfOperationCtx) podReconciliation(ctx context.Context) (error, bool) woc.updated = true } woc.markNodePhase(node.Name, wfv1.NodeError, "pod deleted") + // Set pod's child(container) error if pod deleted + for _, childNodeID := range node.Children { + childNode, err := woc.wf.Status.Nodes.Get(childNodeID) + if err != nil { + woc.log.Errorf("was unable to obtain node for %s", childNodeID) + continue + } + if childNode.Type == wfv1.NodeTypeContainer { + woc.markNodeError(childNode.Name, errors.New("","container deleted")) + } + } } } return nil, !taskResultIncomplete