diff --git a/workflow/controller/controller.go b/workflow/controller/controller.go index 48c4ca1af392..28f85455e5c1 100644 --- a/workflow/controller/controller.go +++ b/workflow/controller/controller.go @@ -34,6 +34,7 @@ import ( wfextvv1alpha1 "github.com/argoproj/argo/pkg/client/informers/externalversions/workflow/v1alpha1" authutil "github.com/argoproj/argo/util/auth" "github.com/argoproj/argo/workflow/common" + controllercache "github.com/argoproj/argo/workflow/controller/cache" "github.com/argoproj/argo/workflow/controller/pod" "github.com/argoproj/argo/workflow/cron" "github.com/argoproj/argo/workflow/hydrator" @@ -658,6 +659,7 @@ func (wfc *WorkflowController) newPodInformer() cache.SharedIndexInformer { } if !pod.SignificantPodChange(oldPod, newPod) { log.WithField("key", key).Info("insignificant pod change") + pod.LogChanges(oldPod, newPod) return } wfc.podQueue.Add(key) diff --git a/workflow/controller/pod/log.go b/workflow/controller/pod/log.go new file mode 100644 index 000000000000..bde0b40410fc --- /dev/null +++ b/workflow/controller/pod/log.go @@ -0,0 +1,16 @@ +package pod + +import ( + "encoding/json" + + log "github.com/sirupsen/logrus" + apiv1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/util/strategicpatch" +) + +func LogChanges(oldPod *apiv1.Pod, newPod *apiv1.Pod) { + a, _ := json.Marshal(oldPod) + b, _ := json.Marshal(newPod) + patch, _ := strategicpatch.CreateTwoWayMergePatch(a, b, &apiv1.Pod{}) + log.Debugln(string(patch)) +} diff --git a/workflow/controller/pod/significant.go b/workflow/controller/pod/significant.go index e9c2b7f7d8e6..ac464b8da5ea 100644 --- a/workflow/controller/pod/significant.go +++ b/workflow/controller/pod/significant.go @@ -1,11 +1,14 @@ package pod import ( + "os" + apiv1 "k8s.io/api/core/v1" ) func SignificantPodChange(from *apiv1.Pod, to *apiv1.Pod) bool { - return from.Spec.NodeName != to.Spec.NodeName || + return os.Getenv("ALL_POD_CHANGES_SIGNIFICANT") == "true" || + from.Spec.NodeName != to.Spec.NodeName || from.Status.Phase != to.Status.Phase || from.Status.Message != to.Status.Message || from.Status.PodIP != to.Status.PodIP || diff --git a/workflow/controller/pod/significant_test.go b/workflow/controller/pod/significant_test.go index 534d1b7fa277..d2823d1aa705 100644 --- a/workflow/controller/pod/significant_test.go +++ b/workflow/controller/pod/significant_test.go @@ -1,6 +1,7 @@ package pod import ( + "os" "testing" "github.com/stretchr/testify/assert" @@ -9,8 +10,14 @@ import ( ) func Test_SgnificantPodChange(t *testing.T) { - assert.False(t, SignificantPodChange(&corev1.Pod{}, &corev1.Pod{}), "No change") - + t.Run("NoChange", func(t *testing.T) { + assert.False(t, SignificantPodChange(&corev1.Pod{}, &corev1.Pod{})) + }) + t.Run("ALL_POD_CHANGES_SIGNIFICANT", func(t *testing.T) { + _ = os.Setenv("ALL_POD_CHANGES_SIGNIFICANT", "true") + defer func() { _ = os.Unsetenv("ALL_POD_CHANGES_SIGNIFICANT") }() + assert.True(t, SignificantPodChange(&corev1.Pod{}, &corev1.Pod{})) + }) t.Run("DeletionTimestamp", func(t *testing.T) { now := metav1.Now() assert.True(t, SignificantPodChange(&corev1.Pod{}, &corev1.Pod{ObjectMeta: metav1.ObjectMeta{DeletionTimestamp: &now}}), "deletion timestamp change")