@temporalio/core-bridge 0.16.4 → 0.18.0

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 (170) hide show
  1. package/Cargo.lock +339 -226
  2. package/Cargo.toml +7 -3
  3. package/common.js +50 -0
  4. package/index.d.ts +7 -0
  5. package/index.js +12 -0
  6. package/package.json +7 -4
  7. package/releases/aarch64-apple-darwin/index.node +0 -0
  8. package/releases/aarch64-unknown-linux-gnu/index.node +0 -0
  9. package/{index.node → releases/index.node} +0 -0
  10. package/releases/x86_64-apple-darwin/index.node +0 -0
  11. package/releases/x86_64-pc-windows-msvc/index.node +0 -0
  12. package/releases/x86_64-unknown-linux-gnu/index.node +0 -0
  13. package/scripts/build.js +10 -50
  14. package/sdk-core/.buildkite/docker/Dockerfile +1 -1
  15. package/sdk-core/.buildkite/docker/docker-compose.yaml +2 -2
  16. package/sdk-core/.buildkite/pipeline.yml +2 -0
  17. package/sdk-core/Cargo.toml +1 -88
  18. package/sdk-core/README.md +30 -6
  19. package/sdk-core/bridge-ffi/Cargo.toml +24 -0
  20. package/sdk-core/bridge-ffi/LICENSE.txt +23 -0
  21. package/sdk-core/bridge-ffi/build.rs +25 -0
  22. package/sdk-core/bridge-ffi/include/sdk-core-bridge.h +216 -0
  23. package/sdk-core/bridge-ffi/src/lib.rs +829 -0
  24. package/sdk-core/bridge-ffi/src/wrappers.rs +193 -0
  25. package/sdk-core/client/Cargo.toml +32 -0
  26. package/sdk-core/{src/pollers/gateway.rs → client/src/lib.rs} +101 -195
  27. package/sdk-core/client/src/metrics.rs +89 -0
  28. package/sdk-core/client/src/mocks.rs +167 -0
  29. package/sdk-core/{src/pollers → client/src}/retry.rs +172 -14
  30. package/sdk-core/core/Cargo.toml +96 -0
  31. package/sdk-core/{src → core/src}/core_tests/activity_tasks.rs +193 -37
  32. package/sdk-core/{src → core/src}/core_tests/child_workflows.rs +14 -14
  33. package/sdk-core/{src → core/src}/core_tests/determinism.rs +8 -8
  34. package/sdk-core/core/src/core_tests/local_activities.rs +328 -0
  35. package/sdk-core/{src → core/src}/core_tests/mod.rs +6 -9
  36. package/sdk-core/{src → core/src}/core_tests/queries.rs +54 -54
  37. package/sdk-core/{src → core/src}/core_tests/replay_flag.rs +8 -12
  38. package/sdk-core/{src → core/src}/core_tests/workers.rs +120 -33
  39. package/sdk-core/{src → core/src}/core_tests/workflow_cancels.rs +16 -26
  40. package/sdk-core/{src → core/src}/core_tests/workflow_tasks.rs +280 -292
  41. package/sdk-core/core/src/lib.rs +374 -0
  42. package/sdk-core/{src → core/src}/log_export.rs +3 -27
  43. package/sdk-core/core/src/pending_activations.rs +162 -0
  44. package/sdk-core/{src → core/src}/pollers/mod.rs +4 -22
  45. package/sdk-core/{src → core/src}/pollers/poll_buffer.rs +1 -1
  46. package/sdk-core/core/src/protosext/mod.rs +396 -0
  47. package/sdk-core/core/src/replay/mod.rs +210 -0
  48. package/sdk-core/core/src/retry_logic.rs +144 -0
  49. package/sdk-core/{src → core/src}/telemetry/metrics.rs +3 -58
  50. package/sdk-core/{src → core/src}/telemetry/mod.rs +8 -8
  51. package/sdk-core/{src → core/src}/telemetry/prometheus_server.rs +0 -0
  52. package/sdk-core/{src → core/src}/test_help/mod.rs +35 -83
  53. package/sdk-core/{src → core/src}/worker/activities/activity_heartbeat_manager.rs +95 -42
  54. package/sdk-core/core/src/worker/activities/local_activities.rs +973 -0
  55. package/sdk-core/{src → core/src}/worker/activities.rs +52 -33
  56. package/sdk-core/{src → core/src}/worker/dispatcher.rs +8 -6
  57. package/sdk-core/{src → core/src}/worker/mod.rs +347 -221
  58. package/sdk-core/core/src/worker/wft_delivery.rs +81 -0
  59. package/sdk-core/{src → core/src}/workflow/bridge.rs +5 -2
  60. package/sdk-core/{src → core/src}/workflow/driven_workflow.rs +17 -7
  61. package/sdk-core/{src → core/src}/workflow/history_update.rs +33 -7
  62. package/sdk-core/{src → core/src/workflow}/machines/activity_state_machine.rs +26 -26
  63. package/sdk-core/{src → core/src/workflow}/machines/cancel_external_state_machine.rs +8 -11
  64. package/sdk-core/{src → core/src/workflow}/machines/cancel_workflow_state_machine.rs +19 -21
  65. package/sdk-core/{src → core/src/workflow}/machines/child_workflow_state_machine.rs +20 -31
  66. package/sdk-core/{src → core/src/workflow}/machines/complete_workflow_state_machine.rs +3 -5
  67. package/sdk-core/{src → core/src/workflow}/machines/continue_as_new_workflow_state_machine.rs +18 -18
  68. package/sdk-core/{src → core/src/workflow}/machines/fail_workflow_state_machine.rs +5 -6
  69. package/sdk-core/core/src/workflow/machines/local_activity_state_machine.rs +1451 -0
  70. package/sdk-core/{src → core/src/workflow}/machines/mod.rs +54 -107
  71. package/sdk-core/{src → core/src/workflow}/machines/mutable_side_effect_state_machine.rs +0 -0
  72. package/sdk-core/{src → core/src/workflow}/machines/patch_state_machine.rs +29 -30
  73. package/sdk-core/{src → core/src/workflow}/machines/side_effect_state_machine.rs +0 -0
  74. package/sdk-core/{src → core/src/workflow}/machines/signal_external_state_machine.rs +17 -19
  75. package/sdk-core/{src → core/src/workflow}/machines/timer_state_machine.rs +20 -21
  76. package/sdk-core/{src → core/src/workflow}/machines/transition_coverage.rs +5 -2
  77. package/sdk-core/{src → core/src/workflow}/machines/upsert_search_attributes_state_machine.rs +0 -0
  78. package/sdk-core/core/src/workflow/machines/workflow_machines/local_acts.rs +96 -0
  79. package/sdk-core/{src → core/src/workflow}/machines/workflow_machines.rs +357 -171
  80. package/sdk-core/{src → core/src/workflow}/machines/workflow_task_state_machine.rs +1 -1
  81. package/sdk-core/{src → core/src}/workflow/mod.rs +200 -39
  82. package/sdk-core/{src → core/src}/workflow/workflow_tasks/cache_manager.rs +0 -0
  83. package/sdk-core/{src → core/src}/workflow/workflow_tasks/concurrency_manager.rs +38 -5
  84. package/sdk-core/{src → core/src}/workflow/workflow_tasks/mod.rs +317 -103
  85. package/sdk-core/{test_utils → core-api}/Cargo.toml +10 -7
  86. package/sdk-core/{src → core-api/src}/errors.rs +42 -92
  87. package/sdk-core/core-api/src/lib.rs +158 -0
  88. package/sdk-core/{src/worker/config.rs → core-api/src/worker.rs} +18 -23
  89. package/sdk-core/etc/deps.svg +156 -0
  90. package/sdk-core/fsm/rustfsm_procmacro/src/lib.rs +5 -5
  91. package/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.stderr +3 -5
  92. package/sdk-core/fsm/rustfsm_trait/src/lib.rs +7 -1
  93. package/sdk-core/histories/fail_wf_task.bin +0 -0
  94. package/sdk-core/histories/timer_workflow_history.bin +0 -0
  95. package/sdk-core/protos/api_upstream/temporal/api/command/v1/message.proto +44 -13
  96. package/sdk-core/protos/api_upstream/temporal/api/common/v1/message.proto +19 -1
  97. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/common.proto +1 -1
  98. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +9 -0
  99. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/namespace.proto +1 -0
  100. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/reset.proto +1 -0
  101. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/task_queue.proto +13 -0
  102. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/workflow.proto +14 -7
  103. package/sdk-core/protos/api_upstream/temporal/api/history/v1/message.proto +176 -18
  104. package/sdk-core/protos/api_upstream/temporal/api/namespace/v1/message.proto +6 -0
  105. package/sdk-core/protos/api_upstream/temporal/api/query/v1/message.proto +11 -0
  106. package/sdk-core/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +3 -0
  107. package/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +156 -7
  108. package/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +135 -104
  109. package/sdk-core/protos/local/temporal/sdk/core/activity_result/activity_result.proto +78 -0
  110. package/sdk-core/protos/local/temporal/sdk/core/activity_task/activity_task.proto +78 -0
  111. package/sdk-core/protos/local/temporal/sdk/core/bridge/bridge.proto +205 -0
  112. package/sdk-core/protos/local/temporal/sdk/core/bridge/service.proto +61 -0
  113. package/sdk-core/protos/local/{child_workflow.proto → temporal/sdk/core/child_workflow/child_workflow.proto} +1 -1
  114. package/sdk-core/protos/local/{common.proto → temporal/sdk/core/common/common.proto} +5 -3
  115. package/sdk-core/protos/local/{core_interface.proto → temporal/sdk/core/core_interface.proto} +10 -10
  116. package/sdk-core/protos/local/temporal/sdk/core/external_data/external_data.proto +30 -0
  117. package/sdk-core/protos/local/{workflow_activation.proto → temporal/sdk/core/workflow_activation/workflow_activation.proto} +35 -11
  118. package/sdk-core/protos/local/{workflow_commands.proto → temporal/sdk/core/workflow_commands/workflow_commands.proto} +55 -4
  119. package/sdk-core/protos/local/{workflow_completion.proto → temporal/sdk/core/workflow_completion/workflow_completion.proto} +3 -3
  120. package/sdk-core/sdk/Cargo.toml +32 -0
  121. package/sdk-core/{src/prototype_rust_sdk → sdk/src}/conversions.rs +0 -0
  122. package/sdk-core/sdk/src/lib.rs +699 -0
  123. package/sdk-core/sdk/src/payload_converter.rs +11 -0
  124. package/sdk-core/sdk/src/workflow_context/options.rs +180 -0
  125. package/sdk-core/{src/prototype_rust_sdk → sdk/src}/workflow_context.rs +201 -124
  126. package/sdk-core/{src/prototype_rust_sdk → sdk/src}/workflow_future.rs +63 -30
  127. package/sdk-core/sdk-core-protos/Cargo.toml +10 -0
  128. package/sdk-core/sdk-core-protos/build.rs +28 -6
  129. package/sdk-core/sdk-core-protos/src/constants.rs +7 -0
  130. package/sdk-core/{src/test_help → sdk-core-protos/src}/history_builder.rs +134 -49
  131. package/sdk-core/sdk-core-protos/src/history_info.rs +216 -0
  132. package/sdk-core/sdk-core-protos/src/lib.rs +601 -168
  133. package/sdk-core/sdk-core-protos/src/task_token.rs +38 -0
  134. package/sdk-core/sdk-core-protos/src/utilities.rs +14 -0
  135. package/sdk-core/test-utils/Cargo.toml +32 -0
  136. package/sdk-core/{src/test_help → test-utils/src}/canned_histories.rs +59 -78
  137. package/sdk-core/test-utils/src/histfetch.rs +28 -0
  138. package/sdk-core/{test_utils → test-utils}/src/lib.rs +131 -68
  139. package/sdk-core/tests/integ_tests/client_tests.rs +1 -1
  140. package/sdk-core/tests/integ_tests/heartbeat_tests.rs +11 -7
  141. package/sdk-core/tests/integ_tests/polling_tests.rs +12 -11
  142. package/sdk-core/tests/integ_tests/queries_tests.rs +82 -78
  143. package/sdk-core/tests/integ_tests/workflow_tests/activities.rs +91 -71
  144. package/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +3 -4
  145. package/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +2 -4
  146. package/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +4 -6
  147. package/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +4 -6
  148. package/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +3 -4
  149. package/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +496 -0
  150. package/sdk-core/tests/integ_tests/workflow_tests/patches.rs +5 -8
  151. package/sdk-core/tests/integ_tests/workflow_tests/replay.rs +125 -0
  152. package/sdk-core/tests/integ_tests/workflow_tests/signals.rs +7 -13
  153. package/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +33 -5
  154. package/sdk-core/tests/integ_tests/workflow_tests/timers.rs +12 -16
  155. package/sdk-core/tests/integ_tests/workflow_tests.rs +85 -82
  156. package/sdk-core/tests/load_tests.rs +6 -6
  157. package/sdk-core/tests/main.rs +2 -2
  158. package/src/conversions.rs +24 -21
  159. package/src/errors.rs +8 -0
  160. package/src/lib.rs +323 -211
  161. package/sdk-core/protos/local/activity_result.proto +0 -46
  162. package/sdk-core/protos/local/activity_task.proto +0 -66
  163. package/sdk-core/src/core_tests/retry.rs +0 -147
  164. package/sdk-core/src/lib.rs +0 -403
  165. package/sdk-core/src/machines/local_activity_state_machine.rs +0 -117
  166. package/sdk-core/src/pending_activations.rs +0 -249
  167. package/sdk-core/src/protosext/mod.rs +0 -160
  168. package/sdk-core/src/prototype_rust_sdk.rs +0 -412
  169. package/sdk-core/src/task_token.rs +0 -20
  170. package/sdk-core/src/test_help/history_info.rs +0 -157
