Skip to content

Commit c8a27ce

Browse files
Add activity summary (#2306)
Add activity summary
1 parent f6bf576 commit c8a27ce

File tree

6 files changed

+177
-24
lines changed

6 files changed

+177
-24
lines changed

temporal-sdk/src/main/java/io/temporal/activity/ActivityOptions.java

+35-5
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
import com.google.common.base.Objects;
2424
import io.temporal.client.WorkflowClientOptions;
25+
import io.temporal.common.Experimental;
2526
import io.temporal.common.MethodRetry;
2627
import io.temporal.common.RetryOptions;
2728
import io.temporal.common.VersioningIntent;
@@ -64,6 +65,7 @@ public static final class Builder {
6465
private ActivityCancellationType cancellationType;
6566
private boolean disableEagerExecution;
6667
private VersioningIntent versioningIntent;
68+
private String summary;
6769

6870
private Builder() {}
6971

@@ -81,6 +83,7 @@ private Builder(ActivityOptions options) {
8183
this.cancellationType = options.cancellationType;
8284
this.disableEagerExecution = options.disableEagerExecution;
8385
this.versioningIntent = options.versioningIntent;
86+
this.summary = options.summary;
8487
}
8588

8689
/**
@@ -243,6 +246,18 @@ public Builder setVersioningIntent(VersioningIntent versioningIntent) {
243246
return this;
244247
}
245248

249+
/**
250+
* Single-line fixed summary for this activity that will appear in UI/CLI. This can be in
251+
* single-line Temporal Markdown format.
252+
*
253+
* <p>Default is none/empty.
254+
*/
255+
@Experimental
256+
public Builder setSummary(String summary) {
257+
this.summary = summary;
258+
return this;
259+
}
260+
246261
public Builder mergeActivityOptions(ActivityOptions override) {
247262
if (override == null) {
248263
return this;
@@ -274,6 +289,7 @@ public Builder mergeActivityOptions(ActivityOptions override) {
274289
if (override.versioningIntent != VersioningIntent.VERSIONING_INTENT_UNSPECIFIED) {
275290
this.versioningIntent = override.versioningIntent;
276291
}
292+
this.summary = (override.summary == null) ? this.summary : override.summary;
277293
return this;
278294
}
279295

@@ -296,7 +312,8 @@ public ActivityOptions build() {
296312
contextPropagators,
297313
cancellationType,
298314
disableEagerExecution,
299-
versioningIntent);
315+
versioningIntent,
316+
summary);
300317
}
301318

302319
public ActivityOptions validateAndBuildWithDefaults() {
@@ -312,7 +329,8 @@ public ActivityOptions validateAndBuildWithDefaults() {
312329
disableEagerExecution,
313330
versioningIntent == null
314331
? VersioningIntent.VERSIONING_INTENT_UNSPECIFIED
315-
: versioningIntent);
332+
: versioningIntent,
333+
summary);
316334
}
317335
}
318336

