@@ -31,10 +31,13 @@ import (
3131 sutils "github.com/argoproj/argo-workflows/v4/server/utils"
3232 "github.com/argoproj/argo-workflows/v4/server/workflow/store"
3333 argoutil "github.com/argoproj/argo-workflows/v4/util"
34+ errorsutil "github.com/argoproj/argo-workflows/v4/util/errors"
3435 "github.com/argoproj/argo-workflows/v4/util/fields"
3536 "github.com/argoproj/argo-workflows/v4/util/instanceid"
3637 "github.com/argoproj/argo-workflows/v4/util/logging"
3738 "github.com/argoproj/argo-workflows/v4/util/logs"
39+ retry "github.com/argoproj/argo-workflows/v4/util/retry"
40+ waitutil "github.com/argoproj/argo-workflows/v4/util/wait"
3841 "github.com/argoproj/argo-workflows/v4/workflow/common"
3942 "github.com/argoproj/argo-workflows/v4/workflow/creator"
4043 "github.com/argoproj/argo-workflows/v4/workflow/hydrator"
@@ -135,7 +138,12 @@ func (s *workflowServer) CreateWorkflow(ctx context.Context, req *workflowpkg.Wo
135138 return workflow , nil
136139 }
137140
138- wf , err := wfClient .ArgoprojV1alpha1 ().Workflows (req .Namespace ).Create (ctx , req .Workflow , metav1.CreateOptions {})
141+ var wf * wfv1.Workflow
142+ err = waitutil .Backoff (retry .DefaultRetry (ctx ), func () (bool , error ) {
143+ var createErr error
144+ wf , createErr = wfClient .ArgoprojV1alpha1 ().Workflows (req .Namespace ).Create (ctx , req .Workflow , metav1.CreateOptions {})
145+ return ! errorsutil .IsTransientErr (ctx , createErr ), createErr
146+ })
139147 logger := logging .RequireLoggerFromContext (ctx )
140148 if err != nil {
141149 if apierr .IsServerTimeout (err ) && req .Workflow .GenerateName != "" && req .Workflow .Name != "" {
@@ -856,7 +864,11 @@ func (s *workflowServer) SubmitWorkflow(ctx context.Context, req *workflowpkg.Wo
856864 return workflow , nil
857865 }
858866
859- wf , err = wfClient .ArgoprojV1alpha1 ().Workflows (req .Namespace ).Create (ctx , wf , metav1.CreateOptions {})
867+ err = waitutil .Backoff (retry .DefaultRetry (ctx ), func () (bool , error ) {
868+ var createErr error
869+ wf , createErr = wfClient .ArgoprojV1alpha1 ().Workflows (req .Namespace ).Create (ctx , wf , metav1.CreateOptions {})
870+ return ! errorsutil .IsTransientErr (ctx , createErr ), createErr
871+ })
860872 if err != nil {
861873 return nil , sutils .ToStatusError (err , codes .InvalidArgument )
862874 }
0 commit comments