@@ -0,0 +1,81 @@
1
+ use crate::{pollers, pollers::BoxedWFPoller};
2
+ use crossbeam::queue::SegQueue;
3
+ use temporal_sdk_core_protos::temporal::api::workflowservice::v1::PollWorkflowTaskQueueResponse;
4
+ use tokio::sync::Notify;
5
+
6
+ /// Workflow tasks typically come from polling, but may also come as a response to task completion.
7
+ /// This struct allows fetching WFTs to be centralized while prioritizing tasks from completes.
8
+ pub(crate) struct WFTSource {
9
+ from_completions: SegQueue<PollWorkflowTaskQueueResponse>,
10
+ poll_buffer: BoxedWFPoller,
11
+ task_taken_notifier: Notify,
12
+ }
13
+
14
+ impl WFTSource {
15
+ pub fn new(poller: BoxedWFPoller) -> Self {
16
+ Self {
17
+ from_completions: SegQueue::new(),
18
+ poll_buffer: poller,
19
+ task_taken_notifier: Notify::new(),
20
+ }
21
+ }
22
+
23
+ /// Returns the next available WFT if one is already stored from a completion, otherwise
24
+ /// forwards to the poller.
25
+ pub async fn next_wft(&self) -> Option<pollers::Result<PollWorkflowTaskQueueResponse>> {
26
+ if let Some(wft) = self.from_completions.pop() {
27
+ self.task_taken_notifier.notify_one();
28
+ return Some(Ok(wft));
29
+ }
30
+ self.poll_buffer.poll().await
31
+ }
32
+
33
+ /// Add a WFT received from the completion of another WFT
34
+ pub fn add_wft_from_completion(&self, wft: PollWorkflowTaskQueueResponse) {
35
+ self.from_completions.push(wft);
36
+ }
37
+
38
+ /// Notifies the pollers to stop polling
39
+ pub fn stop_pollers(&self) {
40
+ self.poll_buffer.notify_shutdown();
41
+ }
42
+
43
+ /// Returns true if there are tasks from completion buffered which need to be handled
44
+ pub fn has_tasks_from_complete(&self) -> bool {
45
+ !self.from_completions.is_empty()
46
+ }
47
+
48
+ /// Returns a future which resolves when all tasks from completions have been taken
49
+ pub async fn wait_for_tasks_from_complete_to_drain(&self) {
50
+ while !self.from_completions.is_empty() {
51
+ self.task_taken_notifier.notified().await;
52
+ }
53
+ }
54
+
55
+ /// Wait for poll shutdown to complete
56
+ pub async fn shutdown(self) {
57
+ self.poll_buffer.shutdown_box().await;
58
+ }
59
+ }
60
+
61
+ #[cfg(test)]
62
+ mod tests {
63
+ use super::*;
64
+ use crate::test_help::mock_poller;
65
+
66
+ #[tokio::test]
67
+ async fn drains_from_completes_on_shutdown() {
68
+ let mp = mock_poller();
69
+ let wftsrc = WFTSource::new(Box::new(mp));
70
+ let fake_wft = PollWorkflowTaskQueueResponse {
71
+ started_event_id: 1,
72
+ ..Default::default()
73
+ };
74
+ wftsrc.add_wft_from_completion(fake_wft);
75
+ let fake_wft = PollWorkflowTaskQueueResponse {
76
+ started_event_id: 2,
77
+ ..Default::default()
78
+ };
79
+ wftsrc.add_wft_from_completion(fake_wft);
80
+ }
81
+ }
@@ -1,4 +1,7 @@
1
- use crate::{machines::WFCommand, workflow::WorkflowFetcher};
1
+ use crate::{
2
+ telemetry::VecDisplayer,
3
+ workflow::{WFCommand, WorkflowFetcher},
4
+ };
2
5
  use std::sync::mpsc::{self, Receiver, Sender};
