@temporalio/core-bridge 1.5.2 → 1.7.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 (194) hide show
  1. package/Cargo.lock +304 -112
  2. package/lib/index.d.ts +8 -6
  3. package/lib/index.js.map +1 -1
  4. package/package.json +9 -4
  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 +2 -2
  11. package/sdk-core/.buildkite/docker/docker-compose.yaml +1 -1
  12. package/sdk-core/.buildkite/pipeline.yml +2 -4
  13. package/sdk-core/.cargo/config.toml +5 -2
  14. package/sdk-core/.github/workflows/heavy.yml +29 -0
  15. package/sdk-core/Cargo.toml +1 -1
  16. package/sdk-core/README.md +20 -10
  17. package/sdk-core/client/src/lib.rs +215 -39
  18. package/sdk-core/client/src/metrics.rs +17 -8
  19. package/sdk-core/client/src/raw.rs +4 -4
  20. package/sdk-core/client/src/retry.rs +32 -20
  21. package/sdk-core/core/Cargo.toml +25 -12
  22. package/sdk-core/core/src/abstractions/take_cell.rs +28 -0
  23. package/sdk-core/core/src/abstractions.rs +204 -14
  24. package/sdk-core/core/src/core_tests/activity_tasks.rs +143 -50
  25. package/sdk-core/core/src/core_tests/child_workflows.rs +6 -5
  26. package/sdk-core/core/src/core_tests/determinism.rs +165 -2
  27. package/sdk-core/core/src/core_tests/local_activities.rs +431 -43
  28. package/sdk-core/core/src/core_tests/queries.rs +34 -16
  29. package/sdk-core/core/src/core_tests/workers.rs +8 -5
  30. package/sdk-core/core/src/core_tests/workflow_tasks.rs +588 -55
  31. package/sdk-core/core/src/ephemeral_server/mod.rs +113 -12
  32. package/sdk-core/core/src/internal_flags.rs +155 -0
  33. package/sdk-core/core/src/lib.rs +16 -9
  34. package/sdk-core/core/src/protosext/mod.rs +1 -1
  35. package/sdk-core/core/src/replay/mod.rs +16 -27
  36. package/sdk-core/core/src/telemetry/log_export.rs +1 -1
  37. package/sdk-core/core/src/telemetry/metrics.rs +69 -35
  38. package/sdk-core/core/src/telemetry/mod.rs +60 -21
  39. package/sdk-core/core/src/telemetry/prometheus_server.rs +19 -13
  40. package/sdk-core/core/src/test_help/mod.rs +73 -14
  41. package/sdk-core/core/src/worker/activities/activity_heartbeat_manager.rs +119 -160
  42. package/sdk-core/core/src/worker/activities/activity_task_poller_stream.rs +89 -0
  43. package/sdk-core/core/src/worker/activities/local_activities.rs +379 -129
  44. package/sdk-core/core/src/worker/activities.rs +350 -175
  45. package/sdk-core/core/src/worker/client/mocks.rs +22 -2
  46. package/sdk-core/core/src/worker/client.rs +18 -2
  47. package/sdk-core/core/src/worker/mod.rs +183 -64
  48. package/sdk-core/core/src/worker/workflow/bridge.rs +1 -3
  49. package/sdk-core/core/src/worker/workflow/driven_workflow.rs +3 -5
  50. package/sdk-core/core/src/worker/workflow/history_update.rs +916 -277
  51. package/sdk-core/core/src/worker/workflow/machines/activity_state_machine.rs +216 -183
  52. package/sdk-core/core/src/worker/workflow/machines/cancel_external_state_machine.rs +9 -12
  53. package/sdk-core/core/src/worker/workflow/machines/cancel_workflow_state_machine.rs +7 -9
  54. package/sdk-core/core/src/worker/workflow/machines/child_workflow_state_machine.rs +160 -87
  55. package/sdk-core/core/src/worker/workflow/machines/complete_workflow_state_machine.rs +13 -14
  56. package/sdk-core/core/src/worker/workflow/machines/continue_as_new_workflow_state_machine.rs +7 -9
  57. package/sdk-core/core/src/worker/workflow/machines/fail_workflow_state_machine.rs +14 -17
  58. package/sdk-core/core/src/worker/workflow/machines/local_activity_state_machine.rs +242 -110
  59. package/sdk-core/core/src/worker/workflow/machines/mod.rs +27 -19
  60. package/sdk-core/core/src/worker/workflow/machines/modify_workflow_properties_state_machine.rs +9 -11
  61. package/sdk-core/core/src/worker/workflow/machines/patch_state_machine.rs +321 -206
  62. package/sdk-core/core/src/worker/workflow/machines/signal_external_state_machine.rs +13 -18
  63. package/sdk-core/core/src/worker/workflow/machines/timer_state_machine.rs +20 -29
  64. package/sdk-core/core/src/worker/workflow/machines/transition_coverage.rs +2 -2
  65. package/sdk-core/core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +257 -51
  66. package/sdk-core/core/src/worker/workflow/machines/workflow_machines/local_acts.rs +6 -17
  67. package/sdk-core/core/src/worker/workflow/machines/workflow_machines.rs +310 -150
  68. package/sdk-core/core/src/worker/workflow/machines/workflow_task_state_machine.rs +17 -20
  69. package/sdk-core/core/src/worker/workflow/managed_run/managed_wf_test.rs +31 -15
  70. package/sdk-core/core/src/worker/workflow/managed_run.rs +1052 -380
  71. package/sdk-core/core/src/worker/workflow/mod.rs +598 -390
  72. package/sdk-core/core/src/worker/workflow/run_cache.rs +40 -57
  73. package/sdk-core/core/src/worker/workflow/wft_extraction.rs +137 -0
  74. package/sdk-core/core/src/worker/workflow/wft_poller.rs +1 -4
  75. package/sdk-core/core/src/worker/workflow/workflow_stream/saved_wf_inputs.rs +117 -0
  76. package/sdk-core/core/src/worker/workflow/workflow_stream/tonic_status_serde.rs +24 -0
  77. package/sdk-core/core/src/worker/workflow/workflow_stream.rs +469 -718
  78. package/sdk-core/core-api/Cargo.toml +2 -1
  79. package/sdk-core/core-api/src/errors.rs +1 -34
  80. package/sdk-core/core-api/src/lib.rs +19 -9
  81. package/sdk-core/core-api/src/telemetry.rs +4 -6
  82. package/sdk-core/core-api/src/worker.rs +19 -1
  83. package/sdk-core/etc/deps.svg +115 -140
  84. package/sdk-core/etc/regen-depgraph.sh +5 -0
  85. package/sdk-core/fsm/rustfsm_procmacro/src/lib.rs +86 -61
  86. package/sdk-core/fsm/rustfsm_trait/src/lib.rs +29 -71
  87. package/sdk-core/histories/ends_empty_wft_complete.bin +0 -0
  88. package/sdk-core/histories/evict_while_la_running_no_interference-16_history.bin +0 -0
  89. package/sdk-core/histories/old_change_marker_format.bin +0 -0
  90. package/sdk-core/protos/api_upstream/.github/CODEOWNERS +2 -1
  91. package/sdk-core/protos/api_upstream/Makefile +6 -6
  92. package/sdk-core/protos/api_upstream/build/go.mod +7 -0
  93. package/sdk-core/protos/api_upstream/build/go.sum +5 -0
  94. package/sdk-core/protos/api_upstream/build/tools.go +29 -0
  95. package/sdk-core/protos/api_upstream/go.mod +6 -0
  96. package/sdk-core/protos/api_upstream/temporal/api/batch/v1/message.proto +9 -2
  97. package/sdk-core/protos/api_upstream/temporal/api/command/v1/message.proto +7 -26
  98. package/sdk-core/protos/api_upstream/temporal/api/common/v1/message.proto +13 -2
  99. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/batch_operation.proto +3 -2
  100. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/command_type.proto +3 -7
  101. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/common.proto +3 -2
  102. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/event_type.proto +8 -8
  103. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +25 -2
  104. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/namespace.proto +2 -2
  105. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/query.proto +2 -2
  106. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/reset.proto +2 -2
  107. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/schedule.proto +2 -2
  108. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/task_queue.proto +2 -2
  109. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/update.proto +24 -19
  110. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/workflow.proto +2 -2
  111. package/sdk-core/protos/api_upstream/temporal/api/errordetails/v1/message.proto +2 -2
  112. package/sdk-core/protos/api_upstream/temporal/api/failure/v1/message.proto +2 -2
  113. package/sdk-core/protos/api_upstream/temporal/api/filter/v1/message.proto +2 -2
  114. package/sdk-core/protos/api_upstream/temporal/api/history/v1/message.proto +49 -26
  115. package/sdk-core/protos/api_upstream/temporal/api/namespace/v1/message.proto +4 -2
  116. package/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/request_response.proto +5 -2
  117. package/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/service.proto +2 -2
  118. package/sdk-core/protos/api_upstream/temporal/api/protocol/v1/message.proto +57 -0
  119. package/sdk-core/protos/api_upstream/temporal/api/query/v1/message.proto +2 -2
  120. package/sdk-core/protos/api_upstream/temporal/api/replication/v1/message.proto +2 -2
  121. package/sdk-core/protos/api_upstream/temporal/api/schedule/v1/message.proto +2 -2
  122. package/sdk-core/protos/api_upstream/temporal/api/sdk/v1/task_complete_metadata.proto +63 -0
  123. package/sdk-core/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +2 -2
  124. package/sdk-core/protos/api_upstream/temporal/api/update/v1/message.proto +71 -6
  125. package/sdk-core/protos/api_upstream/temporal/api/version/v1/message.proto +2 -2
  126. package/sdk-core/protos/api_upstream/temporal/api/workflow/v1/message.proto +2 -2
  127. package/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +64 -28
  128. package/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +4 -4
  129. package/sdk-core/protos/local/temporal/sdk/core/activity_result/activity_result.proto +7 -8
  130. package/sdk-core/protos/local/temporal/sdk/core/activity_task/activity_task.proto +10 -7
  131. package/sdk-core/protos/local/temporal/sdk/core/child_workflow/child_workflow.proto +19 -30
  132. package/sdk-core/protos/local/temporal/sdk/core/common/common.proto +1 -0
  133. package/sdk-core/protos/local/temporal/sdk/core/core_interface.proto +1 -0
  134. package/sdk-core/protos/local/temporal/sdk/core/external_data/external_data.proto +8 -0
  135. package/sdk-core/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +67 -60
  136. package/sdk-core/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +85 -84
  137. package/sdk-core/protos/local/temporal/sdk/core/workflow_completion/workflow_completion.proto +9 -3
  138. package/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/request_response.proto +2 -2
  139. package/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/service.proto +2 -2
  140. package/sdk-core/sdk/Cargo.toml +5 -4
  141. package/sdk-core/sdk/src/lib.rs +108 -26
  142. package/sdk-core/sdk/src/workflow_context/options.rs +7 -1
  143. package/sdk-core/sdk/src/workflow_context.rs +24 -17
  144. package/sdk-core/sdk/src/workflow_future.rs +16 -15
  145. package/sdk-core/sdk-core-protos/Cargo.toml +5 -2
  146. package/sdk-core/sdk-core-protos/build.rs +36 -2
  147. package/sdk-core/sdk-core-protos/src/history_builder.rs +138 -106
  148. package/sdk-core/sdk-core-protos/src/history_info.rs +10 -1
  149. package/sdk-core/sdk-core-protos/src/lib.rs +272 -87
  150. package/sdk-core/sdk-core-protos/src/task_token.rs +12 -2
  151. package/sdk-core/test-utils/Cargo.toml +3 -1
  152. package/sdk-core/test-utils/src/canned_histories.rs +106 -296
  153. package/sdk-core/test-utils/src/histfetch.rs +1 -1
  154. package/sdk-core/test-utils/src/lib.rs +82 -23
  155. package/sdk-core/test-utils/src/wf_input_saver.rs +50 -0
  156. package/sdk-core/test-utils/src/workflows.rs +29 -0
  157. package/sdk-core/tests/fuzzy_workflow.rs +130 -0
  158. package/sdk-core/tests/{load_tests.rs → heavy_tests.rs} +125 -51
  159. package/sdk-core/tests/integ_tests/ephemeral_server_tests.rs +25 -3
  160. package/sdk-core/tests/integ_tests/heartbeat_tests.rs +10 -5
  161. package/sdk-core/tests/integ_tests/metrics_tests.rs +218 -16
  162. package/sdk-core/tests/integ_tests/polling_tests.rs +4 -47
  163. package/sdk-core/tests/integ_tests/queries_tests.rs +5 -128
  164. package/sdk-core/tests/integ_tests/visibility_tests.rs +83 -25
  165. package/sdk-core/tests/integ_tests/workflow_tests/activities.rs +161 -72
  166. package/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +1 -0
  167. package/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +6 -13
  168. package/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +80 -3
  169. package/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +6 -2
  170. package/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +3 -10
  171. package/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +94 -200
  172. package/sdk-core/tests/integ_tests/workflow_tests/modify_wf_properties.rs +2 -4
  173. package/sdk-core/tests/integ_tests/workflow_tests/patches.rs +34 -28
  174. package/sdk-core/tests/integ_tests/workflow_tests/replay.rs +76 -7
  175. package/sdk-core/tests/integ_tests/workflow_tests/resets.rs +1 -0
  176. package/sdk-core/tests/integ_tests/workflow_tests/signals.rs +18 -14
  177. package/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +6 -20
  178. package/sdk-core/tests/integ_tests/workflow_tests/timers.rs +10 -21
  179. package/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +7 -8
  180. package/sdk-core/tests/integ_tests/workflow_tests.rs +13 -14
  181. package/sdk-core/tests/main.rs +3 -13
  182. package/sdk-core/tests/runner.rs +75 -36
  183. package/sdk-core/tests/wf_input_replay.rs +32 -0
  184. package/src/conversions.rs +14 -8
  185. package/src/runtime.rs +9 -8
  186. package/ts/index.ts +8 -6
  187. package/sdk-core/bridge-ffi/Cargo.toml +0 -24
  188. package/sdk-core/bridge-ffi/LICENSE.txt +0 -23
  189. package/sdk-core/bridge-ffi/build.rs +0 -25
  190. package/sdk-core/bridge-ffi/include/sdk-core-bridge.h +0 -224
  191. package/sdk-core/bridge-ffi/src/lib.rs +0 -746
  192. package/sdk-core/bridge-ffi/src/wrappers.rs +0 -221
  193. package/sdk-core/protos/local/temporal/sdk/core/bridge/bridge.proto +0 -210
  194. package/sdk-core/sdk/src/conversions.rs +0 -8
