@temporalio/core-bridge 0.19.2 → 0.20.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Cargo.lock +90 -157
- package/Cargo.toml +1 -0
- package/index.d.ts +11 -27
- package/package.json +3 -3
- 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 +1 -1
- package/sdk-core/.buildkite/docker/docker-compose.yaml +1 -1
- package/sdk-core/.cargo/config.toml +1 -0
- package/sdk-core/CODEOWNERS +1 -1
- package/sdk-core/bridge-ffi/include/sdk-core-bridge.h +119 -86
- package/sdk-core/bridge-ffi/src/lib.rs +311 -315
- package/sdk-core/bridge-ffi/src/wrappers.rs +108 -113
- package/sdk-core/client/Cargo.toml +13 -9
- package/sdk-core/client/LICENSE.txt +23 -0
- package/sdk-core/client/src/lib.rs +286 -174
- package/sdk-core/client/src/metrics.rs +86 -12
- package/sdk-core/client/src/raw.rs +566 -0
- package/sdk-core/client/src/retry.rs +137 -99
- package/sdk-core/core/Cargo.toml +15 -10
- package/sdk-core/core/LICENSE.txt +23 -0
- package/sdk-core/core/benches/workflow_replay.rs +79 -0
- package/sdk-core/core/src/abstractions.rs +38 -0
- package/sdk-core/core/src/core_tests/activity_tasks.rs +108 -182
- package/sdk-core/core/src/core_tests/child_workflows.rs +16 -11
- package/sdk-core/core/src/core_tests/determinism.rs +24 -12
- package/sdk-core/core/src/core_tests/local_activities.rs +53 -27
- package/sdk-core/core/src/core_tests/mod.rs +30 -43
- package/sdk-core/core/src/core_tests/queries.rs +82 -81
- package/sdk-core/core/src/core_tests/workers.rs +111 -296
- package/sdk-core/core/src/core_tests/workflow_cancels.rs +4 -4
- package/sdk-core/core/src/core_tests/workflow_tasks.rs +257 -242
- package/sdk-core/core/src/lib.rs +73 -318
- package/sdk-core/core/src/pollers/mod.rs +4 -6
- package/sdk-core/core/src/pollers/poll_buffer.rs +20 -14
- package/sdk-core/core/src/protosext/mod.rs +7 -10
- package/sdk-core/core/src/replay/mod.rs +11 -150
- package/sdk-core/core/src/telemetry/metrics.rs +35 -2
- package/sdk-core/core/src/telemetry/mod.rs +49 -16
- package/sdk-core/core/src/telemetry/prometheus_server.rs +14 -35
- package/sdk-core/core/src/test_help/mod.rs +104 -170
- package/sdk-core/core/src/worker/activities/activity_heartbeat_manager.rs +57 -34
- package/sdk-core/core/src/worker/activities/local_activities.rs +95 -23
- package/sdk-core/core/src/worker/activities.rs +23 -16
- package/sdk-core/core/src/worker/client/mocks.rs +86 -0
- package/sdk-core/core/src/worker/client.rs +209 -0
- package/sdk-core/core/src/worker/mod.rs +207 -108
- package/sdk-core/core/src/workflow/driven_workflow.rs +21 -6
- package/sdk-core/core/src/workflow/history_update.rs +107 -24
- package/sdk-core/core/src/workflow/machines/activity_state_machine.rs +2 -3
- package/sdk-core/core/src/workflow/machines/child_workflow_state_machine.rs +2 -3
- package/sdk-core/core/src/workflow/machines/mod.rs +20 -17
- package/sdk-core/core/src/workflow/machines/signal_external_state_machine.rs +56 -19
- package/sdk-core/core/src/workflow/machines/transition_coverage.rs +5 -0
- package/sdk-core/core/src/workflow/machines/upsert_search_attributes_state_machine.rs +230 -22
- package/sdk-core/core/src/workflow/machines/workflow_machines.rs +81 -115
- package/sdk-core/core/src/workflow/machines/workflow_task_state_machine.rs +4 -4
- package/sdk-core/core/src/workflow/mod.rs +13 -1
- package/sdk-core/core/src/workflow/workflow_tasks/concurrency_manager.rs +70 -11
- package/sdk-core/core/src/workflow/workflow_tasks/mod.rs +65 -41
- package/sdk-core/core-api/Cargo.toml +9 -1
- package/sdk-core/core-api/LICENSE.txt +23 -0
- package/sdk-core/core-api/src/errors.rs +7 -38
- package/sdk-core/core-api/src/lib.rs +44 -52
- package/sdk-core/core-api/src/worker.rs +10 -2
- package/sdk-core/etc/deps.svg +127 -96
- package/sdk-core/protos/api_upstream/temporal/api/command/v1/message.proto +11 -7
- package/sdk-core/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +10 -0
- package/sdk-core/protos/api_upstream/temporal/api/enums/v1/namespace.proto +6 -1
- package/sdk-core/protos/api_upstream/temporal/api/enums/v1/workflow.proto +6 -0
- package/sdk-core/protos/api_upstream/temporal/api/errordetails/v1/message.proto +6 -0
- package/sdk-core/protos/api_upstream/temporal/api/history/v1/message.proto +2 -1
- package/sdk-core/protos/api_upstream/temporal/api/replication/v1/message.proto +3 -0
- package/sdk-core/protos/api_upstream/temporal/api/workflow/v1/message.proto +12 -0
- package/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +25 -0
- package/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +4 -0
- package/sdk-core/protos/local/temporal/sdk/core/bridge/bridge.proto +19 -35
- package/sdk-core/protos/local/temporal/sdk/core/core_interface.proto +2 -6
- package/sdk-core/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +53 -11
- package/sdk-core/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +14 -7
- package/sdk-core/protos/local/temporal/sdk/core/workflow_completion/workflow_completion.proto +3 -5
- package/sdk-core/sdk/Cargo.toml +16 -2
- package/sdk-core/sdk/LICENSE.txt +23 -0
- package/sdk-core/sdk/src/interceptors.rs +11 -0
- package/sdk-core/sdk/src/lib.rs +139 -151
- package/sdk-core/sdk/src/workflow_context/options.rs +86 -1
- package/sdk-core/sdk/src/workflow_context.rs +36 -17
- package/sdk-core/sdk/src/workflow_future.rs +19 -25
- package/sdk-core/sdk-core-protos/Cargo.toml +1 -1
- package/sdk-core/sdk-core-protos/build.rs +1 -0
- package/sdk-core/sdk-core-protos/src/history_info.rs +17 -4
- package/sdk-core/sdk-core-protos/src/lib.rs +251 -47
- package/sdk-core/test-utils/Cargo.toml +3 -1
- package/sdk-core/test-utils/src/canned_histories.rs +27 -0
- package/sdk-core/test-utils/src/histfetch.rs +3 -3
- package/sdk-core/test-utils/src/lib.rs +223 -68
- package/sdk-core/tests/integ_tests/client_tests.rs +27 -4
- package/sdk-core/tests/integ_tests/heartbeat_tests.rs +93 -14
- package/sdk-core/tests/integ_tests/polling_tests.rs +18 -12
- package/sdk-core/tests/integ_tests/queries_tests.rs +50 -53
- package/sdk-core/tests/integ_tests/workflow_tests/activities.rs +117 -103
- package/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +8 -1
- package/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +10 -5
- package/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +7 -1
- package/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +32 -9
- package/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +7 -1
- package/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +76 -15
- package/sdk-core/tests/integ_tests/workflow_tests/patches.rs +19 -3
- package/sdk-core/tests/integ_tests/workflow_tests/replay.rs +39 -42
- package/sdk-core/tests/integ_tests/workflow_tests/resets.rs +84 -0
- package/sdk-core/tests/integ_tests/workflow_tests/signals.rs +30 -8
- package/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +21 -6
- package/sdk-core/tests/integ_tests/workflow_tests/timers.rs +26 -16
- package/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +66 -0
- package/sdk-core/tests/integ_tests/workflow_tests.rs +78 -74
- package/sdk-core/tests/load_tests.rs +9 -6
- package/sdk-core/tests/main.rs +43 -10
- package/src/conversions.rs +7 -12
- package/src/lib.rs +322 -357
- package/sdk-core/client/src/mocks.rs +0 -167
- package/sdk-core/core/src/worker/dispatcher.rs +0 -171
- package/sdk-core/protos/local/temporal/sdk/core/bridge/service.proto +0 -61
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
use crate::{
|
|
2
2
|
test_help::{
|
|
3
|
-
canned_histories, hist_to_poll_resp,
|
|
3
|
+
canned_histories, hist_to_poll_resp, mock_worker, MocksHolder, ResponseType, TEST_Q,
|
|
4
4
|
},
|
|
5
|
-
|
|
5
|
+
worker::client::mocks::mock_workflow_client,
|
|
6
6
|
};
|
|
7
7
|
use std::{
|
|
8
8
|
collections::{HashMap, VecDeque},
|
|
9
9
|
time::Duration,
|
|
10
10
|
};
|
|
11
|
-
use
|
|
12
|
-
|
|
11
|
+
use temporal_sdk_core_api::Worker as WorkerTrait;
|
|
13
12
|
use temporal_sdk_core_protos::{
|
|
14
13
|
coresdk::{
|
|
15
14
|
workflow_activation::{workflow_activation_job, WorkflowActivationJob},
|
|
@@ -17,6 +16,7 @@ use temporal_sdk_core_protos::{
|
|
|
17
16
|
workflow_completion::WorkflowActivationCompletion,
|
|
18
17
|
},
|
|
19
18
|
temporal::api::{
|
|
19
|
+
common::v1::Payload,
|
|
20
20
|
failure::v1::Failure,
|
|
21
21
|
history::v1::History,
|
|
22
22
|
query::v1::WorkflowQuery,
|
|
@@ -35,6 +35,8 @@ async fn legacy_query(#[case] include_history: bool) {
|
|
|
35
35
|
let wfid = "fake_wf_id";
|
|
36
36
|
let query_resp = "response";
|
|
37
37
|
let t = canned_histories::single_timer("1");
|
|
38
|
+
let mut header = HashMap::new();
|
|
39
|
+
header.insert("head".to_string(), Payload::from(b"er"));
|
|
38
40
|
let tasks = VecDeque::from(vec![
|
|
39
41
|
hist_to_poll_resp(&t, wfid.to_owned(), 1.into(), TEST_Q.to_string()),
|
|
40
42
|
{
|
|
@@ -42,7 +44,7 @@ async fn legacy_query(#[case] include_history: bool) {
|
|
|
42
44
|
pr.query = Some(WorkflowQuery {
|
|
43
45
|
query_type: "query-type".to_string(),
|
|
44
46
|
query_args: Some(b"hi".into()),
|
|
45
|
-
header:
|
|
47
|
+
header: Some(header.into()),
|
|
46
48
|
});
|
|
47
49
|
if !include_history {
|
|
48
50
|
pr.history = Some(History { events: vec![] });
|
|
@@ -51,34 +53,35 @@ async fn legacy_query(#[case] include_history: bool) {
|
|
|
51
53
|
},
|
|
52
54
|
hist_to_poll_resp(&t, wfid.to_owned(), 2.into(), TEST_Q.to_string()),
|
|
53
55
|
]);
|
|
54
|
-
let mut
|
|
55
|
-
|
|
56
|
+
let mut mock_client = mock_workflow_client();
|
|
57
|
+
mock_client
|
|
56
58
|
.expect_complete_workflow_task()
|
|
57
59
|
.returning(|_| Ok(RespondWorkflowTaskCompletedResponse::default()));
|
|
58
|
-
|
|
60
|
+
mock_client
|
|
59
61
|
.expect_respond_legacy_query()
|
|
60
62
|
.times(1)
|
|
61
63
|
.returning(move |_, _| Ok(RespondQueryTaskCompletedResponse::default()));
|
|
62
64
|
|
|
63
|
-
let mut mock = MocksHolder::
|
|
65
|
+
let mut mock = MocksHolder::from_client_with_responses(mock_client, tasks, vec![]);
|
|
64
66
|
if !include_history {
|
|
65
|
-
mock.worker_cfg(
|
|
67
|
+
mock.worker_cfg(|wc| wc.max_cached_workflows = 10);
|
|
66
68
|
}
|
|
67
|
-
let
|
|
69
|
+
let worker = mock_worker(mock);
|
|
68
70
|
|
|
69
71
|
let first_wft = || async {
|
|
70
|
-
let task =
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
72
|
+
let task = worker.poll_workflow_activation().await.unwrap();
|
|
73
|
+
worker
|
|
74
|
+
.complete_workflow_activation(WorkflowActivationCompletion::from_cmd(
|
|
75
|
+
task.run_id,
|
|
76
|
+
start_timer_cmd(1, Duration::from_secs(1)),
|
|
77
|
+
))
|
|
78
|
+
.await
|
|
79
|
+
.unwrap();
|
|
78
80
|
};
|
|
79
81
|
let clear_eviction = || async {
|
|
80
|
-
let t =
|
|
81
|
-
|
|
82
|
+
let t = worker.poll_workflow_activation().await.unwrap();
|
|
83
|
+
worker
|
|
84
|
+
.complete_workflow_activation(WorkflowActivationCompletion::empty(t.run_id))
|
|
82
85
|
.await
|
|
83
86
|
.unwrap();
|
|
84
87
|
};
|
|
@@ -90,7 +93,7 @@ async fn legacy_query(#[case] include_history: bool) {
|
|
|
90
93
|
first_wft().await;
|
|
91
94
|
}
|
|
92
95
|
|
|
93
|
-
let task =
|
|
96
|
+
let task = worker.poll_workflow_activation().await.unwrap();
|
|
94
97
|
// Poll again, and we end up getting a `query` field query response
|
|
95
98
|
let query = assert_matches!(
|
|
96
99
|
task.jobs.as_slice(),
|
|
@@ -98,44 +101,45 @@ async fn legacy_query(#[case] include_history: bool) {
|
|
|
98
101
|
variant: Some(workflow_activation_job::Variant::QueryWorkflow(q)),
|
|
99
102
|
}] => q
|
|
100
103
|
);
|
|
104
|
+
assert_eq!(query.headers.get("head").unwrap(), &b"er".into());
|
|
101
105
|
// Complete the query
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
106
|
+
worker
|
|
107
|
+
.complete_workflow_activation(WorkflowActivationCompletion::from_cmd(
|
|
108
|
+
task.run_id,
|
|
109
|
+
QueryResult {
|
|
110
|
+
query_id: query.query_id.clone(),
|
|
111
|
+
variant: Some(
|
|
112
|
+
QuerySuccess {
|
|
113
|
+
response: Some(query_resp.into()),
|
|
114
|
+
}
|
|
115
|
+
.into(),
|
|
116
|
+
),
|
|
117
|
+
}
|
|
118
|
+
.into(),
|
|
119
|
+
))
|
|
120
|
+
.await
|
|
121
|
+
.unwrap();
|
|
118
122
|
|
|
119
123
|
if include_history {
|
|
120
124
|
clear_eviction().await;
|
|
121
125
|
first_wft().await;
|
|
122
126
|
}
|
|
123
127
|
|
|
124
|
-
let task =
|
|
128
|
+
let task = worker.poll_workflow_activation().await.unwrap();
|
|
125
129
|
assert_matches!(
|
|
126
130
|
task.jobs.as_slice(),
|
|
127
131
|
[WorkflowActivationJob {
|
|
128
132
|
variant: Some(workflow_activation_job::Variant::FireTimer(_)),
|
|
129
133
|
}]
|
|
130
134
|
);
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
135
|
+
worker
|
|
136
|
+
.complete_workflow_activation(WorkflowActivationCompletion::from_cmds(
|
|
137
|
+
task.run_id,
|
|
138
|
+
vec![CompleteWorkflowExecution { result: None }.into()],
|
|
139
|
+
))
|
|
140
|
+
.await
|
|
141
|
+
.unwrap();
|
|
142
|
+
worker.shutdown().await;
|
|
139
143
|
}
|
|
140
144
|
|
|
141
145
|
#[rstest::rstest]
|
|
@@ -146,6 +150,8 @@ async fn new_queries(#[case] num_queries: usize) {
|
|
|
146
150
|
let wfid = "fake_wf_id";
|
|
147
151
|
let query_resp = "response";
|
|
148
152
|
let t = canned_histories::single_timer("1");
|
|
153
|
+
let mut header = HashMap::new();
|
|
154
|
+
header.insert("head".to_string(), Payload::from(b"er"));
|
|
149
155
|
let tasks = VecDeque::from(vec![
|
|
150
156
|
hist_to_poll_resp(&t, wfid.to_owned(), 1.into(), TEST_Q.to_string()),
|
|
151
157
|
{
|
|
@@ -157,33 +163,32 @@ async fn new_queries(#[case] num_queries: usize) {
|
|
|
157
163
|
WorkflowQuery {
|
|
158
164
|
query_type: "query-type".to_string(),
|
|
159
165
|
query_args: Some(b"hi".into()),
|
|
160
|
-
header:
|
|
166
|
+
header: Some(header.clone().into()),
|
|
161
167
|
},
|
|
162
168
|
);
|
|
163
169
|
}
|
|
164
170
|
pr
|
|
165
171
|
},
|
|
166
172
|
]);
|
|
167
|
-
let mut
|
|
168
|
-
|
|
173
|
+
let mut mock_client = mock_workflow_client();
|
|
174
|
+
mock_client
|
|
169
175
|
.expect_complete_workflow_task()
|
|
170
176
|
.returning(|_| Ok(RespondWorkflowTaskCompletedResponse::default()));
|
|
171
|
-
|
|
177
|
+
mock_client.expect_respond_legacy_query().times(0);
|
|
172
178
|
|
|
173
|
-
let mut mock = MocksHolder::
|
|
174
|
-
mock.worker_cfg(
|
|
175
|
-
let core =
|
|
179
|
+
let mut mock = MocksHolder::from_client_with_responses(mock_client, tasks, vec![]);
|
|
180
|
+
mock.worker_cfg(|wc| wc.max_cached_workflows = 10);
|
|
181
|
+
let core = mock_worker(mock);
|
|
176
182
|
|
|
177
|
-
let task = core.poll_workflow_activation(
|
|
183
|
+
let task = core.poll_workflow_activation().await.unwrap();
|
|
178
184
|
core.complete_workflow_activation(WorkflowActivationCompletion::from_cmd(
|
|
179
|
-
TEST_Q,
|
|
180
185
|
task.run_id,
|
|
181
186
|
start_timer_cmd(1, Duration::from_secs(1)),
|
|
182
187
|
))
|
|
183
188
|
.await
|
|
184
189
|
.unwrap();
|
|
185
190
|
|
|
186
|
-
let task = core.poll_workflow_activation(
|
|
191
|
+
let task = core.poll_workflow_activation().await.unwrap();
|
|
187
192
|
assert_matches!(
|
|
188
193
|
task.jobs[0],
|
|
189
194
|
WorkflowActivationJob {
|
|
@@ -194,7 +199,9 @@ async fn new_queries(#[case] num_queries: usize) {
|
|
|
194
199
|
assert_matches!(
|
|
195
200
|
task.jobs[i],
|
|
196
201
|
WorkflowActivationJob {
|
|
197
|
-
variant: Some(workflow_activation_job::Variant::QueryWorkflow(
|
|
202
|
+
variant: Some(workflow_activation_job::Variant::QueryWorkflow(ref q)),
|
|
203
|
+
} => {
|
|
204
|
+
assert_eq!(q.headers.get("head").unwrap(), &b"er".into());
|
|
198
205
|
}
|
|
199
206
|
);
|
|
200
207
|
}
|
|
@@ -214,7 +221,6 @@ async fn new_queries(#[case] num_queries: usize) {
|
|
|
214
221
|
.collect();
|
|
215
222
|
qresults.push(CompleteWorkflowExecution { result: None }.into());
|
|
216
223
|
core.complete_workflow_activation(WorkflowActivationCompletion::from_cmds(
|
|
217
|
-
TEST_Q,
|
|
218
224
|
task.run_id,
|
|
219
225
|
qresults,
|
|
220
226
|
))
|
|
@@ -241,29 +247,28 @@ async fn legacy_query_failure_on_wft_failure() {
|
|
|
241
247
|
},
|
|
242
248
|
hist_to_poll_resp(&t, wfid.to_owned(), 2.into(), TEST_Q.to_string()),
|
|
243
249
|
]);
|
|
244
|
-
let mut
|
|
245
|
-
|
|
250
|
+
let mut mock_client = mock_workflow_client();
|
|
251
|
+
mock_client
|
|
246
252
|
.expect_complete_workflow_task()
|
|
247
253
|
.returning(|_| Ok(RespondWorkflowTaskCompletedResponse::default()));
|
|
248
|
-
|
|
254
|
+
mock_client
|
|
249
255
|
.expect_respond_legacy_query()
|
|
250
256
|
.times(1)
|
|
251
257
|
.returning(move |_, _| Ok(RespondQueryTaskCompletedResponse::default()));
|
|
252
258
|
|
|
253
|
-
let mut mock = MocksHolder::
|
|
254
|
-
mock.worker_cfg(
|
|
255
|
-
let core =
|
|
259
|
+
let mut mock = MocksHolder::from_client_with_responses(mock_client, tasks, vec![]);
|
|
260
|
+
mock.worker_cfg(|wc| wc.max_cached_workflows = 10);
|
|
261
|
+
let core = mock_worker(mock);
|
|
256
262
|
|
|
257
|
-
let task = core.poll_workflow_activation(
|
|
263
|
+
let task = core.poll_workflow_activation().await.unwrap();
|
|
258
264
|
core.complete_workflow_activation(WorkflowActivationCompletion::from_cmd(
|
|
259
|
-
TEST_Q,
|
|
260
265
|
task.run_id,
|
|
261
266
|
start_timer_cmd(1, Duration::from_secs(1)),
|
|
262
267
|
))
|
|
263
268
|
.await
|
|
264
269
|
.unwrap();
|
|
265
270
|
|
|
266
|
-
let task = core.poll_workflow_activation(
|
|
271
|
+
let task = core.poll_workflow_activation().await.unwrap();
|
|
267
272
|
// Poll again, and we end up getting a `query` field query response
|
|
268
273
|
assert_matches!(
|
|
269
274
|
task.jobs.as_slice(),
|
|
@@ -273,7 +278,6 @@ async fn legacy_query_failure_on_wft_failure() {
|
|
|
273
278
|
);
|
|
274
279
|
// Fail wft which should result in query being failed
|
|
275
280
|
core.complete_workflow_activation(WorkflowActivationCompletion::fail(
|
|
276
|
-
TEST_Q,
|
|
277
281
|
task.run_id,
|
|
278
282
|
Failure {
|
|
279
283
|
message: "Ahh i broke".to_string(),
|
|
@@ -321,30 +325,28 @@ async fn legacy_query_after_complete(#[values(false, true)] full_history: bool)
|
|
|
321
325
|
query_with_hist_task.clone(),
|
|
322
326
|
query_with_hist_task,
|
|
323
327
|
]);
|
|
324
|
-
let mut
|
|
325
|
-
|
|
328
|
+
let mut mock_client = mock_workflow_client();
|
|
329
|
+
mock_client
|
|
326
330
|
.expect_complete_workflow_task()
|
|
327
331
|
.returning(|_| Ok(RespondWorkflowTaskCompletedResponse::default()));
|
|
328
|
-
|
|
332
|
+
mock_client
|
|
329
333
|
.expect_respond_legacy_query()
|
|
330
334
|
.times(2)
|
|
331
335
|
.returning(move |_, _| Ok(RespondQueryTaskCompletedResponse::default()));
|
|
332
336
|
|
|
333
|
-
let mut mock = MocksHolder::
|
|
334
|
-
mock.worker_cfg(
|
|
335
|
-
let core =
|
|
337
|
+
let mut mock = MocksHolder::from_client_with_responses(mock_client, tasks, vec![]);
|
|
338
|
+
mock.worker_cfg(|wc| wc.max_cached_workflows = 10);
|
|
339
|
+
let core = mock_worker(mock);
|
|
336
340
|
|
|
337
|
-
let task = core.poll_workflow_activation(
|
|
341
|
+
let task = core.poll_workflow_activation().await.unwrap();
|
|
338
342
|
core.complete_workflow_activation(WorkflowActivationCompletion::from_cmd(
|
|
339
|
-
TEST_Q,
|
|
340
343
|
task.run_id,
|
|
341
344
|
start_timer_cmd(1, Duration::from_secs(1)),
|
|
342
345
|
))
|
|
343
346
|
.await
|
|
344
347
|
.unwrap();
|
|
345
|
-
let task = core.poll_workflow_activation(
|
|
348
|
+
let task = core.poll_workflow_activation().await.unwrap();
|
|
346
349
|
core.complete_workflow_activation(WorkflowActivationCompletion::from_cmds(
|
|
347
|
-
TEST_Q,
|
|
348
350
|
task.run_id,
|
|
349
351
|
vec![CompleteWorkflowExecution { result: None }.into()],
|
|
350
352
|
))
|
|
@@ -353,7 +355,7 @@ async fn legacy_query_after_complete(#[values(false, true)] full_history: bool)
|
|
|
353
355
|
|
|
354
356
|
// We should get queries two times
|
|
355
357
|
for _ in 1..=2 {
|
|
356
|
-
let task = core.poll_workflow_activation(
|
|
358
|
+
let task = core.poll_workflow_activation().await.unwrap();
|
|
357
359
|
let query = assert_matches!(
|
|
358
360
|
task.jobs.as_slice(),
|
|
359
361
|
[WorkflowActivationJob {
|
|
@@ -361,7 +363,6 @@ async fn legacy_query_after_complete(#[values(false, true)] full_history: bool)
|
|
|
361
363
|
}] => q
|
|
362
364
|
);
|
|
363
365
|
core.complete_workflow_activation(WorkflowActivationCompletion::from_cmd(
|
|
364
|
-
TEST_Q,
|
|
365
366
|
task.run_id,
|
|
366
367
|
QueryResult {
|
|
367
368
|
query_id: query.query_id.clone(),
|