temporalio 0.0.2 → 0.1.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 (202) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +25 -23
  3. data/bridge/Cargo.lock +168 -59
  4. data/bridge/Cargo.toml +4 -2
  5. data/bridge/sdk-core/README.md +19 -6
  6. data/bridge/sdk-core/client/src/lib.rs +215 -39
  7. data/bridge/sdk-core/client/src/metrics.rs +17 -8
  8. data/bridge/sdk-core/client/src/raw.rs +4 -4
  9. data/bridge/sdk-core/client/src/retry.rs +32 -20
  10. data/bridge/sdk-core/core/Cargo.toml +22 -9
  11. data/bridge/sdk-core/core/src/abstractions.rs +203 -14
  12. data/bridge/sdk-core/core/src/core_tests/activity_tasks.rs +76 -41
  13. data/bridge/sdk-core/core/src/core_tests/determinism.rs +165 -2
  14. data/bridge/sdk-core/core/src/core_tests/local_activities.rs +204 -83
  15. data/bridge/sdk-core/core/src/core_tests/queries.rs +3 -4
  16. data/bridge/sdk-core/core/src/core_tests/workers.rs +1 -3
  17. data/bridge/sdk-core/core/src/core_tests/workflow_tasks.rs +397 -54
  18. data/bridge/sdk-core/core/src/ephemeral_server/mod.rs +106 -12
  19. data/bridge/sdk-core/core/src/internal_flags.rs +136 -0
  20. data/bridge/sdk-core/core/src/lib.rs +16 -9
  21. data/bridge/sdk-core/core/src/telemetry/log_export.rs +1 -1
  22. data/bridge/sdk-core/core/src/telemetry/metrics.rs +69 -35
  23. data/bridge/sdk-core/core/src/telemetry/mod.rs +29 -13
  24. data/bridge/sdk-core/core/src/telemetry/prometheus_server.rs +17 -12
  25. data/bridge/sdk-core/core/src/test_help/mod.rs +62 -12
  26. data/bridge/sdk-core/core/src/worker/activities/activity_heartbeat_manager.rs +112 -156
  27. data/bridge/sdk-core/core/src/worker/activities/activity_task_poller_stream.rs +89 -0
  28. data/bridge/sdk-core/core/src/worker/activities/local_activities.rs +352 -122
  29. data/bridge/sdk-core/core/src/worker/activities.rs +233 -157
  30. data/bridge/sdk-core/core/src/worker/client/mocks.rs +22 -2
  31. data/bridge/sdk-core/core/src/worker/client.rs +18 -2
  32. data/bridge/sdk-core/core/src/worker/mod.rs +165 -58
  33. data/bridge/sdk-core/core/src/worker/workflow/bridge.rs +1 -3
  34. data/bridge/sdk-core/core/src/worker/workflow/driven_workflow.rs +3 -5
  35. data/bridge/sdk-core/core/src/worker/workflow/history_update.rs +856 -277
  36. data/bridge/sdk-core/core/src/worker/workflow/machines/activity_state_machine.rs +100 -43
  37. data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_external_state_machine.rs +7 -7
  38. data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_workflow_state_machine.rs +5 -4
  39. data/bridge/sdk-core/core/src/worker/workflow/machines/child_workflow_state_machine.rs +87 -27
  40. data/bridge/sdk-core/core/src/worker/workflow/machines/complete_workflow_state_machine.rs +5 -4
  41. data/bridge/sdk-core/core/src/worker/workflow/machines/continue_as_new_workflow_state_machine.rs +5 -4
  42. data/bridge/sdk-core/core/src/worker/workflow/machines/fail_workflow_state_machine.rs +5 -4
  43. data/bridge/sdk-core/core/src/worker/workflow/machines/local_activity_state_machine.rs +137 -62
  44. data/bridge/sdk-core/core/src/worker/workflow/machines/mod.rs +25 -17
  45. data/bridge/sdk-core/core/src/worker/workflow/machines/modify_workflow_properties_state_machine.rs +7 -6
  46. data/bridge/sdk-core/core/src/worker/workflow/machines/patch_state_machine.rs +103 -152
  47. data/bridge/sdk-core/core/src/worker/workflow/machines/signal_external_state_machine.rs +7 -7
  48. data/bridge/sdk-core/core/src/worker/workflow/machines/timer_state_machine.rs +9 -9
  49. data/bridge/sdk-core/core/src/worker/workflow/machines/transition_coverage.rs +2 -2
  50. data/bridge/sdk-core/core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +14 -7
  51. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines/local_acts.rs +5 -16
  52. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines.rs +201 -121
  53. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_task_state_machine.rs +11 -14
  54. data/bridge/sdk-core/core/src/worker/workflow/managed_run/managed_wf_test.rs +30 -15
  55. data/bridge/sdk-core/core/src/worker/workflow/managed_run.rs +1026 -376
  56. data/bridge/sdk-core/core/src/worker/workflow/mod.rs +460 -384
  57. data/bridge/sdk-core/core/src/worker/workflow/run_cache.rs +40 -57
  58. data/bridge/sdk-core/core/src/worker/workflow/wft_extraction.rs +125 -0
  59. data/bridge/sdk-core/core/src/worker/workflow/wft_poller.rs +1 -4
  60. data/bridge/sdk-core/core/src/worker/workflow/workflow_stream/saved_wf_inputs.rs +117 -0
  61. data/bridge/sdk-core/core/src/worker/workflow/workflow_stream/tonic_status_serde.rs +24 -0
  62. data/bridge/sdk-core/core/src/worker/workflow/workflow_stream.rs +448 -718
  63. data/bridge/sdk-core/core-api/Cargo.toml +2 -1
  64. data/bridge/sdk-core/core-api/src/errors.rs +1 -34
  65. data/bridge/sdk-core/core-api/src/lib.rs +6 -2
  66. data/bridge/sdk-core/core-api/src/telemetry.rs +0 -6
  67. data/bridge/sdk-core/core-api/src/worker.rs +14 -1
  68. data/bridge/sdk-core/fsm/rustfsm_procmacro/src/lib.rs +18 -15
  69. data/bridge/sdk-core/fsm/rustfsm_trait/src/lib.rs +8 -3
  70. data/bridge/sdk-core/histories/evict_while_la_running_no_interference-16_history.bin +0 -0
  71. data/bridge/sdk-core/protos/api_upstream/temporal/api/command/v1/message.proto +5 -17
  72. data/bridge/sdk-core/protos/api_upstream/temporal/api/common/v1/message.proto +11 -0
  73. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/command_type.proto +1 -6
  74. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/event_type.proto +6 -6
  75. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +5 -0
  76. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/update.proto +22 -6
  77. data/bridge/sdk-core/protos/api_upstream/temporal/api/history/v1/message.proto +48 -19
  78. data/bridge/sdk-core/protos/api_upstream/temporal/api/namespace/v1/message.proto +2 -0
  79. data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/request_response.proto +3 -0
  80. data/bridge/sdk-core/protos/api_upstream/temporal/api/{enums/v1/interaction_type.proto → protocol/v1/message.proto} +29 -11
  81. data/bridge/sdk-core/protos/api_upstream/temporal/api/sdk/v1/task_complete_metadata.proto +63 -0
  82. data/bridge/sdk-core/protos/api_upstream/temporal/api/update/v1/message.proto +111 -0
  83. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +59 -28
  84. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +2 -2
  85. data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_result/activity_result.proto +1 -0
  86. data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_task/activity_task.proto +1 -0
  87. data/bridge/sdk-core/protos/local/temporal/sdk/core/child_workflow/child_workflow.proto +1 -0
  88. data/bridge/sdk-core/protos/local/temporal/sdk/core/common/common.proto +1 -0
  89. data/bridge/sdk-core/protos/local/temporal/sdk/core/core_interface.proto +1 -0
  90. data/bridge/sdk-core/protos/local/temporal/sdk/core/external_data/external_data.proto +1 -0
  91. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +7 -0
  92. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +1 -0
  93. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_completion/workflow_completion.proto +6 -0
  94. data/bridge/sdk-core/sdk/Cargo.toml +3 -2
  95. data/bridge/sdk-core/sdk/src/lib.rs +87 -20
  96. data/bridge/sdk-core/sdk/src/workflow_future.rs +9 -8
  97. data/bridge/sdk-core/sdk-core-protos/Cargo.toml +5 -2
  98. data/bridge/sdk-core/sdk-core-protos/build.rs +36 -1
  99. data/bridge/sdk-core/sdk-core-protos/src/history_builder.rs +100 -87
  100. data/bridge/sdk-core/sdk-core-protos/src/history_info.rs +5 -1
  101. data/bridge/sdk-core/sdk-core-protos/src/lib.rs +175 -57
  102. data/bridge/sdk-core/sdk-core-protos/src/task_token.rs +12 -2
  103. data/bridge/sdk-core/test-utils/Cargo.toml +3 -1
  104. data/bridge/sdk-core/test-utils/src/canned_histories.rs +106 -296
  105. data/bridge/sdk-core/test-utils/src/histfetch.rs +1 -1
  106. data/bridge/sdk-core/test-utils/src/lib.rs +82 -23
  107. data/bridge/sdk-core/test-utils/src/wf_input_saver.rs +50 -0
  108. data/bridge/sdk-core/test-utils/src/workflows.rs +29 -0
  109. data/bridge/sdk-core/tests/fuzzy_workflow.rs +130 -0
  110. data/bridge/sdk-core/tests/{load_tests.rs → heavy_tests.rs} +125 -51
  111. data/bridge/sdk-core/tests/integ_tests/ephemeral_server_tests.rs +25 -3
  112. data/bridge/sdk-core/tests/integ_tests/heartbeat_tests.rs +5 -3
  113. data/bridge/sdk-core/tests/integ_tests/metrics_tests.rs +218 -16
  114. data/bridge/sdk-core/tests/integ_tests/polling_tests.rs +4 -47
  115. data/bridge/sdk-core/tests/integ_tests/queries_tests.rs +5 -128
  116. data/bridge/sdk-core/tests/integ_tests/visibility_tests.rs +83 -25
  117. data/bridge/sdk-core/tests/integ_tests/workflow_tests/activities.rs +93 -69
  118. data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +1 -0
  119. data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +6 -13
  120. data/bridge/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +1 -0
  121. data/bridge/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +6 -2
  122. data/bridge/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +3 -10
  123. data/bridge/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +72 -191
  124. data/bridge/sdk-core/tests/integ_tests/workflow_tests/modify_wf_properties.rs +1 -0
  125. data/bridge/sdk-core/tests/integ_tests/workflow_tests/patches.rs +7 -28
  126. data/bridge/sdk-core/tests/integ_tests/workflow_tests/replay.rs +12 -7
  127. data/bridge/sdk-core/tests/integ_tests/workflow_tests/resets.rs +1 -0
  128. data/bridge/sdk-core/tests/integ_tests/workflow_tests/signals.rs +18 -14
  129. data/bridge/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +6 -20
  130. data/bridge/sdk-core/tests/integ_tests/workflow_tests/timers.rs +10 -21
  131. data/bridge/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +6 -4
  132. data/bridge/sdk-core/tests/integ_tests/workflow_tests.rs +10 -11
  133. data/bridge/sdk-core/tests/main.rs +3 -13
  134. data/bridge/sdk-core/tests/runner.rs +75 -36
  135. data/bridge/sdk-core/tests/wf_input_replay.rs +32 -0
  136. data/bridge/src/connection.rs +41 -25
  137. data/bridge/src/lib.rs +269 -14
  138. data/bridge/src/runtime.rs +1 -1
  139. data/bridge/src/test_server.rs +153 -0
  140. data/bridge/src/worker.rs +89 -16
  141. data/lib/gen/temporal/api/command/v1/message_pb.rb +4 -18
  142. data/lib/gen/temporal/api/common/v1/message_pb.rb +4 -0
  143. data/lib/gen/temporal/api/enums/v1/command_type_pb.rb +1 -3
  144. data/lib/gen/temporal/api/enums/v1/event_type_pb.rb +3 -3
  145. data/lib/gen/temporal/api/enums/v1/failed_cause_pb.rb +2 -0
  146. data/lib/gen/temporal/api/enums/v1/update_pb.rb +6 -4
  147. data/lib/gen/temporal/api/history/v1/message_pb.rb +27 -19
  148. data/lib/gen/temporal/api/namespace/v1/message_pb.rb +1 -0
  149. data/lib/gen/temporal/api/operatorservice/v1/request_response_pb.rb +3 -0
  150. data/lib/gen/temporal/api/protocol/v1/message_pb.rb +30 -0
  151. data/lib/gen/temporal/api/sdk/v1/task_complete_metadata_pb.rb +23 -0
  152. data/lib/gen/temporal/api/testservice/v1/request_response_pb.rb +49 -0
  153. data/lib/gen/temporal/api/testservice/v1/service_pb.rb +21 -0
  154. data/lib/gen/temporal/api/update/v1/message_pb.rb +72 -0
  155. data/lib/gen/temporal/api/workflowservice/v1/request_response_pb.rb +26 -16
  156. data/lib/gen/temporal/sdk/core/activity_result/activity_result_pb.rb +13 -9
  157. data/lib/gen/temporal/sdk/core/activity_task/activity_task_pb.rb +10 -6
  158. data/lib/gen/temporal/sdk/core/child_workflow/child_workflow_pb.rb +13 -9
  159. data/lib/gen/temporal/sdk/core/common/common_pb.rb +7 -3
  160. data/lib/gen/temporal/sdk/core/core_interface_pb.rb +9 -3
  161. data/lib/gen/temporal/sdk/core/external_data/external_data_pb.rb +7 -3
  162. data/lib/gen/temporal/sdk/core/workflow_activation/workflow_activation_pb.rb +27 -21
  163. data/lib/gen/temporal/sdk/core/workflow_commands/workflow_commands_pb.rb +28 -24
  164. data/lib/gen/temporal/sdk/core/workflow_completion/workflow_completion_pb.rb +12 -5
  165. data/lib/temporalio/activity/context.rb +13 -8
  166. data/lib/temporalio/activity/info.rb +1 -1
  167. data/lib/temporalio/bridge/connect_options.rb +15 -0
  168. data/lib/temporalio/bridge/retry_config.rb +24 -0
  169. data/lib/temporalio/bridge/tls_options.rb +19 -0
  170. data/lib/temporalio/client/implementation.rb +8 -8
  171. data/lib/temporalio/connection/retry_config.rb +44 -0
  172. data/lib/temporalio/connection/service.rb +20 -0
  173. data/lib/temporalio/connection/test_service.rb +92 -0
  174. data/lib/temporalio/connection/tls_options.rb +51 -0
  175. data/lib/temporalio/connection/workflow_service.rb +731 -0
  176. data/lib/temporalio/connection.rb +55 -720
  177. data/lib/temporalio/interceptor/activity_inbound.rb +22 -0
  178. data/lib/temporalio/interceptor/activity_outbound.rb +24 -0
  179. data/lib/temporalio/interceptor/chain.rb +5 -5
  180. data/lib/temporalio/interceptor/client.rb +8 -4
  181. data/lib/temporalio/interceptor.rb +22 -0
  182. data/lib/temporalio/retry_policy.rb +13 -3
  183. data/lib/temporalio/testing/time_skipping_handle.rb +32 -0
  184. data/lib/temporalio/testing/time_skipping_interceptor.rb +23 -0
  185. data/lib/temporalio/testing/workflow_environment.rb +112 -0
  186. data/lib/temporalio/testing.rb +175 -0
  187. data/lib/temporalio/version.rb +1 -1
  188. data/lib/temporalio/worker/activity_runner.rb +26 -4
  189. data/lib/temporalio/worker/activity_worker.rb +44 -18
  190. data/lib/temporalio/worker/sync_worker.rb +47 -11
  191. data/lib/temporalio/worker.rb +27 -21
  192. data/lib/temporalio/workflow/async.rb +46 -0
  193. data/lib/temporalio/workflow/future.rb +138 -0
  194. data/lib/temporalio/workflow/info.rb +76 -0
  195. data/temporalio.gemspec +4 -3
  196. metadata +67 -17
  197. data/bridge/sdk-core/Cargo.lock +0 -2606
  198. data/bridge/sdk-core/protos/api_upstream/temporal/api/interaction/v1/message.proto +0 -87
  199. data/lib/bridge.so +0 -0
  200. data/lib/gen/temporal/api/enums/v1/interaction_type_pb.rb +0 -25
  201. data/lib/gen/temporal/api/interaction/v1/message_pb.rb +0 -49
  202. data/lib/gen/temporal/sdk/core/bridge/bridge_pb.rb +0 -222
