Skip to content

workflow other error can't backoff retery and RetryInterval is invalid #572

@nogolang

Description

@nogolang

workflow 模式下,当分支返回其他错误,不会进行指数退避重试,而是会采用固定重试

	AddCommand("http_workflow_saga_rollback", func() string {
		wfName := "wf_saga_rollback"
		err := workflow.Register(wfName, func(wf *workflow.Workflow, data []byte) error {
			req := MustUnmarshalReqHTTP(data)
			_, err := wf.NewBranch().OnRollback(func(bb *dtmcli.BranchBarrier) error {
				_, err := wf.NewRequest().SetBody(req).Post(busi.Busi + "/TransOutRevert")
				return err
			}).NewRequest().SetBody(req).Post(busi.Busi + "/TransOut")
			if err != nil {
				return err
			}
			_, err = wf.NewBranch().OnRollback(func(bb *dtmcli.BranchBarrier) error {
				_, err := wf.NewRequest().SetBody(req).Post(busi.Busi + "/TransInRevert")
				return err
			}).NewRequest().SetBody(req).Post(busi.Busi + "/TransIn")
			if err != nil {
				return err
			}
			return nil
		})
		logger.FatalIfError(err)

                //只会固定时间重试,固定为10s
		req := &busi.ReqHTTP{Amount: 30, TransOutResult: "ERROR"}
		//req := &busi.ReqHTTP{Amount: 30, TransInResult: dtmcli.ResultFailure}

		gid := shortuuid.New()
		err = workflow.Execute(wfName, gid, dtmimp.MustMarshal(req))
		logger.Infof("result is: %v", err)
		return gid
	})

因为上一个问题,指数退避变为了固定重试,所以我想调整RetryInterval,但是发现 虽然在ui 里改变了间隔时间
但是实际重试间隔依旧为10s左右

	err := workflow.Register2(wfName, func(wf *workflow.Workflow, data []byte) ([]byte, error) {
		var paramData Param
		err := json.Unmarshal(data, &paramData)
		if err != nil {
			return nil, err
		}
		log.Println("进入了Register")

		wf.NewBranch().OnRollback(func(bb *dtmcli.BranchBarrier) error {
			_, err := wf.NewRequest().SetBody(model.TransRequestArgsHTTP{
				Uid:    paramData.AUid,
				Amount: paramData.Amount,
			}).Post(baseUrl + "/api/SagaTransOutRollBack")
			if err != nil {
				return err
			}
			return nil
		})
		res, err := wf.NewRequest().SetBody(&model.TransRequestArgsHTTP{
			Uid:    paramData.AUid,
			Amount: -paramData.Amount,
		}).Post(baseUrl + "/api/SagaTransOut")
		if err != nil {
			return nil, err
		}
		wf.NewBranch().OnRollback(func(bb *dtmcli.BranchBarrier) error {
			_, err := wf.NewRequest().SetBody(&model.TransRequestArgsHTTP{
				Uid:    paramData.BUid,
				Amount: -paramData.Amount,
			}).Post(baseUrl + "/api/SagaTransInRollBack")
			if err != nil {
				return err
			}
			return nil
		})
		res, err = wf.NewRequest().SetBody(&model.TransRequestArgsHTTP{Uid: paramData.BUid, Amount: paramData.Amount}).Post(baseUrl + "/api/SagaTransIn")
		if err != nil {
			return nil, err
		}
		return res.Body(), nil
	}, func(wf *workflow.Workflow) {

		//因为上一个问题,指数退避变为了固定重试,所以我想调整RetryInterval
		wf.RetryInterval = 5
	})
Image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions