Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
0d686c7
feat: add client-facing schedule model types
abhishekj720 Jun 26, 2026
eb0a135
fix(schedule): correct type and design issues in schedule service con…
abhishekj720 Jul 1, 2026
618ad15
fix(schedule): add equals/hashCode to ScheduleBackfill and harden Sch…
abhishekj720 Jul 1, 2026
859417f
fix(schedule): return clean model types from ScheduleClient
abhishekj720 Jul 1, 2026
1cc0620
refactor(schedule): replace ListSchedulesResult wrapper with ListSche…
abhishekj720 Jul 2, 2026
0f4d49a
feat: implement schedule gRPC wiring and ScheduleClientImpl
abhishekj720 Jul 2, 2026
7af96c8
refactor(schedule): return ListSchedulesResponse directly from listSc…
abhishekj720 Jul 2, 2026
ba9a3a9
fix(schedule): use dedicated executor and warn on unsupported backfil…
abhishekj720 Jul 2, 2026
2c65e97
fix(schedule): wrap async failures in CompletionException instead of …
abhishekj720 Jul 2, 2026
7bb0afc
fix(schedule): throw on unknown overlap policy instead of silently re…
abhishekj720 Jul 2, 2026
7e2a76e
fix(schedule): map overlapPolicy and backfillId in BackfillScheduleRe…
abhishekj720 Jul 2, 2026
161346e
fix(schedule): map catchUpPolicy in unpauseScheduleRequest
abhishekj720 Jul 2, 2026
2830c7b
feat(schedule): add CompletableFuture async variants of schedule meth…
abhishekj720 Jul 2, 2026
2894d80
fix(schedule): remove duplicate test methods and stale ListSchedulesR…
abhishekj720 Jul 2, 2026
19fe3d4
revert(schedule): remove default async variants from IWorkflowService
abhishekj720 Jul 2, 2026
074b008
refactor(schedule): convert schedule methods to async CompletableFutu…
abhishekj720 Jul 2, 2026
561997d
fix(schedule): catch eager mapping exceptions and complete future exc…
abhishekj720 Jul 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -613,4 +613,80 @@ public static com.uber.cadence.CronOverlapPolicy cronOverlapPolicy(CronOverlapPo
}
throw new IllegalArgumentException("unexpected enum value");
}

public static ScheduleOverlapPolicy scheduleOverlapPolicy(
com.uber.cadence.ScheduleOverlapPolicy t) {
if (t == null) {
return ScheduleOverlapPolicy.SCHEDULE_OVERLAP_POLICY_INVALID;
}
switch (t) {
case INVALID:
return ScheduleOverlapPolicy.SCHEDULE_OVERLAP_POLICY_INVALID;
case SKIP_NEW:
return ScheduleOverlapPolicy.SCHEDULE_OVERLAP_POLICY_SKIP_NEW;
case BUFFER:
return ScheduleOverlapPolicy.SCHEDULE_OVERLAP_POLICY_BUFFER;
case CONCURRENT:
return ScheduleOverlapPolicy.SCHEDULE_OVERLAP_POLICY_CONCURRENT;
case CANCEL_PREVIOUS:
return ScheduleOverlapPolicy.SCHEDULE_OVERLAP_POLICY_CANCEL_PREVIOUS;
case TERMINATE_PREVIOUS:
return ScheduleOverlapPolicy.SCHEDULE_OVERLAP_POLICY_TERMINATE_PREVIOUS;
}
throw new IllegalArgumentException("unexpected enum value");
}

public static com.uber.cadence.ScheduleOverlapPolicy scheduleOverlapPolicy(
ScheduleOverlapPolicy t) {
switch (t) {
case SCHEDULE_OVERLAP_POLICY_INVALID:
case UNRECOGNIZED:
return com.uber.cadence.ScheduleOverlapPolicy.INVALID;
case SCHEDULE_OVERLAP_POLICY_SKIP_NEW:
return com.uber.cadence.ScheduleOverlapPolicy.SKIP_NEW;
case SCHEDULE_OVERLAP_POLICY_BUFFER:
return com.uber.cadence.ScheduleOverlapPolicy.BUFFER;
case SCHEDULE_OVERLAP_POLICY_CONCURRENT:
return com.uber.cadence.ScheduleOverlapPolicy.CONCURRENT;
case SCHEDULE_OVERLAP_POLICY_CANCEL_PREVIOUS:
return com.uber.cadence.ScheduleOverlapPolicy.CANCEL_PREVIOUS;
case SCHEDULE_OVERLAP_POLICY_TERMINATE_PREVIOUS:
return com.uber.cadence.ScheduleOverlapPolicy.TERMINATE_PREVIOUS;
}
throw new IllegalArgumentException("unexpected enum value");
}

public static ScheduleCatchUpPolicy scheduleCatchUpPolicy(
com.uber.cadence.ScheduleCatchUpPolicy t) {
if (t == null) {
return ScheduleCatchUpPolicy.SCHEDULE_CATCH_UP_POLICY_INVALID;
}
switch (t) {
case INVALID:
return ScheduleCatchUpPolicy.SCHEDULE_CATCH_UP_POLICY_INVALID;
case SKIP:
return ScheduleCatchUpPolicy.SCHEDULE_CATCH_UP_POLICY_SKIP;
case ONE:
return ScheduleCatchUpPolicy.SCHEDULE_CATCH_UP_POLICY_ONE;
case ALL:
return ScheduleCatchUpPolicy.SCHEDULE_CATCH_UP_POLICY_ALL;
}
throw new IllegalArgumentException("unexpected enum value");
}

public static com.uber.cadence.ScheduleCatchUpPolicy scheduleCatchUpPolicy(
ScheduleCatchUpPolicy t) {
switch (t) {
case SCHEDULE_CATCH_UP_POLICY_INVALID:
case UNRECOGNIZED:
return com.uber.cadence.ScheduleCatchUpPolicy.INVALID;
case SCHEDULE_CATCH_UP_POLICY_SKIP:
return com.uber.cadence.ScheduleCatchUpPolicy.SKIP;
case SCHEDULE_CATCH_UP_POLICY_ONE:
return com.uber.cadence.ScheduleCatchUpPolicy.ONE;
case SCHEDULE_CATCH_UP_POLICY_ALL:
return com.uber.cadence.ScheduleCatchUpPolicy.ALL;
}
throw new IllegalArgumentException("unexpected enum value");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,16 @@
import static com.uber.cadence.internal.compatibility.proto.mappers.EnumMapper.queryConsistencyLevel;
import static com.uber.cadence.internal.compatibility.proto.mappers.EnumMapper.queryRejectCondition;
import static com.uber.cadence.internal.compatibility.proto.mappers.EnumMapper.queryTaskCompletedType;
import static com.uber.cadence.internal.compatibility.proto.mappers.EnumMapper.scheduleCatchUpPolicy;
import static com.uber.cadence.internal.compatibility.proto.mappers.EnumMapper.scheduleOverlapPolicy;
import static com.uber.cadence.internal.compatibility.proto.mappers.EnumMapper.taskListType;
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.daysToDuration;
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.Helpers.unixNanoToTime;
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;
Expand All @@ -39,6 +42,9 @@
import static com.uber.cadence.internal.compatibility.proto.mappers.TypeMapper.memo;
import static com.uber.cadence.internal.compatibility.proto.mappers.TypeMapper.payload;
import static com.uber.cadence.internal.compatibility.proto.mappers.TypeMapper.retryPolicy;
import static com.uber.cadence.internal.compatibility.proto.mappers.TypeMapper.scheduleAction;
import static com.uber.cadence.internal.compatibility.proto.mappers.TypeMapper.schedulePolicies;
import static com.uber.cadence.internal.compatibility.proto.mappers.TypeMapper.scheduleSpec;
import static com.uber.cadence.internal.compatibility.proto.mappers.TypeMapper.searchAttributes;
import static com.uber.cadence.internal.compatibility.proto.mappers.TypeMapper.startTimeFilter;
import static com.uber.cadence.internal.compatibility.proto.mappers.TypeMapper.statusFilter;
Expand Down Expand Up @@ -1011,4 +1017,123 @@ public static RefreshWorkflowTasksRequest refreshWorkflowTasksRequest(
.setDomain(request.getDomain() != null ? request.getDomain() : "")
.build();
}

public static com.uber.cadence.api.v1.CreateScheduleRequest createScheduleRequest(
com.uber.cadence.CreateScheduleRequest t) {
if (t == null) {
return null;
}
com.uber.cadence.api.v1.CreateScheduleRequest.Builder b =
com.uber.cadence.api.v1.CreateScheduleRequest.newBuilder()
.setDomain(nullToEmpty(t.getDomain()))
.setScheduleId(nullToEmpty(t.getScheduleId()));
if (t.getSpec() != null) b.setSpec(scheduleSpec(t.getSpec()));
if (t.getAction() != null) b.setAction(scheduleAction(t.getAction()));
if (t.getPolicies() != null) b.setPolicies(schedulePolicies(t.getPolicies()));
if (t.getMemo() != null) b.setMemo(memo(t.getMemo()));
if (t.getSearchAttributes() != null)
b.setSearchAttributes(searchAttributes(t.getSearchAttributes()));
return b.build();
}

public static com.uber.cadence.api.v1.DescribeScheduleRequest describeScheduleRequest(
com.uber.cadence.DescribeScheduleRequest t) {
if (t == null) {
return null;
}
return com.uber.cadence.api.v1.DescribeScheduleRequest.newBuilder()
.setDomain(nullToEmpty(t.getDomain()))
.setScheduleId(nullToEmpty(t.getScheduleId()))
.build();
}

public static com.uber.cadence.api.v1.UpdateScheduleRequest updateScheduleRequest(
com.uber.cadence.UpdateScheduleRequest t) {
if (t == null) {
return null;
}
com.uber.cadence.api.v1.UpdateScheduleRequest.Builder b =
com.uber.cadence.api.v1.UpdateScheduleRequest.newBuilder()
.setDomain(nullToEmpty(t.getDomain()))
.setScheduleId(nullToEmpty(t.getScheduleId()));
if (t.getSpec() != null) b.setSpec(scheduleSpec(t.getSpec()));
if (t.getAction() != null) b.setAction(scheduleAction(t.getAction()));
if (t.getPolicies() != null) b.setPolicies(schedulePolicies(t.getPolicies()));
if (t.getSearchAttributes() != null)
b.setSearchAttributes(searchAttributes(t.getSearchAttributes()));
return b.build();
}

public static com.uber.cadence.api.v1.DeleteScheduleRequest deleteScheduleRequest(
com.uber.cadence.DeleteScheduleRequest t) {
if (t == null) {
return null;
}
return com.uber.cadence.api.v1.DeleteScheduleRequest.newBuilder()
.setDomain(nullToEmpty(t.getDomain()))
.setScheduleId(nullToEmpty(t.getScheduleId()))
.build();
}

public static com.uber.cadence.api.v1.PauseScheduleRequest pauseScheduleRequest(
com.uber.cadence.PauseScheduleRequest t) {
if (t == null) {
return null;
}
return com.uber.cadence.api.v1.PauseScheduleRequest.newBuilder()
.setDomain(nullToEmpty(t.getDomain()))
.setScheduleId(nullToEmpty(t.getScheduleId()))
.setReason(nullToEmpty(t.getReason()))
.setIdentity(nullToEmpty(t.getIdentity()))
.build();
}

public static com.uber.cadence.api.v1.UnpauseScheduleRequest unpauseScheduleRequest(
com.uber.cadence.UnpauseScheduleRequest t) {
if (t == null) {
return null;
}
com.uber.cadence.api.v1.UnpauseScheduleRequest.Builder b =
com.uber.cadence.api.v1.UnpauseScheduleRequest.newBuilder()
.setDomain(nullToEmpty(t.getDomain()))
.setScheduleId(nullToEmpty(t.getScheduleId()))
.setReason(nullToEmpty(t.getReason()));
if (t.getCatchUpPolicy() != null) {
b.setCatchUpPolicy(scheduleCatchUpPolicy(t.getCatchUpPolicy()));
}
return b.build();
}

public static com.uber.cadence.api.v1.BackfillScheduleRequest backfillScheduleRequest(
com.uber.cadence.BackfillScheduleRequest t) {
if (t == null) {
return null;
}
com.uber.cadence.api.v1.BackfillScheduleRequest.Builder b =
com.uber.cadence.api.v1.BackfillScheduleRequest.newBuilder()
.setDomain(nullToEmpty(t.getDomain()))
.setScheduleId(nullToEmpty(t.getScheduleId()))
.setStartTime(unixNanoToTime(t.getStartTimeNano()))
.setEndTime(unixNanoToTime(t.getEndTimeNano()));
if (t.getOverlapPolicy() != null) {
b.setOverlapPolicy(scheduleOverlapPolicy(t.getOverlapPolicy()));
}
if (t.getBackfillId() != null) {
b.setBackfillId(t.getBackfillId());
}
return b.build();
}

public static com.uber.cadence.api.v1.ListSchedulesRequest listSchedulesRequest(
com.uber.cadence.ListSchedulesRequest t) {
if (t == null) {
return null;
}
com.uber.cadence.api.v1.ListSchedulesRequest.Builder b =
com.uber.cadence.api.v1.ListSchedulesRequest.newBuilder()
.setDomain(nullToEmpty(t.getDomain()))
.setPageSize(t.getPageSize());
if (t.getNextPageToken() != null) b.setNextPageToken(arrayToByteString(t.getNextPageToken()));
return b.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,20 @@
import static com.uber.cadence.internal.compatibility.proto.mappers.TypeMapper.describeDomainResponseArray;
import static com.uber.cadence.internal.compatibility.proto.mappers.TypeMapper.header;
import static com.uber.cadence.internal.compatibility.proto.mappers.TypeMapper.indexedValueTypeMap;
import static com.uber.cadence.internal.compatibility.proto.mappers.TypeMapper.memo;
import static com.uber.cadence.internal.compatibility.proto.mappers.TypeMapper.payload;
import static com.uber.cadence.internal.compatibility.proto.mappers.TypeMapper.pendingActivityInfoArray;
import static com.uber.cadence.internal.compatibility.proto.mappers.TypeMapper.pendingChildExecutionInfoArray;
import static com.uber.cadence.internal.compatibility.proto.mappers.TypeMapper.pendingDecisionInfo;
import static com.uber.cadence.internal.compatibility.proto.mappers.TypeMapper.pollerInfoArray;
import static com.uber.cadence.internal.compatibility.proto.mappers.TypeMapper.queryRejected;
import static com.uber.cadence.internal.compatibility.proto.mappers.TypeMapper.scheduleAction;
import static com.uber.cadence.internal.compatibility.proto.mappers.TypeMapper.scheduleInfo;
import static com.uber.cadence.internal.compatibility.proto.mappers.TypeMapper.scheduleListEntry;
import static com.uber.cadence.internal.compatibility.proto.mappers.TypeMapper.schedulePolicies;
import static com.uber.cadence.internal.compatibility.proto.mappers.TypeMapper.scheduleSpec;
import static com.uber.cadence.internal.compatibility.proto.mappers.TypeMapper.scheduleState;
import static com.uber.cadence.internal.compatibility.proto.mappers.TypeMapper.searchAttributes;
import static com.uber.cadence.internal.compatibility.proto.mappers.TypeMapper.supportedClientVersions;
import static com.uber.cadence.internal.compatibility.proto.mappers.TypeMapper.taskList;
import static com.uber.cadence.internal.compatibility.proto.mappers.TypeMapper.taskListPartitionMetadataArray;
Expand Down Expand Up @@ -518,4 +526,89 @@ public static com.uber.cadence.GetTaskListsByDomainResponse getTaskListsByDomain
Collectors.toMap(Map.Entry::getKey, e -> describeTaskListResponse(e.getValue()))));
return res;
}

