Skip to content

Commit 72433f5

Browse files
committed
addressed copilot comments
1 parent ad7450d commit 72433f5

File tree

4 files changed

+35
-13
lines changed

4 files changed

+35
-13
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
## Unreleased
2-
* Add work item filtering support for `DurableTaskGrpcWorker` to enable worker-side filtering of orchestration and activity work items
2+
* Add work item filtering support for `DurableTaskGrpcWorker` to enable worker-side filtering of orchestration and activity work items ([#275](https://github.com/microsoft/durabletask-java/pull/275))
33
* Add support for calls to HTTP endpoints ([#271](https://github.com/microsoft/durabletask-java/pull/271))
44
* Add getSuspendPostUri and getResumePostUri getters to HttpManagementPayload ([#264](https://github.com/microsoft/durabletask-java/pull/264))
55

client/src/main/java/com/microsoft/durabletask/DurableTaskGrpcWorker.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ public final class DurableTaskGrpcWorker implements AutoCloseable {
4040
private final Duration maximumTimerInterval;
4141
private final DurableTaskGrpcWorkerVersioningOptions versioningOptions;
4242
private final WorkItemFilter workItemFilter;
43+
private final GetWorkItemsRequest getWorkItemsRequest;
4344

4445
private final TaskHubSidecarServiceBlockingStub sidecarClient;
4546

@@ -72,6 +73,7 @@ public final class DurableTaskGrpcWorker implements AutoCloseable {
7273
this.maximumTimerInterval = builder.maximumTimerInterval != null ? builder.maximumTimerInterval : DEFAULT_MAXIMUM_TIMER_INTERVAL;
7374
this.versioningOptions = builder.versioningOptions;
7475
this.workItemFilter = workItemFilter;
76+
this.getWorkItemsRequest = buildGetWorkItemsRequest();
7577
}
7678

7779
/**
@@ -134,8 +136,7 @@ public void startAndBlock() {
134136
// TODO: How do we interrupt manually?
135137
while (true) {
136138
try {
137-
GetWorkItemsRequest getWorkItemsRequest = buildGetWorkItemsRequest();
138-
Iterator<WorkItem> workItemStream = this.sidecarClient.getWorkItems(getWorkItemsRequest);
139+
Iterator<WorkItem> workItemStream = this.sidecarClient.getWorkItems(this.getWorkItemsRequest);
139140
while (workItemStream.hasNext()) {
140141
WorkItem workItem = workItemStream.next();
141142
RequestCase requestType = workItem.getRequestCase();

client/src/main/java/com/microsoft/durabletask/DurableTaskGrpcWorkerBuilder.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import io.grpc.Channel;
66

77
import java.time.Duration;
8+
import java.util.ArrayList;
89
import java.util.Collections;
910
import java.util.HashMap;
1011
import java.util.List;
@@ -188,10 +189,14 @@ private WorkItemFilter buildAutoWorkItemFilter() {
188189
}
189190

190191
WorkItemFilter.Builder builder = WorkItemFilter.newBuilder();
191-
for (String name : this.orchestrationFactories.keySet()) {
192+
List<String> orchestrationNames = new ArrayList<>(this.orchestrationFactories.keySet());
193+
Collections.sort(orchestrationNames);
194+
for (String name : orchestrationNames) {
192195
builder.addOrchestration(name, versions);
193196
}
194-
for (String name : this.activityFactories.keySet()) {
197+
List<String> activityNames = new ArrayList<>(this.activityFactories.keySet());
198+
Collections.sort(activityNames);
199+
for (String name : activityNames) {
195200
builder.addActivity(name, versions);
196201
}
197202
return builder.build();

client/src/main/java/com/microsoft/durabletask/WorkItemFilter.java

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,17 @@ public Builder addOrchestration(String name, List<String> versions) {
9292
if (name == null || name.isEmpty()) {
9393
throw new IllegalArgumentException("Orchestration filter name must not be null or empty.");
9494
}
95-
List<String> versionsCopy = versions != null
96-
? Collections.unmodifiableList(new ArrayList<String>(versions))
97-
: Collections.<String>emptyList();
95+
List<String> versionsCopy;
96+
if (versions == null) {
97+
versionsCopy = Collections.<String>emptyList();
98+
} else {
99+
for (String version : versions) {
100+
if (version == null || version.isEmpty()) {
101+
throw new IllegalArgumentException("Orchestration filter versions must not contain null or empty entries.");
102+
}
103+
}
104+
versionsCopy = Collections.unmodifiableList(new ArrayList<String>(versions));
105+
}
98106
this.orchestrations.add(new OrchestrationFilter(name, versionsCopy));
99107
return this;
100108
}
@@ -124,9 +132,17 @@ public Builder addActivity(String name, List<String> versions) {
124132
if (name == null || name.isEmpty()) {
125133
throw new IllegalArgumentException("Activity filter name must not be null or empty.");
126134
}
127-
List<String> versionsCopy = versions != null
128-
? Collections.unmodifiableList(new ArrayList<String>(versions))
129-
: Collections.<String>emptyList();
135+
List<String> versionsCopy;
136+
if (versions == null) {
137+
versionsCopy = Collections.<String>emptyList();
138+
} else {
139+
for (String version : versions) {
140+
if (version == null || version.isEmpty()) {
141+
throw new IllegalArgumentException("Activity filter versions must not contain null or empty entries.");
142+
}
143+
}
144+
versionsCopy = Collections.unmodifiableList(new ArrayList<String>(versions));
145+
}
130146
this.activities.add(new ActivityFilter(name, versionsCopy));
131147
return this;
132148
}
@@ -150,7 +166,7 @@ public static final class OrchestrationFilter {
150166

151167
OrchestrationFilter(String name, List<String> versions) {
152168
this.name = name;
153-
this.versions = versions;
169+
this.versions = Collections.unmodifiableList(new ArrayList<String>(versions));
154170
}
155171

156172
/**
@@ -181,7 +197,7 @@ public static final class ActivityFilter {
181197

182198
ActivityFilter(String name, List<String> versions) {
183199
this.name = name;
184-
this.versions = versions;
200+
this.versions = Collections.unmodifiableList(new ArrayList<String>(versions));
185201
}
186202

187203
/**

0 commit comments

Comments
 (0)