Skip to content

Commit c08dcd7

Browse files
committed
fix(server): handle transient errors before ToStatusError loses type info
Signed-off-by: HsiuChuanHsu <hchsu2106@gmail.com>
1 parent 30c3c9d commit c08dcd7

1 file changed

Lines changed: 14 additions & 2 deletions

File tree

server/workflow/workflow_server.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)