public static com.uber.cadence.CreateScheduleResponse createScheduleResponse(
com.uber.cadence.api.v1.CreateScheduleResponse t) {
if (t == null) {
return null;
}
com.uber.cadence.CreateScheduleResponse res = new com.uber.cadence.CreateScheduleResponse();
res.setScheduleId(t.getScheduleId());
return res;
}

public static com.uber.cadence.DescribeScheduleResponse describeScheduleResponse(
com.uber.cadence.api.v1.DescribeScheduleResponse t) {
if (t == null) {
return null;
}
com.uber.cadence.DescribeScheduleResponse res = new com.uber.cadence.DescribeScheduleResponse();
res.setSpec(scheduleSpec(t.getSpec()));
res.setAction(scheduleAction(t.getAction()));
res.setPolicies(schedulePolicies(t.getPolicies()));
res.setState(scheduleState(t.getState()));
res.setInfo(scheduleInfo(t.getInfo()));
res.setMemo(memo(t.getMemo()));
res.setSearchAttributes(searchAttributes(t.getSearchAttributes()));
return res;
}

public static com.uber.cadence.ListSchedulesResponse listSchedulesResponse(
com.uber.cadence.api.v1.ListSchedulesResponse t) {
if (t == null) {
return null;
}
com.uber.cadence.ListSchedulesResponse res = new com.uber.cadence.ListSchedulesResponse();
if (t.getSchedulesCount() > 0) {
java.util.List<com.uber.cadence.ScheduleListEntry> entries = new java.util.ArrayList<>();
for (com.uber.cadence.api.v1.ScheduleListEntry e : t.getSchedulesList()) {
entries.add(scheduleListEntry(e));
}
res.setSchedules(entries);
}
if (t.getNextPageToken() != null && !t.getNextPageToken().isEmpty()) {
res.setNextPageToken(byteStringToArray(t.getNextPageToken()));
}
return res;
}

