diff --git a/build.gradle b/build.gradle index fa8be595f..6183a4536 100644 --- a/build.gradle +++ b/build.gradle @@ -181,8 +181,37 @@ clean { delete protobuf.generatedFilesBaseDir } +// This is to suppress the deprecation warning in the generated file, because it uses a deprecated proto message. +// Remove this once the deprecated proto message is deleted. +task replaceGeneratedSources { + dependsOn 'generateProto' + doLast { + def file = file("$buildDir/generated-sources/proto/main/java/com/uber/cadence/api/v1/ActiveClusterSelectionPolicy.java") + + if (!file.exists()) { + return + } + + def content = file.text + + def updated = content.replaceFirst( + /public\s+.*class\s+ActiveClusterSelectionPolicy/, + '@SuppressWarnings("deprecation")\n$0' + ) + + if (content == updated) { + println("❌ Pattern did NOT match") + } else { + file.text = updated + println("✅ Replacement applied") + } + + } +} + compileJava { dependsOn 'googleJavaFormat' + dependsOn 'replaceGeneratedSources' options.encoding = 'UTF-8' options.compilerArgs << '-Xlint:none' << '-Xlint:deprecation' << '-Werror' options.errorprone.excludedPaths = '.*/generated-sources/.*' diff --git a/src/gen/java/com/uber/cadence/ActiveClusterInfo.java b/src/gen/java/com/uber/cadence/ActiveClusterInfo.java new file mode 100644 index 000000000..b5bb7eca6 --- /dev/null +++ b/src/gen/java/com/uber/cadence/ActiveClusterInfo.java @@ -0,0 +1,12 @@ +package com.uber.cadence; + +import java.util.*; +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class ActiveClusterInfo { + private String activeClusterName; + private long failoverVersion; +} diff --git a/src/gen/java/com/uber/cadence/ActiveClusterSelectionPolicy.java b/src/gen/java/com/uber/cadence/ActiveClusterSelectionPolicy.java new file mode 100644 index 000000000..60e28f44f --- /dev/null +++ b/src/gen/java/com/uber/cadence/ActiveClusterSelectionPolicy.java @@ -0,0 +1,15 @@ +package com.uber.cadence; + +import java.util.*; +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class ActiveClusterSelectionPolicy { + private ClusterAttribute clusterAttribute; + private ActiveClusterSelectionStrategy strategy; + private String stickyRegion; + private String externalEntityType; + private String externalEntityKey; +} diff --git a/src/gen/java/com/uber/cadence/ActiveClusterSelectionStrategy.java b/src/gen/java/com/uber/cadence/ActiveClusterSelectionStrategy.java new file mode 100644 index 000000000..a66a64744 --- /dev/null +++ b/src/gen/java/com/uber/cadence/ActiveClusterSelectionStrategy.java @@ -0,0 +1,6 @@ +package com.uber.cadence; + +public enum ActiveClusterSelectionStrategy { + REGION_STICKY, + EXTERNAL_ENTITY, +} diff --git a/src/gen/java/com/uber/cadence/ActiveClusters.java b/src/gen/java/com/uber/cadence/ActiveClusters.java new file mode 100644 index 000000000..35f7886a3 --- /dev/null +++ b/src/gen/java/com/uber/cadence/ActiveClusters.java @@ -0,0 +1,12 @@ +package com.uber.cadence; + +import java.util.*; +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class ActiveClusters { + private Map activeClustersByRegion = new HashMap<>();; + private Map activeClustersByClusterAttribute = new HashMap<>();; +} diff --git a/src/gen/java/com/uber/cadence/ClusterAttribute.java b/src/gen/java/com/uber/cadence/ClusterAttribute.java new file mode 100644 index 000000000..9698d2429 --- /dev/null +++ b/src/gen/java/com/uber/cadence/ClusterAttribute.java @@ -0,0 +1,12 @@ +package com.uber.cadence; + +import java.util.*; +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class ClusterAttribute { + private String scope; + private String name; +} diff --git a/src/gen/java/com/uber/cadence/ClusterAttributeScope.java b/src/gen/java/com/uber/cadence/ClusterAttributeScope.java new file mode 100644 index 000000000..e91869ba1 --- /dev/null +++ b/src/gen/java/com/uber/cadence/ClusterAttributeScope.java @@ -0,0 +1,11 @@ +package com.uber.cadence; + +import java.util.*; +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class ClusterAttributeScope { + private Map clusterAttributes = new HashMap<>();; +} diff --git a/src/gen/java/com/uber/cadence/ClusterFailover.java b/src/gen/java/com/uber/cadence/ClusterFailover.java new file mode 100644 index 000000000..fc646bd13 --- /dev/null +++ b/src/gen/java/com/uber/cadence/ClusterFailover.java @@ -0,0 +1,13 @@ +package com.uber.cadence; + +import java.util.*; +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class ClusterFailover { + private ActiveClusterInfo fromCluster; + private ActiveClusterInfo toCluster; + private ClusterAttribute clusterAttribute; +} diff --git a/src/gen/java/com/uber/cadence/ContinueAsNewWorkflowExecutionDecisionAttributes.java b/src/gen/java/com/uber/cadence/ContinueAsNewWorkflowExecutionDecisionAttributes.java index df566206e..9f9448d07 100644 --- a/src/gen/java/com/uber/cadence/ContinueAsNewWorkflowExecutionDecisionAttributes.java +++ b/src/gen/java/com/uber/cadence/ContinueAsNewWorkflowExecutionDecisionAttributes.java @@ -23,4 +23,6 @@ public class ContinueAsNewWorkflowExecutionDecisionAttributes { private Memo memo; private SearchAttributes searchAttributes; private int jitterStartSeconds; + private CronOverlapPolicy cronOverlapPolicy; + private ActiveClusterSelectionPolicy activeClusterSelectionPolicy; } diff --git a/src/gen/java/com/uber/cadence/CronOverlapPolicy.java b/src/gen/java/com/uber/cadence/CronOverlapPolicy.java new file mode 100644 index 000000000..f6ffd738e --- /dev/null +++ b/src/gen/java/com/uber/cadence/CronOverlapPolicy.java @@ -0,0 +1,6 @@ +package com.uber.cadence; + +public enum CronOverlapPolicy { + SKIPPED, + BUFFERONE, +} diff --git a/src/gen/java/com/uber/cadence/DeleteDomainRequest.java b/src/gen/java/com/uber/cadence/DeleteDomainRequest.java new file mode 100644 index 000000000..15c12f4a6 --- /dev/null +++ b/src/gen/java/com/uber/cadence/DeleteDomainRequest.java @@ -0,0 +1,12 @@ +package com.uber.cadence; + +import java.util.*; +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class DeleteDomainRequest { + private String name; + private String securityToken; +} diff --git a/src/gen/java/com/uber/cadence/DescribeTaskListResponse.java b/src/gen/java/com/uber/cadence/DescribeTaskListResponse.java index a7bbd9b05..a8c66c9a8 100644 --- a/src/gen/java/com/uber/cadence/DescribeTaskListResponse.java +++ b/src/gen/java/com/uber/cadence/DescribeTaskListResponse.java @@ -9,4 +9,5 @@ public class DescribeTaskListResponse { private List pollers = new ArrayList<>();; private TaskListStatus taskListStatus; + private TaskList taskList; } diff --git a/src/gen/java/com/uber/cadence/DomainIDPredicateAttributes.java b/src/gen/java/com/uber/cadence/DomainIDPredicateAttributes.java new file mode 100644 index 000000000..00e4a5f59 --- /dev/null +++ b/src/gen/java/com/uber/cadence/DomainIDPredicateAttributes.java @@ -0,0 +1,12 @@ +package com.uber.cadence; + +import java.util.*; +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class DomainIDPredicateAttributes { + private List domainIDs = new ArrayList<>();; + private boolean isExclusive; +} diff --git a/src/gen/java/com/uber/cadence/DomainNotActiveError.java b/src/gen/java/com/uber/cadence/DomainNotActiveError.java index 4d00bb00b..5cf5c0eaf 100644 --- a/src/gen/java/com/uber/cadence/DomainNotActiveError.java +++ b/src/gen/java/com/uber/cadence/DomainNotActiveError.java @@ -12,6 +12,7 @@ public class DomainNotActiveError extends CadenceError { private String domainName; private String currentCluster; private String activeCluster; + private List activeClusters; public DomainNotActiveError() { super(); diff --git a/src/gen/java/com/uber/cadence/DomainReplicationConfiguration.java b/src/gen/java/com/uber/cadence/DomainReplicationConfiguration.java index 40770dae2..2de37ecb9 100644 --- a/src/gen/java/com/uber/cadence/DomainReplicationConfiguration.java +++ b/src/gen/java/com/uber/cadence/DomainReplicationConfiguration.java @@ -9,4 +9,5 @@ public class DomainReplicationConfiguration { private String activeClusterName; private List clusters = new ArrayList<>();; + private ActiveClusters activeClusters; } diff --git a/src/gen/java/com/uber/cadence/EmptyPredicateAttributes.java b/src/gen/java/com/uber/cadence/EmptyPredicateAttributes.java new file mode 100644 index 000000000..bed1b22dc --- /dev/null +++ b/src/gen/java/com/uber/cadence/EmptyPredicateAttributes.java @@ -0,0 +1,9 @@ +package com.uber.cadence; + +import java.util.*; +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class EmptyPredicateAttributes {} diff --git a/src/gen/java/com/uber/cadence/EntityNotExistsError.java b/src/gen/java/com/uber/cadence/EntityNotExistsError.java index 20ccd12c1..e6674d6da 100644 --- a/src/gen/java/com/uber/cadence/EntityNotExistsError.java +++ b/src/gen/java/com/uber/cadence/EntityNotExistsError.java @@ -11,6 +11,7 @@ public class EntityNotExistsError extends CadenceError { private String currentCluster; private String activeCluster; + private List activeClusters; public EntityNotExistsError() { super(); diff --git a/src/gen/java/com/uber/cadence/FailoverDomainRequest.java b/src/gen/java/com/uber/cadence/FailoverDomainRequest.java new file mode 100644 index 000000000..0be5c1f84 --- /dev/null +++ b/src/gen/java/com/uber/cadence/FailoverDomainRequest.java @@ -0,0 +1,14 @@ +package com.uber.cadence; + +import java.util.*; +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class FailoverDomainRequest { + private String domainName; + private String domainActiveClusterName; + private ActiveClusters activeClusters; + private String reason; +} diff --git a/src/gen/java/com/uber/cadence/FailoverDomainResponse.java b/src/gen/java/com/uber/cadence/FailoverDomainResponse.java new file mode 100644 index 000000000..ccad31b8f --- /dev/null +++ b/src/gen/java/com/uber/cadence/FailoverDomainResponse.java @@ -0,0 +1,15 @@ +package com.uber.cadence; + +import java.util.*; +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class FailoverDomainResponse { + private DomainInfo domainInfo; + private DomainConfiguration configuration; + private DomainReplicationConfiguration replicationConfiguration; + private long failoverVersion; + private boolean isGlobalDomain; +} diff --git a/src/gen/java/com/uber/cadence/FailoverEvent.java b/src/gen/java/com/uber/cadence/FailoverEvent.java new file mode 100644 index 000000000..da33ba018 --- /dev/null +++ b/src/gen/java/com/uber/cadence/FailoverEvent.java @@ -0,0 +1,14 @@ +package com.uber.cadence; + +import java.util.*; +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class FailoverEvent { + private String id; + private long createdTime; + private FailoverType failoverType; + private List clusterFailovers = new ArrayList<>();; +} diff --git a/src/gen/java/com/uber/cadence/FailoverType.java b/src/gen/java/com/uber/cadence/FailoverType.java new file mode 100644 index 000000000..de424e4a9 --- /dev/null +++ b/src/gen/java/com/uber/cadence/FailoverType.java @@ -0,0 +1,7 @@ +package com.uber.cadence; + +public enum FailoverType { + INVALID, + FORCE, + GRACEFUL, +} diff --git a/src/gen/java/com/uber/cadence/FeatureFlags.java b/src/gen/java/com/uber/cadence/FeatureFlags.java index 3498c1724..110b62b66 100644 --- a/src/gen/java/com/uber/cadence/FeatureFlags.java +++ b/src/gen/java/com/uber/cadence/FeatureFlags.java @@ -8,4 +8,5 @@ @Accessors(chain = true) public class FeatureFlags { private boolean WorkflowExecutionAlreadyCompletedErrorEnabled; + private boolean AutoForwardingEnabled; } diff --git a/src/gen/java/com/uber/cadence/ListFailoverHistoryRequest.java b/src/gen/java/com/uber/cadence/ListFailoverHistoryRequest.java new file mode 100644 index 000000000..655adf7ea --- /dev/null +++ b/src/gen/java/com/uber/cadence/ListFailoverHistoryRequest.java @@ -0,0 +1,12 @@ +package com.uber.cadence; + +import java.util.*; +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class ListFailoverHistoryRequest { + private ListFailoverHistoryRequestFilters filters; + private PaginationOptions pagination; +} diff --git a/src/gen/java/com/uber/cadence/ListFailoverHistoryRequestFilters.java b/src/gen/java/com/uber/cadence/ListFailoverHistoryRequestFilters.java new file mode 100644 index 000000000..66ce7feed --- /dev/null +++ b/src/gen/java/com/uber/cadence/ListFailoverHistoryRequestFilters.java @@ -0,0 +1,11 @@ +package com.uber.cadence; + +import java.util.*; +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class ListFailoverHistoryRequestFilters { + private String domainID; +} diff --git a/src/gen/java/com/uber/cadence/ListFailoverHistoryResponse.java b/src/gen/java/com/uber/cadence/ListFailoverHistoryResponse.java new file mode 100644 index 000000000..cf02caa2c --- /dev/null +++ b/src/gen/java/com/uber/cadence/ListFailoverHistoryResponse.java @@ -0,0 +1,12 @@ +package com.uber.cadence; + +import java.util.*; +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class ListFailoverHistoryResponse { + private List failoverEvents = new ArrayList<>();; + private byte[] nextPageToken; +} diff --git a/src/gen/java/com/uber/cadence/PaginationOptions.java b/src/gen/java/com/uber/cadence/PaginationOptions.java new file mode 100644 index 000000000..d70fc5b63 --- /dev/null +++ b/src/gen/java/com/uber/cadence/PaginationOptions.java @@ -0,0 +1,12 @@ +package com.uber.cadence; + +import java.util.*; +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class PaginationOptions { + private int pageSize; + private byte[] nextPageToken; +} diff --git a/src/gen/java/com/uber/cadence/Predicate.java b/src/gen/java/com/uber/cadence/Predicate.java new file mode 100644 index 000000000..5bfc1b6a6 --- /dev/null +++ b/src/gen/java/com/uber/cadence/Predicate.java @@ -0,0 +1,14 @@ +package com.uber.cadence; + +import java.util.*; +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class Predicate { + private PredicateType predicateType; + private UniversalPredicateAttributes universalPredicateAttributes; + private EmptyPredicateAttributes emptyPredicateAttributes; + private DomainIDPredicateAttributes domainIDPredicateAttributes; +} diff --git a/src/gen/java/com/uber/cadence/PredicateType.java b/src/gen/java/com/uber/cadence/PredicateType.java new file mode 100644 index 000000000..d2843e5d7 --- /dev/null +++ b/src/gen/java/com/uber/cadence/PredicateType.java @@ -0,0 +1,7 @@ +package com.uber.cadence; + +public enum PredicateType { + Universal, + Empty, + DomainID, +} diff --git a/src/gen/java/com/uber/cadence/QueueState.java b/src/gen/java/com/uber/cadence/QueueState.java new file mode 100644 index 000000000..61b7f54cf --- /dev/null +++ b/src/gen/java/com/uber/cadence/QueueState.java @@ -0,0 +1,12 @@ +package com.uber.cadence; + +import java.util.*; +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class QueueState { + private Map virtualQueueStates = new HashMap<>();; + private TaskKey exclusiveMaxReadLevel; +} diff --git a/src/gen/java/com/uber/cadence/RegisterDomainRequest.java b/src/gen/java/com/uber/cadence/RegisterDomainRequest.java index 1958fb21f..ca8c643b0 100644 --- a/src/gen/java/com/uber/cadence/RegisterDomainRequest.java +++ b/src/gen/java/com/uber/cadence/RegisterDomainRequest.java @@ -14,6 +14,8 @@ public class RegisterDomainRequest { private boolean emitMetric; private List clusters = new ArrayList<>();; private String activeClusterName; + private Map activeClustersByRegion = new HashMap<>();; + private ActiveClusters activeClusters; private Map data = new HashMap<>();; private String securityToken; private boolean isGlobalDomain; diff --git a/src/gen/java/com/uber/cadence/SignalWithStartWorkflowExecutionRequest.java b/src/gen/java/com/uber/cadence/SignalWithStartWorkflowExecutionRequest.java index c2235c01b..27577a481 100644 --- a/src/gen/java/com/uber/cadence/SignalWithStartWorkflowExecutionRequest.java +++ b/src/gen/java/com/uber/cadence/SignalWithStartWorkflowExecutionRequest.java @@ -28,4 +28,6 @@ public class SignalWithStartWorkflowExecutionRequest { private int delayStartSeconds; private int jitterStartSeconds; private long firstRunAtTimestamp; + private CronOverlapPolicy cronOverlapPolicy; + private ActiveClusterSelectionPolicy activeClusterSelectionPolicy; } diff --git a/src/gen/java/com/uber/cadence/StartChildWorkflowExecutionDecisionAttributes.java b/src/gen/java/com/uber/cadence/StartChildWorkflowExecutionDecisionAttributes.java index 0bc40c6f4..c7a0cdd82 100644 --- a/src/gen/java/com/uber/cadence/StartChildWorkflowExecutionDecisionAttributes.java +++ b/src/gen/java/com/uber/cadence/StartChildWorkflowExecutionDecisionAttributes.java @@ -22,4 +22,6 @@ public class StartChildWorkflowExecutionDecisionAttributes { private Header header; private Memo memo; private SearchAttributes searchAttributes; + private CronOverlapPolicy cronOverlapPolicy; + private ActiveClusterSelectionPolicy activeClusterSelectionPolicy; } diff --git a/src/gen/java/com/uber/cadence/StartChildWorkflowExecutionInitiatedEventAttributes.java b/src/gen/java/com/uber/cadence/StartChildWorkflowExecutionInitiatedEventAttributes.java index d9ba326c9..ccf4384fb 100644 --- a/src/gen/java/com/uber/cadence/StartChildWorkflowExecutionInitiatedEventAttributes.java +++ b/src/gen/java/com/uber/cadence/StartChildWorkflowExecutionInitiatedEventAttributes.java @@ -26,4 +26,6 @@ public class StartChildWorkflowExecutionInitiatedEventAttributes { private int delayStartSeconds; private int jitterStartSeconds; private long firstRunAtTimestamp; + private CronOverlapPolicy cronOverlapPolicy; + private ActiveClusterSelectionPolicy activeClusterSelectionPolicy; } diff --git a/src/gen/java/com/uber/cadence/StartWorkflowExecutionRequest.java b/src/gen/java/com/uber/cadence/StartWorkflowExecutionRequest.java index 85b5dab42..6d9ecec37 100644 --- a/src/gen/java/com/uber/cadence/StartWorkflowExecutionRequest.java +++ b/src/gen/java/com/uber/cadence/StartWorkflowExecutionRequest.java @@ -25,4 +25,6 @@ public class StartWorkflowExecutionRequest { private int delayStartSeconds; private int jitterStartSeconds; private long firstRunAtTimestamp; + private CronOverlapPolicy cronOverlapPolicy; + private ActiveClusterSelectionPolicy activeClusterSelectionPolicy; } diff --git a/src/gen/java/com/uber/cadence/TaskKey.java b/src/gen/java/com/uber/cadence/TaskKey.java new file mode 100644 index 000000000..0ab63cf5a --- /dev/null +++ b/src/gen/java/com/uber/cadence/TaskKey.java @@ -0,0 +1,12 @@ +package com.uber.cadence; + +import java.util.*; +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class TaskKey { + private long scheduledTimeNano; + private long taskID; +} diff --git a/src/gen/java/com/uber/cadence/TaskList.java b/src/gen/java/com/uber/cadence/TaskList.java index 3bc7afe5d..27c0a11ce 100644 --- a/src/gen/java/com/uber/cadence/TaskList.java +++ b/src/gen/java/com/uber/cadence/TaskList.java @@ -9,4 +9,5 @@ public class TaskList { private String name; private TaskListKind kind; + private String baseName; } diff --git a/src/gen/java/com/uber/cadence/TaskListKind.java b/src/gen/java/com/uber/cadence/TaskListKind.java index 4b8487578..555622c13 100644 --- a/src/gen/java/com/uber/cadence/TaskListKind.java +++ b/src/gen/java/com/uber/cadence/TaskListKind.java @@ -3,4 +3,5 @@ public enum TaskListKind { NORMAL, STICKY, + EPHEMERAL, } diff --git a/src/gen/java/com/uber/cadence/TaskListStatus.java b/src/gen/java/com/uber/cadence/TaskListStatus.java index 3bac49d5b..b5ffce067 100644 --- a/src/gen/java/com/uber/cadence/TaskListStatus.java +++ b/src/gen/java/com/uber/cadence/TaskListStatus.java @@ -14,4 +14,5 @@ public class TaskListStatus { private TaskIDBlock taskIDBlock; private Map isolationGroupMetrics = new HashMap<>();; private double newTasksPerSecond; + private boolean empty; } diff --git a/src/gen/java/com/uber/cadence/TaskRange.java b/src/gen/java/com/uber/cadence/TaskRange.java new file mode 100644 index 000000000..9bab80cbf --- /dev/null +++ b/src/gen/java/com/uber/cadence/TaskRange.java @@ -0,0 +1,12 @@ +package com.uber.cadence; + +import java.util.*; +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class TaskRange { + private TaskKey inclusiveMin; + private TaskKey exclusiveMax; +} diff --git a/src/gen/java/com/uber/cadence/UniversalPredicateAttributes.java b/src/gen/java/com/uber/cadence/UniversalPredicateAttributes.java new file mode 100644 index 000000000..d077efb7d --- /dev/null +++ b/src/gen/java/com/uber/cadence/UniversalPredicateAttributes.java @@ -0,0 +1,9 @@ +package com.uber.cadence; + +import java.util.*; +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class UniversalPredicateAttributes {} diff --git a/src/gen/java/com/uber/cadence/VirtualQueueState.java b/src/gen/java/com/uber/cadence/VirtualQueueState.java new file mode 100644 index 000000000..a932d0693 --- /dev/null +++ b/src/gen/java/com/uber/cadence/VirtualQueueState.java @@ -0,0 +1,11 @@ +package com.uber.cadence; + +import java.util.*; +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class VirtualQueueState { + private List virtualSliceStates = new ArrayList<>();; +} diff --git a/src/gen/java/com/uber/cadence/VirtualSliceState.java b/src/gen/java/com/uber/cadence/VirtualSliceState.java new file mode 100644 index 000000000..c16a3cc2a --- /dev/null +++ b/src/gen/java/com/uber/cadence/VirtualSliceState.java @@ -0,0 +1,12 @@ +package com.uber.cadence; + +import java.util.*; +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class VirtualSliceState { + private TaskRange taskRange; + private Predicate predicate; +} diff --git a/src/gen/java/com/uber/cadence/WorkflowExecutionContinuedAsNewEventAttributes.java b/src/gen/java/com/uber/cadence/WorkflowExecutionContinuedAsNewEventAttributes.java index 613f0e3a8..2ec2f57fa 100644 --- a/src/gen/java/com/uber/cadence/WorkflowExecutionContinuedAsNewEventAttributes.java +++ b/src/gen/java/com/uber/cadence/WorkflowExecutionContinuedAsNewEventAttributes.java @@ -22,4 +22,6 @@ public class WorkflowExecutionContinuedAsNewEventAttributes { private Header header; private Memo memo; private SearchAttributes searchAttributes; + private CronOverlapPolicy cronOverlapPolicy; + private ActiveClusterSelectionPolicy activeClusterSelectionPolicy; } diff --git a/src/gen/java/com/uber/cadence/WorkflowExecutionInfo.java b/src/gen/java/com/uber/cadence/WorkflowExecutionInfo.java index 0226aa150..7f42b074a 100644 --- a/src/gen/java/com/uber/cadence/WorkflowExecutionInfo.java +++ b/src/gen/java/com/uber/cadence/WorkflowExecutionInfo.java @@ -22,7 +22,13 @@ public class WorkflowExecutionInfo { private SearchAttributes searchAttributes; private ResetPoints autoResetPoints; private String taskList; + private TaskList taskListInfo; private boolean isCron; private long updateTime; private Map partitionConfig = new HashMap<>();; + private CronOverlapPolicy cronOverlapPolicy; + private ActiveClusterSelectionPolicy activeClusterSelectionPolicy; + private String cronSchedule; + private WorkflowExecutionStatus executionStatus; + private long scheduledExecutionTime; } diff --git a/src/gen/java/com/uber/cadence/WorkflowExecutionStartedEventAttributes.java b/src/gen/java/com/uber/cadence/WorkflowExecutionStartedEventAttributes.java index e1f9d5f24..63d719e59 100644 --- a/src/gen/java/com/uber/cadence/WorkflowExecutionStartedEventAttributes.java +++ b/src/gen/java/com/uber/cadence/WorkflowExecutionStartedEventAttributes.java @@ -35,4 +35,6 @@ public class WorkflowExecutionStartedEventAttributes { private Header header; private Map partitionConfig = new HashMap<>();; private String requestId; + private CronOverlapPolicy cronOverlapPolicy; + private ActiveClusterSelectionPolicy activeClusterSelectionPolicy; } diff --git a/src/gen/java/com/uber/cadence/WorkflowExecutionStatus.java b/src/gen/java/com/uber/cadence/WorkflowExecutionStatus.java new file mode 100644 index 000000000..54f043a32 --- /dev/null +++ b/src/gen/java/com/uber/cadence/WorkflowExecutionStatus.java @@ -0,0 +1,12 @@ +package com.uber.cadence; + +public enum WorkflowExecutionStatus { + PENDING, + STARTED, + COMPLETED, + FAILED, + CANCELED, + TERMINATED, + CONTINUED_AS_NEW, + TIMED_OUT, +} diff --git a/src/main/idls b/src/main/idls index f5ac3a987..35996664f 160000 --- a/src/main/idls +++ b/src/main/idls @@ -1 +1 @@ -Subproject commit f5ac3a987dcaf996cf44c72064195faf76c381f3 +Subproject commit 35996664fb499e74d87cc5f602582b194598019f diff --git a/src/main/java/com/uber/cadence/internal/compatibility/proto/mappers/DecisionMapper.java b/src/main/java/com/uber/cadence/internal/compatibility/proto/mappers/DecisionMapper.java index b74754257..ab8caa38e 100644 --- a/src/main/java/com/uber/cadence/internal/compatibility/proto/mappers/DecisionMapper.java +++ b/src/main/java/com/uber/cadence/internal/compatibility/proto/mappers/DecisionMapper.java @@ -16,11 +16,13 @@ package com.uber.cadence.internal.compatibility.proto.mappers; import static com.uber.cadence.internal.compatibility.proto.mappers.EnumMapper.continueAsNewInitiator; +import static com.uber.cadence.internal.compatibility.proto.mappers.EnumMapper.cronOverlapPolicy; import static com.uber.cadence.internal.compatibility.proto.mappers.EnumMapper.parentClosePolicy; import static com.uber.cadence.internal.compatibility.proto.mappers.EnumMapper.workflowIdReusePolicy; import static com.uber.cadence.internal.compatibility.proto.mappers.Helpers.arrayToByteString; import static com.uber.cadence.internal.compatibility.proto.mappers.Helpers.longToInt; import static com.uber.cadence.internal.compatibility.proto.mappers.Helpers.secondsToDuration; +import static com.uber.cadence.internal.compatibility.proto.mappers.TypeMapper.activeClusterSelectionPolicy; import static com.uber.cadence.internal.compatibility.proto.mappers.TypeMapper.activityType; import static com.uber.cadence.internal.compatibility.proto.mappers.TypeMapper.failure; import static com.uber.cadence.internal.compatibility.proto.mappers.TypeMapper.header; @@ -193,6 +195,13 @@ static Decision decision(com.uber.cadence.Decision d) { if (attr.getCronSchedule() != null) { builder.setCronSchedule(attr.getCronSchedule()); } + if (attr.getCronOverlapPolicy() != null) { + builder.setCronOverlapPolicy(cronOverlapPolicy(attr.getCronOverlapPolicy())); + } + if (attr.getActiveClusterSelectionPolicy() != null) { + builder.setActiveClusterSelectionPolicy( + activeClusterSelectionPolicy(attr.getActiveClusterSelectionPolicy())); + } decision.setContinueAsNewWorkflowExecutionDecisionAttributes(builder); } break; @@ -225,6 +234,13 @@ static Decision decision(com.uber.cadence.Decision d) { if (attr.getCronSchedule() != null) { builder.setCronSchedule(attr.getCronSchedule()); } + if (attr.getCronOverlapPolicy() != null) { + builder.setCronOverlapPolicy(cronOverlapPolicy(attr.getCronOverlapPolicy())); + } + if (attr.getActiveClusterSelectionPolicy() != null) { + builder.setActiveClusterSelectionPolicy( + activeClusterSelectionPolicy(attr.getActiveClusterSelectionPolicy())); + } decision.setStartChildWorkflowExecutionDecisionAttributes(builder); } break; diff --git a/src/main/java/com/uber/cadence/internal/compatibility/proto/mappers/EnumMapper.java b/src/main/java/com/uber/cadence/internal/compatibility/proto/mappers/EnumMapper.java index e34de9e97..c2179b445 100644 --- a/src/main/java/com/uber/cadence/internal/compatibility/proto/mappers/EnumMapper.java +++ b/src/main/java/com/uber/cadence/internal/compatibility/proto/mappers/EnumMapper.java @@ -58,6 +58,8 @@ public static TaskListKind taskListKind(com.uber.cadence.TaskListKind t) { return TaskListKind.TASK_LIST_KIND_NORMAL; case STICKY: return TaskListKind.TASK_LIST_KIND_STICKY; + case EPHEMERAL: + return TaskListKind.TASK_LIST_KIND_EPHEMERAL; } throw new IllegalArgumentException("unexpected enum value"); } @@ -289,6 +291,8 @@ public static com.uber.cadence.TaskListKind taskListKind(TaskListKind t) { return com.uber.cadence.TaskListKind.NORMAL; case TASK_LIST_KIND_STICKY: return com.uber.cadence.TaskListKind.STICKY; + case TASK_LIST_KIND_EPHEMERAL: + return com.uber.cadence.TaskListKind.EPHEMERAL; } throw new IllegalArgumentException("unexpected enum value"); } @@ -584,4 +588,29 @@ public static com.uber.cadence.DecisionTaskTimedOutCause decisionTaskTimedOutCau } throw new IllegalArgumentException("unexpected enum value"); } + + public static CronOverlapPolicy cronOverlapPolicy(com.uber.cadence.CronOverlapPolicy t) { + if (t == null) { + return CronOverlapPolicy.CRON_OVERLAP_POLICY_INVALID; + } + switch (t) { + case SKIPPED: + return CronOverlapPolicy.CRON_OVERLAP_POLICY_SKIPPED; + case BUFFERONE: + return CronOverlapPolicy.CRON_OVERLAP_POLICY_BUFFER_ONE; + } + throw new IllegalArgumentException("unexpected enum value"); + } + + public static com.uber.cadence.CronOverlapPolicy cronOverlapPolicy(CronOverlapPolicy t) { + switch (t) { + case CRON_OVERLAP_POLICY_INVALID: + return null; + case CRON_OVERLAP_POLICY_SKIPPED: + return com.uber.cadence.CronOverlapPolicy.SKIPPED; + case CRON_OVERLAP_POLICY_BUFFER_ONE: + return com.uber.cadence.CronOverlapPolicy.BUFFERONE; + } + throw new IllegalArgumentException("unexpected enum value"); + } } diff --git a/src/main/java/com/uber/cadence/internal/compatibility/proto/mappers/RequestMapper.java b/src/main/java/com/uber/cadence/internal/compatibility/proto/mappers/RequestMapper.java index f1ba7c823..987d20653 100644 --- a/src/main/java/com/uber/cadence/internal/compatibility/proto/mappers/RequestMapper.java +++ b/src/main/java/com/uber/cadence/internal/compatibility/proto/mappers/RequestMapper.java @@ -17,6 +17,7 @@ import static com.uber.cadence.internal.compatibility.proto.mappers.DecisionMapper.decisionArray; import static com.uber.cadence.internal.compatibility.proto.mappers.EnumMapper.archivalStatus; +import static com.uber.cadence.internal.compatibility.proto.mappers.EnumMapper.cronOverlapPolicy; import static com.uber.cadence.internal.compatibility.proto.mappers.EnumMapper.decisionTaskFailedCause; import static com.uber.cadence.internal.compatibility.proto.mappers.EnumMapper.eventFilterType; import static com.uber.cadence.internal.compatibility.proto.mappers.EnumMapper.queryConsistencyLevel; @@ -29,6 +30,8 @@ import static com.uber.cadence.internal.compatibility.proto.mappers.Helpers.newFieldMask; import static com.uber.cadence.internal.compatibility.proto.mappers.Helpers.nullToEmpty; import static com.uber.cadence.internal.compatibility.proto.mappers.Helpers.secondsToDuration; +import static com.uber.cadence.internal.compatibility.proto.mappers.TypeMapper.activeClusterSelectionPolicy; +import static com.uber.cadence.internal.compatibility.proto.mappers.TypeMapper.activeClusters; import static com.uber.cadence.internal.compatibility.proto.mappers.TypeMapper.badBinaries; import static com.uber.cadence.internal.compatibility.proto.mappers.TypeMapper.clusterReplicationConfigurationArray; import static com.uber.cadence.internal.compatibility.proto.mappers.TypeMapper.failure; @@ -112,6 +115,7 @@ public class RequestMapper { private static final String DomainUpdateVisibilityArchivalURIField = "visibility_archival_uri"; private static final String DomainUpdateActiveClusterNameField = "active_cluster_name"; private static final String DomainUpdateClustersField = "clusters"; + private static final String DomainUpdateActiveClustersField = "active_clusters"; private static final String DomainUpdateDeleteBadBinaryField = "delete_bad_binary"; private static final String DomainUpdateFailoverTimeoutField = "failover_timeout"; @@ -462,6 +466,13 @@ public static SignalWithStartWorkflowExecutionRequest signalWithStartWorkflowExe builder.setDelayStart(secondsToDuration(t.getDelayStartSeconds())); } builder.setJitterStart(secondsToDuration(t.getJitterStartSeconds())); + if (t.getCronOverlapPolicy() != null) { + builder.setCronOverlapPolicy(cronOverlapPolicy(t.getCronOverlapPolicy())); + } + if (t.getActiveClusterSelectionPolicy() != null) { + builder.setActiveClusterSelectionPolicy( + activeClusterSelectionPolicy(t.getActiveClusterSelectionPolicy())); + } if (t.getIdentity() != null) { builder.setIdentity(t.getIdentity()); @@ -541,6 +552,13 @@ public static StartWorkflowExecutionRequest startWorkflowExecutionRequest( if (t.getCronSchedule() != null) { request.setCronSchedule(t.getCronSchedule()); } + if (t.getCronOverlapPolicy() != null) { + request.setCronOverlapPolicy(cronOverlapPolicy(t.getCronOverlapPolicy())); + } + if (t.getActiveClusterSelectionPolicy() != null) { + request.setActiveClusterSelectionPolicy( + activeClusterSelectionPolicy(t.getActiveClusterSelectionPolicy())); + } if (t.getIdentity() != null) { request.setIdentity(t.getIdentity()); } @@ -731,7 +749,7 @@ public static RegisterDomainRequest registerDomainRequest( if (t == null) { return null; } - RegisterDomainRequest request = + RegisterDomainRequest.Builder builder = RegisterDomainRequest.newBuilder() .setName(t.getName()) .setDescription(Helpers.nullToEmpty(t.getDescription())) @@ -746,9 +764,11 @@ 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.getActiveClusters() != null) { + builder.setActiveClusters(activeClusters(t.getActiveClusters())); + } + return builder.build(); } public static RestartWorkflowExecutionRequest restartWorkflowExecutionRequest( @@ -831,6 +851,10 @@ public static UpdateDomainRequest updateDomainRequest(com.uber.cadence.UpdateDom clusterReplicationConfigurationArray(replicationConfiguration.getClusters())); fields.add(DomainUpdateClustersField); } + if (replicationConfiguration.getActiveClusters() != null) { + request.setActiveClusters(activeClusters(replicationConfiguration.getActiveClusters())); + fields.add(DomainUpdateActiveClustersField); + } } if (t.getDeleteBadBinary() != null) { request.setDeleteBadBinary(t.getDeleteBadBinary()); diff --git a/src/main/java/com/uber/cadence/internal/compatibility/proto/mappers/TypeMapper.java b/src/main/java/com/uber/cadence/internal/compatibility/proto/mappers/TypeMapper.java index 678d9f080..d993f61e6 100644 --- a/src/main/java/com/uber/cadence/internal/compatibility/proto/mappers/TypeMapper.java +++ b/src/main/java/com/uber/cadence/internal/compatibility/proto/mappers/TypeMapper.java @@ -152,7 +152,11 @@ 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(); + return TaskList.newBuilder() + .setName(Helpers.nullToEmpty(t.getName())) + .setKind(taskListKind(t.getKind())) + .setBaseName(Helpers.nullToEmpty(t.getBaseName())) + .build(); } static TaskListMetadata taskListMetadata(com.uber.cadence.TaskListMetadata t) { @@ -420,6 +424,7 @@ static com.uber.cadence.TaskList taskList(TaskList t) { com.uber.cadence.TaskList taskList = new com.uber.cadence.TaskList(); taskList.setName(t.getName()); taskList.setKind(taskListKind(t.getKind())); + taskList.setBaseName(t.getBaseName()); return taskList; } @@ -957,4 +962,130 @@ static Map activityLocalDisp } return v; } + + static ActiveClusters activeClusters(com.uber.cadence.ActiveClusters t) { + if (t == null) { + return ActiveClusters.newBuilder().build(); + } + Map clusterAttributeScopes = new HashMap<>(); + if (t.getActiveClustersByClusterAttribute() != null) { + for (Map.Entry entry : + t.getActiveClustersByClusterAttribute().entrySet()) { + clusterAttributeScopes.put(entry.getKey(), clusterAttributeScope(entry.getValue())); + } + } + return ActiveClusters.newBuilder() + .putAllActiveClustersByClusterAttribute(clusterAttributeScopes) + .build(); + } + + static com.uber.cadence.ActiveClusters activeClusters(ActiveClusters t) { + if (t == null || t == ActiveClusters.getDefaultInstance()) { + return null; + } + com.uber.cadence.ActiveClusters activeClusters = new com.uber.cadence.ActiveClusters(); + Map clusterAttributeScopes = new HashMap<>(); + if (t.getActiveClustersByClusterAttributeMap() != null) { + for (Map.Entry entry : + t.getActiveClustersByClusterAttributeMap().entrySet()) { + clusterAttributeScopes.put(entry.getKey(), clusterAttributeScope(entry.getValue())); + } + } + activeClusters.setActiveClustersByClusterAttribute(clusterAttributeScopes); + return activeClusters; + } + + static ClusterAttributeScope clusterAttributeScope(com.uber.cadence.ClusterAttributeScope t) { + if (t == null) { + return ClusterAttributeScope.newBuilder().build(); + } + Map clusterAttributes = new HashMap<>(); + if (t.getClusterAttributes() != null) { + for (Map.Entry entry : + t.getClusterAttributes().entrySet()) { + clusterAttributes.put(entry.getKey(), activeClusterInfo(entry.getValue())); + } + } + return ClusterAttributeScope.newBuilder().putAllClusterAttributes(clusterAttributes).build(); + } + + static com.uber.cadence.ClusterAttributeScope clusterAttributeScope(ClusterAttributeScope t) { + if (t == null || t == ClusterAttributeScope.getDefaultInstance()) { + return null; + } + com.uber.cadence.ClusterAttributeScope scope = new com.uber.cadence.ClusterAttributeScope(); + Map clusterAttributes = new HashMap<>(); + if (t.getClusterAttributesMap() != null) { + for (Map.Entry entry : t.getClusterAttributesMap().entrySet()) { + clusterAttributes.put(entry.getKey(), activeClusterInfo(entry.getValue())); + } + } + scope.setClusterAttributes(clusterAttributes); + return scope; + } + + static ActiveClusterInfo activeClusterInfo(com.uber.cadence.ActiveClusterInfo t) { + if (t == null) { + return ActiveClusterInfo.newBuilder().build(); + } + return ActiveClusterInfo.newBuilder() + .setActiveClusterName(Helpers.nullToEmpty(t.getActiveClusterName())) + .setFailoverVersion(t.getFailoverVersion()) + .build(); + } + + static com.uber.cadence.ActiveClusterInfo activeClusterInfo(ActiveClusterInfo t) { + if (t == null || t == ActiveClusterInfo.getDefaultInstance()) { + return null; + } + com.uber.cadence.ActiveClusterInfo info = new com.uber.cadence.ActiveClusterInfo(); + info.setActiveClusterName(t.getActiveClusterName()); + info.setFailoverVersion(t.getFailoverVersion()); + return info; + } + + static ActiveClusterSelectionPolicy activeClusterSelectionPolicy( + com.uber.cadence.ActiveClusterSelectionPolicy t) { + if (t == null) { + return ActiveClusterSelectionPolicy.newBuilder().build(); + } + ActiveClusterSelectionPolicy.Builder builder = ActiveClusterSelectionPolicy.newBuilder(); + if (t.getClusterAttribute() != null) { + builder.setClusterAttribute(clusterAttribute(t.getClusterAttribute())); + } + return builder.build(); + } + + static com.uber.cadence.ActiveClusterSelectionPolicy activeClusterSelectionPolicy( + ActiveClusterSelectionPolicy t) { + if (t == null || t == ActiveClusterSelectionPolicy.getDefaultInstance()) { + return null; + } + com.uber.cadence.ActiveClusterSelectionPolicy policy = + new com.uber.cadence.ActiveClusterSelectionPolicy(); + if (t.hasClusterAttribute()) { + policy.setClusterAttribute(clusterAttribute(t.getClusterAttribute())); + } + return policy; + } + + static ClusterAttribute clusterAttribute(com.uber.cadence.ClusterAttribute t) { + if (t == null) { + return ClusterAttribute.newBuilder().build(); + } + return ClusterAttribute.newBuilder() + .setScope(Helpers.nullToEmpty(t.getScope())) + .setName(Helpers.nullToEmpty(t.getName())) + .build(); + } + + static com.uber.cadence.ClusterAttribute clusterAttribute(ClusterAttribute t) { + if (t == null || t == ClusterAttribute.getDefaultInstance()) { + return null; + } + com.uber.cadence.ClusterAttribute attr = new com.uber.cadence.ClusterAttribute(); + attr.setScope(t.getScope()); + attr.setName(t.getName()); + return attr; + } } diff --git a/src/test/java/com/uber/cadence/internal/compatibility/ClientObjects.java b/src/test/java/com/uber/cadence/internal/compatibility/ClientObjects.java index 94a5e5f68..6a0473901 100644 --- a/src/test/java/com/uber/cadence/internal/compatibility/ClientObjects.java +++ b/src/test/java/com/uber/cadence/internal/compatibility/ClientObjects.java @@ -28,7 +28,7 @@ public class ClientObjects { public static final WorkflowType WORKFLOW_TYPE = new WorkflowType().setName("workflowType"); public static final ActivityType ACTIVITY_TYPE = new ActivityType().setName("activityName"); public static final TaskList TASK_LIST = - new TaskList().setName("taskList").setKind(TaskListKind.NORMAL); + new TaskList().setName("taskList").setKind(TaskListKind.NORMAL).setBaseName("baseName"); public static final TaskListMetadata TASK_LIST_METADATA = new TaskListMetadata().setMaxTasksPerSecond(10); public static final RetryPolicy RETRY_POLICY = @@ -81,6 +81,19 @@ public class ClientObjects { new ResetPoints().setPoints(Collections.singletonList(RESET_POINT_INFO)); public static final ClusterReplicationConfiguration CLUSTER_REPLICATION_CONFIGURATION = new ClusterReplicationConfiguration().setClusterName("cluster"); + public static final ActiveClusterInfo ACTIVE_CLUSTER_INFO = + new ActiveClusterInfo().setActiveClusterName("activeCluster").setFailoverVersion(1); + public static final ClusterAttributeScope CLUSTER_ATTRIBUTE_SCOPE = + new ClusterAttributeScope() + .setClusterAttributes(ImmutableMap.of("region", ACTIVE_CLUSTER_INFO)); + public static final ActiveClusters ACTIVE_CLUSTERS = + new ActiveClusters() + .setActiveClustersByClusterAttribute(ImmutableMap.of("region", CLUSTER_ATTRIBUTE_SCOPE)); + public static final ClusterAttribute CLUSTER_ATTRIBUTE = + new ClusterAttribute().setScope("scope").setName("region"); + public static final ActiveClusterSelectionPolicy ACTIVE_CLUSTER_SELECTION_POLICY = + new ActiveClusterSelectionPolicy().setClusterAttribute(CLUSTER_ATTRIBUTE); + public static final CronOverlapPolicy CRON_OVERLAP_POLICY = CronOverlapPolicy.SKIPPED; public static final PollerInfo POLLER_INFO = new PollerInfo().setIdentity("identity").setLastAccessTime(1).setRatePerSecond(2.0); public static final TaskIDBlock TASK_ID_BLOCK = new TaskIDBlock().setStartID(1).setEndID(2); @@ -199,7 +212,8 @@ public class ClientObjects { public static final DomainReplicationConfiguration DOMAIN_REPLICATION_CONFIGURATION = new DomainReplicationConfiguration() .setActiveClusterName("activeCluster") - .setClusters(ImmutableList.of(CLUSTER_REPLICATION_CONFIGURATION)); + .setClusters(ImmutableList.of(CLUSTER_REPLICATION_CONFIGURATION)) + .setActiveClusters(ACTIVE_CLUSTERS); public static Decision DECISION_SCHEDULE_ACTIVITY_TASK = new Decision() @@ -281,7 +295,9 @@ public class ClientObjects { .setMemo(MEMO) .setSearchAttributes(SEARCH_ATTRIBUTES) .setRetryPolicy(RETRY_POLICY) - .setCronSchedule("cron")); + .setCronSchedule("cron") + .setCronOverlapPolicy(CRON_OVERLAP_POLICY) + .setActiveClusterSelectionPolicy(ACTIVE_CLUSTER_SELECTION_POLICY)); public static Decision DECISION_START_CHILD_WORKFLOW_EXECUTION = new Decision() .setDecisionType(DecisionType.StartChildWorkflowExecution) @@ -301,7 +317,9 @@ public class ClientObjects { .setCronSchedule("cron") .setControl(utf8("control")) .setParentClosePolicy(ParentClosePolicy.ABANDON) - .setWorkflowIdReusePolicy(WorkflowIdReusePolicy.AllowDuplicate)); + .setWorkflowIdReusePolicy(WorkflowIdReusePolicy.AllowDuplicate) + .setCronOverlapPolicy(CRON_OVERLAP_POLICY) + .setActiveClusterSelectionPolicy(ACTIVE_CLUSTER_SELECTION_POLICY)); public static Decision DECISION_SIGNAL_EXTERNAL_WORKFLOW_EXECUTION = new Decision() .setDecisionType(DecisionType.SignalExternalWorkflowExecution) @@ -886,7 +904,9 @@ public class ClientObjects { .setHeader(HEADER) .setJitterStartSeconds(0) .setDelayStartSeconds(3) - .setFirstRunAtTimestamp(123456789); + .setFirstRunAtTimestamp(123456789) + .setCronOverlapPolicy(CRON_OVERLAP_POLICY) + .setActiveClusterSelectionPolicy(ACTIVE_CLUSTER_SELECTION_POLICY); public static final SignalWithStartWorkflowExecutionRequest SIGNAL_WITH_START_WORKFLOW_EXECUTION = new SignalWithStartWorkflowExecutionRequest() .setDomain("domain") @@ -909,7 +929,9 @@ public class ClientObjects { .setHeader(HEADER) .setDelayStartSeconds(3) .setJitterStartSeconds(0) - .setFirstRunAtTimestamp(123456789); + .setFirstRunAtTimestamp(123456789) + .setCronOverlapPolicy(CRON_OVERLAP_POLICY) + .setActiveClusterSelectionPolicy(ACTIVE_CLUSTER_SELECTION_POLICY); public static final StartWorkflowExecutionAsyncRequest START_WORKFLOW_EXECUTION_ASYNC_REQUEST = new StartWorkflowExecutionAsyncRequest().setRequest(START_WORKFLOW_EXECUTION); @@ -1011,7 +1033,8 @@ public class ClientObjects { .setHistoryArchivalStatus(ArchivalStatus.ENABLED) .setHistoryArchivalURI("historyArchivalUri") .setVisibilityArchivalStatus(ArchivalStatus.DISABLED) - .setVisibilityArchivalURI("visibilityArchivalUri"); + .setVisibilityArchivalURI("visibilityArchivalUri") + .setActiveClusters(ACTIVE_CLUSTERS); public static final UpdateDomainRequest UPDATE_DOMAIN_REQUEST = new UpdateDomainRequest() diff --git a/src/test/java/com/uber/cadence/internal/compatibility/ProtoObjects.java b/src/test/java/com/uber/cadence/internal/compatibility/ProtoObjects.java index b0b261a07..49fd5766d 100644 --- a/src/test/java/com/uber/cadence/internal/compatibility/ProtoObjects.java +++ b/src/test/java/com/uber/cadence/internal/compatibility/ProtoObjects.java @@ -31,7 +31,11 @@ public final class ProtoObjects { public static final ActivityType ACTIVITY_TYPE = ActivityType.newBuilder().setName("activityName").build(); public static final TaskList TASK_LIST = - TaskList.newBuilder().setName("taskList").setKind(TaskListKind.TASK_LIST_KIND_NORMAL).build(); + TaskList.newBuilder() + .setName("taskList") + .setKind(TaskListKind.TASK_LIST_KIND_NORMAL) + .setBaseName("baseName") + .build(); public static final TaskListMetadata TASK_LIST_METADATA = TaskListMetadata.newBuilder() .setMaxTasksPerSecond(DoubleValue.newBuilder().setValue(10.0).build()) @@ -98,6 +102,25 @@ public final class ProtoObjects { ResetPoints.newBuilder().addPoints(RESET_POINT_INFO).build(); public static final ClusterReplicationConfiguration CLUSTER_REPLICATION_CONFIGURATION = ClusterReplicationConfiguration.newBuilder().setClusterName("cluster").build(); + public static final ActiveClusterInfo ACTIVE_CLUSTER_INFO = + ActiveClusterInfo.newBuilder() + .setActiveClusterName("activeCluster") + .setFailoverVersion(1) + .build(); + public static final ClusterAttributeScope CLUSTER_ATTRIBUTE_SCOPE = + ClusterAttributeScope.newBuilder() + .putClusterAttributes("region", ACTIVE_CLUSTER_INFO) + .build(); + public static final ActiveClusters ACTIVE_CLUSTERS = + ActiveClusters.newBuilder() + .putActiveClustersByClusterAttribute("region", CLUSTER_ATTRIBUTE_SCOPE) + .build(); + public static final ClusterAttribute CLUSTER_ATTRIBUTE = + ClusterAttribute.newBuilder().setScope("scope").setName("region").build(); + public static final ActiveClusterSelectionPolicy ACTIVE_CLUSTER_SELECTION_POLICY = + ActiveClusterSelectionPolicy.newBuilder().setClusterAttribute(CLUSTER_ATTRIBUTE).build(); + public static final CronOverlapPolicy CRON_OVERLAP_POLICY = + CronOverlapPolicy.CRON_OVERLAP_POLICY_SKIPPED; public static final PollerInfo POLLER_INFO = PollerInfo.newBuilder() .setIdentity("identity") @@ -330,7 +353,9 @@ public final class ProtoObjects { .setMemo(MEMO) .setSearchAttributes(SEARCH_ATTRIBUTES) .setRetryPolicy(RETRY_POLICY) - .setCronSchedule("cron")) + .setCronSchedule("cron") + .setCronOverlapPolicy(CRON_OVERLAP_POLICY) + .setActiveClusterSelectionPolicy(ACTIVE_CLUSTER_SELECTION_POLICY)) .build(); public static Decision DECISION_START_CHILD_WORKFLOW_EXECUTION = Decision.newBuilder() @@ -351,7 +376,9 @@ public final class ProtoObjects { .setControl(utf8("control")) .setParentClosePolicy(ParentClosePolicy.PARENT_CLOSE_POLICY_ABANDON) .setWorkflowIdReusePolicy( - WorkflowIdReusePolicy.WORKFLOW_ID_REUSE_POLICY_ALLOW_DUPLICATE)) + WorkflowIdReusePolicy.WORKFLOW_ID_REUSE_POLICY_ALLOW_DUPLICATE) + .setCronOverlapPolicy(CRON_OVERLAP_POLICY) + .setActiveClusterSelectionPolicy(ACTIVE_CLUSTER_SELECTION_POLICY)) .build(); public static Decision DECISION_SIGNAL_EXTERNAL_WORKFLOW_EXECUTION = Decision.newBuilder() @@ -1023,6 +1050,8 @@ public final class ProtoObjects { .setDelayStart(seconds(3)) .setJitterStart(seconds(0)) .setFirstRunAt(timestampNanos(123456789)) + .setCronOverlapPolicy(CRON_OVERLAP_POLICY) + .setActiveClusterSelectionPolicy(ACTIVE_CLUSTER_SELECTION_POLICY) .build(); public static final SignalWithStartWorkflowExecutionRequest SIGNAL_WITH_START_WORKFLOW_EXECUTION = @@ -1157,6 +1186,7 @@ public final class ProtoObjects { .setHistoryArchivalUri("historyArchivalUri") .setVisibilityArchivalStatus(ArchivalStatus.ARCHIVAL_STATUS_DISABLED) .setVisibilityArchivalUri("visibilityArchivalUri") + .setActiveClusters(ACTIVE_CLUSTERS) .build(); public static final UpdateDomainRequest UPDATE_DOMAIN_REQUEST = @@ -1181,6 +1211,7 @@ public final class ProtoObjects { .setVisibilityArchivalUri("visibilityArchivalUri") .addAllClusters(ImmutableList.of(CLUSTER_REPLICATION_CONFIGURATION)) .setActiveClusterName("activeCluster") + .setActiveClusters(ACTIVE_CLUSTERS) .setDeleteBadBinary("deleteBadBinary") .setFailoverTimeout(seconds(1)) .setUpdateMask( @@ -1196,6 +1227,7 @@ public final class ProtoObjects { .addPaths("visibility_archival_uri") .addPaths("active_cluster_name") .addPaths("clusters") + .addPaths("active_clusters") .addPaths("delete_bad_binary") .addPaths("failover_timeout") .build()) diff --git a/src/test/java/com/uber/cadence/internal/compatibility/proto/mappers/DecisionMapperTest.java b/src/test/java/com/uber/cadence/internal/compatibility/proto/mappers/DecisionMapperTest.java index e8ab4806d..42eb8c3b3 100644 --- a/src/test/java/com/uber/cadence/internal/compatibility/proto/mappers/DecisionMapperTest.java +++ b/src/test/java/com/uber/cadence/internal/compatibility/proto/mappers/DecisionMapperTest.java @@ -14,9 +14,11 @@ */ package com.uber.cadence.internal.compatibility.proto.mappers; +import static com.uber.cadence.internal.compatibility.MapperTestUtil.assertMissingFields; import static com.uber.cadence.internal.compatibility.MapperTestUtil.assertNoMissingFields; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; import com.uber.cadence.Decision; import com.uber.cadence.DecisionType; @@ -124,10 +126,16 @@ public void testAllAttributesSet() { assertNoMissingFields(decision.getRecordMarkerDecisionAttributes()); break; case ContinueAsNewWorkflowExecution: - assertNoMissingFields(decision.getContinueAsNewWorkflowExecutionDecisionAttributes()); + assertMissingFields( + decision.getContinueAsNewWorkflowExecutionDecisionAttributes(), + ImmutableSet.of( + "strategy", "stickyRegion", "externalEntityType", "externalEntityKey")); break; case StartChildWorkflowExecution: - assertNoMissingFields(decision.getStartChildWorkflowExecutionDecisionAttributes()); + assertMissingFields( + decision.getStartChildWorkflowExecutionDecisionAttributes(), + ImmutableSet.of( + "strategy", "stickyRegion", "externalEntityType", "externalEntityKey")); break; case SignalExternalWorkflowExecution: assertNoMissingFields(decision.getSignalExternalWorkflowExecutionDecisionAttributes()); diff --git a/src/test/java/com/uber/cadence/internal/compatibility/proto/mappers/RequestMapperTest.java b/src/test/java/com/uber/cadence/internal/compatibility/proto/mappers/RequestMapperTest.java index fc85a5628..af8795ee0 100644 --- a/src/test/java/com/uber/cadence/internal/compatibility/proto/mappers/RequestMapperTest.java +++ b/src/test/java/com/uber/cadence/internal/compatibility/proto/mappers/RequestMapperTest.java @@ -170,19 +170,35 @@ public static Iterable cases() { testCase( ClientObjects.START_WORKFLOW_EXECUTION, ProtoObjects.START_WORKFLOW_EXECUTION, - RequestMapper::startWorkflowExecutionRequest), + RequestMapper::startWorkflowExecutionRequest, + "strategy", + "stickyRegion", + "externalEntityType", + "externalEntityKey"), testCase( ClientObjects.SIGNAL_WITH_START_WORKFLOW_EXECUTION, ProtoObjects.SIGNAL_WITH_START_WORKFLOW_EXECUTION, - RequestMapper::signalWithStartWorkflowExecutionRequest), + RequestMapper::signalWithStartWorkflowExecutionRequest, + "strategy", + "stickyRegion", + "externalEntityType", + "externalEntityKey"), testCase( ClientObjects.START_WORKFLOW_EXECUTION_ASYNC_REQUEST, ProtoObjects.START_WORKFLOW_EXECUTION_ASYNC_REQUEST, - RequestMapper::startWorkflowExecutionAsyncRequest), + RequestMapper::startWorkflowExecutionAsyncRequest, + "strategy", + "stickyRegion", + "externalEntityType", + "externalEntityKey"), testCase( ClientObjects.SIGNAL_WITH_START_WORKFLOW_EXECUTION_ASYNC_REQUEST, ProtoObjects.SIGNAL_WITH_START_WORKFLOW_EXECUTION_ASYNC_REQUEST, - RequestMapper::signalWithStartWorkflowExecutionAsyncRequest), + RequestMapper::signalWithStartWorkflowExecutionAsyncRequest, + "strategy", + "stickyRegion", + "externalEntityType", + "externalEntityKey"), testCase( ClientObjects.SIGNAL_WORKFLOW_EXECUTION_REQUEST, ProtoObjects.SIGNAL_WORKFLOW_EXECUTION_REQUEST,