From 84917185861735436254de79d62d6c929770d70a Mon Sep 17 00:00:00 2001 From: duoertai Date: Mon, 14 Nov 2022 04:26:24 -0800 Subject: [PATCH 1/4] add cron schedule and workflow id reuse policy --- gen/iwfidl/.openapi-generator/FILES | 2 + gen/iwfidl/README.md | 1 + gen/iwfidl/api/openapi.yaml | 20 +++ gen/iwfidl/docs/WorkflowStartOptions.md | 82 +++++++++++ gen/iwfidl/docs/WorkflowStartRequest.md | 26 ++++ gen/iwfidl/model_workflow_start_options.go | 151 +++++++++++++++++++++ gen/iwfidl/model_workflow_start_request.go | 36 +++++ iwf-idl | 2 +- service/api/cadence/client.go | 21 +++ service/api/interfaces.go | 8 +- service/api/service.go | 8 +- service/api/temporal/client.go | 27 +++- service/const.go | 5 + 13 files changed, 379 insertions(+), 10 deletions(-) create mode 100644 gen/iwfidl/docs/WorkflowStartOptions.md create mode 100644 gen/iwfidl/model_workflow_start_options.go diff --git a/gen/iwfidl/.openapi-generator/FILES b/gen/iwfidl/.openapi-generator/FILES index 2ab912cd..601b72cf 100644 --- a/gen/iwfidl/.openapi-generator/FILES +++ b/gen/iwfidl/.openapi-generator/FILES @@ -40,6 +40,7 @@ docs/WorkflowSearchRequest.md docs/WorkflowSearchResponse.md docs/WorkflowSearchResponseEntry.md docs/WorkflowSignalRequest.md +docs/WorkflowStartOptions.md docs/WorkflowStartRequest.md docs/WorkflowStartResponse.md docs/WorkflowStateDecideRequest.md @@ -83,6 +84,7 @@ model_workflow_search_request.go model_workflow_search_response.go model_workflow_search_response_entry.go model_workflow_signal_request.go +model_workflow_start_options.go model_workflow_start_request.go model_workflow_start_response.go model_workflow_state_decide_request.go diff --git a/gen/iwfidl/README.md b/gen/iwfidl/README.md index 1b587a7f..8425a737 100644 --- a/gen/iwfidl/README.md +++ b/gen/iwfidl/README.md @@ -126,6 +126,7 @@ Class | Method | HTTP request | Description - [WorkflowSearchResponse](docs/WorkflowSearchResponse.md) - [WorkflowSearchResponseEntry](docs/WorkflowSearchResponseEntry.md) - [WorkflowSignalRequest](docs/WorkflowSignalRequest.md) + - [WorkflowStartOptions](docs/WorkflowStartOptions.md) - [WorkflowStartRequest](docs/WorkflowStartRequest.md) - [WorkflowStartResponse](docs/WorkflowStartResponse.md) - [WorkflowStateDecideRequest](docs/WorkflowStateDecideRequest.md) diff --git a/gen/iwfidl/api/openapi.yaml b/gen/iwfidl/api/openapi.yaml index a9acfb84..0547c479 100644 --- a/gen/iwfidl/api/openapi.yaml +++ b/gen/iwfidl/api/openapi.yaml @@ -314,6 +314,21 @@ components: commandCarryOverPolicy: $ref: '#/components/schemas/CommandCarryOverPolicy' type: object + WorkflowStartOptions: + example: + workflowIDReusePolicy: ALLOW_DUPLICATE_FAILED_ONLY + cronSchedule: cronSchedule + properties: + workflowIDReusePolicy: + enum: + - ALLOW_DUPLICATE_FAILED_ONLY + - ALLOW_DUPLICATE + - REJECT_DUPLICATE + - TERMINATE_IF_RUNNING + type: string + cronSchedule: + type: string + type: object AttributesLoadingPolicy: example: attributeLoadingType: LOAD_ALL_WITHOUT_LOCKING @@ -364,6 +379,9 @@ components: - attributeKeys - attributeKeys iwfWorkflowType: iwfWorkflowType + workflowStartOptions: + workflowIDReusePolicy: ALLOW_DUPLICATE_FAILED_ONLY + cronSchedule: cronSchedule iwfWorkerUrl: iwfWorkerUrl workflowId: workflowId stateInput: @@ -384,6 +402,8 @@ components: $ref: '#/components/schemas/EncodedObject' stateOptions: $ref: '#/components/schemas/WorkflowStateOptions' + workflowStartOptions: + $ref: '#/components/schemas/WorkflowStartOptions' required: - iwfWorkerUrl - iwfWorkflowType diff --git a/gen/iwfidl/docs/WorkflowStartOptions.md b/gen/iwfidl/docs/WorkflowStartOptions.md new file mode 100644 index 00000000..245d9d27 --- /dev/null +++ b/gen/iwfidl/docs/WorkflowStartOptions.md @@ -0,0 +1,82 @@ +# WorkflowStartOptions + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**WorkflowIDReusePolicy** | Pointer to **string** | | [optional] +**CronSchedule** | Pointer to **string** | | [optional] + +## Methods + +### NewWorkflowStartOptions + +`func NewWorkflowStartOptions() *WorkflowStartOptions` + +NewWorkflowStartOptions instantiates a new WorkflowStartOptions object +This constructor will assign default values to properties that have it defined, +and makes sure properties required by API are set, but the set of arguments +will change when the set of required properties is changed + +### NewWorkflowStartOptionsWithDefaults + +`func NewWorkflowStartOptionsWithDefaults() *WorkflowStartOptions` + +NewWorkflowStartOptionsWithDefaults instantiates a new WorkflowStartOptions object +This constructor will only assign default values to properties that have it defined, +but it doesn't guarantee that properties required by API are set + +### GetWorkflowIDReusePolicy + +`func (o *WorkflowStartOptions) GetWorkflowIDReusePolicy() string` + +GetWorkflowIDReusePolicy returns the WorkflowIDReusePolicy field if non-nil, zero value otherwise. + +### GetWorkflowIDReusePolicyOk + +`func (o *WorkflowStartOptions) GetWorkflowIDReusePolicyOk() (*string, bool)` + +GetWorkflowIDReusePolicyOk returns a tuple with the WorkflowIDReusePolicy field if it's non-nil, zero value otherwise +and a boolean to check if the value has been set. + +### SetWorkflowIDReusePolicy + +`func (o *WorkflowStartOptions) SetWorkflowIDReusePolicy(v string)` + +SetWorkflowIDReusePolicy sets WorkflowIDReusePolicy field to given value. + +### HasWorkflowIDReusePolicy + +`func (o *WorkflowStartOptions) HasWorkflowIDReusePolicy() bool` + +HasWorkflowIDReusePolicy returns a boolean if a field has been set. + +### GetCronSchedule + +`func (o *WorkflowStartOptions) GetCronSchedule() string` + +GetCronSchedule returns the CronSchedule field if non-nil, zero value otherwise. + +### GetCronScheduleOk + +`func (o *WorkflowStartOptions) GetCronScheduleOk() (*string, bool)` + +GetCronScheduleOk returns a tuple with the CronSchedule field if it's non-nil, zero value otherwise +and a boolean to check if the value has been set. + +### SetCronSchedule + +`func (o *WorkflowStartOptions) SetCronSchedule(v string)` + +SetCronSchedule sets CronSchedule field to given value. + +### HasCronSchedule + +`func (o *WorkflowStartOptions) HasCronSchedule() bool` + +HasCronSchedule 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/WorkflowStartRequest.md b/gen/iwfidl/docs/WorkflowStartRequest.md index bb009371..158c954c 100644 --- a/gen/iwfidl/docs/WorkflowStartRequest.md +++ b/gen/iwfidl/docs/WorkflowStartRequest.md @@ -11,6 +11,7 @@ Name | Type | Description | Notes **StartStateId** | **string** | | **StateInput** | Pointer to [**EncodedObject**](EncodedObject.md) | | [optional] **StateOptions** | Pointer to [**WorkflowStateOptions**](WorkflowStateOptions.md) | | [optional] +**WorkflowStartOptions** | Pointer to [**WorkflowStartOptions**](WorkflowStartOptions.md) | | [optional] ## Methods @@ -181,6 +182,31 @@ SetStateOptions sets StateOptions field to given value. HasStateOptions returns a boolean if a field has been set. +### GetWorkflowStartOptions + +`func (o *WorkflowStartRequest) GetWorkflowStartOptions() WorkflowStartOptions` + +GetWorkflowStartOptions returns the WorkflowStartOptions field if non-nil, zero value otherwise. + +### GetWorkflowStartOptionsOk + +`func (o *WorkflowStartRequest) GetWorkflowStartOptionsOk() (*WorkflowStartOptions, bool)` + +GetWorkflowStartOptionsOk returns a tuple with the WorkflowStartOptions field if it's non-nil, zero value otherwise +and a boolean to check if the value has been set. + +### SetWorkflowStartOptions + +`func (o *WorkflowStartRequest) SetWorkflowStartOptions(v WorkflowStartOptions)` + +SetWorkflowStartOptions sets WorkflowStartOptions field to given value. + +### HasWorkflowStartOptions + +`func (o *WorkflowStartRequest) HasWorkflowStartOptions() bool` + +HasWorkflowStartOptions 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/model_workflow_start_options.go b/gen/iwfidl/model_workflow_start_options.go new file mode 100644 index 00000000..d031797e --- /dev/null +++ b/gen/iwfidl/model_workflow_start_options.go @@ -0,0 +1,151 @@ +/* +Workflow APIs + +This APIs for iwf SDKs to operate workflows + +API version: 1.0.0 +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package iwfidl + +import ( + "encoding/json" +) + +// WorkflowStartOptions struct for WorkflowStartOptions +type WorkflowStartOptions struct { + WorkflowIDReusePolicy *string `json:"workflowIDReusePolicy,omitempty"` + CronSchedule *string `json:"cronSchedule,omitempty"` +} + +// NewWorkflowStartOptions instantiates a new WorkflowStartOptions object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewWorkflowStartOptions() *WorkflowStartOptions { + this := WorkflowStartOptions{} + return &this +} + +// NewWorkflowStartOptionsWithDefaults instantiates a new WorkflowStartOptions object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewWorkflowStartOptionsWithDefaults() *WorkflowStartOptions { + this := WorkflowStartOptions{} + return &this +} + +// GetWorkflowIDReusePolicy returns the WorkflowIDReusePolicy field value if set, zero value otherwise. +func (o *WorkflowStartOptions) GetWorkflowIDReusePolicy() string { + if o == nil || o.WorkflowIDReusePolicy == nil { + var ret string + return ret + } + return *o.WorkflowIDReusePolicy +} + +// GetWorkflowIDReusePolicyOk returns a tuple with the WorkflowIDReusePolicy field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *WorkflowStartOptions) GetWorkflowIDReusePolicyOk() (*string, bool) { + if o == nil || o.WorkflowIDReusePolicy == nil { + return nil, false + } + return o.WorkflowIDReusePolicy, true +} + +// HasWorkflowIDReusePolicy returns a boolean if a field has been set. +func (o *WorkflowStartOptions) HasWorkflowIDReusePolicy() bool { + if o != nil && o.WorkflowIDReusePolicy != nil { + return true + } + + return false +} + +// SetWorkflowIDReusePolicy gets a reference to the given string and assigns it to the WorkflowIDReusePolicy field. +func (o *WorkflowStartOptions) SetWorkflowIDReusePolicy(v string) { + o.WorkflowIDReusePolicy = &v +} + +// GetCronSchedule returns the CronSchedule field value if set, zero value otherwise. +func (o *WorkflowStartOptions) GetCronSchedule() string { + if o == nil || o.CronSchedule == nil { + var ret string + return ret + } + return *o.CronSchedule +} + +// GetCronScheduleOk returns a tuple with the CronSchedule field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *WorkflowStartOptions) GetCronScheduleOk() (*string, bool) { + if o == nil || o.CronSchedule == nil { + return nil, false + } + return o.CronSchedule, true +} + +// HasCronSchedule returns a boolean if a field has been set. +func (o *WorkflowStartOptions) HasCronSchedule() bool { + if o != nil && o.CronSchedule != nil { + return true + } + + return false +} + +// SetCronSchedule gets a reference to the given string and assigns it to the CronSchedule field. +func (o *WorkflowStartOptions) SetCronSchedule(v string) { + o.CronSchedule = &v +} + +func (o WorkflowStartOptions) MarshalJSON() ([]byte, error) { + toSerialize := map[string]interface{}{} + if o.WorkflowIDReusePolicy != nil { + toSerialize["workflowIDReusePolicy"] = o.WorkflowIDReusePolicy + } + if o.CronSchedule != nil { + toSerialize["cronSchedule"] = o.CronSchedule + } + return json.Marshal(toSerialize) +} + +type NullableWorkflowStartOptions struct { + value *WorkflowStartOptions + isSet bool +} + +func (v NullableWorkflowStartOptions) Get() *WorkflowStartOptions { + return v.value +} + +func (v *NullableWorkflowStartOptions) Set(val *WorkflowStartOptions) { + v.value = val + v.isSet = true +} + +func (v NullableWorkflowStartOptions) IsSet() bool { + return v.isSet +} + +func (v *NullableWorkflowStartOptions) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableWorkflowStartOptions(val *WorkflowStartOptions) *NullableWorkflowStartOptions { + return &NullableWorkflowStartOptions{value: val, isSet: true} +} + +func (v NullableWorkflowStartOptions) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableWorkflowStartOptions) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + + diff --git a/gen/iwfidl/model_workflow_start_request.go b/gen/iwfidl/model_workflow_start_request.go index 706a8ec2..92680a1e 100644 --- a/gen/iwfidl/model_workflow_start_request.go +++ b/gen/iwfidl/model_workflow_start_request.go @@ -23,6 +23,7 @@ type WorkflowStartRequest struct { StartStateId string `json:"startStateId"` StateInput *EncodedObject `json:"stateInput,omitempty"` StateOptions *WorkflowStateOptions `json:"stateOptions,omitempty"` + WorkflowStartOptions *WorkflowStartOptions `json:"workflowStartOptions,omitempty"` } // NewWorkflowStartRequest instantiates a new WorkflowStartRequest object @@ -231,6 +232,38 @@ func (o *WorkflowStartRequest) SetStateOptions(v WorkflowStateOptions) { o.StateOptions = &v } +// GetWorkflowStartOptions returns the WorkflowStartOptions field value if set, zero value otherwise. +func (o *WorkflowStartRequest) GetWorkflowStartOptions() WorkflowStartOptions { + if o == nil || o.WorkflowStartOptions == nil { + var ret WorkflowStartOptions + return ret + } + return *o.WorkflowStartOptions +} + +// GetWorkflowStartOptionsOk returns a tuple with the WorkflowStartOptions field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *WorkflowStartRequest) GetWorkflowStartOptionsOk() (*WorkflowStartOptions, bool) { + if o == nil || o.WorkflowStartOptions == nil { + return nil, false + } + return o.WorkflowStartOptions, true +} + +// HasWorkflowStartOptions returns a boolean if a field has been set. +func (o *WorkflowStartRequest) HasWorkflowStartOptions() bool { + if o != nil && o.WorkflowStartOptions != nil { + return true + } + + return false +} + +// SetWorkflowStartOptions gets a reference to the given WorkflowStartOptions and assigns it to the WorkflowStartOptions field. +func (o *WorkflowStartRequest) SetWorkflowStartOptions(v WorkflowStartOptions) { + o.WorkflowStartOptions = &v +} + func (o WorkflowStartRequest) MarshalJSON() ([]byte, error) { toSerialize := map[string]interface{}{} if true { @@ -254,6 +287,9 @@ func (o WorkflowStartRequest) MarshalJSON() ([]byte, error) { if o.StateOptions != nil { toSerialize["stateOptions"] = o.StateOptions } + if o.WorkflowStartOptions != nil { + toSerialize["workflowStartOptions"] = o.WorkflowStartOptions + } return json.Marshal(toSerialize) } diff --git a/iwf-idl b/iwf-idl index acf19a9c..80e3296a 160000 --- a/iwf-idl +++ b/iwf-idl @@ -1 +1 @@ -Subproject commit acf19a9c7bc0b2e4dca0299a360baa2e9adea631 +Subproject commit 80e3296a2fea1c5bff83eab32ec37b945562df3c diff --git a/service/api/cadence/client.go b/service/api/cadence/client.go index aed22b63..bbeff03e 100644 --- a/service/api/cadence/client.go +++ b/service/api/cadence/client.go @@ -36,10 +36,16 @@ func (t *cadenceClient) Close() { } func (t *cadenceClient) StartInterpreterWorkflow(ctx context.Context, options api.StartWorkflowOptions, args ...interface{}) (runId string, err error) { + workflowIdReusePolicy, err := mapToTemporalWorkflowIdReusePolicy(options.WorkflowIDReusePolicy) + if err != nil { + return "", nil + } workflowOptions := client.StartWorkflowOptions{ ID: options.ID, TaskList: options.TaskQueue, ExecutionStartToCloseTimeout: options.WorkflowRunTimeout, + WorkflowIDReusePolicy: workflowIdReusePolicy, + CronSchedule: options.CronSchedule, } run, err := t.cClient.ExecuteWorkflow(ctx, workflowOptions, cadence.Interpreter, args...) @@ -143,6 +149,21 @@ func mapToIwfSearchAttributes(searchAttributes *shared.SearchAttributes) (map[st return result, nil } +func mapToTemporalWorkflowIdReusePolicy(workflowIdReusePolicy string) (client.WorkflowIDReusePolicy, error) { + switch workflowIdReusePolicy { + case service.WorkflowIDReusePolicyAllowDuplicate: + return client.WorkflowIDReusePolicyAllowDuplicate, nil + case service.WorkflowIDReusePolicyAllowDuplicateFailedOnly: + return client.WorkflowIDReusePolicyAllowDuplicateFailedOnly, nil + case service.WorkflowIDReusePolicyRejectDuplicate: + return client.WorkflowIDReusePolicyRejectDuplicate, nil + case service.WorkflowIDReusePolicyTerminateIfRunning: + return client.WorkflowIDReusePolicyTerminateIfRunning, nil + default: + return client.WorkflowIDReusePolicyAllowDuplicate, fmt.Errorf("unsupported workflow id reuse policy %s", workflowIdReusePolicy) + } +} + func mapToIwfWorkflowStatus(status *shared.WorkflowExecutionCloseStatus) (string, error) { if status == nil { return service.WorkflowStatusRunning, nil diff --git a/service/api/interfaces.go b/service/api/interfaces.go index 5b9e939d..ff3b767c 100644 --- a/service/api/interfaces.go +++ b/service/api/interfaces.go @@ -38,9 +38,11 @@ type UnifiedClient interface { } type StartWorkflowOptions struct { - ID string - TaskQueue string - WorkflowRunTimeout time.Duration + ID string + TaskQueue string + WorkflowRunTimeout time.Duration + WorkflowIDReusePolicy string + CronSchedule string } type ListWorkflowExecutionsRequest struct { diff --git a/service/api/service.go b/service/api/service.go index ddeb8589..2aa4cdff 100644 --- a/service/api/service.go +++ b/service/api/service.go @@ -28,9 +28,11 @@ func NewApiService(client UnifiedClient, taskQueue string) (ApiService, error) { func (s *serviceImpl) ApiV1WorkflowStartPost(req iwfidl.WorkflowStartRequest) (*iwfidl.WorkflowStartResponse, *ErrorAndStatus) { workflowOptions := StartWorkflowOptions{ - ID: req.GetWorkflowId(), - TaskQueue: s.taskQueue, - WorkflowRunTimeout: time.Duration(req.WorkflowTimeoutSeconds) * time.Second, + ID: req.GetWorkflowId(), + TaskQueue: s.taskQueue, + WorkflowRunTimeout: time.Duration(req.WorkflowTimeoutSeconds) * time.Second, + WorkflowIDReusePolicy: *req.WorkflowStartOptions.WorkflowIDReusePolicy, + CronSchedule: *req.WorkflowStartOptions.CronSchedule, } input := service.InterpreterWorkflowInput{ diff --git a/service/api/temporal/client.go b/service/api/temporal/client.go index eefe4a70..26739f67 100644 --- a/service/api/temporal/client.go +++ b/service/api/temporal/client.go @@ -30,10 +30,16 @@ func (t *temporalClient) Close() { } func (t *temporalClient) StartInterpreterWorkflow(ctx context.Context, options api.StartWorkflowOptions, args ...interface{}) (runId string, err error) { + workflowIdReusePolicy, err := mapToTemporalWorkflowIdReusePolicy(options.WorkflowIDReusePolicy) + if err != nil { + return "", nil + } workflowOptions := client.StartWorkflowOptions{ - ID: options.ID, - TaskQueue: options.TaskQueue, - WorkflowRunTimeout: options.WorkflowRunTimeout, + ID: options.ID, + TaskQueue: options.TaskQueue, + WorkflowRunTimeout: options.WorkflowRunTimeout, + WorkflowIDReusePolicy: workflowIdReusePolicy, + CronSchedule: options.CronSchedule, } run, err := t.tClient.ExecuteWorkflow(ctx, workflowOptions, temporal.Interpreter, args...) @@ -136,6 +142,21 @@ func mapToIwfSearchAttributes(searchAttributes *common.SearchAttributes) (map[st return result, nil } +func mapToTemporalWorkflowIdReusePolicy(workflowIdReusePolicy string) (enums.WorkflowIdReusePolicy, error) { + switch workflowIdReusePolicy { + case service.WorkflowIDReusePolicyAllowDuplicate: + return enums.WORKFLOW_ID_REUSE_POLICY_ALLOW_DUPLICATE, nil + case service.WorkflowIDReusePolicyAllowDuplicateFailedOnly: + return enums.WORKFLOW_ID_REUSE_POLICY_ALLOW_DUPLICATE_FAILED_ONLY, nil + case service.WorkflowIDReusePolicyRejectDuplicate: + return enums.WORKFLOW_ID_REUSE_POLICY_REJECT_DUPLICATE, nil + case service.WorkflowIDReusePolicyTerminateIfRunning: + return enums.WORKFLOW_ID_REUSE_POLICY_TERMINATE_IF_RUNNING, nil + default: + return enums.WORKFLOW_ID_REUSE_POLICY_UNSPECIFIED, fmt.Errorf("unsupported workflow id reuse policy %s", workflowIdReusePolicy) + } +} + func mapToIwfWorkflowStatus(status enums.WorkflowExecutionStatus) (string, error) { switch status { case enums.WORKFLOW_EXECUTION_STATUS_CANCELED: diff --git a/service/const.go b/service/const.go index a92c1ba9..312ffa19 100644 --- a/service/const.go +++ b/service/const.go @@ -41,6 +41,11 @@ const ( SearchAttributeGlobalVersion = "IwfGlobalWorkflowVersion" SearchAttributeExecutingStateIds = "IwfExecutingStateIds" SearchAttributeIwfWorkflowType = "IwfWorkflowType" + + WorkflowIDReusePolicyAllowDuplicateFailedOnly = "ALLOW_DUPLICATE_FAILED_ONLY" + WorkflowIDReusePolicyAllowDuplicate = "ALLOW_DUPLICATE" + WorkflowIDReusePolicyRejectDuplicate = "REJECT_DUPLICATE" + WorkflowIDReusePolicyTerminateIfRunning = "TERMINATE_IF_RUNNING" ) type BackendType string From ef82d42fd49fa5cec392cb3a7ab44f2cd783b914 Mon Sep 17 00:00:00 2001 From: duoertai Date: Mon, 14 Nov 2022 16:13:21 -0800 Subject: [PATCH 2/4] fix --- service/api/cadence/client.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/service/api/cadence/client.go b/service/api/cadence/client.go index bbeff03e..1a130bfa 100644 --- a/service/api/cadence/client.go +++ b/service/api/cadence/client.go @@ -149,7 +149,7 @@ func mapToIwfSearchAttributes(searchAttributes *shared.SearchAttributes) (map[st return result, nil } -func mapToTemporalWorkflowIdReusePolicy(workflowIdReusePolicy string) (client.WorkflowIDReusePolicy, error) { +func mapToCadenceWorkflowIdReusePolicy(workflowIdReusePolicy string) (client.WorkflowIDReusePolicy, error) { switch workflowIdReusePolicy { case service.WorkflowIDReusePolicyAllowDuplicate: return client.WorkflowIDReusePolicyAllowDuplicate, nil From 46c4435f98229a03713bfce236acb5219ebb72fb Mon Sep 17 00:00:00 2001 From: duoertai Date: Mon, 14 Nov 2022 16:14:32 -0800 Subject: [PATCH 3/4] fix --- service/api/cadence/client.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/service/api/cadence/client.go b/service/api/cadence/client.go index 1a130bfa..2bdd77fb 100644 --- a/service/api/cadence/client.go +++ b/service/api/cadence/client.go @@ -36,7 +36,7 @@ func (t *cadenceClient) Close() { } func (t *cadenceClient) StartInterpreterWorkflow(ctx context.Context, options api.StartWorkflowOptions, args ...interface{}) (runId string, err error) { - workflowIdReusePolicy, err := mapToTemporalWorkflowIdReusePolicy(options.WorkflowIDReusePolicy) + workflowIdReusePolicy, err := mapToCadenceWorkflowIdReusePolicy(options.WorkflowIDReusePolicy) if err != nil { return "", nil } From 2992382b8ef43857ec0903de7a9ccc1f5c35a0f7 Mon Sep 17 00:00:00 2001 From: duoertai Date: Mon, 14 Nov 2022 18:02:12 -0800 Subject: [PATCH 4/4] fix --- service/api/cadence/client.go | 19 ++++++++++++------- service/api/temporal/client.go | 19 ++++++++++++------- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/service/api/cadence/client.go b/service/api/cadence/client.go index 2bdd77fb..fd49d674 100644 --- a/service/api/cadence/client.go +++ b/service/api/cadence/client.go @@ -44,7 +44,7 @@ func (t *cadenceClient) StartInterpreterWorkflow(ctx context.Context, options ap ID: options.ID, TaskList: options.TaskQueue, ExecutionStartToCloseTimeout: options.WorkflowRunTimeout, - WorkflowIDReusePolicy: workflowIdReusePolicy, + WorkflowIDReusePolicy: *workflowIdReusePolicy, CronSchedule: options.CronSchedule, } @@ -149,18 +149,23 @@ func mapToIwfSearchAttributes(searchAttributes *shared.SearchAttributes) (map[st return result, nil } -func mapToCadenceWorkflowIdReusePolicy(workflowIdReusePolicy string) (client.WorkflowIDReusePolicy, error) { +func mapToCadenceWorkflowIdReusePolicy(workflowIdReusePolicy string) (*client.WorkflowIDReusePolicy, error) { + var res client.WorkflowIDReusePolicy switch workflowIdReusePolicy { case service.WorkflowIDReusePolicyAllowDuplicate: - return client.WorkflowIDReusePolicyAllowDuplicate, nil + res = client.WorkflowIDReusePolicyAllowDuplicate + return &res, nil case service.WorkflowIDReusePolicyAllowDuplicateFailedOnly: - return client.WorkflowIDReusePolicyAllowDuplicateFailedOnly, nil + res = client.WorkflowIDReusePolicyAllowDuplicateFailedOnly + return &res, nil case service.WorkflowIDReusePolicyRejectDuplicate: - return client.WorkflowIDReusePolicyRejectDuplicate, nil + res = client.WorkflowIDReusePolicyRejectDuplicate + return &res, nil case service.WorkflowIDReusePolicyTerminateIfRunning: - return client.WorkflowIDReusePolicyTerminateIfRunning, nil + res = client.WorkflowIDReusePolicyTerminateIfRunning + return &res, nil default: - return client.WorkflowIDReusePolicyAllowDuplicate, fmt.Errorf("unsupported workflow id reuse policy %s", workflowIdReusePolicy) + return nil, fmt.Errorf("unsupported workflow id reuse policy %s", workflowIdReusePolicy) } } diff --git a/service/api/temporal/client.go b/service/api/temporal/client.go index 26739f67..a1f71c45 100644 --- a/service/api/temporal/client.go +++ b/service/api/temporal/client.go @@ -38,7 +38,7 @@ func (t *temporalClient) StartInterpreterWorkflow(ctx context.Context, options a ID: options.ID, TaskQueue: options.TaskQueue, WorkflowRunTimeout: options.WorkflowRunTimeout, - WorkflowIDReusePolicy: workflowIdReusePolicy, + WorkflowIDReusePolicy: *workflowIdReusePolicy, CronSchedule: options.CronSchedule, } @@ -142,18 +142,23 @@ func mapToIwfSearchAttributes(searchAttributes *common.SearchAttributes) (map[st return result, nil } -func mapToTemporalWorkflowIdReusePolicy(workflowIdReusePolicy string) (enums.WorkflowIdReusePolicy, error) { +func mapToTemporalWorkflowIdReusePolicy(workflowIdReusePolicy string) (*enums.WorkflowIdReusePolicy, error) { + var res enums.WorkflowIdReusePolicy switch workflowIdReusePolicy { case service.WorkflowIDReusePolicyAllowDuplicate: - return enums.WORKFLOW_ID_REUSE_POLICY_ALLOW_DUPLICATE, nil + res = enums.WORKFLOW_ID_REUSE_POLICY_ALLOW_DUPLICATE + return &res, nil case service.WorkflowIDReusePolicyAllowDuplicateFailedOnly: - return enums.WORKFLOW_ID_REUSE_POLICY_ALLOW_DUPLICATE_FAILED_ONLY, nil + res = enums.WORKFLOW_ID_REUSE_POLICY_ALLOW_DUPLICATE_FAILED_ONLY + return &res, nil case service.WorkflowIDReusePolicyRejectDuplicate: - return enums.WORKFLOW_ID_REUSE_POLICY_REJECT_DUPLICATE, nil + res = enums.WORKFLOW_ID_REUSE_POLICY_REJECT_DUPLICATE + return &res, nil case service.WorkflowIDReusePolicyTerminateIfRunning: - return enums.WORKFLOW_ID_REUSE_POLICY_TERMINATE_IF_RUNNING, nil + res = enums.WORKFLOW_ID_REUSE_POLICY_TERMINATE_IF_RUNNING + return &res, nil default: - return enums.WORKFLOW_ID_REUSE_POLICY_UNSPECIFIED, fmt.Errorf("unsupported workflow id reuse policy %s", workflowIdReusePolicy) + return nil, fmt.Errorf("unsupported workflow id reuse policy %s", workflowIdReusePolicy) } }