@@ -3,7 +3,8 @@
3
3
  use super::{
4
4
  workflow_machines::MachineResponse, Cancellable, EventInfo, WFMachinesAdapter, WFMachinesError,
5
5
  };
6
- use rustfsm::{fsm, TransitionResult};
6
+ use crate::worker::workflow::machines::HistEventData;
7
+ use rustfsm::{fsm, StateMachine, TransitionResult};
7
8
  use std::{
8
9
  convert::{TryFrom, TryInto},
9
10
  time::SystemTime,
@@ -31,12 +32,12 @@ fsm! {
31
32
 
32
33
  impl WorkflowTaskMachine {
33
34
  pub(super) fn new(wf_task_started_event_id: i64) -> Self {
34
- Self {
35
- state: Created {}.into(),
36
- shared_state: SharedState {
35
+ Self::from_parts(
36
+ Created {}.into(),
37
+ SharedState {
37
38
  wf_task_started_event_id,
38
39
  },
39
- }
40
+ )
40
41
  }
41
42
  }
42
43
 
@@ -48,7 +49,7 @@ pub(super) enum WFTaskMachineCommand {
48
49
  task_started_event_id: i64,
49
50
  time: SystemTime,
50
51
  },
51
- #[display(fmt = "RunIdOnWorkflowResetUpdate({})", run_id)]
52
+ #[display(fmt = "RunIdOnWorkflowResetUpdate({run_id})")]
52
53
  RunIdOnWorkflowResetUpdate { run_id: String },
53
54
  }
54
55
 
@@ -63,8 +64,8 @@ impl WFMachinesAdapter for WorkflowTaskMachine {
63
64
  task_started_event_id,
64
65
  time,
65
66
  } => {
66
- let (event_id, event_type, has_next_event) = if let Some(ei) = event_info {
67
- (ei.event_id, ei.event_type, ei.has_next_event)
67
+ let (event_id, event_type) = if let Some(ei) = event_info {
68
+ (ei.event_id, ei.event_type)
68
69
  } else {
69
70
  return Err(WFMachinesError::Fatal(
70
71
  "WF Task machine should never issue a task started trigger \
@@ -74,9 +75,7 @@ impl WFMachinesAdapter for WorkflowTaskMachine {
74
75
  };
75
76
 
76
77
  let cur_event_past_or_at_start = event_id >= task_started_event_id;
77
- if event_type == EventType::WorkflowTaskStarted
78
- && (!cur_event_past_or_at_start || has_next_event)
79
- {
78
+ if event_type == EventType::WorkflowTaskStarted && !cur_event_past_or_at_start {
80
79
  return Ok(vec![]);
81
80
  }
82
81
  Ok(vec![MachineResponse::TriggerWFTaskStarted {
@@ -102,10 +101,11 @@ impl WFMachinesAdapter for WorkflowTaskMachine {
102
101
  }
103
102
  }
104
103
 
105
- impl TryFrom<HistoryEvent> for WorkflowTaskMachineEvents {
104
+ impl TryFrom<HistEventData> for WorkflowTaskMachineEvents {
106
105
  type Error = WFMachinesError;
107
106
 
108
- fn try_from(e: HistoryEvent) -> Result<Self, Self::Error> {
107
+ fn try_from(e: HistEventData) -> Result<Self, Self::Error> {
108
+ let e = e.event;
109
109
  Ok(match e.event_type() {
110
110
  EventType::WorkflowTaskScheduled => Self::WorkflowTaskScheduled,
111
111
  EventType::WorkflowTaskStarted => Self::WorkflowTaskStarted({
@@ -121,8 +121,7 @@ impl TryFrom<HistoryEvent> for WorkflowTaskMachineEvents {
121
121
  }
122
122
  } else {
123
123
  return Err(WFMachinesError::Fatal(format!(
124
- "Workflow task started event must contain timestamp: {}",
125
- e
124
+ "Workflow task started event must contain timestamp: {e}"
126
125
  )));
127
126
  };
128
127
  WFTStartedDat {
@@ -150,15 +149,13 @@ impl TryFrom<HistoryEvent> for WorkflowTaskMachineEvents {
150
149
  })
151
150
  } else {
152
151
  return Err(WFMachinesError::Fatal(format!(
153
- "Workflow task failed is missing attributes: {}",
154
- e
152
+ "Workflow task failed is missing attributes: {e}"
155
153
  )));
156
154
  }
157
155
  }
158
156
  _ => {
159
157
  return Err(WFMachinesError::Nondeterminism(format!(
160
- "Event does not apply to a wf task machine: {}",
161
- e
158
+ "Event does not apply to a wf task machine: {e}"
162
159
  )))
163
160
  }
164
161
  })
@@ -204,7 +201,7 @@ pub(super) struct WFTFailedDat {
204
201
  impl Scheduled {
205
202
  pub(super) fn on_workflow_task_started(
206
203
  self,
207
- shared: SharedState,
204
+ shared: &mut SharedState,
208
205
  WFTStartedDat {
209
206
  current_time_millis,
210
207
  started_event_id,
@@ -3,12 +3,15 @@ use crate::{
3
3
  replay::TestHistoryBuilder,
4
4
  test_help::TEST_Q,
5
5
  worker::{
6
+ client::mocks::DEFAULT_TEST_CAPABILITIES,
6
7
  workflow::{
7
- history_update::TestHBExt, machines::WorkflowMachines, WFCommand, WorkflowFetcher,
8
+ history_update::tests::TestHBExt, machines::WorkflowMachines, WFCommand,
9
+ WorkflowFetcher,
8
10
  },
9
11
  LocalActRequest, LocalActivityResolution,
10
12
  },
11
13
  };
14
+ use crossbeam::channel::bounded;
12
15
  use std::{convert::TryInto, time::Duration};
13
16
  use temporal_sdk::{WorkflowFunction, WorkflowResult};
14
17
  use temporal_sdk_core_protos::{
@@ -27,13 +30,12 @@ use tokio::{
27
30
  };
28
31
 
29
32
  pub(crate) struct WFFutureDriver {
30
- completions_rx: UnboundedReceiver<WorkflowActivationCompletion>,
33
+ completions_q: crossbeam::channel::Receiver<WorkflowActivationCompletion>,
31
34
  }
32
35
 
33
- #[async_trait::async_trait]
34
36
  impl WorkflowFetcher for WFFutureDriver {
35
- async fn fetch_workflow_iteration_output(&mut self) -> Vec<WFCommand> {
36
- if let Some(completion) = self.completions_rx.recv().await {
37
+ fn fetch_workflow_iteration_output(&mut self) -> Vec<WFCommand> {
38
+ if let Ok(completion) = self.completions_q.try_recv() {
37
39
  debug!("Managed wf completion: {}", completion);
38
40
  completion
39
41
  .status
@@ -57,6 +59,8 @@ impl WorkflowFetcher for WFFutureDriver {
57
59
  pub struct ManagedWFFunc {
58
60
  mgr: WorkflowManager,
59
61
  activation_tx: UnboundedSender<WorkflowActivation>,
62
+ completions_rx: UnboundedReceiver<WorkflowActivationCompletion>,
63
+ completions_sync_tx: crossbeam::channel::Sender<WorkflowActivationCompletion>,
60
64
  future_handle: Option<JoinHandle<WorkflowResult<()>>>,
61
65
  was_shutdown: bool,
62
66
  }
@@ -79,20 +83,28 @@ impl ManagedWFFunc {
79
83
  completions_tx,
80
84
  );
81
85
  let spawned = tokio::spawn(wff);
82
- let driver = WFFutureDriver { completions_rx };
86
+ let (completions_sync_tx, completions_sync_rx) = bounded(1);
87
+ let driver = WFFutureDriver {
88
+ completions_q: completions_sync_rx,
89
+ };
83
90
  let state_machines = WorkflowMachines::new(
84
- "test_namespace".to_string(),
85
- "wfid".to_string(),
86
- "wftype".to_string(),
87
- "runid".to_string(),
88
- hist,
91
+ RunBasics {
92
+ namespace: "test_namespace".to_string(),
93
+ workflow_id: "wfid".to_string(),
94
+ workflow_type: "wftype".to_string(),
95
+ run_id: "runid".to_string(),
96
+ history: hist,
97
+ metrics: MetricsContext::no_op(),
98
+ capabilities: &DEFAULT_TEST_CAPABILITIES,
99
+ },
89
100
  Box::new(driver).into(),
90
- MetricsContext::no_op(),
91
101
  );
92
102
  let mgr = WorkflowManager::new_from_machines(state_machines);
93
103
  Self {
94
104
  mgr,
95
105
  activation_tx: activations,
106
+ completions_rx,
107
+ completions_sync_tx,
96
108
  future_handle: Some(spawned),
97
109
  was_shutdown: false,
98
110
  }
@@ -100,7 +112,7 @@ impl ManagedWFFunc {
100
112
 
101
113
  #[instrument(skip(self))]
102
114
  pub(crate) async fn get_next_activation(&mut self) -> Result<WorkflowActivation> {
103
- let res = self.mgr.get_next_activation().await?;
115
+ let res = self.mgr.get_next_activation()?;
104
116
  debug!("Managed wf next activation: {}", &res);
105
117
  self.push_activation_to_wf(&res).await?;
106
118
  Ok(res)
@@ -121,7 +133,7 @@ impl ManagedWFFunc {
121
133
  &mut self,
122
134
  update: HistoryUpdate,
123
135
  ) -> Result<WorkflowActivation> {
124
- let res = self.mgr.feed_history_from_server(update).await?;
136
+ let res = self.mgr.feed_history_from_server(update)?;
125
137
  self.push_activation_to_wf(&res).await?;
126
138
  Ok(res)
127
139
  }
@@ -183,7 +195,11 @@ impl ManagedWFFunc {
183
195
  self.activation_tx
184
196
  .send(res.clone())
185
197
  .expect("Workflow should not be dropped if we are still sending activations");
186
- self.mgr.machines.iterate_machines().await?;
198
+ // Move the completion response to the sync workflow bridge
199
+ self.completions_sync_tx
200
+ .send(self.completions_rx.recv().await.unwrap())
201
+ .unwrap();
202
+ self.mgr.machines.iterate_machines()?;
187
203
  Ok(())
188
204
  }
189
205
  }