diff --git a/src/main/java/com/uber/cadence/internal/compatibility/proto/DecisionMapper.java b/src/main/java/com/uber/cadence/internal/compatibility/proto/DecisionMapper.java index a3d5e5ca5..8d850bfc0 100644 --- a/src/main/java/com/uber/cadence/internal/compatibility/proto/DecisionMapper.java +++ b/src/main/java/com/uber/cadence/internal/compatibility/proto/DecisionMapper.java @@ -77,7 +77,6 @@ static Decision decision(com.uber.cadence.Decision d) { d.getScheduleActivityTaskDecisionAttributes(); ScheduleActivityTaskDecisionAttributes.Builder builder = ScheduleActivityTaskDecisionAttributes.newBuilder() - .setActivityId(attr.getActivityId()) .setActivityType(activityType(attr.getActivityType())) .setTaskList(taskList(attr.getTaskList())) .setInput(payload(attr.getInput())) @@ -89,6 +88,9 @@ static Decision decision(com.uber.cadence.Decision d) { .setHeartbeatTimeout(secondsToDuration(attr.getHeartbeatTimeoutSeconds())) .setHeader(header(attr.getHeader())) .setRequestLocalDispatch(attr.isRequestLocalDispatch()); + if (attr.getActivityId() != null) { + builder.setActivityId(attr.getActivityId()); + } if (attr.getRetryPolicy() != null) { builder.setRetryPolicy(retryPolicy(attr.getRetryPolicy())); } @@ -102,19 +104,27 @@ static Decision decision(com.uber.cadence.Decision d) { { com.uber.cadence.RequestCancelActivityTaskDecisionAttributes attr = d.getRequestCancelActivityTaskDecisionAttributes(); - decision.setRequestCancelActivityTaskDecisionAttributes( - RequestCancelActivityTaskDecisionAttributes.newBuilder() - .setActivityId(attr.getActivityId())); + + RequestCancelActivityTaskDecisionAttributes.Builder builder = + RequestCancelActivityTaskDecisionAttributes.newBuilder(); + if (attr.getActivityId() != null) { + builder.setActivityId(attr.getActivityId()); + } + decision.setRequestCancelActivityTaskDecisionAttributes(builder.build()); } break; case StartTimer: { com.uber.cadence.StartTimerDecisionAttributes attr = d.getStartTimerDecisionAttributes(); - decision.setStartTimerDecisionAttributes( + StartTimerDecisionAttributes.Builder builder = StartTimerDecisionAttributes.newBuilder() - .setTimerId(attr.getTimerId()) .setStartToFireTimeout( - secondsToDuration(longToInt(attr.getStartToFireTimeoutSeconds())))); + secondsToDuration(longToInt(attr.getStartToFireTimeoutSeconds()))); + if (attr.getTimerId() != null) { + builder.setTimerId(attr.getTimerId()); + } + + decision.setStartTimerDecisionAttributes(builder.build()); } break; case CompleteWorkflowExecution: @@ -139,8 +149,12 @@ static Decision decision(com.uber.cadence.Decision d) { { com.uber.cadence.CancelTimerDecisionAttributes attr = d.getCancelTimerDecisionAttributes(); - decision.setCancelTimerDecisionAttributes( - CancelTimerDecisionAttributes.newBuilder().setTimerId(attr.getTimerId())); + CancelTimerDecisionAttributes.Builder builder = + CancelTimerDecisionAttributes.newBuilder(); + if (attr.getTimerId() != null) { + builder.setTimerId(attr.getTimerId()); + } + decision.setCancelTimerDecisionAttributes(builder.build()); } break; case CancelWorkflowExecution: @@ -158,9 +172,11 @@ static Decision decision(com.uber.cadence.Decision d) { d.getRequestCancelExternalWorkflowExecutionDecisionAttributes(); RequestCancelExternalWorkflowExecutionDecisionAttributes.Builder builder = RequestCancelExternalWorkflowExecutionDecisionAttributes.newBuilder() - .setDomain(attr.getDomain()) .setWorkflowExecution(workflowRunPair(attr.getWorkflowId(), attr.getRunId())) .setChildWorkflowOnly(attr.isChildWorkflowOnly()); + if (attr.getDomain() != null) { + builder.setDomain(attr.getDomain()); + } if (attr.getControl() != null) { builder.setControl(arrayToByteString(attr.getControl())); } @@ -203,8 +219,6 @@ static Decision decision(com.uber.cadence.Decision d) { d.getStartChildWorkflowExecutionDecisionAttributes(); StartChildWorkflowExecutionDecisionAttributes.Builder builder = StartChildWorkflowExecutionDecisionAttributes.newBuilder() - .setDomain(attr.getDomain()) - .setWorkflowId(attr.getWorkflowId()) .setWorkflowType(workflowType(attr.getWorkflowType())) .setTaskList(taskList(attr.getTaskList())) .setInput(payload(attr.getInput())) @@ -217,6 +231,12 @@ static Decision decision(com.uber.cadence.Decision d) { .setHeader(header(attr.getHeader())) .setMemo(memo(attr.getMemo())) .setSearchAttributes(searchAttributes(attr.getSearchAttributes())); + if (attr.getDomain() != null) { + builder.setDomain(attr.getDomain()); + } + if (attr.getWorkflowId() != null) { + builder.setWorkflowId(attr.getWorkflowId()); + } if (attr.getRetryPolicy() != null) { builder.setRetryPolicy(retryPolicy(attr.getRetryPolicy())); } @@ -235,11 +255,15 @@ static Decision decision(com.uber.cadence.Decision d) { d.getSignalExternalWorkflowExecutionDecisionAttributes(); SignalExternalWorkflowExecutionDecisionAttributes.Builder builder = SignalExternalWorkflowExecutionDecisionAttributes.newBuilder() - .setDomain(attr.getDomain()) .setWorkflowExecution(workflowExecution(attr.getExecution())) - .setSignalName(attr.getSignalName()) .setInput(payload(attr.getInput())) .setChildWorkflowOnly(attr.isChildWorkflowOnly()); + if (attr.getDomain() != null) { + builder.setDomain(attr.getDomain()); + } + if (attr.getSignalName() != null) { + builder.setSignalName(attr.getSignalName()); + } if (attr.getControl() != null) { builder.setControl(arrayToByteString(attr.getControl())); } @@ -259,11 +283,14 @@ static Decision decision(com.uber.cadence.Decision d) { { com.uber.cadence.RecordMarkerDecisionAttributes attr = d.getRecordMarkerDecisionAttributes(); - decision.setRecordMarkerDecisionAttributes( + RecordMarkerDecisionAttributes.Builder builder = RecordMarkerDecisionAttributes.newBuilder() - .setMarkerName(attr.getMarkerName()) .setDetails(payload(attr.getDetails())) - .setHeader(header(attr.getHeader()))); + .setHeader(header(attr.getHeader())); + if (attr.getMarkerName() != null) { + builder.setMarkerName(attr.getMarkerName()); + } + decision.setRecordMarkerDecisionAttributes(builder.build()); } break; default: diff --git a/src/main/java/com/uber/cadence/internal/compatibility/proto/RequestMapper.java b/src/main/java/com/uber/cadence/internal/compatibility/proto/RequestMapper.java index c07d67361..4d086d681 100644 --- a/src/main/java/com/uber/cadence/internal/compatibility/proto/RequestMapper.java +++ b/src/main/java/com/uber/cadence/internal/compatibility/proto/RequestMapper.java @@ -134,12 +134,19 @@ public static DescribeTaskListRequest describeTaskListRequest( if (t == null) { return null; } - return DescribeTaskListRequest.newBuilder() - .setDomain(t.getDomain()) - .setTaskList(taskList(t.getTaskList())) - .setTaskListType(taskListType(t.getTaskListType())) - .setIncludeTaskListStatus(t.isIncludeTaskListStatus()) - .build(); + DescribeTaskListRequest.Builder builder = + DescribeTaskListRequest.newBuilder().setIncludeTaskListStatus(t.isIncludeTaskListStatus()); + if (t.getDomain() != null) { + builder.setDomain(t.getDomain()); + } + if (t.getTaskList() != null) { + builder.setTaskList(taskList(t.getTaskList())); + } + if (t.getTaskListType() != null) { + builder.setTaskListType(taskListType(t.getTaskListType())); + } + + return builder.build(); } public static ListArchivedWorkflowExecutionsRequest listArchivedWorkflowExecutionsRequest( @@ -148,9 +155,10 @@ public static ListArchivedWorkflowExecutionsRequest listArchivedWorkflowExecutio return null; } ListArchivedWorkflowExecutionsRequest.Builder request = - ListArchivedWorkflowExecutionsRequest.newBuilder() - .setDomain(t.getDomain()) - .setPageSize(t.getPageSize()); + ListArchivedWorkflowExecutionsRequest.newBuilder().setPageSize(t.getPageSize()); + if (t.getDomain() != null) { + request.setDomain(t.getDomain()); + } if (t.getNextPageToken() != null) { request.setNextPageToken(arrayToByteString(t.getNextPageToken())); } @@ -166,10 +174,16 @@ public static RequestCancelWorkflowExecutionRequest requestCancelWorkflowExecuti return null; } RequestCancelWorkflowExecutionRequest.Builder builder = - RequestCancelWorkflowExecutionRequest.newBuilder() - .setDomain(t.getDomain()) - .setWorkflowExecution(workflowExecution(t.getWorkflowExecution())) - .setRequestId(t.getRequestId()); + RequestCancelWorkflowExecutionRequest.newBuilder(); + if (t.getDomain() != null) { + builder.setDomain(t.getDomain()); + } + if (t.getWorkflowExecution() != null) { + builder.setWorkflowExecution(workflowExecution(t.getWorkflowExecution())); + } + if (t.getRequestId() != null) { + builder.setRequestId(t.getRequestId()); + } if (t.getCause() != null) { builder.setCause(t.getCause()); } @@ -187,10 +201,14 @@ public static ResetStickyTaskListRequest resetStickyTaskListRequest( if (t == null) { return null; } - return ResetStickyTaskListRequest.newBuilder() - .setDomain(t.getDomain()) - .setWorkflowExecution(workflowExecution(t.getExecution())) - .build(); + ResetStickyTaskListRequest.Builder builder = ResetStickyTaskListRequest.newBuilder(); + if (t.getDomain() != null) { + builder.setDomain(t.getDomain()); + } + if (t.getExecution() != null) { + builder.setWorkflowExecution(workflowExecution(t.getExecution())); + } + return builder.build(); } public static ResetWorkflowExecutionRequest resetWorkflowExecutionRequest( @@ -198,14 +216,23 @@ public static ResetWorkflowExecutionRequest resetWorkflowExecutionRequest( if (t == null) { return null; } - return ResetWorkflowExecutionRequest.newBuilder() - .setDomain(t.getDomain()) - .setWorkflowExecution(workflowExecution(t.getWorkflowExecution())) - .setReason(t.getReason()) - .setDecisionFinishEventId(t.getDecisionFinishEventId()) - .setRequestId(t.getRequestId()) - .setSkipSignalReapply(t.isSkipSignalReapply()) - .build(); + ResetWorkflowExecutionRequest.Builder builder = + ResetWorkflowExecutionRequest.newBuilder() + .setDecisionFinishEventId(t.getDecisionFinishEventId()) + .setSkipSignalReapply(t.isSkipSignalReapply()); + if (t.getDomain() != null) { + builder.setDomain(t.getDomain()); + } + if (t.getWorkflowExecution() != null) { + builder.setWorkflowExecution(workflowExecution(t.getWorkflowExecution())); + } + if (t.getReason() != null) { + builder.setReason(t.getReason()); + } + if (t.getRequestId() != null) { + builder.setRequestId(t.getRequestId()); + } + return builder.build(); } public static RespondActivityTaskCanceledByIDRequest respondActivityTaskCanceledByIdRequest( @@ -215,10 +242,16 @@ public static RespondActivityTaskCanceledByIDRequest respondActivityTaskCanceled } RespondActivityTaskCanceledByIDRequest.Builder builder = RespondActivityTaskCanceledByIDRequest.newBuilder() - .setDomain(t.getDomain()) - .setWorkflowExecution(TypeMapper.workflowRunPair(t.getWorkflowID(), t.getRunID())) - .setActivityId(t.getActivityID()) - .setDetails(payload(t.getDetails())); + .setWorkflowExecution(TypeMapper.workflowRunPair(t.getWorkflowID(), t.getRunID())); + if (t.getDomain() != null) { + builder.setDomain(t.getDomain()); + } + if (t.getActivityID() != null) { + builder.setActivityId(t.getActivityID()); + } + if (t.getDetails() != null) { + builder.setDetails(payload(t.getDetails())); + } if (t.getIdentity() != null) { builder.setIdentity(t.getIdentity()); } @@ -231,7 +264,10 @@ public static RespondActivityTaskCanceledRequest respondActivityTaskCanceledRequ return null; } RespondActivityTaskCanceledRequest.Builder builder = - RespondActivityTaskCanceledRequest.newBuilder().setDetails(payload(t.getDetails())); + RespondActivityTaskCanceledRequest.newBuilder(); + if (t.getDetails() != null) { + builder.setDetails(payload(t.getDetails())); + } if (t.getTaskToken() != null) { builder.setTaskToken(arrayToByteString(t.getTaskToken())); } @@ -248,10 +284,16 @@ public static RespondActivityTaskCompletedByIDRequest respondActivityTaskComplet } RespondActivityTaskCompletedByIDRequest.Builder builder = RespondActivityTaskCompletedByIDRequest.newBuilder() - .setDomain(t.getDomain()) - .setWorkflowExecution(TypeMapper.workflowRunPair(t.getWorkflowID(), t.getRunID())) - .setActivityId(t.getActivityID()) - .setResult(payload(t.getResult())); + .setWorkflowExecution(TypeMapper.workflowRunPair(t.getWorkflowID(), t.getRunID())); + if (t.getDomain() != null) { + builder.setDomain(t.getDomain()); + } + if (t.getActivityID() != null) { + builder.setActivityId(t.getActivityID()); + } + if (t.getResult() != null) { + builder.setResult(payload(t.getResult())); + } if (t.getIdentity() != null) { builder.setIdentity(t.getIdentity()); } @@ -264,7 +306,10 @@ public static RespondActivityTaskCompletedRequest respondActivityTaskCompletedRe return null; } RespondActivityTaskCompletedRequest.Builder builder = - RespondActivityTaskCompletedRequest.newBuilder().setResult(payload(t.getResult())); + RespondActivityTaskCompletedRequest.newBuilder(); + if (t.getResult() != null) { + builder.setResult(payload(t.getResult())); + } if (t.getTaskToken() != null) { builder.setTaskToken(arrayToByteString(t.getTaskToken())); } @@ -281,10 +326,14 @@ public static RespondActivityTaskFailedByIDRequest respondActivityTaskFailedById } RespondActivityTaskFailedByIDRequest.Builder builder = RespondActivityTaskFailedByIDRequest.newBuilder() - .setDomain(t.getDomain()) .setWorkflowExecution(TypeMapper.workflowRunPair(t.getWorkflowID(), t.getRunID())) - .setActivityId(t.getActivityID()) .setFailure(failure(t.getReason(), t.getDetails())); + if (t.getDomain() != null) { + builder.setDomain(t.getDomain()); + } + if (t.getActivityID() != null) { + builder.setActivityId(t.getActivityID()); + } if (t.getIdentity() != null) { builder.setIdentity(t.getIdentity()); } @@ -342,8 +391,10 @@ public static RespondDecisionTaskFailedRequest respondDecisionTaskFailedRequest( } RespondDecisionTaskFailedRequest.Builder builder = RespondDecisionTaskFailedRequest.newBuilder() - .setCause(decisionTaskFailedCause(t.getCause())) - .setDetails(payload(t.getDetails())); + .setCause(decisionTaskFailedCause(t.getCause())); + if (t.getDetails() != null) { + builder.setDetails(payload(t.getDetails())); + } if (t.getBinaryChecksum() != null) { builder.setBinaryChecksum(t.getBinaryChecksum()); } @@ -365,6 +416,9 @@ public static RespondQueryTaskCompletedRequest respondQueryTaskCompletedRequest( WorkflowQueryResult.newBuilder() .setResultType(queryTaskCompletedType(t.getCompletedType())) .setAnswer(payload(t.getQueryResult())); + if (t.getQueryResult() != null) { + wqBuilder.setAnswer(payload(t.getQueryResult())); + } if (t.getErrorMessage() != null) { wqBuilder.setErrorMessage(t.getErrorMessage()); } @@ -383,17 +437,18 @@ public static ScanWorkflowExecutionsRequest scanWorkflowExecutionsRequest( if (t == null) { return null; } - ScanWorkflowExecutionsRequest.Builder request = - ScanWorkflowExecutionsRequest.newBuilder() - .setDomain(t.getDomain()) - .setPageSize(t.getPageSize()); + ScanWorkflowExecutionsRequest.Builder builder = + ScanWorkflowExecutionsRequest.newBuilder().setPageSize(t.getPageSize()); + if (t.getDomain() != null) { + builder.setDomain(t.getDomain()); + } if (t.getNextPageToken() != null) { - request.setNextPageToken(arrayToByteString(t.getNextPageToken())); + builder.setNextPageToken(arrayToByteString(t.getNextPageToken())); } if (t.getQuery() != null) { - request.setQuery(t.getQuery()); + builder.setQuery(t.getQuery()); } - return request.build(); + return builder.build(); } public static DescribeWorkflowExecutionRequest describeWorkflowExecutionRequest( @@ -401,11 +456,18 @@ public static DescribeWorkflowExecutionRequest describeWorkflowExecutionRequest( if (t == null) { return null; } - return DescribeWorkflowExecutionRequest.newBuilder() - .setDomain(t.getDomain()) - .setWorkflowExecution(workflowExecution(t.getExecution())) - .setQueryConsistencyLevel(queryConsistencyLevel(t.getQueryConsistencyLevel())) - .build(); + DescribeWorkflowExecutionRequest.Builder builder = + DescribeWorkflowExecutionRequest.newBuilder(); + if (t.getDomain() != null) { + builder.setDomain(t.getDomain()); + } + if (t.getExecution() != null) { + builder.setWorkflowExecution(workflowExecution(t.getExecution())); + } + if (t.getQueryConsistencyLevel() != null) { + builder.setQueryConsistencyLevel(queryConsistencyLevel(t.getQueryConsistencyLevel())); + } + return builder.build(); } public static GetWorkflowExecutionHistoryRequest getWorkflowExecutionHistoryRequest( @@ -415,13 +477,17 @@ public static GetWorkflowExecutionHistoryRequest getWorkflowExecutionHistoryRequ } GetWorkflowExecutionHistoryRequest.Builder builder = GetWorkflowExecutionHistoryRequest.newBuilder() - .setDomain(t.getDomain()) - .setWorkflowExecution(workflowExecution(t.getExecution())) .setPageSize(t.getMaximumPageSize()) .setWaitForNewEvent(t.isWaitForNewEvent()) .setHistoryEventFilterType(eventFilterType(t.HistoryEventFilterType)) .setSkipArchival(t.isSkipArchival()) .setQueryConsistencyLevel(queryConsistencyLevel(t.getQueryConsistencyLevel())); + if (t.getDomain() != null) { + builder.setDomain(t.getDomain()); + } + if (t.getExecution() != null) { + builder.setWorkflowExecution(workflowExecution(t.getExecution())); + } if (t.getNextPageToken() != null) { builder.setNextPageToken(arrayToByteString(t.getNextPageToken())); } @@ -435,19 +501,25 @@ public static SignalWithStartWorkflowExecutionRequest signalWithStartWorkflowExe } StartWorkflowExecutionRequest.Builder builder = StartWorkflowExecutionRequest.newBuilder() - .setDomain(t.getDomain()) - .setWorkflowId(t.getWorkflowId()) .setWorkflowType(workflowType(t.getWorkflowType())) .setTaskList(taskList(t.getTaskList())) .setInput(payload(t.getInput())) .setExecutionStartToCloseTimeout( secondsToDuration(t.getExecutionStartToCloseTimeoutSeconds())) .setTaskStartToCloseTimeout(secondsToDuration(t.getTaskStartToCloseTimeoutSeconds())) - .setRequestId(t.getRequestId()) .setMemo(memo(t.getMemo())) .setSearchAttributes(searchAttributes(t.getSearchAttributes())) .setHeader(header(t.getHeader())) .setJitterStart(secondsToDuration(t.getJitterStartSeconds())); + if (t.getDomain() != null) { + builder.setDomain(t.getDomain()); + } + if (t.getWorkflowId() != null) { + builder.setWorkflowId(t.getWorkflowId()); + } + if (t.getRequestId() != null) { + builder.setRequestId(t.getRequestId()); + } if (t.isSetFirstRunAtTimestamp()) { builder.setFirstRunAt(unixNanoToTime(t.getFirstRunAtTimestamp())); } @@ -471,8 +543,10 @@ public static SignalWithStartWorkflowExecutionRequest signalWithStartWorkflowExe SignalWithStartWorkflowExecutionRequest.Builder sb = SignalWithStartWorkflowExecutionRequest.newBuilder() .setStartRequest(builder.build()) - .setSignalName(t.getSignalName()) .setSignalInput(payload(t.getSignalInput())); + if (t.getSignalName() != null) { + sb.setSignalName(t.getSignalName()); + } if (t.getControl() != null) { sb.setControl(arrayToByteString(t.getControl())); } @@ -500,11 +574,17 @@ public static SignalWorkflowExecutionRequest signalWorkflowExecutionRequest( } SignalWorkflowExecutionRequest.Builder builder = SignalWorkflowExecutionRequest.newBuilder() - .setDomain(t.getDomain()) .setWorkflowExecution(workflowExecution(t.getWorkflowExecution())) - .setSignalName(t.getSignalName()) - .setSignalInput(payload(t.getInput())) - .setRequestId(t.getRequestId()); + .setSignalInput(payload(t.getInput())); + if (t.getDomain() != null) { + builder.setDomain(t.getDomain()); + } + if (t.getSignalName() != null) { + builder.setSignalName(t.getSignalName()); + } + if (t.getRequestId() != null) { + builder.setRequestId(t.getRequestId()); + } if (t.getControl() != null) { builder.setControl(arrayToByteString(t.getControl())); } @@ -519,14 +599,11 @@ public static StartWorkflowExecutionRequest startWorkflowExecutionRequest( if (t == null) { return null; } - StartWorkflowExecutionRequest.Builder request = + StartWorkflowExecutionRequest.Builder builder = StartWorkflowExecutionRequest.newBuilder() - .setDomain(t.getDomain()) - .setWorkflowId(t.getWorkflowId()) .setWorkflowType(workflowType(t.getWorkflowType())) .setTaskList(taskList(t.getTaskList())) .setInput(payload(t.getInput())) - .setRequestId(t.getRequestId()) .setExecutionStartToCloseTimeout( secondsToDuration(t.getExecutionStartToCloseTimeoutSeconds())) .setTaskStartToCloseTimeout(secondsToDuration(t.getTaskStartToCloseTimeoutSeconds())) @@ -536,19 +613,28 @@ public static StartWorkflowExecutionRequest startWorkflowExecutionRequest( .setHeader(header(t.getHeader())) .setDelayStart(secondsToDuration(t.getDelayStartSeconds())) .setJitterStart(secondsToDuration(t.getJitterStartSeconds())); + if (t.getDomain() != null) { + builder.setDomain(t.getDomain()); + } + if (t.getWorkflowId() != null) { + builder.setWorkflowId(t.getWorkflowId()); + } + if (t.getRequestId() != null) { + builder.setRequestId(t.getRequestId()); + } if (t.isSetFirstRunAtTimestamp()) { - request.setFirstRunAt(unixNanoToTime(t.getFirstRunAtTimestamp())); + builder.setFirstRunAt(unixNanoToTime(t.getFirstRunAtTimestamp())); } if (t.getRetryPolicy() != null) { - request.setRetryPolicy(retryPolicy(t.getRetryPolicy())); + builder.setRetryPolicy(retryPolicy(t.getRetryPolicy())); } if (t.getCronSchedule() != null) { - request.setCronSchedule(t.getCronSchedule()); + builder.setCronSchedule(t.getCronSchedule()); } if (t.getIdentity() != null) { - request.setIdentity(t.getIdentity()); + builder.setIdentity(t.getIdentity()); } - return request.build(); + return builder.build(); } public static StartWorkflowExecutionAsyncRequest startWorkflowExecutionAsyncRequest( @@ -571,10 +657,14 @@ public static TerminateWorkflowExecutionRequest terminateWorkflowExecutionReques } TerminateWorkflowExecutionRequest.Builder builder = TerminateWorkflowExecutionRequest.newBuilder() - .setDomain(t.getDomain()) .setWorkflowExecution(workflowExecution(t.getWorkflowExecution())) - .setReason(t.getReason()) .setDetails(payload(t.getDetails())); + if (t.getDomain() != null) { + builder.setDomain(t.getDomain()); + } + if (t.getReason() != null) { + builder.setReason(t.getReason()); + } if (t.getIdentity() != null) { builder.setIdentity(t.getIdentity()); } @@ -589,10 +679,14 @@ public static DeprecateDomainRequest deprecateDomainRequest( if (t == null) { return null; } - return DeprecateDomainRequest.newBuilder() - .setName(t.getName()) - .setSecurityToken(t.getSecurityToken()) - .build(); + DeprecateDomainRequest.Builder builder = DeprecateDomainRequest.newBuilder(); + if (t.getName() != null) { + builder.setName(t.getName()); + } + if (t.getSecurityToken() != null) { + builder.setSecurityToken(t.getSecurityToken()); + } + return builder.build(); } public static DescribeDomainRequest describeDomainRequest( @@ -600,11 +694,11 @@ public static DescribeDomainRequest describeDomainRequest( if (t == null) { return null; } - if (t.uuid != null) { - return DescribeDomainRequest.newBuilder().setId(t.uuid).build(); + if (t.getUuid() != null) { + return DescribeDomainRequest.newBuilder().setId(t.getUuid()).build(); } - if (t.name != null) { - return DescribeDomainRequest.newBuilder().setName(t.name).build(); + if (t.getName() != null) { + return DescribeDomainRequest.newBuilder().setName(t.getName()).build(); } throw new IllegalArgumentException("neither one of field is set for DescribeDomainRequest"); } @@ -613,7 +707,8 @@ public static ListDomainsRequest listDomainsRequest(com.uber.cadence.ListDomains if (t == null) { return null; } - ListDomainsRequest.Builder request = ListDomainsRequest.newBuilder().setPageSize(t.pageSize); + ListDomainsRequest.Builder request = + ListDomainsRequest.newBuilder().setPageSize(t.getPageSize()); if (t.getNextPageToken() != null) { request.setNextPageToken(arrayToByteString(t.getNextPageToken())); } @@ -625,10 +720,13 @@ public static ListTaskListPartitionsRequest listTaskListPartitionsRequest( if (t == null) { return null; } - return ListTaskListPartitionsRequest.newBuilder() - .setDomain(t.getDomain()) - .setTaskList(taskList(t.getTaskList())) - .build(); + ListTaskListPartitionsRequest.Builder builder = + ListTaskListPartitionsRequest.newBuilder().setTaskList(taskList(t.getTaskList())); + if (t.getDomain() != null) { + builder.setDomain(t.getDomain()); + } + + return builder.build(); } public static ListWorkflowExecutionsRequest listWorkflowExecutionsRequest( @@ -636,17 +734,18 @@ public static ListWorkflowExecutionsRequest listWorkflowExecutionsRequest( if (t == null) { return null; } - ListWorkflowExecutionsRequest.Builder request = - ListWorkflowExecutionsRequest.newBuilder() - .setDomain(t.getDomain()) - .setPageSize(t.getPageSize()); + ListWorkflowExecutionsRequest.Builder builder = + ListWorkflowExecutionsRequest.newBuilder().setPageSize(t.getPageSize()); + if (t.getDomain() != null) { + builder.setDomain(t.getDomain()); + } if (t.getNextPageToken() != null) { - request.setNextPageToken(arrayToByteString(t.getNextPageToken())); + builder.setNextPageToken(arrayToByteString(t.getNextPageToken())); } if (t.getQuery() != null) { - request.setQuery(t.getQuery()); + builder.setQuery(t.getQuery()); } - return request.build(); + return builder.build(); } public static PollForActivityTaskRequest pollForActivityTaskRequest( @@ -656,9 +755,11 @@ public static PollForActivityTaskRequest pollForActivityTaskRequest( } PollForActivityTaskRequest.Builder builder = PollForActivityTaskRequest.newBuilder() - .setDomain(t.getDomain()) .setTaskList(taskList(t.getTaskList())) .setTaskListMetadata(taskListMetadata(t.getTaskListMetadata())); + if (t.getDomain() != null) { + builder.setDomain(t.getDomain()); + } if (t.getIdentity() != null) { builder.setIdentity(t.getIdentity()); } @@ -671,9 +772,10 @@ public static PollForDecisionTaskRequest pollForDecisionTaskRequest( return null; } PollForDecisionTaskRequest.Builder builder = - PollForDecisionTaskRequest.newBuilder() - .setDomain(t.getDomain()) - .setTaskList(taskList(t.getTaskList())); + PollForDecisionTaskRequest.newBuilder().setTaskList(taskList(t.getTaskList())); + if (t.getDomain() != null) { + builder.setDomain(t.getDomain()); + } if (t.getBinaryChecksum() != null) { builder.setBinaryChecksum(t.getBinaryChecksum()); } @@ -687,13 +789,16 @@ public static QueryWorkflowRequest queryWorkflowRequest(com.uber.cadence.QueryWo if (t == null) { return null; } - return QueryWorkflowRequest.newBuilder() - .setDomain(t.getDomain()) - .setWorkflowExecution(workflowExecution(t.getExecution())) - .setQuery(workflowQuery(t.getQuery())) - .setQueryRejectCondition(queryRejectCondition(t.getQueryRejectCondition())) - .setQueryConsistencyLevel(queryConsistencyLevel(t.getQueryConsistencyLevel())) - .build(); + QueryWorkflowRequest.Builder builder = + QueryWorkflowRequest.newBuilder() + .setWorkflowExecution(workflowExecution(t.getExecution())) + .setQuery(workflowQuery(t.getQuery())) + .setQueryRejectCondition(queryRejectCondition(t.getQueryRejectCondition())) + .setQueryConsistencyLevel(queryConsistencyLevel(t.getQueryConsistencyLevel())); + if (t.getDomain() != null) { + builder.setDomain(t.getDomain()); + } + return builder.build(); } public static RecordActivityTaskHeartbeatByIDRequest recordActivityTaskHeartbeatByIdRequest( @@ -703,10 +808,14 @@ public static RecordActivityTaskHeartbeatByIDRequest recordActivityTaskHeartbeat } RecordActivityTaskHeartbeatByIDRequest.Builder builder = RecordActivityTaskHeartbeatByIDRequest.newBuilder() - .setDomain(t.getDomain()) .setWorkflowExecution(TypeMapper.workflowRunPair(t.getWorkflowID(), t.getRunID())) - .setActivityId(t.getActivityID()) .setDetails(payload(t.getDetails())); + if (t.getDomain() != null) { + builder.setDomain(t.getDomain()); + } + if (t.getActivityID() != null) { + builder.setActivityId(t.getActivityID()); + } if (t.getIdentity() != null) { builder.setIdentity(t.getIdentity()); } @@ -734,9 +843,8 @@ public static RegisterDomainRequest registerDomainRequest( if (t == null) { return null; } - RegisterDomainRequest request = + RegisterDomainRequest.Builder builder = RegisterDomainRequest.newBuilder() - .setName(t.getName()) .setDescription(Helpers.nullToEmpty(t.getDescription())) .setOwnerEmail(Helpers.nullToEmpty(t.getOwnerEmail())) .setWorkflowExecutionRetentionPeriod( @@ -749,29 +857,35 @@ public static RegisterDomainRequest registerDomainRequest( .setHistoryArchivalStatus(archivalStatus(t.getHistoryArchivalStatus())) .setHistoryArchivalUri(Helpers.nullToEmpty(t.getHistoryArchivalURI())) .setVisibilityArchivalStatus(archivalStatus(t.getVisibilityArchivalStatus())) - .setVisibilityArchivalUri(Helpers.nullToEmpty(t.getVisibilityArchivalURI())) - .build(); - return request; + .setVisibilityArchivalUri(Helpers.nullToEmpty(t.getVisibilityArchivalURI())); + if (t.getName() != null) { + builder.setName(t.getName()); + } + return builder.build(); } public static UpdateDomainRequest updateDomainRequest(com.uber.cadence.UpdateDomainRequest t) { if (t == null) { return null; } - Builder request = - UpdateDomainRequest.newBuilder() - .setName(t.getName()) - .setSecurityToken(t.getSecurityToken()); + Builder builder = UpdateDomainRequest.newBuilder(); + + if (t.getName() != null) { + builder.setName(t.getName()); + } + if (t.getSecurityToken() != null) { + builder.setSecurityToken(t.getSecurityToken()); + } List fields = new ArrayList<>(); UpdateDomainInfo updatedInfo = t.getUpdatedInfo(); if (updatedInfo != null) { if (updatedInfo.getDescription() != null) { - request.setDescription(updatedInfo.getDescription()); + builder.setDescription(updatedInfo.getDescription()); fields.add(DomainUpdateDescriptionField); } if (updatedInfo.getOwnerEmail() != null) { - request.setOwnerEmail(updatedInfo.getOwnerEmail()); + builder.setOwnerEmail(updatedInfo.getOwnerEmail()); fields.add(DomainUpdateOwnerEmailField); } if (updatedInfo.getData() != null) { @@ -782,57 +896,57 @@ public static UpdateDomainRequest updateDomainRequest(com.uber.cadence.UpdateDom DomainConfiguration configuration = t.getConfiguration(); if (configuration != null) { if (configuration.getWorkflowExecutionRetentionPeriodInDays() > 0) { - request.setWorkflowExecutionRetentionPeriod( + builder.setWorkflowExecutionRetentionPeriod( daysToDuration(configuration.getWorkflowExecutionRetentionPeriodInDays())); fields.add(DomainUpdateRetentionPeriodField); } // if t.EmitMetric != null {} - DEPRECATED if (configuration.getBadBinaries() != null) { - request.setBadBinaries(badBinaries(configuration.getBadBinaries())); + builder.setBadBinaries(badBinaries(configuration.getBadBinaries())); fields.add(DomainUpdateBadBinariesField); } if (configuration.getHistoryArchivalStatus() != null) { - request.setHistoryArchivalStatus(archivalStatus(configuration.getHistoryArchivalStatus())); + builder.setHistoryArchivalStatus(archivalStatus(configuration.getHistoryArchivalStatus())); fields.add(DomainUpdateHistoryArchivalStatusField); } if (configuration.getHistoryArchivalURI() != null) { - request.setHistoryArchivalUri(configuration.getHistoryArchivalURI()); + builder.setHistoryArchivalUri(configuration.getHistoryArchivalURI()); fields.add(DomainUpdateHistoryArchivalURIField); } if (configuration.getVisibilityArchivalStatus() != null) { - request.setVisibilityArchivalStatus( + builder.setVisibilityArchivalStatus( archivalStatus(configuration.getVisibilityArchivalStatus())); fields.add(DomainUpdateVisibilityArchivalStatusField); } if (configuration.getVisibilityArchivalURI() != null) { - request.setVisibilityArchivalUri(configuration.getVisibilityArchivalURI()); + builder.setVisibilityArchivalUri(configuration.getVisibilityArchivalURI()); fields.add(DomainUpdateVisibilityArchivalURIField); } } DomainReplicationConfiguration replicationConfiguration = t.getReplicationConfiguration(); if (replicationConfiguration != null) { if (replicationConfiguration.getActiveClusterName() != null) { - request.setActiveClusterName(replicationConfiguration.getActiveClusterName()); + builder.setActiveClusterName(replicationConfiguration.getActiveClusterName()); fields.add(DomainUpdateActiveClusterNameField); } if (replicationConfiguration.getClusters() != null) { - request.addAllClusters( + builder.addAllClusters( clusterReplicationConfigurationArray(replicationConfiguration.getClusters())); fields.add(DomainUpdateClustersField); } } if (t.getDeleteBadBinary() != null) { - request.setDeleteBadBinary(t.getDeleteBadBinary()); + builder.setDeleteBadBinary(t.getDeleteBadBinary()); fields.add(DomainUpdateDeleteBadBinaryField); } if (t.getFailoverTimeoutInSeconds() > 0) { - request.setFailoverTimeout(secondsToDuration(t.getFailoverTimeoutInSeconds())); + builder.setFailoverTimeout(secondsToDuration(t.getFailoverTimeoutInSeconds())); fields.add(DomainUpdateFailoverTimeoutField); } - request.setUpdateMask(newFieldMask(fields)); + builder.setUpdateMask(newFieldMask(fields)); - return request.build(); + return builder.build(); } public static ListClosedWorkflowExecutionsRequest listClosedWorkflowExecutionsRequest( @@ -840,26 +954,27 @@ public static ListClosedWorkflowExecutionsRequest listClosedWorkflowExecutionsRe if (t == null) { return null; } - ListClosedWorkflowExecutionsRequest.Builder request = - ListClosedWorkflowExecutionsRequest.newBuilder() - .setDomain(t.getDomain()) - .setPageSize(t.getMaximumPageSize()); + ListClosedWorkflowExecutionsRequest.Builder builder = + ListClosedWorkflowExecutionsRequest.newBuilder().setPageSize(t.getMaximumPageSize()); + if (t.getDomain() != null) { + builder.setDomain(t.getDomain()); + } if (t.getExecutionFilter() != null) { - request.setExecutionFilter(workflowExecutionFilter(t.getExecutionFilter())); + builder.setExecutionFilter(workflowExecutionFilter(t.getExecutionFilter())); } if (t.getTypeFilter() != null) { - request.setTypeFilter(workflowTypeFilter(t.getTypeFilter())); + builder.setTypeFilter(workflowTypeFilter(t.getTypeFilter())); } if (t.getStatusFilter() != null) { - request.setStatusFilter(statusFilter(t.getStatusFilter())); + builder.setStatusFilter(statusFilter(t.getStatusFilter())); } if (t.getNextPageToken() != null) { - request.setNextPageToken(arrayToByteString(t.getNextPageToken())); + builder.setNextPageToken(arrayToByteString(t.getNextPageToken())); } if (t.getStartTimeFilter() != null) { - request.setStartTimeFilter(startTimeFilter(t.getStartTimeFilter())); + builder.setStartTimeFilter(startTimeFilter(t.getStartTimeFilter())); } - return request.build(); + return builder.build(); } public static ListOpenWorkflowExecutionsRequest listOpenWorkflowExecutionsRequest( @@ -867,22 +982,23 @@ public static ListOpenWorkflowExecutionsRequest listOpenWorkflowExecutionsReques if (t == null) { return null; } - ListOpenWorkflowExecutionsRequest.Builder request = - ListOpenWorkflowExecutionsRequest.newBuilder() - .setDomain(t.getDomain()) - .setPageSize(t.getMaximumPageSize()); + ListOpenWorkflowExecutionsRequest.Builder builder = + ListOpenWorkflowExecutionsRequest.newBuilder().setPageSize(t.getMaximumPageSize()); + if (t.getDomain() != null) { + builder.setDomain(t.getDomain()); + } if (t.getExecutionFilter() != null) { - request.setExecutionFilter(workflowExecutionFilter(t.getExecutionFilter())); + builder.setExecutionFilter(workflowExecutionFilter(t.getExecutionFilter())); } if (t.getTypeFilter() != null) { - request.setTypeFilter(workflowTypeFilter(t.getTypeFilter())); + builder.setTypeFilter(workflowTypeFilter(t.getTypeFilter())); } if (t.getNextPageToken() != null) { - request.setNextPageToken(arrayToByteString(t.getNextPageToken())); + builder.setNextPageToken(arrayToByteString(t.getNextPageToken())); } if (t.getStartTimeFilter() != null) { - request.setStartTimeFilter(startTimeFilter(t.getStartTimeFilter())); + builder.setStartTimeFilter(startTimeFilter(t.getStartTimeFilter())); } - return request.build(); + return builder.build(); } } diff --git a/src/main/java/com/uber/cadence/internal/compatibility/proto/TypeMapper.java b/src/main/java/com/uber/cadence/internal/compatibility/proto/TypeMapper.java index c2d4cb03a..8197c0483 100644 --- a/src/main/java/com/uber/cadence/internal/compatibility/proto/TypeMapper.java +++ b/src/main/java/com/uber/cadence/internal/compatibility/proto/TypeMapper.java @@ -59,11 +59,15 @@ static BadBinaryInfo badBinaryInfo(com.uber.cadence.BadBinaryInfo t) { if (t == null) { return null; } - return BadBinaryInfo.newBuilder() - .setReason(t.getReason()) - .setOperator(t.getOperator()) - .setCreatedTime(unixNanoToTime(t.getCreatedTimeNano())) - .build(); + BadBinaryInfo.Builder builder = + BadBinaryInfo.newBuilder().setCreatedTime(unixNanoToTime(t.getCreatedTimeNano())); + if (t.getReason() != null) { + builder.setReason(t.getReason()); + } + if (t.getOperator() != null) { + builder.setOperator(t.getOperator()); + } + return builder.build(); } static Payload payload(byte[] data) { @@ -74,21 +78,24 @@ static Payload payload(byte[] data) { } static Failure failure(String reason, byte[] details) { - if (reason == null) { - return Failure.newBuilder().build(); + Failure.Builder builder = Failure.newBuilder(); + if (reason != null) { + builder.setReason(reason); + } + if (details != null) { + builder.setDetails(arrayToByteString(details)); } - return Failure.newBuilder().setReason(reason).setDetails(arrayToByteString(details)).build(); + return builder.build(); } static WorkflowExecution workflowExecution(com.uber.cadence.WorkflowExecution t) { if (t == null) { return WorkflowExecution.newBuilder().build(); } - if (t.getWorkflowId() == null && t.getRunId() == null) { - return WorkflowExecution.newBuilder().build(); + WorkflowExecution.Builder builder = WorkflowExecution.newBuilder(); + if (t.getWorkflowId() != null) { + builder.setWorkflowId(t.getWorkflowId()); } - WorkflowExecution.Builder builder = - WorkflowExecution.newBuilder().setWorkflowId(t.getWorkflowId()); if (t.getRunId() != null) { builder.setRunId(t.getRunId()); } @@ -96,31 +103,50 @@ static WorkflowExecution workflowExecution(com.uber.cadence.WorkflowExecution t) } static WorkflowExecution workflowRunPair(String workflowId, String runId) { - if (Strings.isNullOrEmpty(workflowId) && Strings.isNullOrEmpty(runId)) { - return WorkflowExecution.newBuilder().build(); + WorkflowExecution.Builder builder = WorkflowExecution.newBuilder(); + if (!Strings.isNullOrEmpty(workflowId)) { + builder.setWorkflowId(workflowId); + } + if (!Strings.isNullOrEmpty(runId)) { + builder.setRunId(runId); } - return WorkflowExecution.newBuilder().setWorkflowId(workflowId).setRunId(runId).build(); + return builder.build(); } static ActivityType activityType(com.uber.cadence.ActivityType t) { if (t == null) { return ActivityType.newBuilder().build(); } - return ActivityType.newBuilder().setName(t.getName()).build(); + ActivityType.Builder builder = ActivityType.newBuilder(); + if (t.getName() != null) { + builder.setName(t.getName()); + } + return builder.build(); } static WorkflowType workflowType(com.uber.cadence.WorkflowType t) { if (t == null) { return WorkflowType.newBuilder().build(); } - return WorkflowType.newBuilder().setName(t.getName()).build(); + WorkflowType.Builder builder = WorkflowType.newBuilder(); + if (t.getName() != null) { + builder.setName(t.getName()); + } + return builder.build(); } static TaskList taskList(com.uber.cadence.TaskList t) { if (t == null) { return TaskList.newBuilder().build(); } - return TaskList.newBuilder().setName(t.getName()).setKind(taskListKind(t.getKind())).build(); + TaskList.Builder builder = TaskList.newBuilder(); + if (t.getName() != null) { + builder.setName(t.getName()); + } + if (t.getKind() != null) { + builder.setKind(taskListKind(t.getKind())); + } + return builder.build(); } static TaskListMetadata taskListMetadata(com.uber.cadence.TaskListMetadata t) { @@ -165,7 +191,7 @@ static Memo memo(com.uber.cadence.Memo t) { static SearchAttributes searchAttributes(com.uber.cadence.SearchAttributes t) { if (t == null) { - return SearchAttributes.newBuilder().build(); + return SearchAttributes.newBuilder().putAllIndexedFields(Collections.emptyMap()).build(); } return SearchAttributes.newBuilder() .putAllIndexedFields(payloadByteBufferMap(t.getIndexedFields())) @@ -184,28 +210,42 @@ static ClusterReplicationConfiguration clusterReplicationConfiguration( if (t == null) { return ClusterReplicationConfiguration.newBuilder().build(); } - return ClusterReplicationConfiguration.newBuilder().setClusterName(t.getClusterName()).build(); + ClusterReplicationConfiguration.Builder builder = ClusterReplicationConfiguration.newBuilder(); + if (t.getClusterName() != null) { + builder.setClusterName(t.getClusterName()); + } + return builder.build(); } static WorkflowQuery workflowQuery(com.uber.cadence.WorkflowQuery t) { if (t == null) { return null; } - return WorkflowQuery.newBuilder() - .setQueryType(t.getQueryType()) - .setQueryArgs(payload(t.getQueryArgs())) - .build(); + WorkflowQuery.Builder builder = WorkflowQuery.newBuilder(); + if (t.getQueryType() != null) { + builder.setQueryType(t.getQueryType()); + } + if (t.getQueryArgs() != null) { + builder.setQueryArgs(payload(t.getQueryArgs())); + } + return builder.build(); } static WorkflowQueryResult workflowQueryResult(com.uber.cadence.WorkflowQueryResult t) { if (t == null) { return WorkflowQueryResult.newBuilder().build(); } - return WorkflowQueryResult.newBuilder() - .setResultType(queryResultType(t.getResultType())) - .setAnswer(payload(t.getAnswer())) - .setErrorMessage(t.getErrorMessage()) - .build(); + WorkflowQueryResult.Builder builder = WorkflowQueryResult.newBuilder(); + if (t.getResultType() != null) { + builder.setResultType(queryResultType(t.getResultType())); + } + if (t.getAnswer() != null) { + builder.setAnswer(payload(t.getAnswer())); + } + if (t.getErrorMessage() != null) { + builder.setErrorMessage(t.getErrorMessage()); + } + return builder.build(); } static StickyExecutionAttributes stickyExecutionAttributes( @@ -213,20 +253,27 @@ static StickyExecutionAttributes stickyExecutionAttributes( if (t == null) { return StickyExecutionAttributes.newBuilder().build(); } - return StickyExecutionAttributes.newBuilder() - .setWorkerTaskList(taskList(t.getWorkerTaskList())) - .setScheduleToStartTimeout(secondsToDuration(t.getScheduleToStartTimeoutSeconds())) - .build(); + StickyExecutionAttributes.Builder builder = + StickyExecutionAttributes.newBuilder() + .setScheduleToStartTimeout(secondsToDuration(t.getScheduleToStartTimeoutSeconds())); + if (t.getWorkerTaskList() != null) { + builder.setWorkerTaskList(taskList(t.getWorkerTaskList())); + } + return builder.build(); } static WorkerVersionInfo workerVersionInfo(com.uber.cadence.WorkerVersionInfo t) { if (t == null) { return WorkerVersionInfo.newBuilder().build(); } - return WorkerVersionInfo.newBuilder() - .setImpl(t.getImpl()) - .setFeatureVersion(t.getFeatureVersion()) - .build(); + WorkerVersionInfo.Builder builder = WorkerVersionInfo.newBuilder(); + if (t.getImpl() != null) { + builder.setImpl(t.getImpl()); + } + if (t.getFeatureVersion() != null) { + builder.setFeatureVersion(t.getFeatureVersion()); + } + return builder.build(); } static StartTimeFilter startTimeFilter(com.uber.cadence.StartTimeFilter t) { @@ -244,17 +291,25 @@ static WorkflowExecutionFilter workflowExecutionFilter( if (t == null) { return WorkflowExecutionFilter.newBuilder().build(); } - return WorkflowExecutionFilter.newBuilder() - .setWorkflowId(t.getWorkflowId()) - .setRunId(t.getRunId()) - .build(); + WorkflowExecutionFilter.Builder builder = WorkflowExecutionFilter.newBuilder(); + if (t.getWorkflowId() != null) { + builder.setWorkflowId(t.getWorkflowId()); + } + if (t.getRunId() != null) { + builder.setRunId(t.getRunId()); + } + return builder.build(); } static WorkflowTypeFilter workflowTypeFilter(com.uber.cadence.WorkflowTypeFilter t) { if (t == null) { return WorkflowTypeFilter.newBuilder().build(); } - return WorkflowTypeFilter.newBuilder().setName(t.getName()).build(); + WorkflowTypeFilter.Builder builder = WorkflowTypeFilter.newBuilder(); + if (t.getName() != null) { + builder.setName(t.getName()); + } + return builder.build(); } static StatusFilter statusFilter(com.uber.cadence.WorkflowExecutionCloseStatus t) { diff --git a/src/main/java/com/uber/cadence/internal/replay/WorkflowContext.java b/src/main/java/com/uber/cadence/internal/replay/WorkflowContext.java index ca7633986..e40291169 100644 --- a/src/main/java/com/uber/cadence/internal/replay/WorkflowContext.java +++ b/src/main/java/com/uber/cadence/internal/replay/WorkflowContext.java @@ -20,6 +20,7 @@ import com.uber.cadence.*; import com.uber.cadence.context.ContextPropagator; import java.nio.ByteBuffer; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -176,24 +177,17 @@ Map getPropagatedContexts() { } void mergeSearchAttributes(SearchAttributes searchAttributes) { - if (searchAttributes == null) { - return; + Map newIndexedFields = new HashMap<>(); + + if (this.searchAttributes != null && this.searchAttributes.getIndexedFields() != null) { + newIndexedFields.putAll(this.searchAttributes.getIndexedFields()); } - if (this.searchAttributes == null) { - this.searchAttributes = newSearchAttributes(); + // New attributes override existing ones + if (searchAttributes != null && searchAttributes.getIndexedFields() != null) { + newIndexedFields.putAll(searchAttributes.getIndexedFields()); } - Map current = this.searchAttributes.getIndexedFields(); - searchAttributes - .getIndexedFields() - .forEach( - (k, v) -> { - current.put(k, v); - }); - } - - private SearchAttributes newSearchAttributes() { - SearchAttributes result = new SearchAttributes(); - result.setIndexedFields(new HashMap()); - return result; + + this.searchAttributes = + new SearchAttributes().setIndexedFields(Collections.unmodifiableMap(newIndexedFields)); } }