3
6
 
4
7
  /// The [DrivenWorkflow] trait expects to be called to make progress, but the [CoreSDKService]
@@ -28,7 +31,7 @@ impl WorkflowFetcher for WorkflowBridge {
28
31
  let in_cmds = self.incoming_commands.try_recv();
29
32
 
30
33
  let in_cmds = in_cmds.unwrap_or_else(|_| vec![WFCommand::NoCommandsFromLang]);
31
- debug!(in_cmds = ?in_cmds, "wf bridge iteration fetch");
34
+ debug!(in_cmds = %in_cmds.display(), "wf bridge iteration fetch");
32
35
  in_cmds
33
36
  }
34
37
  }
@@ -1,8 +1,8 @@
1
- use crate::machines::WFCommand;
1
+ use crate::workflow::WFCommand;
2
2
  use std::collections::VecDeque;
3
3
  use temporal_sdk_core_protos::{
4
4
  coresdk::workflow_activation::{
5
- wf_activation_job, CancelWorkflow, SignalWorkflow, WfActivationJob,
5
+ workflow_activation_job, CancelWorkflow, SignalWorkflow, WorkflowActivationJob,
6
6
  },
7
7
  temporal::api::history::v1::WorkflowExecutionStartedEventAttributes,
8
8
  };
@@ -13,7 +13,7 @@ pub struct DrivenWorkflow {
13
13
  started_attrs: Option<WorkflowExecutionStartedEventAttributes>,
14
14
  fetcher: Box<dyn WorkflowFetcher>,
15
15
  /// Outgoing activation jobs that need to be sent to the lang sdk
16
- outgoing_wf_activation_jobs: VecDeque<wf_activation_job::Variant>,
16
+ outgoing_wf_activation_jobs: VecDeque<workflow_activation_job::Variant>,
17
17
  }