public static com.uber.cadence.UpdateScheduleResponse updateScheduleResponse(
com.uber.cadence.api.v1.UpdateScheduleResponse t) {
if (t == null) {
return null;
}
return new com.uber.cadence.UpdateScheduleResponse();
}

public static com.uber.cadence.DeleteScheduleResponse deleteScheduleResponse(
com.uber.cadence.api.v1.DeleteScheduleResponse t) {
if (t == null) {
return null;
}
return new com.uber.cadence.DeleteScheduleResponse();
}

public static com.uber.cadence.PauseScheduleResponse pauseScheduleResponse(
com.uber.cadence.api.v1.PauseScheduleResponse t) {
if (t == null) {
return null;
}
return new com.uber.cadence.PauseScheduleResponse();
}

public static com.uber.cadence.UnpauseScheduleResponse unpauseScheduleResponse(
com.uber.cadence.api.v1.UnpauseScheduleResponse t) {
if (t == null) {
return null;
}
return new com.uber.cadence.UnpauseScheduleResponse();
}

public static com.uber.cadence.BackfillScheduleResponse backfillScheduleResponse(
com.uber.cadence.api.v1.BackfillScheduleResponse t) {
if (t == null) {
return null;
}
return new com.uber.cadence.BackfillScheduleResponse();
}
}
Loading
Loading