@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.
- package/Cargo.lock +304 -112
- package/lib/index.d.ts +8 -6
- package/lib/index.js.map +1 -1
- package/package.json +9 -4
- package/releases/aarch64-apple-darwin/index.node +0 -0
- package/releases/aarch64-unknown-linux-gnu/index.node +0 -0
- package/releases/x86_64-apple-darwin/index.node +0 -0
- package/releases/x86_64-pc-windows-msvc/index.node +0 -0
- package/releases/x86_64-unknown-linux-gnu/index.node +0 -0
- package/sdk-core/.buildkite/docker/Dockerfile +2 -2
- package/sdk-core/.buildkite/docker/docker-compose.yaml +1 -1
- package/sdk-core/.buildkite/pipeline.yml +2 -4
- package/sdk-core/.cargo/config.toml +5 -2
- package/sdk-core/.github/workflows/heavy.yml +29 -0
- package/sdk-core/Cargo.toml +1 -1
- package/sdk-core/README.md +20 -10
- package/sdk-core/client/src/lib.rs +215 -39
- package/sdk-core/client/src/metrics.rs +17 -8
- package/sdk-core/client/src/raw.rs +4 -4
- package/sdk-core/client/src/retry.rs +32 -20
- package/sdk-core/core/Cargo.toml +25 -12
- package/sdk-core/core/src/abstractions/take_cell.rs +28 -0
- package/sdk-core/core/src/abstractions.rs +204 -14
- package/sdk-core/core/src/core_tests/activity_tasks.rs +143 -50
- package/sdk-core/core/src/core_tests/child_workflows.rs +6 -5
- package/sdk-core/core/src/core_tests/determinism.rs +165 -2
- package/sdk-core/core/src/core_tests/local_activities.rs +431 -43
- package/sdk-core/core/src/core_tests/queries.rs +34 -16
- package/sdk-core/core/src/core_tests/workers.rs +8 -5
- package/sdk-core/core/src/core_tests/workflow_tasks.rs +588 -55
- package/sdk-core/core/src/ephemeral_server/mod.rs +113 -12
- package/sdk-core/core/src/internal_flags.rs +155 -0
- package/sdk-core/core/src/lib.rs +16 -9
- package/sdk-core/core/src/protosext/mod.rs +1 -1
- package/sdk-core/core/src/replay/mod.rs +16 -27
- package/sdk-core/core/src/telemetry/log_export.rs +1 -1
- package/sdk-core/core/src/telemetry/metrics.rs +69 -35
- package/sdk-core/core/src/telemetry/mod.rs +60 -21
- package/sdk-core/core/src/telemetry/prometheus_server.rs +19 -13
- package/sdk-core/core/src/test_help/mod.rs +73 -14
- package/sdk-core/core/src/worker/activities/activity_heartbeat_manager.rs +119 -160
- package/sdk-core/core/src/worker/activities/activity_task_poller_stream.rs +89 -0
- package/sdk-core/core/src/worker/activities/local_activities.rs +379 -129
- package/sdk-core/core/src/worker/activities.rs +350 -175
- package/sdk-core/core/src/worker/client/mocks.rs +22 -2
- package/sdk-core/core/src/worker/client.rs +18 -2
- package/sdk-core/core/src/worker/mod.rs +183 -64
- package/sdk-core/core/src/worker/workflow/bridge.rs +1 -3
- package/sdk-core/core/src/worker/workflow/driven_workflow.rs +3 -5
- package/sdk-core/core/src/worker/workflow/history_update.rs +916 -277
- package/sdk-core/core/src/worker/workflow/machines/activity_state_machine.rs +216 -183
- package/sdk-core/core/src/worker/workflow/machines/cancel_external_state_machine.rs +9 -12
- package/sdk-core/core/src/worker/workflow/machines/cancel_workflow_state_machine.rs +7 -9
- package/sdk-core/core/src/worker/workflow/machines/child_workflow_state_machine.rs +160 -87
- package/sdk-core/core/src/worker/workflow/machines/complete_workflow_state_machine.rs +13 -14
- package/sdk-core/core/src/worker/workflow/machines/continue_as_new_workflow_state_machine.rs +7 -9
- package/sdk-core/core/src/worker/workflow/machines/fail_workflow_state_machine.rs +14 -17
- package/sdk-core/core/src/worker/workflow/machines/local_activity_state_machine.rs +242 -110
- package/sdk-core/core/src/worker/workflow/machines/mod.rs +27 -19
- package/sdk-core/core/src/worker/workflow/machines/modify_workflow_properties_state_machine.rs +9 -11
- package/sdk-core/core/src/worker/workflow/machines/patch_state_machine.rs +321 -206
- package/sdk-core/core/src/worker/workflow/machines/signal_external_state_machine.rs +13 -18
- package/sdk-core/core/src/worker/workflow/machines/timer_state_machine.rs +20 -29
- package/sdk-core/core/src/worker/workflow/machines/transition_coverage.rs +2 -2
- package/sdk-core/core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +257 -51
- package/sdk-core/core/src/worker/workflow/machines/workflow_machines/local_acts.rs +6 -17
- package/sdk-core/core/src/worker/workflow/machines/workflow_machines.rs +310 -150
- package/sdk-core/core/src/worker/workflow/machines/workflow_task_state_machine.rs +17 -20
- package/sdk-core/core/src/worker/workflow/managed_run/managed_wf_test.rs +31 -15
- package/sdk-core/core/src/worker/workflow/managed_run.rs +1052 -380
- package/sdk-core/core/src/worker/workflow/mod.rs +598 -390
- package/sdk-core/core/src/worker/workflow/run_cache.rs +40 -57
- package/sdk-core/core/src/worker/workflow/wft_extraction.rs +137 -0
- package/sdk-core/core/src/worker/workflow/wft_poller.rs +1 -4
- package/sdk-core/core/src/worker/workflow/workflow_stream/saved_wf_inputs.rs +117 -0
- package/sdk-core/core/src/worker/workflow/workflow_stream/tonic_status_serde.rs +24 -0
- package/sdk-core/core/src/worker/workflow/workflow_stream.rs +469 -718
- package/sdk-core/core-api/Cargo.toml +2 -1
- package/sdk-core/core-api/src/errors.rs +1 -34
- package/sdk-core/core-api/src/lib.rs +19 -9
- package/sdk-core/core-api/src/telemetry.rs +4 -6
- package/sdk-core/core-api/src/worker.rs +19 -1
- package/sdk-core/etc/deps.svg +115 -140
- package/sdk-core/etc/regen-depgraph.sh +5 -0
- package/sdk-core/fsm/rustfsm_procmacro/src/lib.rs +86 -61
- package/sdk-core/fsm/rustfsm_trait/src/lib.rs +29 -71
- package/sdk-core/histories/ends_empty_wft_complete.bin +0 -0
- package/sdk-core/histories/evict_while_la_running_no_interference-16_history.bin +0 -0
- package/sdk-core/histories/old_change_marker_format.bin +0 -0
- package/sdk-core/protos/api_upstream/.github/CODEOWNERS +2 -1
- package/sdk-core/protos/api_upstream/Makefile +6 -6
- package/sdk-core/protos/api_upstream/build/go.mod +7 -0
- package/sdk-core/protos/api_upstream/build/go.sum +5 -0
- package/sdk-core/protos/api_upstream/build/tools.go +29 -0
- package/sdk-core/protos/api_upstream/go.mod +6 -0
- package/sdk-core/protos/api_upstream/temporal/api/batch/v1/message.proto +9 -2
- package/sdk-core/protos/api_upstream/temporal/api/command/v1/message.proto +7 -26
- package/sdk-core/protos/api_upstream/temporal/api/common/v1/message.proto +13 -2
- package/sdk-core/protos/api_upstream/temporal/api/enums/v1/batch_operation.proto +3 -2
- package/sdk-core/protos/api_upstream/temporal/api/enums/v1/command_type.proto +3 -7
- package/sdk-core/protos/api_upstream/temporal/api/enums/v1/common.proto +3 -2
- package/sdk-core/protos/api_upstream/temporal/api/enums/v1/event_type.proto +8 -8
- package/sdk-core/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +25 -2
- package/sdk-core/protos/api_upstream/temporal/api/enums/v1/namespace.proto +2 -2
- package/sdk-core/protos/api_upstream/temporal/api/enums/v1/query.proto +2 -2
- package/sdk-core/protos/api_upstream/temporal/api/enums/v1/reset.proto +2 -2
- package/sdk-core/protos/api_upstream/temporal/api/enums/v1/schedule.proto +2 -2
- package/sdk-core/protos/api_upstream/temporal/api/enums/v1/task_queue.proto +2 -2
- package/sdk-core/protos/api_upstream/temporal/api/enums/v1/update.proto +24 -19
- package/sdk-core/protos/api_upstream/temporal/api/enums/v1/workflow.proto +2 -2
- package/sdk-core/protos/api_upstream/temporal/api/errordetails/v1/message.proto +2 -2
- package/sdk-core/protos/api_upstream/temporal/api/failure/v1/message.proto +2 -2
- package/sdk-core/protos/api_upstream/temporal/api/filter/v1/message.proto +2 -2
- package/sdk-core/protos/api_upstream/temporal/api/history/v1/message.proto +49 -26
- package/sdk-core/protos/api_upstream/temporal/api/namespace/v1/message.proto +4 -2
- package/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/request_response.proto +5 -2
- package/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/service.proto +2 -2
- package/sdk-core/protos/api_upstream/temporal/api/protocol/v1/message.proto +57 -0
- package/sdk-core/protos/api_upstream/temporal/api/query/v1/message.proto +2 -2
- package/sdk-core/protos/api_upstream/temporal/api/replication/v1/message.proto +2 -2
- package/sdk-core/protos/api_upstream/temporal/api/schedule/v1/message.proto +2 -2
- package/sdk-core/protos/api_upstream/temporal/api/sdk/v1/task_complete_metadata.proto +63 -0
- package/sdk-core/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +2 -2
- package/sdk-core/protos/api_upstream/temporal/api/update/v1/message.proto +71 -6
- package/sdk-core/protos/api_upstream/temporal/api/version/v1/message.proto +2 -2
- package/sdk-core/protos/api_upstream/temporal/api/workflow/v1/message.proto +2 -2
- package/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +64 -28
- package/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +4 -4
- package/sdk-core/protos/local/temporal/sdk/core/activity_result/activity_result.proto +7 -8
- package/sdk-core/protos/local/temporal/sdk/core/activity_task/activity_task.proto +10 -7
- package/sdk-core/protos/local/temporal/sdk/core/child_workflow/child_workflow.proto +19 -30
- package/sdk-core/protos/local/temporal/sdk/core/common/common.proto +1 -0
- package/sdk-core/protos/local/temporal/sdk/core/core_interface.proto +1 -0
- package/sdk-core/protos/local/temporal/sdk/core/external_data/external_data.proto +8 -0
- package/sdk-core/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +67 -60
- package/sdk-core/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +85 -84
- package/sdk-core/protos/local/temporal/sdk/core/workflow_completion/workflow_completion.proto +9 -3
- package/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/request_response.proto +2 -2
- package/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/service.proto +2 -2
- package/sdk-core/sdk/Cargo.toml +5 -4
- package/sdk-core/sdk/src/lib.rs +108 -26
- package/sdk-core/sdk/src/workflow_context/options.rs +7 -1
- package/sdk-core/sdk/src/workflow_context.rs +24 -17
- package/sdk-core/sdk/src/workflow_future.rs +16 -15
- package/sdk-core/sdk-core-protos/Cargo.toml +5 -2
- package/sdk-core/sdk-core-protos/build.rs +36 -2
- package/sdk-core/sdk-core-protos/src/history_builder.rs +138 -106
- package/sdk-core/sdk-core-protos/src/history_info.rs +10 -1
- package/sdk-core/sdk-core-protos/src/lib.rs +272 -87
- package/sdk-core/sdk-core-protos/src/task_token.rs +12 -2
- package/sdk-core/test-utils/Cargo.toml +3 -1
- package/sdk-core/test-utils/src/canned_histories.rs +106 -296
- package/sdk-core/test-utils/src/histfetch.rs +1 -1
- package/sdk-core/test-utils/src/lib.rs +82 -23
- package/sdk-core/test-utils/src/wf_input_saver.rs +50 -0
- package/sdk-core/test-utils/src/workflows.rs +29 -0
- package/sdk-core/tests/fuzzy_workflow.rs +130 -0
- package/sdk-core/tests/{load_tests.rs → heavy_tests.rs} +125 -51
- package/sdk-core/tests/integ_tests/ephemeral_server_tests.rs +25 -3
- package/sdk-core/tests/integ_tests/heartbeat_tests.rs +10 -5
- package/sdk-core/tests/integ_tests/metrics_tests.rs +218 -16
- package/sdk-core/tests/integ_tests/polling_tests.rs +4 -47
- package/sdk-core/tests/integ_tests/queries_tests.rs +5 -128
- package/sdk-core/tests/integ_tests/visibility_tests.rs +83 -25
- package/sdk-core/tests/integ_tests/workflow_tests/activities.rs +161 -72
- package/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +1 -0
- package/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +6 -13
- package/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +80 -3
- package/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +6 -2
- package/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +3 -10
- package/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +94 -200
- package/sdk-core/tests/integ_tests/workflow_tests/modify_wf_properties.rs +2 -4
- package/sdk-core/tests/integ_tests/workflow_tests/patches.rs +34 -28
- package/sdk-core/tests/integ_tests/workflow_tests/replay.rs +76 -7
- package/sdk-core/tests/integ_tests/workflow_tests/resets.rs +1 -0
- package/sdk-core/tests/integ_tests/workflow_tests/signals.rs +18 -14
- package/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +6 -20
- package/sdk-core/tests/integ_tests/workflow_tests/timers.rs +10 -21
- package/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +7 -8
- package/sdk-core/tests/integ_tests/workflow_tests.rs +13 -14
- package/sdk-core/tests/main.rs +3 -13
- package/sdk-core/tests/runner.rs +75 -36
- package/sdk-core/tests/wf_input_replay.rs +32 -0
- package/src/conversions.rs +14 -8
- package/src/runtime.rs +9 -8
- package/ts/index.ts +8 -6
- package/sdk-core/bridge-ffi/Cargo.toml +0 -24
- package/sdk-core/bridge-ffi/LICENSE.txt +0 -23
- package/sdk-core/bridge-ffi/build.rs +0 -25
- package/sdk-core/bridge-ffi/include/sdk-core-bridge.h +0 -224
- package/sdk-core/bridge-ffi/src/lib.rs +0 -746
- package/sdk-core/bridge-ffi/src/wrappers.rs +0 -221
- package/sdk-core/protos/local/temporal/sdk/core/bridge/bridge.proto +0 -210
- 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
|
|
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
|
-
|
|
36
|
-
|
|
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({})"
|
|
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
|
|
67
|
-
(ei.event_id, ei.event_type
|
|
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<
|
|
104
|
+
impl TryFrom<HistEventData> for WorkflowTaskMachineEvents {
|
|
106
105
|
type Error = WFMachinesError;
|
|
107
106
|
|
|
108
|
-
fn try_from(e:
|
|
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,
|
|
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
|
-
|
|
33
|
+
completions_q: crossbeam::channel::Receiver<WorkflowActivationCompletion>,
|
|
31
34
|
}
|
|
32
35
|
|
|
33
|
-
#[async_trait::async_trait]
|
|
34
36
|
impl WorkflowFetcher for WFFutureDriver {
|
|
35
|
-
|
|
36
|
-
if let
|
|
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
|
|
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
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
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()
|
|
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)
|
|
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
|
-
|
|
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
|
}
|