From 91788a035359a4ff32d8ea9d24f53758dd9b829d Mon Sep 17 00:00:00 2001 From: Steven Harrison <33328989+stevo89519@users.noreply.github.com> Date: Tue, 4 Feb 2025 13:28:09 -0500 Subject: [PATCH] IWF-542: Update iwf-idl and replace deprecated workflow type error (#538) --- gen/iwfidl/api/openapi.yaml | 7 ++++ gen/iwfidl/docs/WorkflowConfig.md | 26 ++++++++++++++ gen/iwfidl/docs/WorkflowErrorType.md | 2 ++ gen/iwfidl/model_workflow_config.go | 36 +++++++++++++++++++ gen/iwfidl/model_workflow_error_type.go | 2 ++ integ/wf_state_api_fail_test.go | 2 +- integ/wf_state_api_timeout_test.go | 2 +- iwf-idl | 2 +- .../v4-local-activity-optimization.json | 4 +-- service/interpreter/activityImpl.go | 8 ++--- service/interpreter/workflowImpl.go | 2 +- 11 files changed, 83 insertions(+), 10 deletions(-) diff --git a/gen/iwfidl/api/openapi.yaml b/gen/iwfidl/api/openapi.yaml index c18e8b48..386f24b5 100644 --- a/gen/iwfidl/api/openapi.yaml +++ b/gen/iwfidl/api/openapi.yaml @@ -738,6 +738,7 @@ components: workflowConfigOverride: disableSystemSearchAttribute: true continueAsNewThreshold: 1 + optimizeTimer: true continueAsNewPageSizeInBytes: 4 executingStateIdMode: null optimizeActivity: true @@ -1011,6 +1012,7 @@ components: workflowConfigOverride: disableSystemSearchAttribute: true continueAsNewThreshold: 1 + optimizeTimer: true continueAsNewPageSizeInBytes: 4 executingStateIdMode: null optimizeActivity: true @@ -1341,6 +1343,7 @@ components: - STATE_DECISION_FAILING_WORKFLOW_ERROR_TYPE - CLIENT_API_FAILING_WORKFLOW_ERROR_TYPE - STATE_API_FAIL_MAX_OUT_RETRY_ERROR_TYPE + - STATE_API_FAIL_ERROR_TYPE - INVALID_USER_WORKFLOW_CODE_ERROR_TYPE - RPC_ACQUIRE_LOCK_FAILURE - SERVER_INTERNAL_ERROR_TYPE @@ -1601,6 +1604,7 @@ components: workflowConfig: disableSystemSearchAttribute: true continueAsNewThreshold: 1 + optimizeTimer: true continueAsNewPageSizeInBytes: 4 executingStateIdMode: null optimizeActivity: true @@ -3284,6 +3288,7 @@ components: example: disableSystemSearchAttribute: true continueAsNewThreshold: 1 + optimizeTimer: true continueAsNewPageSizeInBytes: 4 executingStateIdMode: null optimizeActivity: true @@ -3298,6 +3303,8 @@ components: type: integer optimizeActivity: type: boolean + optimizeTimer: + type: boolean type: object Context: example: diff --git a/gen/iwfidl/docs/WorkflowConfig.md b/gen/iwfidl/docs/WorkflowConfig.md index b7c2d6ff..ac490cc1 100644 --- a/gen/iwfidl/docs/WorkflowConfig.md +++ b/gen/iwfidl/docs/WorkflowConfig.md @@ -9,6 +9,7 @@ Name | Type | Description | Notes **ContinueAsNewThreshold** | Pointer to **int32** | | [optional] **ContinueAsNewPageSizeInBytes** | Pointer to **int32** | | [optional] **OptimizeActivity** | Pointer to **bool** | | [optional] +**OptimizeTimer** | Pointer to **bool** | | [optional] ## Methods @@ -154,6 +155,31 @@ SetOptimizeActivity sets OptimizeActivity field to given value. HasOptimizeActivity returns a boolean if a field has been set. +### GetOptimizeTimer + +`func (o *WorkflowConfig) GetOptimizeTimer() bool` + +GetOptimizeTimer returns the OptimizeTimer field if non-nil, zero value otherwise. + +### GetOptimizeTimerOk + +`func (o *WorkflowConfig) GetOptimizeTimerOk() (*bool, bool)` + +GetOptimizeTimerOk returns a tuple with the OptimizeTimer field if it's non-nil, zero value otherwise +and a boolean to check if the value has been set. + +### SetOptimizeTimer + +`func (o *WorkflowConfig) SetOptimizeTimer(v bool)` + +SetOptimizeTimer sets OptimizeTimer field to given value. + +### HasOptimizeTimer + +`func (o *WorkflowConfig) HasOptimizeTimer() bool` + +HasOptimizeTimer returns a boolean if a field has been set. + [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/gen/iwfidl/docs/WorkflowErrorType.md b/gen/iwfidl/docs/WorkflowErrorType.md index fa6e6453..b22016c3 100644 --- a/gen/iwfidl/docs/WorkflowErrorType.md +++ b/gen/iwfidl/docs/WorkflowErrorType.md @@ -9,6 +9,8 @@ * `STATE_API_FAIL_MAX_OUT_RETRY_ERROR_TYPE` (value: `"STATE_API_FAIL_MAX_OUT_RETRY_ERROR_TYPE"`) +* `STATE_API_FAIL_ERROR_TYPE` (value: `"STATE_API_FAIL_ERROR_TYPE"`) + * `INVALID_USER_WORKFLOW_CODE_ERROR_TYPE` (value: `"INVALID_USER_WORKFLOW_CODE_ERROR_TYPE"`) * `RPC_ACQUIRE_LOCK_FAILURE` (value: `"RPC_ACQUIRE_LOCK_FAILURE"`) diff --git a/gen/iwfidl/model_workflow_config.go b/gen/iwfidl/model_workflow_config.go index 72374728..f55069cf 100644 --- a/gen/iwfidl/model_workflow_config.go +++ b/gen/iwfidl/model_workflow_config.go @@ -24,6 +24,7 @@ type WorkflowConfig struct { ContinueAsNewThreshold *int32 `json:"continueAsNewThreshold,omitempty"` ContinueAsNewPageSizeInBytes *int32 `json:"continueAsNewPageSizeInBytes,omitempty"` OptimizeActivity *bool `json:"optimizeActivity,omitempty"` + OptimizeTimer *bool `json:"optimizeTimer,omitempty"` } // NewWorkflowConfig instantiates a new WorkflowConfig object @@ -203,6 +204,38 @@ func (o *WorkflowConfig) SetOptimizeActivity(v bool) { o.OptimizeActivity = &v } +// GetOptimizeTimer returns the OptimizeTimer field value if set, zero value otherwise. +func (o *WorkflowConfig) GetOptimizeTimer() bool { + if o == nil || IsNil(o.OptimizeTimer) { + var ret bool + return ret + } + return *o.OptimizeTimer +} + +// GetOptimizeTimerOk returns a tuple with the OptimizeTimer field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *WorkflowConfig) GetOptimizeTimerOk() (*bool, bool) { + if o == nil || IsNil(o.OptimizeTimer) { + return nil, false + } + return o.OptimizeTimer, true +} + +// HasOptimizeTimer returns a boolean if a field has been set. +func (o *WorkflowConfig) HasOptimizeTimer() bool { + if o != nil && !IsNil(o.OptimizeTimer) { + return true + } + + return false +} + +// SetOptimizeTimer gets a reference to the given bool and assigns it to the OptimizeTimer field. +func (o *WorkflowConfig) SetOptimizeTimer(v bool) { + o.OptimizeTimer = &v +} + func (o WorkflowConfig) MarshalJSON() ([]byte, error) { toSerialize, err := o.ToMap() if err != nil { @@ -228,6 +261,9 @@ func (o WorkflowConfig) ToMap() (map[string]interface{}, error) { if !IsNil(o.OptimizeActivity) { toSerialize["optimizeActivity"] = o.OptimizeActivity } + if !IsNil(o.OptimizeTimer) { + toSerialize["optimizeTimer"] = o.OptimizeTimer + } return toSerialize, nil } diff --git a/gen/iwfidl/model_workflow_error_type.go b/gen/iwfidl/model_workflow_error_type.go index 647cec88..e7403295 100644 --- a/gen/iwfidl/model_workflow_error_type.go +++ b/gen/iwfidl/model_workflow_error_type.go @@ -23,6 +23,7 @@ const ( STATE_DECISION_FAILING_WORKFLOW_ERROR_TYPE WorkflowErrorType = "STATE_DECISION_FAILING_WORKFLOW_ERROR_TYPE" CLIENT_API_FAILING_WORKFLOW_ERROR_TYPE WorkflowErrorType = "CLIENT_API_FAILING_WORKFLOW_ERROR_TYPE" STATE_API_FAIL_MAX_OUT_RETRY_ERROR_TYPE WorkflowErrorType = "STATE_API_FAIL_MAX_OUT_RETRY_ERROR_TYPE" + STATE_API_FAIL_ERROR_TYPE WorkflowErrorType = "STATE_API_FAIL_ERROR_TYPE" INVALID_USER_WORKFLOW_CODE_ERROR_TYPE WorkflowErrorType = "INVALID_USER_WORKFLOW_CODE_ERROR_TYPE" RPC_ACQUIRE_LOCK_FAILURE WorkflowErrorType = "RPC_ACQUIRE_LOCK_FAILURE" SERVER_INTERNAL_ERROR_TYPE WorkflowErrorType = "SERVER_INTERNAL_ERROR_TYPE" @@ -33,6 +34,7 @@ var AllowedWorkflowErrorTypeEnumValues = []WorkflowErrorType{ "STATE_DECISION_FAILING_WORKFLOW_ERROR_TYPE", "CLIENT_API_FAILING_WORKFLOW_ERROR_TYPE", "STATE_API_FAIL_MAX_OUT_RETRY_ERROR_TYPE", + "STATE_API_FAIL_ERROR_TYPE", "INVALID_USER_WORKFLOW_CODE_ERROR_TYPE", "RPC_ACQUIRE_LOCK_FAILURE", "SERVER_INTERNAL_ERROR_TYPE", diff --git a/integ/wf_state_api_fail_test.go b/integ/wf_state_api_fail_test.go index 4d4b0030..553f7ec8 100644 --- a/integ/wf_state_api_fail_test.go +++ b/integ/wf_state_api_fail_test.go @@ -95,7 +95,7 @@ func doTestStateApiFail(t *testing.T, backendType service.BackendType, config *i assertions.Equalf(&iwfidl.WorkflowGetResponse{ WorkflowRunId: startResp.GetWorkflowRunId(), WorkflowStatus: iwfidl.FAILED, - ErrorType: ptr.Any(iwfidl.STATE_API_FAIL_MAX_OUT_RETRY_ERROR_TYPE), + ErrorType: ptr.Any(iwfidl.STATE_API_FAIL_ERROR_TYPE), ErrorMessage: iwfidl.PtrString("statusCode: 400, responseBody: {}, errMsg: 400 Bad Request (%!s(*string=))"), }, resp, "response not expected") } diff --git a/integ/wf_state_api_timeout_test.go b/integ/wf_state_api_timeout_test.go index 6302c282..fa9d54d1 100644 --- a/integ/wf_state_api_timeout_test.go +++ b/integ/wf_state_api_timeout_test.go @@ -91,7 +91,7 @@ func doTestStateApiTimeout(t *testing.T, backendType service.BackendType, config assertions.Equalf(&iwfidl.WorkflowGetResponse{ WorkflowRunId: startResp.GetWorkflowRunId(), WorkflowStatus: iwfidl.FAILED, - ErrorType: ptr.Any(iwfidl.STATE_API_FAIL_MAX_OUT_RETRY_ERROR_TYPE), + ErrorType: ptr.Any(iwfidl.STATE_API_FAIL_ERROR_TYPE), ErrorMessage: resp.ErrorMessage, }, resp, "response not expected") } diff --git a/iwf-idl b/iwf-idl index a7fb5559..08e49fcf 160000 --- a/iwf-idl +++ b/iwf-idl @@ -1 +1 @@ -Subproject commit a7fb55597de5591fffa406b6b5f07d85fda4dfee +Subproject commit 08e49fcf69e59d1df30babc076d1f2b49f07dc82 diff --git a/replayTests/history/v4-local-activity-optimization.json b/replayTests/history/v4-local-activity-optimization.json index 9c245ba6..405a7747 100644 --- a/replayTests/history/v4-local-activity-optimization.json +++ b/replayTests/history/v4-local-activity-optimization.json @@ -367,7 +367,7 @@ "encodedAttributes": null, "cause": null, "applicationFailureInfo": { - "type": "STATE_API_FAIL_MAX_OUT_RETRY_ERROR_TYPE", + "type": "STATE_API_FAIL_ERROR_TYPE", "nonRetryable": false, "details": { "payloads": [ @@ -468,7 +468,7 @@ "encodedAttributes": null, "cause": null, "applicationFailureInfo": { - "type": "STATE_API_FAIL_MAX_OUT_RETRY_ERROR_TYPE", + "type": "STATE_API_FAIL_ERROR_TYPE", "nonRetryable": false, "details": { "payloads": [ diff --git a/service/interpreter/activityImpl.go b/service/interpreter/activityImpl.go index da950002..46d1edfe 100644 --- a/service/interpreter/activityImpl.go +++ b/service/interpreter/activityImpl.go @@ -65,7 +65,7 @@ func StateApiWaitUntil( }) return nil, composeHttpError( activityInfo.IsLocalActivity, - provider, err, httpResp, string(iwfidl.STATE_API_FAIL_MAX_OUT_RETRY_ERROR_TYPE)) + provider, err, httpResp, string(iwfidl.STATE_API_FAIL_ERROR_TYPE)) } if err := checkCommandRequestFromWaitUntilResponse(resp); err != nil { @@ -150,7 +150,7 @@ func StateApiExecute( }) return nil, composeHttpError( activityInfo.IsLocalActivity, - provider, err, httpResp, string(iwfidl.STATE_API_FAIL_MAX_OUT_RETRY_ERROR_TYPE)) + provider, err, httpResp, string(iwfidl.STATE_API_FAIL_ERROR_TYPE)) } if err = checkStateDecisionFromResponse(resp); err != nil { @@ -206,13 +206,13 @@ func printDebugMsg(logger UnifiedLogger, err error, url string) { func composeStartApiRespError(provider ActivityProvider, err error, resp *iwfidl.WorkflowStateStartResponse) error { respStr, _ := resp.MarshalJSON() - return provider.NewApplicationError(string(iwfidl.STATE_API_FAIL_MAX_OUT_RETRY_ERROR_TYPE), + return provider.NewApplicationError(string(iwfidl.STATE_API_FAIL_ERROR_TYPE), fmt.Sprintf("err msg: %v, response: %v", err, string(respStr))) } func composeExecuteApiRespError(provider ActivityProvider, err error, resp *iwfidl.WorkflowStateDecideResponse) error { respStr, _ := resp.MarshalJSON() - return provider.NewApplicationError(string(iwfidl.STATE_API_FAIL_MAX_OUT_RETRY_ERROR_TYPE), + return provider.NewApplicationError(string(iwfidl.STATE_API_FAIL_ERROR_TYPE), fmt.Sprintf("err msg: %v, response: %v", err, string(respStr))) } diff --git a/service/interpreter/workflowImpl.go b/service/interpreter/workflowImpl.go index 8af78e8e..7f5caa3d 100644 --- a/service/interpreter/workflowImpl.go +++ b/service/interpreter/workflowImpl.go @@ -990,7 +990,7 @@ func convertStateApiActivityError(provider WorkflowProvider, err error) error { if provider.IsApplicationError(err) { return err } - return provider.NewApplicationError(string(iwfidl.STATE_API_FAIL_MAX_OUT_RETRY_ERROR_TYPE), err.Error()) + return provider.NewApplicationError(string(iwfidl.STATE_API_FAIL_ERROR_TYPE), err.Error()) } func getCommandThreadName(prefix string, stateExecId, cmdId string, idx int) string {