From 7e385ac09cb07105c7aeabff2208fab6a24e6d5a Mon Sep 17 00:00:00 2001 From: spmistry Date: Thu, 30 Sep 2021 09:54:47 -0700 Subject: [PATCH] Add memo and search attributes to child workflow (#641) --- .../internal/common/InternalUtils.java | 11 +++++ ...StartChildWorkflowExecutionParameters.java | 40 +++++++++++++++++++ .../replay/WorkflowDecisionContext.java | 12 ++++++ .../internal/sync/SyncDecisionContext.java | 4 ++ 4 files changed, 67 insertions(+) diff --git a/src/main/java/com/uber/cadence/internal/common/InternalUtils.java b/src/main/java/com/uber/cadence/internal/common/InternalUtils.java index cc59d52ee..520d8efbb 100644 --- a/src/main/java/com/uber/cadence/internal/common/InternalUtils.java +++ b/src/main/java/com/uber/cadence/internal/common/InternalUtils.java @@ -23,6 +23,7 @@ import com.uber.cadence.History; import com.uber.cadence.HistoryEvent; import com.uber.cadence.HistoryEventFilterType; +import com.uber.cadence.Memo; import com.uber.cadence.SearchAttributes; import com.uber.cadence.TaskList; import com.uber.cadence.TaskListKind; @@ -142,6 +143,16 @@ public static Object getValueOrDefault(Object value, Class valueClass) { return Defaults.defaultValue(valueClass); } + public static Memo convertMapToMemo(Map memo) { + DataConverter converter = JsonDataConverter.getInstance(); + Map mapOfByteBuffer = new HashMap<>(); + memo.forEach( + (key, value) -> { + mapOfByteBuffer.put(key, ByteBuffer.wrap(converter.toData(value))); + }); + return new Memo().setFields(mapOfByteBuffer); + } + public static SearchAttributes convertMapToSearchAttributes( Map searchAttributes) { DataConverter converter = JsonDataConverter.getInstance(); diff --git a/src/main/java/com/uber/cadence/internal/replay/StartChildWorkflowExecutionParameters.java b/src/main/java/com/uber/cadence/internal/replay/StartChildWorkflowExecutionParameters.java index 7af511183..5758ff905 100644 --- a/src/main/java/com/uber/cadence/internal/replay/StartChildWorkflowExecutionParameters.java +++ b/src/main/java/com/uber/cadence/internal/replay/StartChildWorkflowExecutionParameters.java @@ -51,6 +51,10 @@ public static final class Builder { private String cronSchedule; + private Map memo; + + private Map searchAttributes; + private Map context; private ParentClosePolicy parentClosePolicy; @@ -111,6 +115,16 @@ public Builder setCronSchedule(String cronSchedule) { return this; } + public Builder setMemo(Map memo) { + this.memo = memo; + return this; + } + + public Builder setSearchAttributes(Map searchAttributes) { + this.searchAttributes = searchAttributes; + return this; + } + public Builder setContext(Map context) { this.context = context; return this; @@ -134,6 +148,8 @@ public StartChildWorkflowExecutionParameters build() { workflowIdReusePolicy, retryParameters, cronSchedule, + memo, + searchAttributes, context, parentClosePolicy); } @@ -161,6 +177,10 @@ public StartChildWorkflowExecutionParameters build() { private final String cronSchedule; + private Map memo; + + private Map searchAttributes; + private Map context; private final ParentClosePolicy parentClosePolicy; @@ -177,6 +197,8 @@ private StartChildWorkflowExecutionParameters( WorkflowIdReusePolicy workflowIdReusePolicy, RetryParameters retryParameters, String cronSchedule, + Map memo, + Map searchAttributes, Map context, ParentClosePolicy parentClosePolicy) { this.domain = domain; @@ -190,6 +212,8 @@ private StartChildWorkflowExecutionParameters( this.workflowIdReusePolicy = workflowIdReusePolicy; this.retryParameters = retryParameters; this.cronSchedule = cronSchedule; + this.memo = memo; + this.searchAttributes = searchAttributes; this.context = context; this.parentClosePolicy = parentClosePolicy; } @@ -238,6 +262,14 @@ public String getCronSchedule() { return cronSchedule; } + public Map getMemo() { + return memo; + } + + public Map getSearchAttributes() { + return searchAttributes; + } + public Map getContext() { return context; } @@ -262,6 +294,8 @@ public boolean equals(Object o) { && workflowIdReusePolicy == that.workflowIdReusePolicy && Objects.equals(retryParameters, that.retryParameters) && Objects.equals(cronSchedule, that.cronSchedule) + && Objects.equals(memo, that.memo) + && Objects.equals(searchAttributes, that.searchAttributes) && Objects.equals(context, that.context) && Objects.equals(parentClosePolicy, that.parentClosePolicy); } @@ -280,6 +314,8 @@ public int hashCode() { workflowIdReusePolicy, retryParameters, cronSchedule, + memo, + searchAttributes, context, parentClosePolicy); result = 31 * result + Arrays.hashCode(input); @@ -315,6 +351,10 @@ public String toString() { + retryParameters + ", cronSchedule=" + cronSchedule + + ", memo=" + + memo + + ", searchAttributes=" + + searchAttributes + ", context='" + context + ", parentClosePolicy=" diff --git a/src/main/java/com/uber/cadence/internal/replay/WorkflowDecisionContext.java b/src/main/java/com/uber/cadence/internal/replay/WorkflowDecisionContext.java index e5adda7de..99684822f 100644 --- a/src/main/java/com/uber/cadence/internal/replay/WorkflowDecisionContext.java +++ b/src/main/java/com/uber/cadence/internal/replay/WorkflowDecisionContext.java @@ -37,6 +37,7 @@ import com.uber.cadence.TaskList; import com.uber.cadence.WorkflowExecution; import com.uber.cadence.WorkflowType; +import com.uber.cadence.internal.common.InternalUtils; import com.uber.cadence.internal.common.RetryParameters; import com.uber.cadence.workflow.ChildWorkflowTerminatedException; import com.uber.cadence.workflow.ChildWorkflowTimedOutException; @@ -153,6 +154,17 @@ Consumer startChildWorkflow( attributes.setParentClosePolicy(parentClosePolicy); } + Map memoMap = parameters.getMemo(); + if (memoMap != null) { + attributes.setMemo(InternalUtils.convertMapToMemo(memoMap)); + } + + Map searchAttributesMap = parameters.getSearchAttributes(); + if (searchAttributesMap != null) { + attributes.setSearchAttributes( + InternalUtils.convertMapToSearchAttributes(searchAttributesMap)); + } + long initiatedEventId = decisions.startChildWorkflowExecution(attributes); final OpenChildWorkflowRequestInfo context = new OpenChildWorkflowRequestInfo(executionCallback); diff --git a/src/main/java/com/uber/cadence/internal/sync/SyncDecisionContext.java b/src/main/java/com/uber/cadence/internal/sync/SyncDecisionContext.java index 23955ce69..3322f3e10 100644 --- a/src/main/java/com/uber/cadence/internal/sync/SyncDecisionContext.java +++ b/src/main/java/com/uber/cadence/internal/sync/SyncDecisionContext.java @@ -375,6 +375,8 @@ private Promise executeChildWorkflow( .setTaskStartToCloseTimeout(options.getTaskStartToCloseTimeout()) .setWorkflowId(options.getWorkflowId()) .setWorkflowIdReusePolicy(options.getWorkflowIdReusePolicy()) + .setMemo(options.getMemo()) + .setSearchAttributes(options.getSearchAttributes()) .setParentClosePolicy(options.getParentClosePolicy()) .build(); return WorkflowRetryerInternal.retryAsync( @@ -412,6 +414,8 @@ private Promise executeChildWorkflowOnce( .setWorkflowIdReusePolicy(options.getWorkflowIdReusePolicy()) .setRetryParameters(retryParameters) .setCronSchedule(options.getCronSchedule()) + .setMemo(options.getMemo()) + .setSearchAttributes(options.getSearchAttributes()) .setContext(extractContextsAndConvertToBytes(propagators)) .setParentClosePolicy(options.getParentClosePolicy()) .build();