@temporalio/core-bridge 0.19.2 → 0.20.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/Cargo.lock +90 -157
  2. package/Cargo.toml +1 -0
  3. package/index.d.ts +11 -27
  4. package/package.json +3 -3
  5. package/releases/aarch64-apple-darwin/index.node +0 -0
  6. package/releases/aarch64-unknown-linux-gnu/index.node +0 -0
  7. package/releases/x86_64-apple-darwin/index.node +0 -0
  8. package/releases/x86_64-pc-windows-msvc/index.node +0 -0
  9. package/releases/x86_64-unknown-linux-gnu/index.node +0 -0
  10. package/sdk-core/.buildkite/docker/Dockerfile +1 -1
  11. package/sdk-core/.buildkite/docker/docker-compose.yaml +1 -1
  12. package/sdk-core/.cargo/config.toml +1 -0
  13. package/sdk-core/CODEOWNERS +1 -1
  14. package/sdk-core/bridge-ffi/include/sdk-core-bridge.h +119 -86
  15. package/sdk-core/bridge-ffi/src/lib.rs +311 -315
  16. package/sdk-core/bridge-ffi/src/wrappers.rs +108 -113
  17. package/sdk-core/client/Cargo.toml +13 -9
  18. package/sdk-core/client/LICENSE.txt +23 -0
  19. package/sdk-core/client/src/lib.rs +286 -174
  20. package/sdk-core/client/src/metrics.rs +86 -12
  21. package/sdk-core/client/src/raw.rs +566 -0
  22. package/sdk-core/client/src/retry.rs +137 -99
  23. package/sdk-core/core/Cargo.toml +15 -10
  24. package/sdk-core/core/LICENSE.txt +23 -0
  25. package/sdk-core/core/benches/workflow_replay.rs +79 -0
  26. package/sdk-core/core/src/abstractions.rs +38 -0
  27. package/sdk-core/core/src/core_tests/activity_tasks.rs +108 -182
  28. package/sdk-core/core/src/core_tests/child_workflows.rs +16 -11
  29. package/sdk-core/core/src/core_tests/determinism.rs +24 -12
  30. package/sdk-core/core/src/core_tests/local_activities.rs +53 -27
  31. package/sdk-core/core/src/core_tests/mod.rs +30 -43
  32. package/sdk-core/core/src/core_tests/queries.rs +82 -81
  33. package/sdk-core/core/src/core_tests/workers.rs +111 -296
  34. package/sdk-core/core/src/core_tests/workflow_cancels.rs +4 -4
  35. package/sdk-core/core/src/core_tests/workflow_tasks.rs +257 -242
  36. package/sdk-core/core/src/lib.rs +73 -318
  37. package/sdk-core/core/src/pollers/mod.rs +4 -6
  38. package/sdk-core/core/src/pollers/poll_buffer.rs +20 -14
  39. package/sdk-core/core/src/protosext/mod.rs +7 -10
  40. package/sdk-core/core/src/replay/mod.rs +11 -150
  41. package/sdk-core/core/src/telemetry/metrics.rs +35 -2
  42. package/sdk-core/core/src/telemetry/mod.rs +49 -16
  43. package/sdk-core/core/src/telemetry/prometheus_server.rs +14 -35
  44. package/sdk-core/core/src/test_help/mod.rs +104 -170
  45. package/sdk-core/core/src/worker/activities/activity_heartbeat_manager.rs +57 -34
  46. package/sdk-core/core/src/worker/activities/local_activities.rs +95 -23
  47. package/sdk-core/core/src/worker/activities.rs +23 -16
  48. package/sdk-core/core/src/worker/client/mocks.rs +86 -0
  49. package/sdk-core/core/src/worker/client.rs +209 -0
  50. package/sdk-core/core/src/worker/mod.rs +207 -108
  51. package/sdk-core/core/src/workflow/driven_workflow.rs +21 -6
  52. package/sdk-core/core/src/workflow/history_update.rs +107 -24
  53. package/sdk-core/core/src/workflow/machines/activity_state_machine.rs +2 -3
  54. package/sdk-core/core/src/workflow/machines/child_workflow_state_machine.rs +2 -3
  55. package/sdk-core/core/src/workflow/machines/mod.rs +20 -17
  56. package/sdk-core/core/src/workflow/machines/signal_external_state_machine.rs +56 -19
  57. package/sdk-core/core/src/workflow/machines/transition_coverage.rs +5 -0
  58. package/sdk-core/core/src/workflow/machines/upsert_search_attributes_state_machine.rs +230 -22
  59. package/sdk-core/core/src/workflow/machines/workflow_machines.rs +81 -115
  60. package/sdk-core/core/src/workflow/machines/workflow_task_state_machine.rs +4 -4
  61. package/sdk-core/core/src/workflow/mod.rs +13 -1
  62. package/sdk-core/core/src/workflow/workflow_tasks/concurrency_manager.rs +70 -11
  63. package/sdk-core/core/src/workflow/workflow_tasks/mod.rs +65 -41
  64. package/sdk-core/core-api/Cargo.toml +9 -1
  65. package/sdk-core/core-api/LICENSE.txt +23 -0
  66. package/sdk-core/core-api/src/errors.rs +7 -38
  67. package/sdk-core/core-api/src/lib.rs +44 -52
  68. package/sdk-core/core-api/src/worker.rs +10 -2
  69. package/sdk-core/etc/deps.svg +127 -96
  70. package/sdk-core/protos/api_upstream/temporal/api/command/v1/message.proto +11 -7
  71. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +10 -0
  72. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/namespace.proto +6 -1
  73. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/workflow.proto +6 -0
  74. package/sdk-core/protos/api_upstream/temporal/api/errordetails/v1/message.proto +6 -0
  75. package/sdk-core/protos/api_upstream/temporal/api/history/v1/message.proto +2 -1
  76. package/sdk-core/protos/api_upstream/temporal/api/replication/v1/message.proto +3 -0
  77. package/sdk-core/protos/api_upstream/temporal/api/workflow/v1/message.proto +12 -0
  78. package/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +25 -0
  79. package/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +4 -0
  80. package/sdk-core/protos/local/temporal/sdk/core/bridge/bridge.proto +19 -35
  81. package/sdk-core/protos/local/temporal/sdk/core/core_interface.proto +2 -6
  82. package/sdk-core/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +53 -11
  83. package/sdk-core/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +14 -7
  84. package/sdk-core/protos/local/temporal/sdk/core/workflow_completion/workflow_completion.proto +3 -5
  85. package/sdk-core/sdk/Cargo.toml +16 -2
  86. package/sdk-core/sdk/LICENSE.txt +23 -0
  87. package/sdk-core/sdk/src/interceptors.rs +11 -0
  88. package/sdk-core/sdk/src/lib.rs +139 -151
  89. package/sdk-core/sdk/src/workflow_context/options.rs +86 -1
  90. package/sdk-core/sdk/src/workflow_context.rs +36 -17
  91. package/sdk-core/sdk/src/workflow_future.rs +19 -25
  92. package/sdk-core/sdk-core-protos/Cargo.toml +1 -1
  93. package/sdk-core/sdk-core-protos/build.rs +1 -0
  94. package/sdk-core/sdk-core-protos/src/history_info.rs +17 -4
  95. package/sdk-core/sdk-core-protos/src/lib.rs +251 -47
  96. package/sdk-core/test-utils/Cargo.toml +3 -1
  97. package/sdk-core/test-utils/src/canned_histories.rs +27 -0
  98. package/sdk-core/test-utils/src/histfetch.rs +3 -3
  99. package/sdk-core/test-utils/src/lib.rs +223 -68
  100. package/sdk-core/tests/integ_tests/client_tests.rs +27 -4
  101. package/sdk-core/tests/integ_tests/heartbeat_tests.rs +93 -14
  102. package/sdk-core/tests/integ_tests/polling_tests.rs +18 -12
  103. package/sdk-core/tests/integ_tests/queries_tests.rs +50 -53
  104. package/sdk-core/tests/integ_tests/workflow_tests/activities.rs +117 -103
  105. package/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +8 -1
  106. package/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +10 -5
  107. package/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +7 -1
  108. package/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +32 -9
  109. package/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +7 -1
  110. package/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +76 -15
  111. package/sdk-core/tests/integ_tests/workflow_tests/patches.rs +19 -3
  112. package/sdk-core/tests/integ_tests/workflow_tests/replay.rs +39 -42
  113. package/sdk-core/tests/integ_tests/workflow_tests/resets.rs +84 -0
  114. package/sdk-core/tests/integ_tests/workflow_tests/signals.rs +30 -8
  115. package/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +21 -6
  116. package/sdk-core/tests/integ_tests/workflow_tests/timers.rs +26 -16
  117. package/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +66 -0
  118. package/sdk-core/tests/integ_tests/workflow_tests.rs +78 -74
  119. package/sdk-core/tests/load_tests.rs +9 -6
  120. package/sdk-core/tests/main.rs +43 -10
  121. package/src/conversions.rs +7 -12
  122. package/src/lib.rs +322 -357
  123. package/sdk-core/client/src/mocks.rs +0 -167
  124. package/sdk-core/core/src/worker/dispatcher.rs +0 -171
  125. package/sdk-core/protos/local/temporal/sdk/core/bridge/service.proto +0 -61
