@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
|
@@ -23,7 +23,7 @@ use temporal_sdk_core_protos::{
|
|
|
23
23
|
},
|
|
24
24
|
temporal::api::{
|
|
25
25
|
common::v1::Payload,
|
|
26
|
-
enums::v1::EventType,
|
|
26
|
+
enums::v1::{CommandType, EventType},
|
|
27
27
|
failure::v1::Failure,
|
|
28
28
|
history::v1::{history_event, ActivityTaskCancelRequestedEventAttributes, History},
|
|
29
29
|
query::v1::WorkflowQuery,
|
|
@@ -148,10 +148,11 @@ async fn legacy_query(#[case] include_history: bool) {
|
|
|
148
148
|
}
|
|
149
149
|
|
|
150
150
|
#[rstest::rstest]
|
|
151
|
-
#[case::one_query(1)]
|
|
152
|
-
#[case::multiple_queries(3)]
|
|
153
151
|
#[tokio::test]
|
|
154
|
-
async fn new_queries(
|
|
152
|
+
async fn new_queries(
|
|
153
|
+
#[values(1, 3)] num_queries: usize,
|
|
154
|
+
#[values(false, true)] query_results_after_complete: bool,
|
|
155
|
+
) {
|
|
155
156
|
let wfid = "fake_wf_id";
|
|
156
157
|
let query_resp = "response";
|
|
157
158
|
let t = canned_histories::single_timer("1");
|
|
@@ -162,7 +163,7 @@ async fn new_queries(#[case] num_queries: usize) {
|
|
|
162
163
|
pr.queries = HashMap::new();
|
|
163
164
|
for i in 1..=num_queries {
|
|
164
165
|
pr.queries.insert(
|
|
165
|
-
format!("q{}"
|
|
166
|
+
format!("q{i}"),
|
|
166
167
|
WorkflowQuery {
|
|
167
168
|
query_type: "query-type".to_string(),
|
|
168
169
|
query_args: Some(b"hi".into()),
|
|
@@ -174,7 +175,18 @@ async fn new_queries(#[case] num_queries: usize) {
|
|
|
174
175
|
}]);
|
|
175
176
|
let mut mock_client = mock_workflow_client();
|
|
176
177
|
mock_client.expect_respond_legacy_query().times(0);
|
|
177
|
-
let mut
|
|
178
|
+
let mut mh = MockPollCfg::from_resp_batches(wfid, t, tasks, mock_workflow_client());
|
|
179
|
+
mh.completion_asserts = Some(Box::new(move |c| {
|
|
180
|
+
// If the completion is the one ending the workflow, make sure it includes the query resps
|
|
181
|
+
if c.commands[0].command_type() == CommandType::CompleteWorkflowExecution {
|
|
182
|
+
assert_eq!(c.query_responses.len(), num_queries);
|
|
183
|
+
} else if c.commands[0].command_type() == CommandType::StartTimer {
|
|
184
|
+
// first reply, no queries here.
|
|
185
|
+
} else {
|
|
186
|
+
panic!("Unexpected command in response")
|
|
187
|
+
}
|
|
188
|
+
}));
|
|
189
|
+
let mut mock = build_mock_pollers(mh);
|
|
178
190
|
mock.worker_cfg(|wc| wc.max_cached_workflows = 10);
|
|
179
191
|
let core = mock_worker(mock);
|
|
180
192
|
|
|
@@ -203,10 +215,15 @@ async fn new_queries(#[case] num_queries: usize) {
|
|
|
203
215
|
}
|
|
204
216
|
);
|
|
205
217
|
}
|
|
206
|
-
|
|
207
|
-
|
|
218
|
+
|
|
219
|
+
let mut commands = vec![];
|
|
220
|
+
if query_results_after_complete {
|
|
221
|
+
commands.push(CompleteWorkflowExecution { result: None }.into());
|
|
222
|
+
}
|
|
223
|
+
for i in 1..=num_queries {
|
|
224
|
+
commands.push(
|
|
208
225
|
QueryResult {
|
|
209
|
-
query_id: format!("q{}"
|
|
226
|
+
query_id: format!("q{i}"),
|
|
210
227
|
variant: Some(
|
|
211
228
|
QuerySuccess {
|
|
212
229
|
response: Some(query_resp.into()),
|
|
@@ -214,13 +231,15 @@ async fn new_queries(#[case] num_queries: usize) {
|
|
|
214
231
|
.into(),
|
|
215
232
|
),
|
|
216
233
|
}
|
|
217
|
-
.into()
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
234
|
+
.into(),
|
|
235
|
+
);
|
|
236
|
+
}
|
|
237
|
+
if !query_results_after_complete {
|
|
238
|
+
commands.push(CompleteWorkflowExecution { result: None }.into());
|
|
239
|
+
}
|
|
221
240
|
core.complete_workflow_activation(WorkflowActivationCompletion::from_cmds(
|
|
222
241
|
task.run_id,
|
|
223
|
-
|
|
242
|
+
commands,
|
|
224
243
|
))
|
|
225
244
|
.await
|
|
226
245
|
.unwrap();
|
|
@@ -769,11 +788,10 @@ async fn legacy_query_combined_with_timer_fire_repro() {
|
|
|
769
788
|
t.add_by_type(EventType::WorkflowExecutionStarted);
|
|
770
789
|
t.add_full_wf_task();
|
|
771
790
|
let scheduled_event_id = t.add_activity_task_scheduled("1");
|
|
772
|
-
let timer_started_event_id = t.
|
|
791
|
+
let timer_started_event_id = t.add_by_type(EventType::TimerStarted);
|
|
773
792
|
t.add_timer_fired(timer_started_event_id, "1".to_string());
|
|
774
793
|
t.add_full_wf_task();
|
|
775
794
|
t.add(
|
|
776
|
-
EventType::ActivityTaskCancelRequested,
|
|
777
795
|
history_event::Attributes::ActivityTaskCancelRequestedEventAttributes(
|
|
778
796
|
ActivityTaskCancelRequestedEventAttributes {
|
|
779
797
|
scheduled_event_id,
|
|
@@ -2,7 +2,7 @@ use crate::{
|
|
|
2
2
|
prost_dur,
|
|
3
3
|
test_help::{
|
|
4
4
|
build_fake_worker, build_mock_pollers, canned_histories, mock_manual_poller, mock_worker,
|
|
5
|
-
MockPollCfg, MockWorkerInputs, MocksHolder, ResponseType,
|
|
5
|
+
MockPollCfg, MockWorkerInputs, MocksHolder, ResponseType, WorkerExt,
|
|
6
6
|
},
|
|
7
7
|
worker::client::mocks::mock_workflow_client,
|
|
8
8
|
PollActivityError, PollWfError,
|
|
@@ -144,13 +144,18 @@ async fn can_shutdown_local_act_only_worker_when_act_polling() {
|
|
|
144
144
|
.await
|
|
145
145
|
.unwrap();
|
|
146
146
|
barrier.wait().await;
|
|
147
|
+
// We need to see workflow poll return shutdown before activity poll will
|
|
148
|
+
assert_matches!(
|
|
149
|
+
worker.poll_workflow_activation().await.unwrap_err(),
|
|
150
|
+
PollWfError::ShutDown
|
|
151
|
+
);
|
|
147
152
|
assert_matches!(
|
|
148
153
|
worker.poll_activity_task().await.unwrap_err(),
|
|
149
154
|
PollActivityError::ShutDown
|
|
150
155
|
);
|
|
151
156
|
}
|
|
152
157
|
);
|
|
153
|
-
worker.
|
|
158
|
+
worker.drain_pollers_and_shutdown().await;
|
|
154
159
|
}
|
|
155
160
|
|
|
156
161
|
#[tokio::test]
|
|
@@ -190,9 +195,7 @@ async fn complete_with_task_not_found_during_shutdown() {
|
|
|
190
195
|
complete_order.borrow_mut().push(1);
|
|
191
196
|
};
|
|
192
197
|
tokio::join!(shutdown_fut, poll_fut, complete_fut);
|
|
193
|
-
|
|
194
|
-
// workflow task is marked complete as soon as we get not found back from the server.
|
|
195
|
-
assert_eq!(&complete_order.into_inner(), &[1, 3, 2])
|
|
198
|
+
assert_eq!(&complete_order.into_inner(), &[1, 2, 3])
|
|
196
199
|
}
|
|
197
200
|
|
|
198
201
|
#[tokio::test]
|