18
18
 
19
19
  impl<WF> From<Box<WF>> for DrivenWorkflow
@@ -36,13 +36,23 @@ impl DrivenWorkflow {
36
36
  self.started_attrs = Some(attribs);
37
37
  }
38
38
 
39
+ /// Return the attributes from the workflow execution started event if this workflow has started
40
+ pub fn get_started_attrs(&self) -> Option<&WorkflowExecutionStartedEventAttributes> {
41
+ self.started_attrs.as_ref()
42
+ }
43
+
39
44
  /// Enqueue a new job to be sent to the driven workflow
40
- pub fn send_job(&mut self, job: wf_activation_job::Variant) {
45
+ pub fn send_job(&mut self, job: workflow_activation_job::Variant) {
41
46
  self.outgoing_wf_activation_jobs.push_back(job);
42
47
  }
43
48
 
49
+ /// Check if there are pending jobs
50
+ pub fn has_pending_jobs(&self) -> bool {
51
+ !self.outgoing_wf_activation_jobs.is_empty()
52
+ }
53
+
44
54
  /// Drain all pending jobs, so that they may be sent to the driven workflow
45
- pub fn drain_jobs(&mut self) -> Vec<WfActivationJob> {
55
+ pub fn drain_jobs(&mut self) -> Vec<WorkflowActivationJob> {
46
56
  self.outgoing_wf_activation_jobs
47
57
  .drain(..)
48
58
  .map(Into::into)
@@ -51,12 +61,12 @@ impl DrivenWorkflow {
51
61
 
52
62
  /// Signal the workflow
53
63
  pub fn signal(&mut self, signal: SignalWorkflow) {
54
- self.send_job(wf_activation_job::Variant::SignalWorkflow(signal));
64
+ self.send_job(workflow_activation_job::Variant::SignalWorkflow(signal));
55
65
  }
56
66
 
57
67
  /// Cancel the workflow
58
68
  pub fn cancel(&mut self, attribs: CancelWorkflow) {
59
- self.send_job(wf_activation_job::Variant::CancelWorkflow(attribs));
69
+ self.send_job(workflow_activation_job::Variant::CancelWorkflow(attribs));
60
70
  }
61
71
  }
62
72
 
@@ -1,4 +1,7 @@
1
- use crate::ServerGatewayApis;
1
+ use crate::{
2
+ replay::{HistoryInfo, TestHistoryBuilder},
3
+ ServerGatewayApis,
4
+ };
2
5
  use futures::{future::BoxFuture, stream, stream::BoxStream, FutureExt, Stream, StreamExt};
3
6
  use std::{
4
7
  collections::VecDeque,
@@ -108,8 +111,14 @@ impl HistoryUpdate {
108
111
  }
109
112
  }
110
113
 
111
- #[cfg(test)]
112
- pub fn new_from_events(events: Vec<HistoryEvent>, previous_wft_started_id: i64) -> Self {
114
+ /// Create an instance of an update directly from events - should only be used for replaying.
115
+ pub fn new_from_events<I: IntoIterator<Item = HistoryEvent>>(
116
+ events: I,
117
+ previous_wft_started_id: i64,
118
+ ) -> Self
119
+ where
120
+ <I as IntoIterator>::IntoIter: Send + 'static,
121
+ {
113
122
  Self {
114
123
  events: stream::iter(events.into_iter().map(Ok)).boxed(),
115
124
  buffered: VecDeque::new(),
@@ -227,10 +236,27 @@ impl HistoryUpdate {
227
236
  }
228
237
  }
229
238
 
239
+ impl From<HistoryInfo> for HistoryUpdate {
240
+ fn from(v: HistoryInfo) -> Self {
241
+ Self::new_from_events(v.events().to_vec(), v.previous_started_event_id())
242
+ }
243
+ }
244
+
245
+ pub trait TestHBExt {
246
+ fn as_history_update(&self) -> HistoryUpdate;
247
+ }
248
+
249
+ impl TestHBExt for TestHistoryBuilder {
250
+ fn as_history_update(&self) -> HistoryUpdate {
251
+ self.get_full_history_info().unwrap().into()
252
+ }
253
+ }
254
+
230
255
  #[cfg(test)]
231
- mod tests {
256
+ pub mod tests {
232
257
  use super::*;
233
- use crate::{pollers::MockServerGatewayApis, test_help::canned_histories};
258
+ use crate::test_help::canned_histories;
259
+ use temporal_client::mocks::mock_gateway;
234
260
 
235
261
  #[tokio::test]
236
262
  async fn consumes_standard_wft_sequence() {
@@ -285,8 +311,8 @@ mod tests {
285
311
  let wft_count = 500;
286
312
  let long_hist = canned_histories::long_sequential_timers(wft_count);
287
313
  let initial_hist = long_hist.get_history_info(10).unwrap();
288
- let prev_started = initial_hist.previous_started_event_id;
289
- let mut mock_gateway = MockServerGatewayApis::new();
314
+ let prev_started = initial_hist.previous_started_event_id();
315
+ let mut mock_gateway = mock_gateway();
290
316
 
291
317
  let mut npt = 2;
292
318
  mock_gateway
@@ -1,6 +1,6 @@
1
1
  #![allow(clippy::large_enum_variant)]
2
2
 
3
- use crate::machines::{
3
+ use super::{
4
4
  workflow_machines::MachineResponse, Cancellable, EventInfo, MachineKind, NewMachineWithCommand,
5
5
  OnEventWrapper, WFMachinesAdapter, WFMachinesError,
6
6
  };
@@ -8,7 +8,7 @@ use rustfsm::{fsm, MachineError, StateMachine, TransitionResult};
8
8
  use std::convert::{TryFrom, TryInto};
9
9
  use temporal_sdk_core_protos::{
10
10
  coresdk::{
11
- activity_result::{self as ar, activity_result, ActivityResult, Cancellation},
11
+ activity_result::{self as ar, activity_resolution, ActivityResolution, Cancellation},
12
12
  common::Payload,
13
13
  workflow_activation::ResolveActivity,
14
14
  workflow_commands::{ActivityCancellationType, ScheduleActivity},
@@ -92,11 +92,11 @@ pub(super) enum ActivityMachineCommand {
92
92
  }
93
93
 
94
94
  /// Creates a new activity state machine and a command to schedule it on the server.
95
- pub(super) fn new_activity(attribs: ScheduleActivity) -> NewMachineWithCommand<ActivityMachine> {
95
+ pub(super) fn new_activity(attribs: ScheduleActivity) -> NewMachineWithCommand {
96
96
  let (activity, add_cmd) = ActivityMachine::new_scheduled(attribs);
97
97
  NewMachineWithCommand {
98
98
  command: add_cmd,
99
- machine: activity,
99
+ machine: activity.into(),
100
100
  }
101
101
  }
102
102
 
@@ -136,8 +136,8 @@ impl ActivityMachine {
136
136
  fn create_cancelation_resolve(&self, details: Option<Payload>) -> ResolveActivity {
137
137
  ResolveActivity {
138
138
  seq: self.shared_state.attrs.seq,
139
- result: Some(ActivityResult {
140
- status: Some(activity_result::Status::Cancelled(Cancellation {
139
+ result: Some(ActivityResolution {
140
+ status: Some(activity_resolution::Status::Cancelled(Cancellation {
141
141
  failure: Some(Failure {
142
142
  message: "Activity cancelled".to_string(),
143
143
  cause: Some(Box::from(Failure {
@@ -243,8 +243,8 @@ impl WFMachinesAdapter for ActivityMachine {
243
243
  ActivityMachineCommand::Complete(result) => {
244
244
  vec![ResolveActivity {
245
245
  seq: self.shared_state.attrs.seq,
246
- result: Some(ActivityResult {
247
- status: Some(activity_result::Status::Completed(ar::Success {
246
+ result: Some(ActivityResolution {
247
+ status: Some(activity_resolution::Status::Completed(ar::Success {
248
248
  result: convert_payloads(event_info, result)?,
249
249
  })),
250
250
  }),
@@ -254,8 +254,8 @@ impl WFMachinesAdapter for ActivityMachine {
254
254
  ActivityMachineCommand::Fail(failure) => {
255
255
  vec![ResolveActivity {
256
256
  seq: self.shared_state.attrs.seq,
257
- result: Some(ActivityResult {
258
- status: Some(activity_result::Status::Failed(ar::Failure {
257
+ result: Some(ActivityResolution {
258
+ status: Some(activity_resolution::Status::Failed(ar::Failure {
259
259
  failure: Some(failure),
260
260
  })),
261
261
  }),
@@ -748,16 +748,16 @@ fn convert_payloads(
748
748
  mod test {
749
749
  use super::*;
750
750
  use crate::{
751
- prototype_rust_sdk::{
752
- ActivityOptions, CancellableFuture, WfContext, WorkflowFunction, WorkflowResult,
753
- },
754
- test_help::{canned_histories, TestHistoryBuilder},
751
+ replay::TestHistoryBuilder, test_help::canned_histories,
755
752
  workflow::managed_wf::ManagedWFFunc,
756
753
  };
757
754
  use rstest::{fixture, rstest};
758
755
  use std::mem::discriminant;
756
+ use temporal_sdk::{
757
+ ActivityOptions, CancellableFuture, WfContext, WorkflowFunction, WorkflowResult,
758
+ };
759
759
  use temporal_sdk_core_protos::coresdk::workflow_activation::{
760
- wf_activation_job, WfActivationJob,
760
+ workflow_activation_job, WorkflowActivationJob,
761
761
  };
762
762
 
763
763
  #[fixture]
@@ -776,7 +776,7 @@ mod test {
776
776
  ManagedWFFunc::new(t, func, vec![])
777
777
  }
778
778
 
779
- async fn activity_wf(mut command_sink: WfContext) -> WorkflowResult<()> {
779
+ async fn activity_wf(command_sink: WfContext) -> WorkflowResult<()> {
780
780
  command_sink.activity(ActivityOptions::default()).await;
781
781
  Ok(().into())
782
782
  }
@@ -789,7 +789,7 @@ mod test {
789
789
  #[tokio::test]
790
790
  async fn single_activity_inc(mut wfm: ManagedWFFunc) {
791
791
  wfm.get_next_activation().await.unwrap();
792
- let commands = wfm.get_server_commands().await.commands;
792
+ let commands = wfm.get_server_commands().commands;
793
793
  assert_eq!(commands.len(), 1);
794
794
  assert_eq!(
795
795
  commands[0].command_type,
@@ -797,7 +797,7 @@ mod test {
797
797
  );
798
798
 
799
799
  wfm.get_next_activation().await.unwrap();
800
- let commands = wfm.get_server_commands().await.commands;
800
+ let commands = wfm.get_server_commands().commands;
801
801
  assert_eq!(commands.len(), 1);
802
802
  assert_eq!(
803
803
  commands[0].command_type,
@@ -814,7 +814,7 @@ mod test {
814
814
  #[tokio::test]
815
815
  async fn single_activity_full(mut wfm: ManagedWFFunc) {
816
816
  wfm.process_all_activations().await.unwrap();
817
- let commands = wfm.get_server_commands().await.commands;
817
+ let commands = wfm.get_server_commands().commands;
818
818
  assert_eq!(commands.len(), 1);
819
819
  assert_eq!(
820
820
  commands[0].command_type,
@@ -825,10 +825,10 @@ mod test {
825
825
 
826
826
  #[tokio::test]
827
827
  async fn immediate_activity_cancelation() {
828
- let func = WorkflowFunction::new(|mut ctx: WfContext| async move {
828
+ let func = WorkflowFunction::new(|ctx: WfContext| async move {
829
829
  let cancel_activity_future = ctx.activity(ActivityOptions::default());
830
830
  // Immediately cancel the activity
831
- cancel_activity_future.cancel(&mut ctx);
831
+ cancel_activity_future.cancel(&ctx);
832
832
  cancel_activity_future.await;
833
833
  Ok(().into())
834
834
  });
@@ -840,14 +840,14 @@ mod test {
840
840
  let mut wfm = ManagedWFFunc::new(t, func, vec![]);
841
841
 
842
842
  let activation = wfm.process_all_activations().await.unwrap();
843
- wfm.get_server_commands().await;
843
+ wfm.get_server_commands();
844
844
  assert_matches!(
845
845
  activation.jobs.as_slice(),
846
- [WfActivationJob {
847
- variant: Some(wf_activation_job::Variant::ResolveActivity(
846
+ [WorkflowActivationJob {
847
+ variant: Some(workflow_activation_job::Variant::ResolveActivity(
848
848
  ResolveActivity {
849
- result: Some(ActivityResult {
850
- status: Some(activity_result::Status::Cancelled(_))
849
+ result: Some(ActivityResolution {
850
+ status: Some(activity_resolution::Status::Cancelled(_))
851
851
  }),
852
852
  ..
853
853
  }
@@ -1,4 +1,4 @@
1
- use crate::machines::{
1
+ use super::{
2
2
  workflow_machines::MachineResponse, Cancellable, EventInfo, MachineKind, NewMachineWithCommand,
3
3
  OnEventWrapper, WFMachinesAdapter, WFMachinesError,
4
4
  };
@@ -58,7 +58,7 @@ pub(super) fn new_external_cancel(
58
58
  seq: u32,
59
59
  workflow_execution: NamespacedWorkflowExecution,
60
60
  only_child: bool,
61
- ) -> NewMachineWithCommand<CancelExternalMachine> {
61
+ ) -> NewMachineWithCommand {
62
62
  let mut s = CancelExternalMachine {
63
63
  state: Created {}.into(),
64
64
  shared_state: SharedState { seq },
@@ -81,7 +81,7 @@ pub(super) fn new_external_cancel(
81
81
  };
82
82
  NewMachineWithCommand {
83
83
  command: cmd,
84
- machine: s,
84
+ machine: s.into(),
85
85
  }
86
86
  }
87
87
 
@@ -230,13 +230,10 @@ impl Cancellable for CancelExternalMachine {}
230
230
  #[cfg(test)]
231
231
  mod tests {
232
232
  use super::*;
233
- use crate::{
234
- prototype_rust_sdk::{WfContext, WorkflowFunction, WorkflowResult},
235
- test_help::TestHistoryBuilder,
236
- workflow::managed_wf::ManagedWFFunc,
237
- };
233
+ use crate::{replay::TestHistoryBuilder, workflow::managed_wf::ManagedWFFunc};
234
+ use temporal_sdk::{WfContext, WorkflowFunction, WorkflowResult};
238
235
 
239
- async fn cancel_sender(mut ctx: WfContext) -> WorkflowResult<()> {
236
+ async fn cancel_sender(ctx: WfContext) -> WorkflowResult<()> {
240
237
  let res = ctx
241
238
  .cancel_external(NamespacedWorkflowExecution {
242
239
  namespace: "some_namespace".to_string(),
@@ -275,14 +272,14 @@ mod tests {
275
272
  let wff = WorkflowFunction::new(cancel_sender);
276
273
  let mut wfm = ManagedWFFunc::new(t, wff, vec![]);
277
274
  wfm.get_next_activation().await.unwrap();
278
- let cmds = wfm.get_server_commands().await.commands;
275
+ let cmds = wfm.get_server_commands().commands;
279
276
  assert_eq!(cmds.len(), 1);
280
277
  assert_eq!(
281
278
  cmds[0].command_type(),
282
279
  CommandType::RequestCancelExternalWorkflowExecution
283
280
  );
284
281
  wfm.get_next_activation().await.unwrap();
285
- let cmds = wfm.get_server_commands().await.commands;
282
+ let cmds = wfm.get_server_commands().commands;
286
283
  assert_eq!(cmds.len(), 1);
287
284
  if fails {
288
285
  assert_eq!(cmds[0].command_type(), CommandType::FailWorkflowExecution);
@@ -1,6 +1,6 @@
1
- use crate::machines::{
2
- Cancellable, EventInfo, HistoryEvent, MachineKind, MachineResponse, NewMachineWithCommand,
3
- OnEventWrapper, WFMachinesAdapter, WFMachinesError,
1
+ use super::{
2
+ workflow_machines::MachineResponse, Cancellable, EventInfo, HistoryEvent, MachineKind,
3
+ NewMachineWithCommand, OnEventWrapper, WFMachinesAdapter, WFMachinesError,
4
4
  };
5
5
  use rustfsm::{fsm, TransitionResult};
6
6
  use std::convert::TryFrom;
@@ -32,9 +32,7 @@ pub(super) enum CancelWorkflowMachineError {}
32
32
  #[derive(Debug, derive_more::Display)]
33
33
  pub(super) enum CancelWorkflowCommand {}
34
34
 
35
- pub(super) fn cancel_workflow(
36
- attribs: CancelWorkflowExecution,
37
- ) -> NewMachineWithCommand<CancelWorkflowMachine> {
35
+ pub(super) fn cancel_workflow(attribs: CancelWorkflowExecution) -> NewMachineWithCommand {
38
36
  let mut machine = CancelWorkflowMachine {
39
37
  state: Created {}.into(),
40
38
  shared_state: (),
@@ -45,7 +43,10 @@ pub(super) fn cancel_workflow(
45
43
  command_type: CommandType::CancelWorkflowExecution as i32,
46
44
  attributes: Some(attribs.into()),
47
45
  };
48
- NewMachineWithCommand { command, machine }
46
+ NewMachineWithCommand {
47
+ command,
48
+ machine: machine.into(),
49
+ }
49
50
  }
50
51
 
51
52
  #[derive(Default, Clone)]
@@ -121,17 +122,14 @@ impl Cancellable for CancelWorkflowMachine {}
121
122
  #[cfg(test)]
122
123
  mod tests {
123
124
  use super::*;
124
- use crate::{
125
- prototype_rust_sdk::{WfContext, WfExitValue, WorkflowFunction, WorkflowResult},
126
- test_help::canned_histories,
127
- workflow::managed_wf::ManagedWFFunc,
128
- };
125
+ use crate::{test_help::canned_histories, workflow::managed_wf::ManagedWFFunc};
129
126
  use std::time::Duration;
127
+ use temporal_sdk::{WfContext, WfExitValue, WorkflowFunction, WorkflowResult};
130
128
  use temporal_sdk_core_protos::coresdk::workflow_activation::{
131
- wf_activation_job, WfActivationJob,
129
+ workflow_activation_job, WorkflowActivationJob,
132
130
  };
133
131
 
134
- async fn wf_with_timer(mut ctx: WfContext) -> WorkflowResult<()> {
132
+ async fn wf_with_timer(ctx: WfContext) -> WorkflowResult<()> {
135
133
  ctx.timer(Duration::from_millis(500)).await;
136
134
  Ok(WfExitValue::Cancelled)
137
135
  }
@@ -142,7 +140,7 @@ mod tests {
142
140
  let t = canned_histories::timer_wf_cancel_req_cancelled("1");
143
141
  let mut wfm = ManagedWFFunc::new(t, func, vec![]);
144
142
  wfm.get_next_activation().await.unwrap();
145
- let commands = wfm.get_server_commands().await.commands;
143
+ let commands = wfm.get_server_commands().commands;
146
144
  assert_eq!(commands.len(), 1);
147
145
  assert_eq!(commands[0].command_type, CommandType::StartTimer as i32);
148
146
 
@@ -150,15 +148,15 @@ mod tests {
150
148
  assert_matches!(
151
149
  act.jobs.as_slice(),
152
150
  [
153
- WfActivationJob {
154
- variant: Some(wf_activation_job::Variant::FireTimer(_)),
151
+ WorkflowActivationJob {
152
+ variant: Some(workflow_activation_job::Variant::FireTimer(_)),
155
153
  },
156
- WfActivationJob {
157
- variant: Some(wf_activation_job::Variant::CancelWorkflow(_)),
154
+ WorkflowActivationJob {
155
+ variant: Some(workflow_activation_job::Variant::CancelWorkflow(_)),
158
156
  }
159
157
  ]
160
158
  );
161
- let commands = wfm.get_server_commands().await.commands;
159
+ let commands = wfm.get_server_commands().commands;
162
160
  assert_eq!(commands.len(), 1);
163
161
  assert_eq!(
164
162
  commands[0].command_type,
@@ -166,7 +164,7 @@ mod tests {
166
164
  );
167
165
 
168
166
  assert!(wfm.get_next_activation().await.unwrap().jobs.is_empty());
169
- let commands = wfm.get_server_commands().await.commands;
167
+ let commands = wfm.get_server_commands().commands;
170
168
  assert_eq!(commands.len(), 0);
171
169
  wfm.shutdown().await.unwrap();
172
170
  }