@@ -2,39 +2,25 @@ pub mod errors;
2
2
  pub mod worker;
3
3
 
4
4
  use crate::{
5
- errors::{
6
- CompleteActivityError, CompleteWfError, PollActivityError, PollWfError,
7
- WorkerRegistrationError,
8
- },
5
+ errors::{CompleteActivityError, CompleteWfError, PollActivityError, PollWfError},
9
6
  worker::WorkerConfig,
10
7
  };
11
8
  use log::Level;
12
- use std::{
13
- sync::Arc,
14
- time::{Duration, SystemTime, UNIX_EPOCH},
15
- };
16
- use temporal_client::ServerGatewayApis;
9
+ use opentelemetry::metrics::Meter;
10
+ use std::time::{Duration, SystemTime, UNIX_EPOCH};
17
11
  use temporal_sdk_core_protos::coresdk::{
18
12
  activity_task::ActivityTask, workflow_activation::WorkflowActivation,
19
13
  workflow_completion::WorkflowActivationCompletion, ActivityHeartbeat, ActivityTaskCompletion,
20
14
  };
21
15
 
22
- /// This trait is the primary way by which language specific SDKs interact with the core SDK. It is
23
- /// expected that only one instance of an implementation will exist for the lifetime of the
24
- /// worker(s) using it.
16
+ /// This trait is the primary way by which language specific SDKs interact with the core SDK.
17
+ /// It represents one worker, which has a (potentially shared) client for connecting to the service
18
+ /// and is bound to a specific task queue.
25
19
  #[async_trait::async_trait]