@@ -3,6 +3,7 @@
3
3
  use super::{
4
4
  workflow_machines::MachineResponse, Cancellable, EventInfo, WFMachinesAdapter, WFMachinesError,
5
5
  };
6
+ use crate::worker::workflow::machines::HistEventData;
6
7
  use rustfsm::{fsm, TransitionResult};
7
8
  use std::{
8
9
  convert::{TryFrom, TryInto},
@@ -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
  })
@@ -4,11 +4,13 @@ use crate::{
4
4
  test_help::TEST_Q,
5
5
  worker::{
6
6
  workflow::{
7
- history_update::TestHBExt, machines::WorkflowMachines, WFCommand, WorkflowFetcher,
7
+ history_update::tests::TestHBExt, machines::WorkflowMachines, WFCommand,
8
+ WorkflowFetcher,
8
9
  },
9
10
  LocalActRequest, LocalActivityResolution,
10
11
  },
11
12
  };
13
+ use crossbeam::channel::bounded;
12
14
  use std::{convert::TryInto, time::Duration};
13
15
  use temporal_sdk::{WorkflowFunction, WorkflowResult};
14
16
  use temporal_sdk_core_protos::{
@@ -27,13 +29,12 @@ use tokio::{
27
29
  };
28
30
 
29
31
  pub(crate) struct WFFutureDriver {
30
- completions_rx: UnboundedReceiver<WorkflowActivationCompletion>,
32
+ completions_q: crossbeam::channel::Receiver<WorkflowActivationCompletion>,
31
33
  }
32
34
 
33
- #[async_trait::async_trait]
34
35
  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 {
36
+ fn fetch_workflow_iteration_output(&mut self) -> Vec<WFCommand> {
37
+ if let Ok(completion) = self.completions_q.try_recv() {
37
38
  debug!("Managed wf completion: {}", completion);
38
39
  completion
39
40
  .status
@@ -57,6 +58,8 @@ impl WorkflowFetcher for WFFutureDriver {
57
58
  pub struct ManagedWFFunc {
58
59
  mgr: WorkflowManager,
59
60
  activation_tx: UnboundedSender<WorkflowActivation>,
61
+ completions_rx: UnboundedReceiver<WorkflowActivationCompletion>,
62
+ completions_sync_tx: crossbeam::channel::Sender<WorkflowActivationCompletion>,
60
63
  future_handle: Option<JoinHandle<WorkflowResult<()>>>,
61
64
  was_shutdown: bool,
62
65
  }
@@ -79,20 +82,28 @@ impl ManagedWFFunc {
79
82
  completions_tx,
80
83
  );
81
84
  let spawned = tokio::spawn(wff);
82
- let driver = WFFutureDriver { completions_rx };
85
+ let (completions_sync_tx, completions_sync_rx) = bounded(1);
86
+ let driver = WFFutureDriver {
87
+ completions_q: completions_sync_rx,
88
+ };
83
89
  let state_machines = WorkflowMachines::new(
84
- "test_namespace".to_string(),
85
- "wfid".to_string(),
86
- "wftype".to_string(),
87
- "runid".to_string(),
88
- hist,
90
+ RunBasics {
91
+ namespace: "test_namespace".to_string(),
92
+ workflow_id: "wfid".to_string(),
93
+ workflow_type: "wftype".to_string(),
94
+ run_id: "runid".to_string(),
95
+ history: hist,
96
+ metrics: MetricsContext::no_op(),
97
+ capabilities: &Default::default(),
98
+ },
89
99
  Box::new(driver).into(),
90
- MetricsContext::no_op(),
91
100
  );
92
101
  let mgr = WorkflowManager::new_from_machines(state_machines);
93
102
  Self {
94
103
  mgr,
95
104
  activation_tx: activations,
105
+ completions_rx,
106
+ completions_sync_tx,
96
107
  future_handle: Some(spawned),
97
108
  was_shutdown: false,
98
109
  }
@@ -100,7 +111,7 @@ impl ManagedWFFunc {
100
111
 
101
112
  #[instrument(skip(self))]
102
113
  pub(crate) async fn get_next_activation(&mut self) -> Result<WorkflowActivation> {
103
- let res = self.mgr.get_next_activation().await?;
114
+ let res = self.mgr.get_next_activation()?;
104
115
  debug!("Managed wf next activation: {}", &res);
105
116
  self.push_activation_to_wf(&res).await?;
106
117
  Ok(res)
@@ -121,7 +132,7 @@ impl ManagedWFFunc {
121
132
  &mut self,
122
133
  update: HistoryUpdate,
123
134
  ) -> Result<WorkflowActivation> {
124
- let res = self.mgr.feed_history_from_server(update).await?;
135
+ let res = self.mgr.feed_history_from_server(update)?;
125
136
  self.push_activation_to_wf(&res).await?;
126
137
  Ok(res)
127
138
  }
@@ -183,7 +194,11 @@ impl ManagedWFFunc {
183
194
  self.activation_tx
184
195
  .send(res.clone())
185
196
  .expect("Workflow should not be dropped if we are still sending activations");
186
- self.mgr.machines.iterate_machines().await?;
197
+ // Move the completion response to the sync workflow bridge
198
+ self.completions_sync_tx
199
+ .send(self.completions_rx.recv().await.unwrap())
200
+ .unwrap();
201
+ self.mgr.machines.iterate_machines()?;
187
202
  Ok(())
188
203
  }
189
204
  }