@@ -326,6 +344,7 @@ public ActivityOptions validateAndBuildWithDefaults() {
326344
private final ActivityCancellationType cancellationType;
327345
private final boolean disableEagerExecution;
328346
private final VersioningIntent versioningIntent;
347+
private final String summary;
329348

330349
private ActivityOptions(
331350
Duration heartbeatTimeout,
@@ -337,7 +356,8 @@ private ActivityOptions(
337356
List<ContextPropagator> contextPropagators,
338357
ActivityCancellationType cancellationType,
339358
boolean disableEagerExecution,
340-
VersioningIntent versioningIntent) {
359+
VersioningIntent versioningIntent,
360+
String summary) {
341361
this.heartbeatTimeout = heartbeatTimeout;
342362
this.scheduleToStartTimeout = scheduleToStartTimeout;
343363
this.scheduleToCloseTimeout = scheduleToCloseTimeout;
@@ -348,6 +368,7 @@ private ActivityOptions(
348368
this.cancellationType = cancellationType;
349369
this.disableEagerExecution = disableEagerExecution;
350370
this.versioningIntent = versioningIntent;
371+
this.summary = summary;
351372
}
352373

353374
/**
@@ -417,6 +438,11 @@ public VersioningIntent getVersioningIntent() {
417438
return versioningIntent;
418439
}
419440

441+
@Experimental
442+
public String getSummary() {
443+
return summary;
444+
}
445+
420446
public Builder toBuilder() {
421447
return new Builder(this);
422448
}
@@ -435,7 +461,8 @@ public boolean equals(Object o) {
435461
&& Objects.equal(retryOptions, that.retryOptions)
436462
&& Objects.equal(contextPropagators, that.contextPropagators)
437463
&& disableEagerExecution == that.disableEagerExecution
438-
&& versioningIntent == that.versioningIntent;
464+
&& versioningIntent == that.versioningIntent
465+
&& Objects.equal(summary, that.summary);
439466
}
440467

441468
@Override
@@ -450,7 +477,8 @@ public int hashCode() {
450477
contextPropagators,
451478
cancellationType,
452479
disableEagerExecution,
453-
versioningIntent);
480+
versioningIntent,
481+
summary);
454482
}
455483

456484
@Override
@@ -477,6 +505,8 @@ public String toString() {
477505
+ disableEagerExecution
478506
+ ", versioningIntent="
479507
+ versioningIntent
508+
+ ", summary="
509+
+ summary
480510
+ '}';
481511
}
482512
}

temporal-sdk/src/main/java/io/temporal/internal/statemachines/ActivityStateMachine.java

+10-3
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import io.temporal.api.history.v1.ActivityTaskCompletedEventAttributes;
3636
import io.temporal.api.history.v1.ActivityTaskFailedEventAttributes;
3737
import io.temporal.api.history.v1.ActivityTaskTimedOutEventAttributes;
38+
import io.temporal.api.sdk.v1.UserMetadata;
3839
import io.temporal.workflow.Functions;
3940
import java.util.Optional;
4041
import javax.annotation.Nonnull;
@@ -54,6 +55,7 @@ final class ActivityStateMachine
5455
private final String activityId;
5556
private final ActivityType activityType;
5657
private final ActivityCancellationType cancellationType;
58+
private UserMetadata userMetadata;
5759

5860
private final Functions.Proc2<Optional<Payloads>, FailureResult> completionCallback;
5961

@@ -265,16 +267,21 @@ private ActivityStateMachine(
265267
this.activityId = scheduleAttr.getActivityId();
266268
this.activityType = scheduleAttr.getActivityType();
267269
this.cancellationType = parameters.getCancellationType();
270+
this.userMetadata = parameters.getMetadata();
268271
this.completionCallback = completionCallback;
269272
explicitEvent(ExplicitEvent.SCHEDULE);
270273
}
271274

272275
public void createScheduleActivityTaskCommand() {
273-
addCommand(
276+
Command.Builder command =
274277
Command.newBuilder()
275278
.setCommandType(CommandType.COMMAND_TYPE_SCHEDULE_ACTIVITY_TASK)
276-
.setScheduleActivityTaskCommandAttributes(parameters.getAttributes())
277-
.build());
279+
.setScheduleActivityTaskCommandAttributes(parameters.getAttributes());
280+
if (userMetadata != null) {
281+
command.setUserMetadata(userMetadata);
282+
userMetadata = null;
283+
}
284+
addCommand(command.build());
278285
parameters = null; // avoiding retaining large input for the duration of the activity
279286
}
280287

temporal-sdk/src/main/java/io/temporal/internal/statemachines/ExecuteActivityParameters.java

+9-1
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,22 @@
2222

2323
import io.temporal.activity.ActivityCancellationType;
2424
import io.temporal.api.command.v1.ScheduleActivityTaskCommandAttributes;
25+
import io.temporal.api.sdk.v1.UserMetadata;
2526
import java.util.Objects;
2627

2728
public class ExecuteActivityParameters {
2829

2930
private final ScheduleActivityTaskCommandAttributes.Builder attributes;
3031
private final ActivityCancellationType cancellationType;
32+
private final UserMetadata metadata;
3133

3234
public ExecuteActivityParameters(
3335
ScheduleActivityTaskCommandAttributes.Builder attributes,
34-
ActivityCancellationType cancellationType) {
36+
ActivityCancellationType cancellationType,
37+
UserMetadata metadata) {
3538
this.attributes = Objects.requireNonNull(attributes);
3639
this.cancellationType = Objects.requireNonNull(cancellationType);
40+
this.metadata = metadata;
3741
}
3842

3943
public ScheduleActivityTaskCommandAttributes.Builder getAttributes() {
@@ -43,4 +47,8 @@ public ScheduleActivityTaskCommandAttributes.Builder getAttributes() {
4347
public ActivityCancellationType getCancellationType() {
4448
return cancellationType;
4549
}
50+
51+
public UserMetadata getMetadata() {
52+
return metadata;
53+
}
4654
}

temporal-sdk/src/main/java/io/temporal/internal/sync/SyncWorkflowContext.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -625,7 +625,11 @@ private ExecuteActivityParameters constructExecuteActivityParameters(
625625
replayContext.getTaskQueue().equals(options.getTaskQueue())));
626626
}
627627

628-
return new ExecuteActivityParameters(attributes, options.getCancellationType());
628+
@Nullable
629+
UserMetadata userMetadata =
630+
makeUserMetaData(options.getSummary(), null, dataConverterWithCurrentWorkflowContext);
631+
632+
return new ExecuteActivityParameters(attributes, options.getCancellationType(), userMetadata);
629633
}
630634

631635
private ExecuteLocalActivityParameters constructExecuteLocalActivityParameters(

temporal-sdk/src/test/java/io/temporal/internal/statemachines/ActivityStateMachineTest.java

+14-14
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public void buildWorkflow(AsyncWorkflowBuilder<Void> builder) {
9393
ScheduleActivityTaskCommandAttributes.newBuilder().setActivityId("id1");
9494
ExecuteActivityParameters parameters =
9595
new ExecuteActivityParameters(
96-
attributes, ActivityCancellationType.WAIT_CANCELLATION_COMPLETED);
96+
attributes, ActivityCancellationType.WAIT_CANCELLATION_COMPLETED, null);
9797
builder
9898
.<Optional<Payloads>, Failure>add2(
9999
(v, c) -> stateMachines.scheduleActivityTask(parameters, c))
@@ -173,7 +173,7 @@ public void buildWorkflow(AsyncWorkflowBuilder<Void> builder) {
173173
ScheduleActivityTaskCommandAttributes.newBuilder().setActivityId("id1");
174174
ExecuteActivityParameters parameters =
175175
new ExecuteActivityParameters(
176-
attributes, ActivityCancellationType.WAIT_CANCELLATION_COMPLETED);
176+
attributes, ActivityCancellationType.WAIT_CANCELLATION_COMPLETED, null);
177177
builder
178178
.<Optional<Payloads>, Failure>add2(
179179
(v, c) -> stateMachines.scheduleActivityTask(parameters, c))
@@ -254,7 +254,7 @@ public void buildWorkflow(AsyncWorkflowBuilder<Void> builder) {
254254
ScheduleActivityTaskCommandAttributes.newBuilder().setActivityId("id1");
255255
ExecuteActivityParameters parameters =
256256
new ExecuteActivityParameters(
257-
attributes, ActivityCancellationType.WAIT_CANCELLATION_COMPLETED);
257+
attributes, ActivityCancellationType.WAIT_CANCELLATION_COMPLETED, null);
258258
builder
259259
.<Optional<Payloads>, Failure>add2(
260260
(v, c) -> stateMachines.scheduleActivityTask(parameters, c))
@@ -340,7 +340,7 @@ public void buildWorkflow(AsyncWorkflowBuilder<Void> builder) {
340340
ScheduleActivityTaskCommandAttributes.newBuilder().setActivityId("id1");
341341
ExecuteActivityParameters parameters =
342342
new ExecuteActivityParameters(
343-
attributes, ActivityCancellationType.WAIT_CANCELLATION_COMPLETED);
343+
attributes, ActivityCancellationType.WAIT_CANCELLATION_COMPLETED, null);
344344
builder
345345
.<Optional<Payloads>, Failure>add2(
346346
(v, c) -> cancellationHandler = stateMachines.scheduleActivityTask(parameters, c))
@@ -388,7 +388,7 @@ public void buildWorkflow(AsyncWorkflowBuilder<Void> builder) {
388388
ScheduleActivityTaskCommandAttributes.newBuilder().setActivityId("id1");
389389
ExecuteActivityParameters parameters =
390390
new ExecuteActivityParameters(
391-
attributes, ActivityCancellationType.WAIT_CANCELLATION_COMPLETED);
391+
attributes, ActivityCancellationType.WAIT_CANCELLATION_COMPLETED, null);
392392
builder
393393
.<Optional<Payloads>, Failure>add2(
394394
(v, c) -> cancellationHandler = stateMachines.scheduleActivityTask(parameters, c))
@@ -490,7 +490,7 @@ public void buildWorkflow(AsyncWorkflowBuilder<Void> builder) {
490490
ScheduleActivityTaskCommandAttributes.newBuilder().setActivityId("id1");
491491
ExecuteActivityParameters parameters =
492492
new ExecuteActivityParameters(
493-
attributes, ActivityCancellationType.WAIT_CANCELLATION_COMPLETED);
493+
attributes, ActivityCancellationType.WAIT_CANCELLATION_COMPLETED, null);
494494
builder
495495
.<Optional<Payloads>, Failure>add2(
496496
(v, c) -> cancellationHandler = stateMachines.scheduleActivityTask(parameters, c))
@@ -574,7 +574,7 @@ public void buildWorkflow(AsyncWorkflowBuilder<Void> builder) {
574574
ScheduleActivityTaskCommandAttributes.newBuilder().setActivityId("id1");
575575
ExecuteActivityParameters parameters =
576576
new ExecuteActivityParameters(
577-
attributes, ActivityCancellationType.WAIT_CANCELLATION_COMPLETED);
577+
attributes, ActivityCancellationType.WAIT_CANCELLATION_COMPLETED, null);
578578
builder
579579
.<Optional<Payloads>, Failure>add2(
580580
(v, c) -> cancellationHandler = stateMachines.scheduleActivityTask(parameters, c))
@@ -680,7 +680,7 @@ public void buildWorkflow(AsyncWorkflowBuilder<Void> builder) {
680680
ScheduleActivityTaskCommandAttributes.newBuilder().setActivityId("id1");
681681
ExecuteActivityParameters parameters =
682682
new ExecuteActivityParameters(
683-
attributes, ActivityCancellationType.WAIT_CANCELLATION_COMPLETED);
683+
attributes, ActivityCancellationType.WAIT_CANCELLATION_COMPLETED, null);
684684
builder
685685
.<Optional<Payloads>, Failure>add2(
686686
(v, c) -> cancellationHandler = stateMachines.scheduleActivityTask(parameters, c))
@@ -798,7 +798,7 @@ public void buildWorkflow(AsyncWorkflowBuilder<Void> builder) {
798798
ScheduleActivityTaskCommandAttributes.newBuilder().setActivityId("id1");
799799
ExecuteActivityParameters parameters =
800800
new ExecuteActivityParameters(
801-
attributes, ActivityCancellationType.WAIT_CANCELLATION_COMPLETED);
801+
attributes, ActivityCancellationType.WAIT_CANCELLATION_COMPLETED, null);
802802
builder
803803
.<Optional<Payloads>, Failure>add2(
804804
(v, c) -> cancellationHandler = stateMachines.scheduleActivityTask(parameters, c))
@@ -918,7 +918,7 @@ public void buildWorkflow(AsyncWorkflowBuilder<Void> builder) {
918918
ScheduleActivityTaskCommandAttributes.newBuilder().setActivityId("id1");
919919
ExecuteActivityParameters parameters =
920920
new ExecuteActivityParameters(
921-
attributes, ActivityCancellationType.WAIT_CANCELLATION_COMPLETED);
921+
attributes, ActivityCancellationType.WAIT_CANCELLATION_COMPLETED, null);
922922
builder
923923
.<Optional<Payloads>, Failure>add2(
924924
(v, c) -> cancellationHandler = stateMachines.scheduleActivityTask(parameters, c))
@@ -1015,7 +1015,7 @@ public void buildWorkflow(AsyncWorkflowBuilder<Void> builder) {
10151015
ScheduleActivityTaskCommandAttributes.newBuilder().setActivityId("id1");
10161016
ExecuteActivityParameters parameters =
10171017
new ExecuteActivityParameters(
1018-
attributes, ActivityCancellationType.WAIT_CANCELLATION_COMPLETED);
1018+
attributes, ActivityCancellationType.WAIT_CANCELLATION_COMPLETED, null);
10191019
builder
10201020
.<Optional<Payloads>, Failure>add2(
10211021
(v, c) -> cancellationHandler = stateMachines.scheduleActivityTask(parameters, c))
@@ -1135,7 +1135,7 @@ public void buildWorkflow(AsyncWorkflowBuilder<Void> builder) {
11351135
ScheduleActivityTaskCommandAttributes.newBuilder().setActivityId("id1");
11361136
ExecuteActivityParameters parameters =
11371137
new ExecuteActivityParameters(
1138-
attributes, ActivityCancellationType.WAIT_CANCELLATION_COMPLETED);
1138+
attributes, ActivityCancellationType.WAIT_CANCELLATION_COMPLETED, null);
11391139
builder
11401140
.<Optional<Payloads>, Failure>add2(
11411141
(v, c) -> cancellationHandler = stateMachines.scheduleActivityTask(parameters, c))
@@ -1244,7 +1244,7 @@ public void buildWorkflow(AsyncWorkflowBuilder<Void> builder) {
12441244
ScheduleActivityTaskCommandAttributes.newBuilder().setActivityId("id1");
12451245
ExecuteActivityParameters parameters =
12461246
new ExecuteActivityParameters(
1247-
attributes, ActivityCancellationType.WAIT_CANCELLATION_COMPLETED);
1247+
attributes, ActivityCancellationType.WAIT_CANCELLATION_COMPLETED, null);
12481248
builder
12491249
.<Optional<Payloads>, Failure>add2(
12501250
(v, c) -> cancellationHandler = stateMachines.scheduleActivityTask(parameters, c))
@@ -1352,7 +1352,7 @@ public void buildWorkflow(AsyncWorkflowBuilder<Void> builder) {
13521352
ScheduleActivityTaskCommandAttributes.newBuilder().setActivityId("id1");
13531353
ExecuteActivityParameters parameters =
13541354
new ExecuteActivityParameters(
1355-
attributes, ActivityCancellationType.WAIT_CANCELLATION_COMPLETED);
1355+
attributes, ActivityCancellationType.WAIT_CANCELLATION_COMPLETED, null);
13561356
builder
13571357
.<Optional<Payloads>, Failure>add2(
13581358
(v, c) -> cancellationHandler = stateMachines.scheduleActivityTask(parameters, c))

0 commit comments

Comments
 (0)