26
- pub trait Core: Send + Sync {
27
- /// Register a worker with core. Workers poll on a specific task queue, and when calling core's
28
- /// poll functions, you must provide a task queue name. If there was already a worker registered
29
- /// with the same task queue name, it will be shut down and a new one will be created.
30
- fn register_worker(&self, config: WorkerConfig) -> Result<(), WorkerRegistrationError>;
31
-
32
- /// Ask the core for some work, returning a [WorkflowActivation]. It is then the language SDK's
33
- /// responsibility to call the appropriate workflow code with the provided inputs. Blocks
34
- /// indefinitely until such work is available or [Core::shutdown] is called.
35
- ///
36
- /// The returned activation is guaranteed to be for the same task queue / worker which was
37
- /// provided as the `task_queue` argument.
20
+ pub trait Worker: Send + Sync {
21
+ /// Ask the worker for some work, returning a [WorkflowActivation]. It is then the language
22
+ /// SDK's responsibility to call the appropriate workflow code with the provided inputs. Blocks
23
+ /// indefinitely until such work is available or [Worker::shutdown] is called.
38
24
  ///
39
25
  /// It is important to understand that all activations must be responded to. There can only
40
26
  /// be one outstanding activation for a particular run of a workflow at any time. If an
@@ -48,49 +34,41 @@ pub trait Core: Send + Sync {
48
34
  ///
49
35
  /// It is rarely a good idea to call poll concurrently. It handles polling the server
50
36
  /// concurrently internally.
51
- ///
52
- /// TODO: Examples
53
- async fn poll_workflow_activation(
54
- &self,
55
- task_queue: &str,
56
- ) -> Result<WorkflowActivation, PollWfError>;
37
+ async fn poll_workflow_activation(&self) -> Result<WorkflowActivation, PollWfError>;
57
38
 
58
- /// Ask the core for some work, returning an [ActivityTask]. It is then the language SDK's
39
+ /// Ask the worker for some work, returning an [ActivityTask]. It is then the language SDK's
59
40
  /// responsibility to call the appropriate activity code with the provided inputs. Blocks
60
- /// indefinitely until such work is available or [Core::shutdown] is called.
41
+ /// indefinitely until such work is available or [Worker::shutdown] is called.
61
42
  ///
62
43
  /// The returned activation is guaranteed to be for the same task queue / worker which was
63
44
  /// provided as the `task_queue` argument.
64
45
  ///
65
46
  /// It is rarely a good idea to call poll concurrently. It handles polling the server
66
47
  /// concurrently internally.
67
- ///
68
- /// TODO: Examples
69
- async fn poll_activity_task(&self, task_queue: &str)
70
- -> Result<ActivityTask, PollActivityError>;
48
+ async fn poll_activity_task(&self) -> Result<ActivityTask, PollActivityError>;
71
49
 
72
- /// Tell the core that a workflow activation has completed. May be freely called concurrently.
50
+ /// Tell the worker that a workflow activation has completed. May be freely called concurrently.
73
51
  async fn complete_workflow_activation(
74
52
  &self,
75
53
  completion: WorkflowActivationCompletion,
76
54
  ) -> Result<(), CompleteWfError>;
77
55
 
78
- /// Tell the core that an activity has finished executing. May be freely called concurrently.
56
+ /// Tell the worker that an activity has finished executing. May be freely called concurrently.
79
57
  async fn complete_activity_task(
80
58
  &self,
81
59
  completion: ActivityTaskCompletion,
82
60
  ) -> Result<(), CompleteActivityError>;
83
61
 
84
- /// Notify workflow that an activity is still alive. Long running activities that take longer
85
- /// than `activity_heartbeat_timeout` to finish must call this function in order to report
86
- /// progress, otherwise the activity will timeout and a new attempt will be scheduled.
62
+ /// Notify the Temporal service that an activity is still alive. Long running activities that
63
+ /// take longer than `activity_heartbeat_timeout` to finish must call this function in order to
64
+ /// report progress, otherwise the activity will timeout and a new attempt will be scheduled.
87
65
  ///
88
66
  /// The first heartbeat request will be sent immediately, subsequent rapid calls to this
89
67
  /// function will result in heartbeat requests being aggregated and the last one received during
90
68
  /// the aggregation period will be sent to the server, where that period is defined as half the
91
69
  /// heartbeat timeout.
92
70
  ///
93
- /// Unlike java/go SDKs we do not return cancellation status as part of heartbeat response and
71
+ /// Unlike Java/Go SDKs we do not return cancellation status as part of heartbeat response and
94
72
  /// instead send it as a separate activity task to the lang, decoupling heartbeat and
95
73
  /// cancellation processing.
96
74
  ///
@@ -104,27 +82,36 @@ pub trait Core: Send + Sync {
104
82
 
105
83
  /// Request that a workflow be evicted by its run id. This will generate a workflow activation
106
84
  /// with the eviction job inside it to be eventually returned by
107
- /// [Core::poll_workflow_activation]. If the workflow had any existing outstanding activations,
85
+ /// [Worker::poll_workflow_activation]. If the workflow had any existing outstanding activations,
108
86
  /// such activations are invalidated and subsequent completions of them will do nothing and log
109
87
  /// a warning.
110
- fn request_workflow_eviction(&self, task_queue: &str, run_id: &str);
88
+ fn request_workflow_eviction(&self, run_id: &str);
89
+
90
+ /// Return this worker's config
91
+ fn get_config(&self) -> &WorkerConfig;
111
92
 
112
- /// Returns core's instance of the [ServerGatewayApis] implementor it is using.
113
- fn server_gateway(&self) -> Arc<dyn ServerGatewayApis + Send + Sync>;
93
+ /// TODO: Will be replaced/fixed/whatever by shutdown refactoring
94
+ fn initiate_shutdown(&self);
114
95
 
115
96
  /// Initiates async shutdown procedure, eventually ceases all polling of the server and shuts
116
- /// down all registered workers. [Core::poll_workflow_activation] should be called until it
97
+ /// down this worker. [Worker::poll_workflow_activation] should be called until it
117
98
  /// returns [PollWfError::ShutDown] to ensure that any workflows which are still undergoing
118
99
  /// replay have an opportunity to finish. This means that the lang sdk will need to call
119
- /// [Core::complete_workflow_activation] for those workflows until they are done. At that point,
120
- /// the lang SDK can end the process, or drop the [Core] instance, which will close the
100
+ /// [Worker::complete_workflow_activation] for those workflows until they are done. At that point,
101
+ /// the lang SDK can end the process, or drop the [Worker] instance, which will close the
121
102
  /// connection.
122
103
  async fn shutdown(&self);
123
104
 
124
- /// Shut down a specific worker. Will cease all polling on the task queue and future attempts
125
- /// to poll that queue will return [PollWfError::NoWorkerForQueue].
126
- async fn shutdown_worker(&self, task_queue: &str);
105
+ /// Completes shutdown and frees all resources. You should avoid simply dropping workers, as
106
+ /// this does not allow async tasks to report any panics that may have occurred cleanly.
107
+ ///
108
+ /// This should be called only after [Worker::shutdown] has resolved.
109
+ async fn finalize_shutdown(self);
110
+ }
127
111
 
112
+ /// Should be backed by a process-wide singleton who is responsible for telemetry and logging
113
+ /// management.
114
+ pub trait CoreTelemetry {
128
115
  /// Core buffers logs that should be shuttled over to lang so that they may be rendered with
129
116
  /// the user's desired logging library. Use this function to grab the most recent buffered logs
130
117
  /// since the last time it was called. A fixed number of such logs are retained at maximum, with
@@ -133,6 +120,11 @@ pub trait Core: Send + Sync {
133
120
  /// Returns the list of logs from oldest to newest. Returns an empty vec if the feature is not
134
121
  /// configured.
135
122
  fn fetch_buffered_logs(&self) -> Vec<CoreLog>;
123
+
124
+ /// If metrics gathering is enabled, returns the OTel meter for core telemetry, which can be
125
+ /// used to create metrics instruments, or passed to things that create/record metrics (ex:
126
+ /// clients).
127
+ fn get_metric_meter(&self) -> Option<&Meter>;
136
128
  }
137
129
 
138
130
  /// A log line (which ultimately came from a tracing event) exported from Core->Lang
@@ -4,8 +4,9 @@ use std::time::Duration;
4
4
  #[derive(Debug, Clone, derive_builder::Builder)]
5
5
  #[builder(setter(into), build_fn(validate = "Self::validate"))]
6
6
  #[non_exhaustive]
7
- // TODO: per-second queue limits
8
7
  pub struct WorkerConfig {
8
+ /// The Temporal service namespace this worker is bound to
9
+ pub namespace: String,
9
10
  /// What task queue will this worker poll from? This task queue name will be used for both
10
11
  /// workflow and activity polling.
11
12
  pub task_queue: String,
@@ -45,7 +46,7 @@ pub struct WorkerConfig {
45
46
  #[builder(default = "5")]
46
47
  pub max_concurrent_at_polls: usize,
47
48
  /// If set to true this worker will only handle workflow tasks and local activities, it will not
48
- /// poll for activity tasks. This option exists because
49
+ /// poll for activity tasks.
49
50
  #[builder(default = "false")]
50
51
  pub no_remote_activities: bool,
51
52
  /// How long a workflow task is allowed to sit on the sticky queue before it is timed out
@@ -63,6 +64,13 @@ pub struct WorkerConfig {
63
64
  /// `heartbeat_timeout * 0.8`.
64
65
  #[builder(default = "Duration::from_secs(30)")]
65
66
  pub default_heartbeat_throttle_interval: Duration,
67
+
68
+ /// Sets the maximum number of activities per second the task queue will dispatch, controlled
69
+ /// server-side. Note that this only takes effect upon an activity poll request. If multiple
70
+ /// workers on the same queue have different values set, they will thrash with the last poller
71
+ /// winning.
72
+ #[builder(setter(strip_option), default)]
73
+ pub max_task_queue_activities_per_second: Option<f64>,
66
74
  }
67
75
 
68
76
  impl WorkerConfig {
@@ -1,156 +1,187 @@
1
1
  <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
2
  <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
3
3
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
- <!-- Generated by graphviz version 2.50.0 (0)
4
+ <!-- Generated by graphviz version 2.43.0 (0)
5
5
  -->
6
- <!-- Pages: 1 -->
7
- <svg width="421pt" height="404pt"
8
- viewBox="0.00 0.00 420.50 404.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9
- <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 400)">
10
- <polygon fill="white" stroke="transparent" points="-4,4 -4,-400 416.5,-400 416.5,4 -4,4"/>
6
+ <!-- Title: %3 Pages: 1 -->
7
+ <svg width="525pt" height="476pt"
8
+ viewBox="0.00 0.00 524.50 476.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9
+ <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 472)">
10
+ <title>%3</title>
11
+ <polygon fill="white" stroke="transparent" points="-4,4 -4,-472 520.5,-472 520.5,4 -4,4"/>
11
12
  <!-- 0 -->
12
13
  <g id="node1" class="node">
13
14
  <title>0</title>
14
- <polygon fill="none" stroke="black" points="248,-396 132,-396 132,-360 248,-360 248,-396"/>
15
- <text text-anchor="middle" x="190" y="-374.3" font-family="Times,serif" font-size="14.00">temporal&#45;sdk&#45;core</text>
15
+ <polygon fill="none" stroke="black" points="173,-468 0,-468 0,-432 173,-432 173,-468"/>
16
+ <text text-anchor="middle" x="86.5" y="-446.3" font-family="Times,serif" font-size="14.00">temporal&#45;sdk&#45;core&#45;bridge&#45;ffi</text>
16
17
  </g>
17
18
  <!-- 1 -->
18
19
  <g id="node2" class="node">
19
20
  <title>1</title>
20
- <polygon fill="none" stroke="black" points="58,-324 0,-324 0,-288 58,-288 58,-324"/>
21
- <text text-anchor="middle" x="29" y="-302.3" font-family="Times,serif" font-size="14.00">rustfsm</text>
21
+ <polygon fill="none" stroke="black" points="369.5,-396 253.5,-396 253.5,-360 369.5,-360 369.5,-396"/>
22
+ <text text-anchor="middle" x="311.5" y="-374.3" font-family="Times,serif" font-size="14.00">temporal&#45;sdk&#45;core</text>
22
23
  </g>
23
24
  <!-- 0&#45;&gt;1 -->
24
25
  <g id="edge1" class="edge">
25
26
  <title>0&#45;&gt;1</title>
26
- <path fill="none" stroke="black" d="M150.61,-359.88C125.27,-348.86 92.5,-334.61 67.36,-323.68"/>
27
- <polygon fill="black" stroke="black" points="68.7,-320.44 58.13,-319.67 65.91,-326.86 68.7,-320.44"/>
28
- </g>
29
- <!-- 4 -->
30
- <g id="node3" class="node">
31
- <title>4</title>
32
- <polygon fill="none" stroke="black" points="214,-108 114,-108 114,-72 214,-72 214,-108"/>
33
- <text text-anchor="middle" x="164" y="-86.3" font-family="Times,serif" font-size="14.00">temporal&#45;client</text>
34
- </g>
35
- <!-- 0&#45;&gt;4 -->
36
- <g id="edge2" class="edge">
37
- <title>0&#45;&gt;4</title>
38
- <path fill="none" stroke="black" d="M181.7,-359.96C171.44,-325.92 157.74,-247.02 153,-180 151.87,-164.04 152.7,-160 153,-144 153.16,-135.58 153.46,-126.42 154.19,-118.12"/>
39
- <polygon fill="black" stroke="black" points="157.67,-118.52 155.37,-108.18 150.71,-117.7 157.67,-118.52"/>
40
- </g>
41
- <!-- 0&#45;&gt;4 -->
42
- <g id="edge3" class="edge">
43
- <title>0&#45;&gt;4</title>
44
- <path fill="none" stroke="blue" d="M191.8,-359.96C189.44,-325.92 175.74,-247.02 171,-180 169.87,-164.04 170.7,-160 171,-144 171.16,-135.68 171.45,-126.63 171.37,-118.4"/>
45
- <polygon fill="blue" stroke="blue" points="174.86,-118.05 171.01,-108.18 167.87,-118.3 174.86,-118.05"/>
46
- </g>
47
- <!-- 5 -->
48
- <g id="node4" class="node">
49
- <title>5</title>
50
- <polygon fill="none" stroke="black" points="319.5,-36 164.5,-36 164.5,0 319.5,0 319.5,-36"/>
51
- <text text-anchor="middle" x="242" y="-14.3" font-family="Times,serif" font-size="14.00">temporal&#45;sdk&#45;core&#45;protos</text>
52
- </g>
53
- <!-- 0&#45;&gt;5 -->
54
- <g id="edge6" class="edge">
55
- <title>0&#45;&gt;5</title>
56
- <path fill="none" stroke="black" d="M165.88,-359.82C135.16,-335.73 86,-288.78 86,-235 86,-235 86,-235 86,-161 86,-120.55 78.76,-102.78 105,-72 118.09,-56.64 136.18,-45.72 154.93,-37.95"/>
57
- <polygon fill="black" stroke="black" points="156.39,-41.14 164.46,-34.27 153.87,-34.6 156.39,-41.14"/>
27
+ <path fill="none" stroke="black" d="M141.25,-431.97C173.1,-422.06 213.42,-409.51 246.83,-399.12"/>
28
+ <polygon fill="black" stroke="black" points="247.99,-402.42 256.5,-396.11 245.91,-395.74 247.99,-402.42"/>
58
29
  </g>
59
30
  <!-- 6 -->
60
31
  <g id="node5" class="node">
61
32
  <title>6</title>
62
- <polygon fill="none" stroke="black" points="307.5,-180 170.5,-180 170.5,-144 307.5,-144 307.5,-180"/>
63
- <text text-anchor="middle" x="239" y="-158.3" font-family="Times,serif" font-size="14.00">temporal&#45;sdk&#45;core&#45;api</text>
33
+ <polygon fill="none" stroke="black" points="401,-36 246,-36 246,0 401,0 401,-36"/>
34
+ <text text-anchor="middle" x="323.5" y="-14.3" font-family="Times,serif" font-size="14.00">temporal&#45;sdk&#45;core&#45;protos</text>
64
35
  </g>
65
36
  <!-- 0&#45;&gt;6 -->
66
- <g id="edge5" class="edge">
37
+ <g id="edge3" class="edge">
67
38
  <title>0&#45;&gt;6</title>
68
- <path fill="none" stroke="black" d="M193.8,-359.93C197.8,-342.01 204.29,-313.01 210,-288 217.68,-254.36 226.68,-215.68 232.6,-190.36"/>
69
- <polygon fill="black" stroke="black" points="236.06,-190.92 234.93,-180.38 229.24,-189.32 236.06,-190.92"/>
39
+ <path fill="none" stroke="black" d="M78.81,-431.91C67.71,-405.62 48.5,-353.45 48.5,-307 48.5,-307 48.5,-307 48.5,-161 48.5,-75.33 155.16,-41.29 235.63,-27.8"/>
40
+ <polygon fill="black" stroke="black" points="236.47,-31.21 245.8,-26.18 235.37,-24.3 236.47,-31.21"/>
70
41
  </g>
71
42
  <!-- 7 -->
72
43
  <g id="node6" class="node">
73
44
  <title>7</title>
74
- <polygon fill="none" stroke="black" points="412.5,-252 323.5,-252 323.5,-216 412.5,-216 412.5,-252"/>
75
- <text text-anchor="middle" x="368" y="-230.3" font-family="Times,serif" font-size="14.00">temporal&#45;sdk</text>
45
+ <polygon fill="none" stroke="black" points="266,-180 129,-180 129,-144 266,-144 266,-180"/>
46
+ <text text-anchor="middle" x="197.5" y="-158.3" font-family="Times,serif" font-size="14.00">temporal&#45;sdk&#45;core&#45;api</text>
76
47
  </g>
77
48
  <!-- 0&#45;&gt;7 -->
78
- <g id="edge4" class="edge">
49
+ <g id="edge2" class="edge">
79
50
  <title>0&#45;&gt;7</title>
80
- <path fill="none" stroke="blue" d="M224.19,-359.83C242.9,-350.78 265.76,-338.54 284,-324 307.09,-305.6 328.26,-279.21 343.85,-259.94"/>
81
- <polygon fill="blue" stroke="blue" points="346.58,-262.13 350.18,-252.17 341.15,-257.71 346.58,-262.13"/>
51
+ <path fill="none" stroke="black" d="M85.71,-431.86C84.92,-401.65 85.97,-337.48 105.5,-288 120.88,-249.04 151.5,-211.31 173.18,-187.68"/>
52
+ <polygon fill="black" stroke="black" points="175.88,-189.92 180.16,-180.23 170.77,-185.14 175.88,-189.92"/>
53
+ </g>
54
+ <!-- 2 -->
55
+ <g id="node3" class="node">
56
+ <title>2</title>
57
+ <polygon fill="none" stroke="black" points="172.5,-324 114.5,-324 114.5,-288 172.5,-288 172.5,-324"/>
58
+ <text text-anchor="middle" x="143.5" y="-302.3" font-family="Times,serif" font-size="14.00">rustfsm</text>
59
+ </g>
60
+ <!-- 1&#45;&gt;2 -->
61
+ <g id="edge4" class="edge">
62
+ <title>1&#45;&gt;2</title>
63
+ <path fill="none" stroke="black" d="M270.4,-359.88C243.41,-348.63 208.34,-334.02 181.91,-323"/>
64
+ <polygon fill="black" stroke="black" points="183.17,-319.74 172.59,-319.12 180.47,-326.2 183.17,-319.74"/>
65
+ </g>
66
+ <!-- 5 -->
67
+ <g id="node4" class="node">
68
+ <title>5</title>
69
+ <polygon fill="none" stroke="black" points="412.5,-108 312.5,-108 312.5,-72 412.5,-72 412.5,-108"/>
70
+ <text text-anchor="middle" x="362.5" y="-86.3" font-family="Times,serif" font-size="14.00">temporal&#45;client</text>
71
+ </g>
72
+ <!-- 1&#45;&gt;5 -->
73
+ <g id="edge5" class="edge">
74
+ <title>1&#45;&gt;5</title>
75
+ <path fill="none" stroke="black" d="M369.63,-361.71C391.38,-353.54 414.82,-341.45 431.5,-324 455.23,-299.18 453.17,-285.75 459.5,-252 462.45,-236.27 464.68,-231.14 459.5,-216 445.69,-175.67 412.97,-138.29 389.35,-115.12"/>
76
+ <polygon fill="black" stroke="black" points="391.67,-112.5 382.03,-108.11 386.83,-117.55 391.67,-112.5"/>
77
+ </g>
78
+ <!-- 1&#45;&gt;6 -->
79
+ <g id="edge8" class="edge">
80
+ <title>1&#45;&gt;6</title>
81
+ <path fill="none" stroke="black" d="M369.7,-363.34C430.3,-345.24 516.5,-306.87 516.5,-235 516.5,-235 516.5,-235 516.5,-161 516.5,-98.28 449.55,-60.18 394.51,-39.46"/>
82
+ <polygon fill="black" stroke="black" points="395.69,-36.16 385.1,-36.04 393.3,-42.74 395.69,-36.16"/>
83
+ </g>
84
+ <!-- 1&#45;&gt;7 -->
85
+ <g id="edge7" class="edge">
86
+ <title>1&#45;&gt;7</title>
87
+ <path fill="none" stroke="black" d="M264.03,-359.96C247.39,-351.64 230.2,-339.91 219.5,-324 192.37,-283.65 191.8,-224.66 194.32,-190.41"/>
88
+ <polygon fill="black" stroke="black" points="197.83,-190.49 195.22,-180.22 190.86,-189.87 197.83,-190.49"/>
82
89
  </g>
83
90
  <!-- 8 -->
84
91
  <g id="node7" class="node">
85
92
  <title>8</title>
86
- <polygon fill="none" stroke="black" points="283.5,-324 218.5,-324 218.5,-288 283.5,-288 283.5,-324"/>
87
- <text text-anchor="middle" x="251" y="-302.3" font-family="Times,serif" font-size="14.00">test_utils</text>
93
+ <polygon fill="none" stroke="black" points="450,-252 361,-252 361,-216 450,-216 450,-252"/>
94
+ <text text-anchor="middle" x="405.5" y="-230.3" font-family="Times,serif" font-size="14.00">temporal&#45;sdk</text>
88
95
  </g>
89
- <!-- 0&#45;&gt;8 -->
90
- <g id="edge7" class="edge">
91
- <title>0&#45;&gt;8</title>
92
- <path fill="none" stroke="blue" d="M199.16,-359.7C205.68,-351.22 214.51,-340.86 223.1,-331.58"/>
93
- <polygon fill="blue" stroke="blue" points="225.85,-333.77 230.2,-324.1 220.78,-328.95 225.85,-333.77"/>
96
+ <!-- 1&#45;&gt;8 -->
97
+ <g id="edge6" class="edge">
98
+ <title>1&#45;&gt;8</title>
99
+ <path fill="none" stroke="blue" d="M354.05,-359.78C369.82,-351.61 386.07,-340.02 395.5,-324 406.38,-305.52 405.76,-280.93 404.34,-262.27"/>
100
+ <polygon fill="blue" stroke="blue" points="407.81,-261.75 403.49,-252.07 400.83,-262.32 407.81,-261.75"/>
94
101
  </g>
95
- <!-- 4&#45;&gt;5 -->
96
- <g id="edge8" class="edge">
97
- <title>4&#45;&gt;5</title>
98
- <path fill="none" stroke="black" d="M183.28,-71.7C192.92,-63.05 204.73,-52.45 215.23,-43.03"/>
99
- <polygon fill="black" stroke="black" points="217.84,-45.39 222.94,-36.1 213.16,-40.18 217.84,-45.39"/>
102
+ <!-- 9 -->
103
+ <g id="node8" class="node">
104
+ <title>9</title>
105
+ <polygon fill="none" stroke="black" points="395,-324 228,-324 228,-288 395,-288 395,-324"/>
106
+ <text text-anchor="middle" x="311.5" y="-302.3" font-family="Times,serif" font-size="14.00">temporal&#45;sdk&#45;core&#45;test&#45;utils</text>
100
107
  </g>
101
- <!-- 6&#45;&gt;4 -->
108
+ <!-- 1&#45;&gt;9 -->
102
109
  <g id="edge9" class="edge">
103
- <title>6&#45;&gt;4</title>
104
- <path fill="none" stroke="black" d="M220.46,-143.7C211.2,-135.05 199.84,-124.45 189.74,-115.03"/>
105
- <polygon fill="black" stroke="black" points="192.02,-112.37 182.33,-108.1 187.25,-117.49 192.02,-112.37"/>
110
+ <title>1&#45;&gt;9</title>
111
+ <path fill="none" stroke="blue" d="M305.58,-359.7C304.79,-351.98 304.56,-342.71 304.9,-334.11"/>
112
+ <polygon fill="blue" stroke="blue" points="308.4,-334.32 305.6,-324.1 301.42,-333.84 308.4,-334.32"/>
106
113
  </g>
107
- <!-- 6&#45;&gt;5 -->
114
+ <!-- 5&#45;&gt;6 -->
108
115
  <g id="edge10" class="edge">
109
- <title>6&#45;&gt;5</title>
110
- <path fill="none" stroke="black" d="M239.36,-143.87C239.87,-119.67 240.81,-75.21 241.42,-46.39"/>
111
- <polygon fill="black" stroke="black" points="244.92,-46.26 241.64,-36.19 237.93,-46.11 244.92,-46.26"/>
112
- </g>
113
- <!-- 7&#45;&gt;0 -->
114
- <g id="edge11" class="edge">
115
- <title>7&#45;&gt;0</title>
116
- <path fill="none" stroke="black" d="M363.18,-252.17C352.26,-271.5 328.39,-302.97 302,-324 286.4,-336.43 267.42,-347.19 249.5,-355.7"/>
117
- <polygon fill="black" stroke="black" points="247.88,-352.6 240.25,-359.95 250.8,-358.96 247.88,-352.6"/>
116
+ <title>5&#45;&gt;6</title>
117
+ <path fill="none" stroke="black" d="M352.86,-71.7C348.37,-63.64 342.94,-53.89 337.98,-44.98"/>
118
+ <polygon fill="black" stroke="black" points="340.95,-43.14 333.03,-36.1 334.84,-46.54 340.95,-43.14"/>
118
119
  </g>
119
120
  <!-- 7&#45;&gt;5 -->
120
- <g id="edge13" class="edge">
121
+ <g id="edge11" class="edge">
121
122
  <title>7&#45;&gt;5</title>
122
- <path fill="none" stroke="black" d="M371.05,-215.88C375.69,-184.29 380.99,-116.06 350,-72 340.45,-58.42 326.41,-48.16 311.6,-40.47"/>
123
- <polygon fill="black" stroke="black" points="312.84,-37.19 302.31,-36.01 309.81,-43.5 312.84,-37.19"/>
123
+ <path fill="none" stroke="black" d="M237.86,-143.88C260.52,-134.26 288.97,-122.19 312.97,-112.01"/>
124
+ <polygon fill="black" stroke="black" points="314.43,-115.2 322.27,-108.07 311.69,-108.75 314.43,-115.2"/>
124
125
  </g>
125
126
  <!-- 7&#45;&gt;6 -->
126
127
  <g id="edge12" class="edge">
127
128
  <title>7&#45;&gt;6</title>
128
- <path fill="none" stroke="black" d="M336.44,-215.88C319.34,-206.6 298.02,-195.03 279.68,-185.08"/>
129
- <polygon fill="black" stroke="black" points="281.14,-181.88 270.68,-180.19 277.8,-188.04 281.14,-181.88"/>
129
+ <path fill="none" stroke="black" d="M210.74,-143.85C225.01,-125.62 248.63,-96.14 270.5,-72 279.24,-62.36 289.24,-52.16 298.18,-43.31"/>
130
+ <polygon fill="black" stroke="black" points="300.7,-45.74 305.39,-36.24 295.8,-40.75 300.7,-45.74"/>
130
131
  </g>
131
- <!-- 8&#45;&gt;0 -->
132
- <g id="edge15" class="edge">
133
- <title>8&#45;&gt;0</title>
134
- <path fill="none" stroke="black" d="M241.99,-324.1C235.51,-332.55 226.69,-342.9 218.1,-352.2"/>
135
- <polygon fill="black" stroke="black" points="215.33,-350.03 210.99,-359.7 220.41,-354.85 215.33,-350.03"/>
132
+ <!-- 8&#45;&gt;1 -->
133
+ <g id="edge14" class="edge">
134
+ <title>8&#45;&gt;1</title>
135
+ <path fill="none" stroke="black" d="M416.59,-252.07C423.07,-271.04 426.51,-301.89 413.5,-324 405.57,-337.47 392.82,-347.8 378.95,-355.62"/>
136
+ <polygon fill="black" stroke="black" points="376.99,-352.69 369.71,-360.39 380.2,-358.91 376.99,-352.69"/>
136
137
  </g>
137
138
  <!-- 8&#45;&gt;5 -->
138
- <g id="edge17" class="edge">
139
+ <g id="edge13" class="edge">
139
140
  <title>8&#45;&gt;5</title>
140
- <path fill="none" stroke="black" d="M266.47,-287.62C290.36,-258.6 332,-198.15 317,-144 306.53,-106.2 281.25,-68.36 262.93,-44.38"/>
141
- <polygon fill="black" stroke="black" points="265.45,-41.92 256.54,-36.2 259.94,-46.23 265.45,-41.92"/>
141
+ <path fill="none" stroke="black" d="M400.31,-215.87C392.95,-191.56 379.4,-146.82 370.68,-118.01"/>
142
+ <polygon fill="black" stroke="black" points="373.95,-116.75 367.71,-108.19 367.25,-118.77 373.95,-116.75"/>
142
143
  </g>
143
144
  <!-- 8&#45;&gt;6 -->
144
145
  <g id="edge16" class="edge">
145
146
  <title>8&#45;&gt;6</title>
146
- <path fill="none" stroke="black" d="M249.55,-287.87C247.51,-263.67 243.75,-219.21 241.31,-190.39"/>
147
- <polygon fill="black" stroke="black" points="244.78,-189.86 240.45,-180.19 237.81,-190.45 244.78,-189.86"/>
147
+ <path fill="none" stroke="black" d="M413.59,-215.56C426.78,-184.32 448.83,-117.84 421.5,-72 413.54,-58.64 400.91,-48.45 387.34,-40.75"/>
148
+ <polygon fill="black" stroke="black" points="388.8,-37.56 378.32,-36.04 385.56,-43.77 388.8,-37.56"/>
148
149
  </g>
149
150
  <!-- 8&#45;&gt;7 -->
150
- <g id="edge14" class="edge">
151
+ <g id="edge15" class="edge">
151
152
  <title>8&#45;&gt;7</title>
152
- <path fill="none" stroke="black" d="M279.62,-287.88C294.92,-278.72 313.94,-267.34 330.42,-257.48"/>
153
- <polygon fill="black" stroke="black" points="332.48,-260.33 339.27,-252.19 328.89,-254.32 332.48,-260.33"/>
153
+ <path fill="none" stroke="black" d="M360.88,-217.98C330.78,-207.86 290.71,-194.37 257.79,-183.29"/>
154
+ <polygon fill="black" stroke="black" points="258.86,-179.96 248.26,-180.08 256.62,-186.59 258.86,-179.96"/>
155
+ </g>
156
+ <!-- 9&#45;&gt;1 -->
157
+ <g id="edge19" class="edge">
158
+ <title>9&#45;&gt;1</title>
159
+ <path fill="none" stroke="black" d="M317.4,-324.1C318.2,-331.79 318.44,-341.05 318.1,-349.67"/>
160
+ <polygon fill="black" stroke="black" points="314.61,-349.48 317.42,-359.7 321.59,-349.96 314.61,-349.48"/>
161
+ </g>
162
+ <!-- 9&#45;&gt;5 -->
163
+ <g id="edge17" class="edge">
164
+ <title>9&#45;&gt;5</title>
165
+ <path fill="none" stroke="black" d="M315.59,-287.85C324.43,-250.75 345.39,-162.81 356.04,-118.1"/>
166
+ <polygon fill="black" stroke="black" points="359.48,-118.77 358.39,-108.23 352.67,-117.15 359.48,-118.77"/>
167
+ </g>
168
+ <!-- 9&#45;&gt;6 -->
169
+ <g id="edge21" class="edge">
170
+ <title>9&#45;&gt;6</title>
171
+ <path fill="none" stroke="black" d="M308.43,-287.86C302.03,-249.05 288.97,-151.64 303.5,-72 305.11,-63.2 308.1,-53.95 311.29,-45.7"/>
172
+ <polygon fill="black" stroke="black" points="314.62,-46.79 315.19,-36.21 308.15,-44.12 314.62,-46.79"/>
173
+ </g>
174
+ <!-- 9&#45;&gt;7 -->
175
+ <g id="edge20" class="edge">
176
+ <title>9&#45;&gt;7</title>
177
+ <path fill="none" stroke="black" d="M297.75,-287.87C277.81,-263.03 240.73,-216.85 217.68,-188.14"/>
178
+ <polygon fill="black" stroke="black" points="220.29,-185.8 211.3,-180.19 214.83,-190.18 220.29,-185.8"/>
179
+ </g>
180
+ <!-- 9&#45;&gt;8 -->
181
+ <g id="edge18" class="edge">
182
+ <title>9&#45;&gt;8</title>
183
+ <path fill="none" stroke="black" d="M334.74,-287.7C346.69,-278.8 361.42,-267.82 374.35,-258.2"/>
184
+ <polygon fill="black" stroke="black" points="376.6,-260.88 382.53,-252.1 372.42,-255.27 376.6,-260.88"/>
154
185
  </g>
155
186
  </g>
156
187
  </svg>
@@ -48,17 +48,21 @@ message ScheduleActivityTaskCommandAttributes {
48
48
  temporal.api.taskqueue.v1.TaskQueue task_queue = 4;
49
49
  temporal.api.common.v1.Header header = 5;
50
50
  temporal.api.common.v1.Payloads input = 6;
51
- // Indicates how long the caller is willing to wait for activity completion. Limits how long
52
- // retries will be attempted. Either this or `start_to_close_timeout` must be specified. When
53
- // not specified, defaults to the workflow execution timeout.
51
+ // Indicates how long the caller is willing to wait for activity completion. The "schedule" time
52
+ // is when the activity is initially scheduled, not when the most recent retry is scheduled.
53
+ // Limits how long retries will be attempted. Either this or `start_to_close_timeout` must be
54
+ // specified. When not specified, defaults to the workflow execution timeout.
54
55
  //
55
56
  // (-- api-linter: core::0140::prepositions=disabled
56
57
  // aip.dev/not-precedent: "to" is used to indicate interval. --)
57
58
  google.protobuf.Duration schedule_to_close_timeout = 7 [(gogoproto.stdduration) = true];
58
- // Limits the time an activity task can stay in a task queue before a worker picks it up. This
59
- // timeout is always non retryable, as all a retry would achieve is to put it back into the same
60
- // queue. Defaults to `schedule_to_close_timeout` or workflow execution timeout if that is not
61
- // specified.
59
+ // Limits the time an activity task can stay in a task queue before a worker picks it up. The
60
+ // "schedule" time is when the most recent retry is scheduled. This timeout should usually not
61
+ // be set: it's useful in specific scenarios like worker-specific task queues. This timeout is
62
+ // always non retryable, as all a retry would achieve is to put it back into the same queue.
63
+ // Defaults to `schedule_to_close_timeout` or workflow execution timeout if that is not
64
+ // specified. More info:
65
+ // https://docs.temporal.io/docs/content/what-is-a-schedule-to-start-timeout/
62
66
  //
63
67
  // (-- api-linter: core::0140::prepositions=disabled
64
68
  // aip.dev/not-precedent: "to" is used to indicate interval. --)
@@ -82,3 +82,13 @@ enum SignalExternalWorkflowExecutionFailedCause {
82
82
  SIGNAL_EXTERNAL_WORKFLOW_EXECUTION_FAILED_CAUSE_UNSPECIFIED = 0;
83
83
  SIGNAL_EXTERNAL_WORKFLOW_EXECUTION_FAILED_CAUSE_EXTERNAL_WORKFLOW_EXECUTION_NOT_FOUND = 1;
84
84
  }
85
+
86
+ enum ResourceExhaustedCause {
87
+ RESOURCE_EXHAUSTED_CAUSE_UNSPECIFIED = 0;
88
+ // Caller exceeds request per second limit.
89
+ RESOURCE_EXHAUSTED_CAUSE_RPS_LIMIT = 1;
90
+ // Caller exceeds max concurrent request limit.
91
+ RESOURCE_EXHAUSTED_CAUSE_CONCURRENT_LIMIT = 2;
92
+ // System overloaded.
93
+ RESOURCE_EXHAUSTED_CAUSE_SYSTEM_OVERLOADED = 3;
94
+ }
@@ -36,7 +36,6 @@ enum NamespaceState {
36
36
  NAMESPACE_STATE_REGISTERED = 1;
37
37
  NAMESPACE_STATE_DEPRECATED = 2;
38
38
  NAMESPACE_STATE_DELETED = 3;
39
- NAMESPACE_STATE_HANDOVER = 4;
40
39
  }
41
40
 
42
41
  enum ArchivalState {
@@ -44,3 +43,9 @@ enum ArchivalState {
44
43
  ARCHIVAL_STATE_DISABLED = 1;
45
44
  ARCHIVAL_STATE_ENABLED = 2;
46
45
  }
46
+
47
+ enum ReplicationState {
48
+ REPLICATION_STATE_UNSPECIFIED = 0;
49
+ REPLICATION_STATE_NORMAL = 1;
50
+ REPLICATION_STATE_HANDOVER = 2;
51
+ }
@@ -87,6 +87,12 @@ enum PendingActivityState {
87
87
  PENDING_ACTIVITY_STATE_CANCEL_REQUESTED = 3;
88
88
  }
89
89
 
90
+ enum PendingWorkflowTaskState {
91
+ PENDING_WORKFLOW_TASK_STATE_UNSPECIFIED = 0;
92
+ PENDING_WORKFLOW_TASK_STATE_SCHEDULED = 1;
93
+ PENDING_WORKFLOW_TASK_STATE_STARTED = 2;
94
+ }
95
+
90
96
  enum HistoryEventFilterType {
91
97
  HISTORY_EVENT_FILTER_TYPE_UNSPECIFIED = 0;
92
98
  HISTORY_EVENT_FILTER_TYPE_ALL_EVENT = 1;
@@ -33,6 +33,8 @@ option java_outer_classname = "MessageProto";
33
33
  option ruby_package = "Temporal::Api::ErrorDetails::V1";
34
34
  option csharp_namespace = "Temporal.Api.ErrorDetails.V1";
35
35
 
36
+ import "temporal/api/enums/v1/failed_cause.proto";
37
+
36
38
  message NotFoundFailure {
37
39
  string current_cluster = 1;
38
40
  string active_cluster = 2;
@@ -72,3 +74,7 @@ message QueryFailedFailure {
72
74
  message PermissionDeniedFailure {
73
75
  string reason = 1;
74
76
  }
77
+
78
+ message ResourceExhaustedFailure {
79
+ temporal.api.enums.v1.ResourceExhaustedCause cause = 1;
80
+ }
@@ -81,7 +81,8 @@ message WorkflowExecutionStartedEventAttributes {
81
81
  google.protobuf.Timestamp workflow_execution_expiration_time = 19 [(gogoproto.stdtime) = true];
82
82
  // If this workflow runs on a cron schedule, it will appear here
83
83
  string cron_schedule = 20;
84
- // TODO: What is this? Appears unused.
84
+ // For a cron workflow, this contains the amount of time between when this iteration of
85
+ // the cron workflow was scheduled and when it should run next per its cron_schedule.
85
86
  google.protobuf.Duration first_workflow_task_backoff = 21 [(gogoproto.stdduration) = true];
86
87
  temporal.api.common.v1.Memo memo = 22;
87
88
  temporal.api.common.v1.SearchAttributes search_attributes = 23;