You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
**What changed and why?**
Propagation refers to how time-skipping config is carried over to all
workflows started by the current workflow: retry, continue-as-new, child
workflows, reset, etc.
1. Remove **disable_propagation** and **max_target_time**, because
neither of them can be soundly defined when time-skipping propagates
transitively across related workflows. One of the many examples:
- max_target_time: as an absolute time point, it may already have passed
by the time a retry or downstream workflow starts, making it ambiguous
whether to disable or preserve time-skipping — neither is a clearly
correct default
- disable_propagation: it is unclear which type of transitively
triggered workflow this should apply to, and treating all cases
uniformly is unreasonable; we defer exposing this flexibility until user
demand and use cases are better understood
2. Add **comments of the propagation behavior** for each feature (retry,
continue-as-new, child workflow, reset, cron)
3. Add **comments to the bound field**
4. Add **propagatedSkippedDuration** to time skipping config so that new
workflows can inherit the virtual time
** Breaking changes to API **
1. deleted fields and reused the numbers since the TimeSkippingConfig is
not yet released
Copy file name to clipboardExpand all lines: openapi/openapiv2.json
+15-12Lines changed: 15 additions & 12 deletions
Original file line number
Diff line number
Diff line change
@@ -17965,6 +17965,14 @@
17965
17965
"priority": {
17966
17966
"$ref": "#/definitions/v1Priority",
17967
17967
"title": "Priority metadata"
17968
+
},
17969
+
"timeSkippingConfig": {
17970
+
"$ref": "#/definitions/v1TimeSkippingConfig",
17971
+
"description": "The propagated time-skipping configuration for the child workflow."
17972
+
},
17973
+
"initialSkippedDuration": {
17974
+
"type": "string",
17975
+
"description": "Propagate the duration skipped to the child workflow."
17968
17976
}
17969
17977
}
17970
17978
},
@@ -18353,11 +18361,7 @@
18353
18361
"properties": {
18354
18362
"enabled": {
18355
18363
"type": "boolean",
18356
-
"description": "Enables or disables time skipping for this workflow execution.\nBy default, this field is propagated to transitively related workflows (child workflows/start-as-new/reset) \nat the time they are started.\nChanges made after a transitively related workflow has started are not propagated."
18357
-
},
18358
-
"disablePropagation": {
18359
-
"type": "boolean",
18360
-
"description": "If set, the enabled field is not propagated to transitively related workflows."
18364
+
"description": "Enables or disables time skipping for this workflow execution."
18361
18365
},
18362
18366
"maxSkippedDuration": {
18363
18367
"type": "string",
@@ -18366,14 +18370,9 @@
18366
18370
"maxElapsedDuration": {
18367
18371
"type": "string",
18368
18372
"description": "Maximum elapsed time since time skipping was enabled.\nThis includes both skipped time and real time elapsing."
18369
-
},
18370
-
"maxTargetTime": {
18371
-
"type": "string",
18372
-
"format": "date-time",
18373
-
"description": "Absolute virtual timestamp at which time skipping is disabled.\nTime skipping will not advance beyond this point."
18374
18373
}
18375
18374
},
18376
-
"description": "Configuration for time skipping during a workflow execution.\nWhen enabled, virtual time advances automatically whenever there is no in-flight work.\nIn-flight work includes activities, child workflows, Nexus operations, signal/cancel external workflow operations,\nand possibly other features added in the future.\nUser timers are not classified as in-flight work and will be skipped over.\nWhen time advances, it skips to the earlier of the next user timer or the configured bound, if either exists."
18375
+
"description": "Configuration for time skipping during a workflow execution.\nWhen enabled, virtual time advances automatically whenever there is no in-flight work.\nIn-flight work includes activities, child workflows, Nexus operations, signal/cancel external workflow operations,\nand possibly other features added in the future.\nUser timers are not classified as in-flight work and will be skipped over.\nWhen time advances, it skips to the earlier of the next user timer or the configured bound, if either exists.\n\nPropagation behavior of time skipping:\nThe enabled flag, bound fields, and accumulated skipped duration are propagated to related executions as follows:\n(1) Child workflows and continue-as-new: both the configuration and the accumulated skipped duration are\n inherited from the current execution. The configured bound is shared between the inherited skipped\n duration and any additional duration skipped by the new run.\n(2) Retry and cron: the configuration and accumulated skipped duration are inherited as recorded when the\n current workflow started; the accumulated skipped duration of the current run is not propagated.\n(3) Reset: the new run retains the time-skipping configuration of the current execution. Because reset replays\n all events up to the reset point and re-applies any UpdateWorkflowExecutionOptions changes made after that\n point, the resulting run ends up with the same final time-skipping configuration as the previous run."
18377
18376
},
18378
18377
"v1TimeoutFailureInfo": {
18379
18378
"type": "object",
@@ -19657,7 +19656,7 @@
19657
19656
},
19658
19657
"timeSkippingConfig": {
19659
19658
"$ref": "#/definitions/v1TimeSkippingConfig",
19660
-
"description": "Time-skipping configuration for this workflow execution.\nIf not set, the time-skipping conf will not get updated upon request, \ni.e. the existing time-skipping conf will be preserved."
19659
+
"description": "Time-skipping configuration for this workflow execution.\nIf not set, the time-skipping configuration is not updated by this request;\nthe existing configuration is preserved."
19661
19660
}
19662
19661
}
19663
19662
},
@@ -19927,6 +19926,10 @@
19927
19926
"timeSkippingConfig": {
19928
19927
"$ref": "#/definitions/v1TimeSkippingConfig",
19929
19928
"description": "Initial time-skipping configuration for this workflow execution, recorded at start time.\nThis may have been set explicitly via the start workflow request, or propagated from a\nparent/previous execution.\n\nThe configuration may be updated after start via UpdateWorkflowExecutionOptions, which\nwill be reflected in the WorkflowExecutionOptionsUpdatedEvent."
19929
+
},
19930
+
"initialSkippedDuration": {
19931
+
"type": "string",
19932
+
"description": "The time skipped by the previous execution that started this workflow.\nIt can happen in cases of child workflows and continue-as-new workflows."
19930
19933
}
19931
19934
},
19932
19935
"title": "Always the first event in workflow history"
description: Propagate the duration skipped to the child workflow.
15560
15568
StartNexusOperationExecutionRequest:
15561
15569
type: object
15562
15570
properties:
@@ -16243,10 +16251,7 @@ components:
16243
16251
properties:
16244
16252
enabled:
16245
16253
type: boolean
16246
-
description: "Enables or disables time skipping for this workflow execution.\n By default, this field is propagated to transitively related workflows (child workflows/start-as-new/reset) \n at the time they are started.\n Changes made after a transitively related workflow has started are not propagated."
16247
-
disablePropagation:
16248
-
type: boolean
16249
-
description: If set, the enabled field is not propagated to transitively related workflows.
16254
+
description: Enables or disables time skipping for this workflow execution.
Maximum elapsed time since time skipping was enabled.
16259
16264
This includes both skipped time and real time elapsing.
16260
-
maxTargetTime:
16261
-
type: string
16262
-
description: |-
16263
-
Absolute virtual timestamp at which time skipping is disabled.
16264
-
Time skipping will not advance beyond this point.
16265
-
format: date-time
16266
-
description: |-
16267
-
Configuration for time skipping during a workflow execution.
16268
-
When enabled, virtual time advances automatically whenever there is no in-flight work.
16269
-
In-flight work includes activities, child workflows, Nexus operations, signal/cancel external workflow operations,
16270
-
and possibly other features added in the future.
16271
-
User timers are not classified as in-flight work and will be skipped over.
16272
-
When time advances, it skips to the earlier of the next user timer or the configured bound, if either exists.
16265
+
description: "Configuration for time skipping during a workflow execution.\n When enabled, virtual time advances automatically whenever there is no in-flight work.\n In-flight work includes activities, child workflows, Nexus operations, signal/cancel external workflow operations,\n and possibly other features added in the future.\n User timers are not classified as in-flight work and will be skipped over.\n When time advances, it skips to the earlier of the next user timer or the configured bound, if either exists.\n \n Propagation behavior of time skipping:\n The enabled flag, bound fields, and accumulated skipped duration are propagated to related executions as follows:\n (1) Child workflows and continue-as-new: both the configuration and the accumulated skipped duration are\n inherited from the current execution. The configured bound is shared between the inherited skipped\n duration and any additional duration skipped by the new run.\n (2) Retry and cron: the configuration and accumulated skipped duration are inherited as recorded when the\n current workflow started; the accumulated skipped duration of the current run is not propagated.\n (3) Reset: the new run retains the time-skipping configuration of the current execution. Because reset replays\n all events up to the reset point and re-applies any UpdateWorkflowExecutionOptions changes made after that\n point, the resulting run ends up with the same final time-skipping configuration as the previous run."
16273
16266
TimeoutFailureInfo:
16274
16267
type: object
16275
16268
properties:
@@ -18219,7 +18212,10 @@ components:
18219
18212
timeSkippingConfig:
18220
18213
allOf:
18221
18214
- $ref: '#/components/schemas/TimeSkippingConfig'
18222
-
description: "Time-skipping configuration for this workflow execution.\n If not set, the time-skipping conf will not get updated upon request, \n i.e. the existing time-skipping conf will be preserved."
18215
+
description: |-
18216
+
Time-skipping configuration for this workflow execution.
18217
+
If not set, the time-skipping configuration is not updated by this request;
18218
+
the existing configuration is preserved.
18223
18219
WorkflowExecutionOptionsUpdatedEventAttributes:
18224
18220
type: object
18225
18221
properties:
@@ -18563,6 +18559,12 @@ components:
18563
18559
18564
18560
The configuration may be updated after start via UpdateWorkflowExecutionOptions, which
18565
18561
will be reflected in the WorkflowExecutionOptionsUpdatedEvent.
0 commit comments