@temporalio/core-bridge 0.17.2 → 0.18.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 +339 -226
- package/Cargo.toml +7 -3
- package/common.js +50 -0
- package/index.d.ts +7 -0
- package/index.js +12 -0
- package/package.json +7 -4
- package/releases/aarch64-apple-darwin/index.node +0 -0
- package/releases/aarch64-unknown-linux-gnu/index.node +0 -0
- package/{index.node → releases/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/scripts/build.js +10 -50
- package/sdk-core/.buildkite/docker/Dockerfile +1 -1
- package/sdk-core/.buildkite/docker/docker-compose.yaml +2 -2
- package/sdk-core/.buildkite/pipeline.yml +2 -0
- package/sdk-core/Cargo.toml +1 -88
- package/sdk-core/README.md +30 -6
- package/sdk-core/bridge-ffi/Cargo.toml +24 -0
- package/sdk-core/bridge-ffi/LICENSE.txt +23 -0
- package/sdk-core/bridge-ffi/build.rs +25 -0
- package/sdk-core/bridge-ffi/include/sdk-core-bridge.h +216 -0
- package/sdk-core/bridge-ffi/src/lib.rs +829 -0
- package/sdk-core/bridge-ffi/src/wrappers.rs +193 -0
- package/sdk-core/client/Cargo.toml +32 -0
- package/sdk-core/{src/pollers/gateway.rs → client/src/lib.rs} +101 -195
- package/sdk-core/client/src/metrics.rs +89 -0
- package/sdk-core/client/src/mocks.rs +167 -0
- package/sdk-core/{src/pollers → client/src}/retry.rs +172 -14
- package/sdk-core/core/Cargo.toml +96 -0
- package/sdk-core/{src → core/src}/core_tests/activity_tasks.rs +193 -37
- package/sdk-core/{src → core/src}/core_tests/child_workflows.rs +14 -14
- package/sdk-core/{src → core/src}/core_tests/determinism.rs +8 -8
- package/sdk-core/core/src/core_tests/local_activities.rs +328 -0
- package/sdk-core/{src → core/src}/core_tests/mod.rs +6 -9
- package/sdk-core/{src → core/src}/core_tests/queries.rs +45 -52
- package/sdk-core/{src → core/src}/core_tests/replay_flag.rs +8 -12
- package/sdk-core/{src → core/src}/core_tests/workers.rs +120 -33
- package/sdk-core/{src → core/src}/core_tests/workflow_cancels.rs +16 -26
- package/sdk-core/{src → core/src}/core_tests/workflow_tasks.rs +264 -286
- package/sdk-core/core/src/lib.rs +374 -0
- package/sdk-core/{src → core/src}/log_export.rs +3 -27
- package/sdk-core/core/src/pending_activations.rs +162 -0
- package/sdk-core/{src → core/src}/pollers/mod.rs +4 -22
- package/sdk-core/{src → core/src}/pollers/poll_buffer.rs +1 -1
- package/sdk-core/core/src/protosext/mod.rs +396 -0
- package/sdk-core/core/src/replay/mod.rs +210 -0
- package/sdk-core/core/src/retry_logic.rs +144 -0
- package/sdk-core/{src → core/src}/telemetry/metrics.rs +3 -58
- package/sdk-core/{src → core/src}/telemetry/mod.rs +8 -8
- package/sdk-core/{src → core/src}/telemetry/prometheus_server.rs +0 -0
- package/sdk-core/{src → core/src}/test_help/mod.rs +34 -73
- package/sdk-core/{src → core/src}/worker/activities/activity_heartbeat_manager.rs +95 -42
- package/sdk-core/core/src/worker/activities/local_activities.rs +973 -0
- package/sdk-core/{src → core/src}/worker/activities.rs +52 -33
- package/sdk-core/{src → core/src}/worker/dispatcher.rs +8 -6
- package/sdk-core/{src → core/src}/worker/mod.rs +305 -195
- package/sdk-core/core/src/worker/wft_delivery.rs +81 -0
- package/sdk-core/{src → core/src}/workflow/bridge.rs +5 -2
- package/sdk-core/{src → core/src}/workflow/driven_workflow.rs +17 -7
- package/sdk-core/{src → core/src}/workflow/history_update.rs +33 -7
- package/sdk-core/{src → core/src/workflow}/machines/activity_state_machine.rs +26 -26
- package/sdk-core/{src → core/src/workflow}/machines/cancel_external_state_machine.rs +8 -11
- package/sdk-core/{src → core/src/workflow}/machines/cancel_workflow_state_machine.rs +19 -21
- package/sdk-core/{src → core/src/workflow}/machines/child_workflow_state_machine.rs +19 -21
- package/sdk-core/{src → core/src/workflow}/machines/complete_workflow_state_machine.rs +3 -5
- package/sdk-core/{src → core/src/workflow}/machines/continue_as_new_workflow_state_machine.rs +18 -18
- package/sdk-core/{src → core/src/workflow}/machines/fail_workflow_state_machine.rs +5 -6
- package/sdk-core/core/src/workflow/machines/local_activity_state_machine.rs +1451 -0
- package/sdk-core/{src → core/src/workflow}/machines/mod.rs +54 -107
- package/sdk-core/{src → core/src/workflow}/machines/mutable_side_effect_state_machine.rs +0 -0
- package/sdk-core/{src → core/src/workflow}/machines/patch_state_machine.rs +29 -30
- package/sdk-core/{src → core/src/workflow}/machines/side_effect_state_machine.rs +0 -0
- package/sdk-core/{src → core/src/workflow}/machines/signal_external_state_machine.rs +17 -19
- package/sdk-core/{src → core/src/workflow}/machines/timer_state_machine.rs +20 -21
- package/sdk-core/{src → core/src/workflow}/machines/transition_coverage.rs +5 -2
- package/sdk-core/{src → core/src/workflow}/machines/upsert_search_attributes_state_machine.rs +0 -0
- package/sdk-core/core/src/workflow/machines/workflow_machines/local_acts.rs +96 -0
- package/sdk-core/{src → core/src/workflow}/machines/workflow_machines.rs +344 -160
- package/sdk-core/{src → core/src/workflow}/machines/workflow_task_state_machine.rs +1 -1
- package/sdk-core/{src → core/src}/workflow/mod.rs +200 -39
- package/sdk-core/{src → core/src}/workflow/workflow_tasks/cache_manager.rs +0 -0
- package/sdk-core/{src → core/src}/workflow/workflow_tasks/concurrency_manager.rs +38 -5
- package/sdk-core/{src → core/src}/workflow/workflow_tasks/mod.rs +297 -81
- package/sdk-core/{test_utils → core-api}/Cargo.toml +10 -7
- package/sdk-core/{src → core-api/src}/errors.rs +42 -90
- package/sdk-core/core-api/src/lib.rs +158 -0
- package/sdk-core/{src/worker/config.rs → core-api/src/worker.rs} +18 -23
- package/sdk-core/etc/deps.svg +156 -0
- package/sdk-core/fsm/rustfsm_procmacro/src/lib.rs +5 -5
- package/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.stderr +3 -5
- package/sdk-core/fsm/rustfsm_trait/src/lib.rs +7 -1
- package/sdk-core/histories/fail_wf_task.bin +0 -0
- package/sdk-core/histories/timer_workflow_history.bin +0 -0
- package/sdk-core/protos/api_upstream/temporal/api/command/v1/message.proto +44 -13
- package/sdk-core/protos/api_upstream/temporal/api/common/v1/message.proto +19 -1
- package/sdk-core/protos/api_upstream/temporal/api/enums/v1/common.proto +1 -1
- package/sdk-core/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +9 -0
- package/sdk-core/protos/api_upstream/temporal/api/enums/v1/namespace.proto +1 -0
- package/sdk-core/protos/api_upstream/temporal/api/enums/v1/reset.proto +1 -0
- package/sdk-core/protos/api_upstream/temporal/api/enums/v1/task_queue.proto +13 -0
- package/sdk-core/protos/api_upstream/temporal/api/enums/v1/workflow.proto +14 -7
- package/sdk-core/protos/api_upstream/temporal/api/history/v1/message.proto +176 -18
- package/sdk-core/protos/api_upstream/temporal/api/namespace/v1/message.proto +6 -0
- package/sdk-core/protos/api_upstream/temporal/api/query/v1/message.proto +11 -0
- package/sdk-core/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +3 -0
- package/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +156 -7
- package/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +135 -104
- package/sdk-core/protos/local/temporal/sdk/core/activity_result/activity_result.proto +78 -0
- package/sdk-core/protos/local/temporal/sdk/core/activity_task/activity_task.proto +78 -0
- package/sdk-core/protos/local/temporal/sdk/core/bridge/bridge.proto +205 -0
- package/sdk-core/protos/local/temporal/sdk/core/bridge/service.proto +61 -0
- package/sdk-core/protos/local/{child_workflow.proto → temporal/sdk/core/child_workflow/child_workflow.proto} +1 -1
- package/sdk-core/protos/local/{common.proto → temporal/sdk/core/common/common.proto} +5 -3
- package/sdk-core/protos/local/{core_interface.proto → temporal/sdk/core/core_interface.proto} +10 -10
- package/sdk-core/protos/local/temporal/sdk/core/external_data/external_data.proto +30 -0
- package/sdk-core/protos/local/{workflow_activation.proto → temporal/sdk/core/workflow_activation/workflow_activation.proto} +35 -11
- package/sdk-core/protos/local/{workflow_commands.proto → temporal/sdk/core/workflow_commands/workflow_commands.proto} +55 -4
- package/sdk-core/protos/local/{workflow_completion.proto → temporal/sdk/core/workflow_completion/workflow_completion.proto} +3 -3
- package/sdk-core/sdk/Cargo.toml +32 -0
- package/sdk-core/{src/prototype_rust_sdk → sdk/src}/conversions.rs +0 -0
- package/sdk-core/sdk/src/lib.rs +699 -0
- package/sdk-core/sdk/src/payload_converter.rs +11 -0
- package/sdk-core/sdk/src/workflow_context/options.rs +180 -0
- package/sdk-core/{src/prototype_rust_sdk → sdk/src}/workflow_context.rs +201 -124
- package/sdk-core/{src/prototype_rust_sdk → sdk/src}/workflow_future.rs +63 -30
- package/sdk-core/sdk-core-protos/Cargo.toml +10 -0
- package/sdk-core/sdk-core-protos/build.rs +28 -6
- package/sdk-core/sdk-core-protos/src/constants.rs +7 -0
- package/sdk-core/{src/test_help → sdk-core-protos/src}/history_builder.rs +134 -49
- package/sdk-core/sdk-core-protos/src/history_info.rs +216 -0
- package/sdk-core/sdk-core-protos/src/lib.rs +594 -168
- package/sdk-core/sdk-core-protos/src/task_token.rs +38 -0
- package/sdk-core/sdk-core-protos/src/utilities.rs +14 -0
- package/sdk-core/test-utils/Cargo.toml +32 -0
- package/sdk-core/{src/test_help → test-utils/src}/canned_histories.rs +59 -78
- package/sdk-core/test-utils/src/histfetch.rs +28 -0
- package/sdk-core/{test_utils → test-utils}/src/lib.rs +131 -68
- package/sdk-core/tests/integ_tests/client_tests.rs +1 -1
- package/sdk-core/tests/integ_tests/heartbeat_tests.rs +11 -7
- package/sdk-core/tests/integ_tests/polling_tests.rs +12 -11
- package/sdk-core/tests/integ_tests/queries_tests.rs +82 -78
- package/sdk-core/tests/integ_tests/workflow_tests/activities.rs +91 -71
- package/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +3 -4
- package/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +2 -4
- package/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +4 -6
- package/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +4 -6
- package/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +3 -4
- package/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +496 -0
- package/sdk-core/tests/integ_tests/workflow_tests/patches.rs +5 -8
- package/sdk-core/tests/integ_tests/workflow_tests/replay.rs +125 -0
- package/sdk-core/tests/integ_tests/workflow_tests/signals.rs +7 -13
- package/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +33 -5
- package/sdk-core/tests/integ_tests/workflow_tests/timers.rs +12 -16
- package/sdk-core/tests/integ_tests/workflow_tests.rs +85 -82
- package/sdk-core/tests/load_tests.rs +6 -6
- package/sdk-core/tests/main.rs +2 -2
- package/src/conversions.rs +24 -21
- package/src/errors.rs +8 -0
- package/src/lib.rs +323 -211
- package/sdk-core/protos/local/activity_result.proto +0 -46
- package/sdk-core/protos/local/activity_task.proto +0 -66
- package/sdk-core/src/core_tests/retry.rs +0 -147
- package/sdk-core/src/lib.rs +0 -403
- package/sdk-core/src/machines/local_activity_state_machine.rs +0 -117
- package/sdk-core/src/pending_activations.rs +0 -249
- package/sdk-core/src/protosext/mod.rs +0 -160
- package/sdk-core/src/prototype_rust_sdk.rs +0 -412
- package/sdk-core/src/task_token.rs +0 -20
- package/sdk-core/src/test_help/history_info.rs +0 -158
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
use futures::StreamExt;
|
|
2
|
-
use
|
|
3
|
-
use
|
|
2
|
+
use temporal_sdk::{ChildWorkflowOptions, WfContext, WorkflowResult};
|
|
3
|
+
use temporal_sdk_core_test_utils::CoreWfStarter;
|
|
4
4
|
use uuid::Uuid;
|
|
5
5
|
|
|
6
6
|
const SIGNAME: &str = "signame";
|
|
7
7
|
const RECEIVER_WFID: &str = "sends-signal-signal-receiver";
|
|
8
8
|
|
|
9
|
-
async fn signal_sender(
|
|
9
|
+
async fn signal_sender(ctx: WfContext) -> WorkflowResult<()> {
|
|
10
10
|
let run_id = std::str::from_utf8(&ctx.get_args()[0].data)
|
|
11
11
|
.unwrap()
|
|
12
12
|
.to_owned();
|
|
@@ -38,10 +38,9 @@ async fn sends_signal_to_missing_wf() {
|
|
|
38
38
|
.await
|
|
39
39
|
.unwrap();
|
|
40
40
|
worker.run_until_done().await.unwrap();
|
|
41
|
-
starter.shutdown().await;
|
|
42
41
|
}
|
|
43
42
|
|
|
44
|
-
async fn signal_receiver(
|
|
43
|
+
async fn signal_receiver(ctx: WfContext) -> WorkflowResult<()> {
|
|
45
44
|
ctx.make_signal_channel(SIGNAME).next().await.unwrap();
|
|
46
45
|
Ok(().into())
|
|
47
46
|
}
|
|
@@ -66,24 +65,20 @@ async fn sends_signal_to_other_wf() {
|
|
|
66
65
|
.await
|
|
67
66
|
.unwrap();
|
|
68
67
|
worker.run_until_done().await.unwrap();
|
|
69
|
-
starter.shutdown().await;
|
|
70
68
|
}
|
|
71
69
|
|
|
72
|
-
async fn signals_child(
|
|
70
|
+
async fn signals_child(ctx: WfContext) -> WorkflowResult<()> {
|
|
73
71
|
let started_child = ctx
|
|
74
72
|
.child_workflow(ChildWorkflowOptions {
|
|
75
73
|
workflow_id: "my_precious_child".to_string(),
|
|
76
74
|
workflow_type: "child_receiver".to_string(),
|
|
77
75
|
..Default::default()
|
|
78
76
|
})
|
|
79
|
-
.start(&
|
|
77
|
+
.start(&ctx)
|
|
80
78
|
.await
|
|
81
79
|
.into_started()
|
|
82
80
|
.expect("Must start ok");
|
|
83
|
-
started_child
|
|
84
|
-
.signal(&mut ctx, SIGNAME, b"hiya!")
|
|
85
|
-
.await
|
|
86
|
-
.unwrap();
|
|
81
|
+
started_child.signal(&ctx, SIGNAME, b"hiya!").await.unwrap();
|
|
87
82
|
started_child.result().await.status.unwrap();
|
|
88
83
|
Ok(().into())
|
|
89
84
|
}
|
|
@@ -101,5 +96,4 @@ async fn sends_signal_to_child() {
|
|
|
101
96
|
.await
|
|
102
97
|
.unwrap();
|
|
103
98
|
worker.run_until_done().await.unwrap();
|
|
104
|
-
starter.shutdown().await;
|
|
105
99
|
}
|
|
@@ -3,8 +3,9 @@ use std::{
|
|
|
3
3
|
sync::atomic::{AtomicBool, AtomicUsize, Ordering},
|
|
4
4
|
time::Duration,
|
|
5
5
|
};
|
|
6
|
-
use
|
|
7
|
-
use
|
|
6
|
+
use temporal_sdk::{WfContext, WorkflowResult};
|
|
7
|
+
use temporal_sdk_core_test_utils::CoreWfStarter;
|
|
8
|
+
use tokio::sync::Barrier;
|
|
8
9
|
|
|
9
10
|
#[tokio::test]
|
|
10
11
|
async fn timer_workflow_not_sticky() {
|
|
@@ -19,12 +20,11 @@ async fn timer_workflow_not_sticky() {
|
|
|
19
20
|
.await
|
|
20
21
|
.unwrap();
|
|
21
22
|
worker.run_until_done().await.unwrap();
|
|
22
|
-
starter.shutdown().await;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
static TIMED_OUT_ONCE: AtomicBool = AtomicBool::new(false);
|
|
26
26
|
static RUN_CT: AtomicUsize = AtomicUsize::new(0);
|
|
27
|
-
async fn timer_timeout_wf(
|
|
27
|
+
async fn timer_timeout_wf(ctx: WfContext) -> WorkflowResult<()> {
|
|
28
28
|
RUN_CT.fetch_add(1, Ordering::SeqCst);
|
|
29
29
|
let t = ctx.timer(Duration::from_secs(1));
|
|
30
30
|
if !TIMED_OUT_ONCE.load(Ordering::SeqCst) {
|
|
@@ -50,7 +50,35 @@ async fn timer_workflow_timeout_on_sticky() {
|
|
|
50
50
|
.await
|
|
51
51
|
.unwrap();
|
|
52
52
|
worker.run_until_done().await.unwrap();
|
|
53
|
-
starter.shutdown().await;
|
|
54
53
|
// If it didn't run twice it didn't time out
|
|
55
54
|
assert_eq!(RUN_CT.load(Ordering::SeqCst), 2);
|
|
56
55
|
}
|
|
56
|
+
|
|
57
|
+
#[tokio::test]
|
|
58
|
+
async fn cache_miss_ok() {
|
|
59
|
+
let wf_name = "cache_miss_ok";
|
|
60
|
+
let mut starter = CoreWfStarter::new(wf_name);
|
|
61
|
+
starter.max_wft(1);
|
|
62
|
+
let mut worker = starter.worker().await;
|
|
63
|
+
|
|
64
|
+
let barr: &'static Barrier = Box::leak(Box::new(Barrier::new(2)));
|
|
65
|
+
worker.register_wf(wf_name.to_owned(), move |ctx: WfContext| async move {
|
|
66
|
+
barr.wait().await;
|
|
67
|
+
ctx.timer(Duration::from_secs(1)).await;
|
|
68
|
+
Ok(().into())
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
let run_id = worker
|
|
72
|
+
.submit_wf(wf_name.to_owned(), wf_name.to_owned(), vec![])
|
|
73
|
+
.await
|
|
74
|
+
.unwrap();
|
|
75
|
+
let core = starter.get_core().await;
|
|
76
|
+
let tq = starter.get_task_queue();
|
|
77
|
+
let (r1, _) = tokio::join!(worker.run_until_done(), async move {
|
|
78
|
+
barr.wait().await;
|
|
79
|
+
core.request_workflow_eviction(tq, &run_id);
|
|
80
|
+
// We need to signal the barrier again since the wf gets evicted and will hit it again
|
|
81
|
+
barr.wait().await;
|
|
82
|
+
});
|
|
83
|
+
r1.unwrap();
|
|
84
|
+
}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
use std::time::Duration;
|
|
2
|
-
use
|
|
2
|
+
use temporal_sdk::{WfContext, WorkflowResult};
|
|
3
3
|
use temporal_sdk_core_protos::coresdk::{
|
|
4
4
|
workflow_commands::{CancelTimer, CompleteWorkflowExecution, StartTimer},
|
|
5
|
-
workflow_completion::
|
|
5
|
+
workflow_completion::WorkflowActivationCompletion,
|
|
6
|
+
};
|
|
7
|
+
use temporal_sdk_core_test_utils::{
|
|
8
|
+
init_core_and_create_wf, start_timer_cmd, CoreTestHelpers, CoreWfStarter,
|
|
6
9
|
};
|
|
7
|
-
use test_utils::{init_core_and_create_wf, CoreTestHelpers, CoreWfStarter};
|
|
8
10
|
|
|
9
|
-
pub async fn timer_wf(
|
|
11
|
+
pub async fn timer_wf(command_sink: WfContext) -> WorkflowResult<()> {
|
|
10
12
|
command_sink.timer(Duration::from_secs(1)).await;
|
|
11
13
|
Ok(().into())
|
|
12
14
|
}
|
|
@@ -23,14 +25,13 @@ async fn timer_workflow_workflow_driver() {
|
|
|
23
25
|
.await
|
|
24
26
|
.unwrap();
|
|
25
27
|
worker.run_until_done().await.unwrap();
|
|
26
|
-
starter.shutdown().await;
|
|
27
28
|
}
|
|
28
29
|
|
|
29
30
|
#[tokio::test]
|
|
30
31
|
async fn timer_workflow_manual() {
|
|
31
32
|
let (core, task_q) = init_core_and_create_wf("timer_workflow").await;
|
|
32
33
|
let task = core.poll_workflow_activation(&task_q).await.unwrap();
|
|
33
|
-
core.complete_workflow_activation(
|
|
34
|
+
core.complete_workflow_activation(WorkflowActivationCompletion::from_cmds(
|
|
34
35
|
&task_q,
|
|
35
36
|
task.run_id,
|
|
36
37
|
vec![StartTimer {
|
|
@@ -50,7 +51,7 @@ async fn timer_workflow_manual() {
|
|
|
50
51
|
async fn timer_cancel_workflow() {
|
|
51
52
|
let (core, task_q) = init_core_and_create_wf("timer_cancel_workflow").await;
|
|
52
53
|
let task = core.poll_workflow_activation(&task_q).await.unwrap();
|
|
53
|
-
core.complete_workflow_activation(
|
|
54
|
+
core.complete_workflow_activation(WorkflowActivationCompletion::from_cmds(
|
|
54
55
|
&task_q,
|
|
55
56
|
task.run_id,
|
|
56
57
|
vec![
|
|
@@ -69,7 +70,7 @@ async fn timer_cancel_workflow() {
|
|
|
69
70
|
.await
|
|
70
71
|
.unwrap();
|
|
71
72
|
let task = core.poll_workflow_activation(&task_q).await.unwrap();
|
|
72
|
-
core.complete_workflow_activation(
|
|
73
|
+
core.complete_workflow_activation(WorkflowActivationCompletion::from_cmds(
|
|
73
74
|
&task_q,
|
|
74
75
|
task.run_id,
|
|
75
76
|
vec![
|
|
@@ -85,15 +86,11 @@ async fn timer_cancel_workflow() {
|
|
|
85
86
|
async fn timer_immediate_cancel_workflow() {
|
|
86
87
|
let (core, task_q) = init_core_and_create_wf("timer_immediate_cancel_workflow").await;
|
|
87
88
|
let task = core.poll_workflow_activation(&task_q).await.unwrap();
|
|
88
|
-
core.complete_workflow_activation(
|
|
89
|
+
core.complete_workflow_activation(WorkflowActivationCompletion::from_cmds(
|
|
89
90
|
&task_q,
|
|
90
91
|
task.run_id,
|
|
91
92
|
vec![
|
|
92
|
-
|
|
93
|
-
seq: 0,
|
|
94
|
-
..Default::default()
|
|
95
|
-
}
|
|
96
|
-
.into(),
|
|
93
|
+
start_timer_cmd(0, Duration::from_secs(1)),
|
|
97
94
|
CancelTimer { seq: 0 }.into(),
|
|
98
95
|
CompleteWorkflowExecution { result: None }.into(),
|
|
99
96
|
],
|
|
@@ -102,7 +99,7 @@ async fn timer_immediate_cancel_workflow() {
|
|
|
102
99
|
.unwrap();
|
|
103
100
|
}
|
|
104
101
|
|
|
105
|
-
async fn parallel_timer_wf(
|
|
102
|
+
async fn parallel_timer_wf(command_sink: WfContext) -> WorkflowResult<()> {
|
|
106
103
|
let t1 = command_sink.timer(Duration::from_secs(1));
|
|
107
104
|
let t2 = command_sink.timer(Duration::from_secs(1));
|
|
108
105
|
let _ = tokio::join!(t1, t2);
|
|
@@ -121,5 +118,4 @@ async fn parallel_timers() {
|
|
|
121
118
|
.await
|
|
122
119
|
.unwrap();
|
|
123
120
|
worker.run_until_done().await.unwrap();
|
|
124
|
-
starter.shutdown().await;
|
|
125
121
|
}
|
|
@@ -4,7 +4,9 @@ mod cancel_wf;
|
|
|
4
4
|
mod child_workflows;
|
|
5
5
|
mod continue_as_new;
|
|
6
6
|
mod determinism;
|
|
7
|
+
mod local_activities;
|
|
7
8
|
mod patches;
|
|
9
|
+
mod replay;
|
|
8
10
|
mod signals;
|
|
9
11
|
mod stickyness;
|
|
10
12
|
mod timers;
|
|
@@ -19,23 +21,21 @@ use std::{
|
|
|
19
21
|
},
|
|
20
22
|
time::Duration,
|
|
21
23
|
};
|
|
22
|
-
use
|
|
23
|
-
|
|
24
|
-
prototype_rust_sdk::{WfContext, WorkflowResult},
|
|
25
|
-
Core,
|
|
26
|
-
};
|
|
24
|
+
use temporal_sdk::{WfContext, WorkflowResult};
|
|
25
|
+
use temporal_sdk_core_api::{errors::PollWfError, Core};
|
|
27
26
|
use temporal_sdk_core_protos::{
|
|
28
27
|
coresdk::{
|
|
29
|
-
activity_result::
|
|
30
|
-
workflow_activation::{
|
|
28
|
+
activity_result::ActivityExecutionResult,
|
|
29
|
+
workflow_activation::{workflow_activation_job, WorkflowActivation, WorkflowActivationJob},
|
|
31
30
|
workflow_commands::{ActivityCancellationType, FailWorkflowExecution, StartTimer},
|
|
32
|
-
workflow_completion::
|
|
31
|
+
workflow_completion::WorkflowActivationCompletion,
|
|
33
32
|
ActivityTaskCompletion, IntoCompletion,
|
|
34
33
|
},
|
|
35
34
|
temporal::api::failure::v1::Failure,
|
|
36
35
|
};
|
|
37
|
-
use
|
|
38
|
-
|
|
36
|
+
use temporal_sdk_core_test_utils::{
|
|
37
|
+
history_from_proto_binary, init_core_and_create_wf, init_core_replay_preloaded,
|
|
38
|
+
schedule_activity_cmd, CoreTestHelpers, CoreWfStarter,
|
|
39
39
|
};
|
|
40
40
|
use tokio::time::sleep;
|
|
41
41
|
use uuid::Uuid;
|
|
@@ -59,13 +59,13 @@ async fn parallel_workflows_same_queue() {
|
|
|
59
59
|
async fn wf_task(
|
|
60
60
|
core: Arc<dyn Core>,
|
|
61
61
|
task_q: String,
|
|
62
|
-
mut task_chan: UnboundedReceiver<
|
|
62
|
+
mut task_chan: UnboundedReceiver<WorkflowActivation>,
|
|
63
63
|
) {
|
|
64
64
|
let task = task_chan.next().await.unwrap();
|
|
65
65
|
assert_matches!(
|
|
66
66
|
task.jobs.as_slice(),
|
|
67
|
-
[
|
|
68
|
-
variant: Some(
|
|
67
|
+
[WorkflowActivationJob {
|
|
68
|
+
variant: Some(workflow_activation_job::Variant::StartWorkflow(_)),
|
|
69
69
|
}]
|
|
70
70
|
);
|
|
71
71
|
core.complete_timer(&task_q, &task.run_id, 1, Duration::from_secs(1))
|
|
@@ -99,7 +99,7 @@ async fn parallel_workflows_same_queue() {
|
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
static RUN_CT: AtomicUsize = AtomicUsize::new(0);
|
|
102
|
-
pub async fn cache_evictions_wf(
|
|
102
|
+
pub async fn cache_evictions_wf(command_sink: WfContext) -> WorkflowResult<()> {
|
|
103
103
|
RUN_CT.fetch_add(1, Ordering::SeqCst);
|
|
104
104
|
command_sink.timer(Duration::from_secs(1)).await;
|
|
105
105
|
Ok(().into())
|
|
@@ -125,7 +125,6 @@ async fn workflow_lru_cache_evictions() {
|
|
|
125
125
|
.unwrap();
|
|
126
126
|
}
|
|
127
127
|
worker.run_until_done().await.unwrap();
|
|
128
|
-
starter.shutdown().await;
|
|
129
128
|
// The wf must have started more than # workflows times, since all but one must experience
|
|
130
129
|
// an eviction
|
|
131
130
|
assert!(RUN_CT.load(Ordering::SeqCst) > n_workflows);
|
|
@@ -158,9 +157,19 @@ async fn shutdown_aborts_actively_blocked_poll() {
|
|
|
158
157
|
);
|
|
159
158
|
}
|
|
160
159
|
|
|
160
|
+
#[rstest::rstest]
|
|
161
161
|
#[tokio::test]
|
|
162
|
-
async fn fail_wf_task() {
|
|
163
|
-
let (core, task_q) =
|
|
162
|
+
async fn fail_wf_task(#[values(true, false)] replay: bool) {
|
|
163
|
+
let (core, task_q) = if replay {
|
|
164
|
+
init_core_replay_preloaded(
|
|
165
|
+
"fail_wf_task",
|
|
166
|
+
&history_from_proto_binary("histories/fail_wf_task.bin")
|
|
167
|
+
.await
|
|
168
|
+
.unwrap(),
|
|
169
|
+
)
|
|
170
|
+
} else {
|
|
171
|
+
init_core_and_create_wf("fail_wf_task").await
|
|
172
|
+
};
|
|
164
173
|
// Start with a timer
|
|
165
174
|
let task = core.poll_workflow_activation(&task_q).await.unwrap();
|
|
166
175
|
core.complete_timer(&task_q, &task.run_id, 0, Duration::from_millis(200))
|
|
@@ -168,7 +177,7 @@ async fn fail_wf_task() {
|
|
|
168
177
|
|
|
169
178
|
// Then break for whatever reason
|
|
170
179
|
let task = core.poll_workflow_activation(&task_q).await.unwrap();
|
|
171
|
-
core.complete_workflow_activation(
|
|
180
|
+
core.complete_workflow_activation(WorkflowActivationCompletion::fail(
|
|
172
181
|
&task_q,
|
|
173
182
|
task.run_id,
|
|
174
183
|
Failure::application_failure("I did an oopsie".to_string(), false),
|
|
@@ -182,16 +191,16 @@ async fn fail_wf_task() {
|
|
|
182
191
|
// The first poll response will tell us to evict
|
|
183
192
|
assert_matches!(
|
|
184
193
|
task.jobs.as_slice(),
|
|
185
|
-
[
|
|
186
|
-
variant: Some(
|
|
194
|
+
[WorkflowActivationJob {
|
|
195
|
+
variant: Some(workflow_activation_job::Variant::RemoveFromCache(_)),
|
|
187
196
|
}]
|
|
188
197
|
);
|
|
189
|
-
core.complete_workflow_activation(
|
|
198
|
+
core.complete_workflow_activation(WorkflowActivationCompletion::empty(&task_q, task.run_id))
|
|
190
199
|
.await
|
|
191
200
|
.unwrap();
|
|
192
201
|
|
|
193
202
|
let task = core.poll_workflow_activation(&task_q).await.unwrap();
|
|
194
|
-
core.complete_workflow_activation(
|
|
203
|
+
core.complete_workflow_activation(WorkflowActivationCompletion::from_cmds(
|
|
195
204
|
&task_q,
|
|
196
205
|
task.run_id,
|
|
197
206
|
vec![StartTimer {
|
|
@@ -213,7 +222,7 @@ async fn fail_workflow_execution() {
|
|
|
213
222
|
core.complete_timer(&task_q, &task.run_id, 0, Duration::from_secs(1))
|
|
214
223
|
.await;
|
|
215
224
|
let task = core.poll_workflow_activation(&task_q).await.unwrap();
|
|
216
|
-
core.complete_workflow_activation(
|
|
225
|
+
core.complete_workflow_activation(WorkflowActivationCompletion::from_cmds(
|
|
217
226
|
&task_q,
|
|
218
227
|
task.run_id,
|
|
219
228
|
vec![FailWorkflowExecution {
|
|
@@ -227,14 +236,14 @@ async fn fail_workflow_execution() {
|
|
|
227
236
|
|
|
228
237
|
#[tokio::test]
|
|
229
238
|
async fn signal_workflow() {
|
|
230
|
-
let
|
|
231
|
-
let
|
|
239
|
+
let (core, task_q) = init_core_and_create_wf("signal_workflow").await;
|
|
240
|
+
let workflow_id = task_q.clone();
|
|
232
241
|
|
|
233
242
|
let signal_id_1 = "signal1";
|
|
234
243
|
let signal_id_2 = "signal2";
|
|
235
244
|
let res = core.poll_workflow_activation(&task_q).await.unwrap();
|
|
236
245
|
// Task is completed with no commands
|
|
237
|
-
core.complete_workflow_activation(
|
|
246
|
+
core.complete_workflow_activation(WorkflowActivationCompletion::from_cmds(
|
|
238
247
|
&task_q,
|
|
239
248
|
res.run_id.clone(),
|
|
240
249
|
vec![],
|
|
@@ -243,8 +252,8 @@ async fn signal_workflow() {
|
|
|
243
252
|
.unwrap();
|
|
244
253
|
|
|
245
254
|
// Send the signals to the server
|
|
246
|
-
|
|
247
|
-
|
|
255
|
+
core.server_gateway()
|
|
256
|
+
.signal_workflow_execution(
|
|
248
257
|
workflow_id.to_string(),
|
|
249
258
|
res.run_id.to_string(),
|
|
250
259
|
signal_id_1.to_string(),
|
|
@@ -252,7 +261,8 @@ async fn signal_workflow() {
|
|
|
252
261
|
)
|
|
253
262
|
.await
|
|
254
263
|
.unwrap();
|
|
255
|
-
|
|
264
|
+
core.server_gateway()
|
|
265
|
+
.signal_workflow_execution(
|
|
256
266
|
workflow_id.to_string(),
|
|
257
267
|
res.run_id.to_string(),
|
|
258
268
|
signal_id_2.to_string(),
|
|
@@ -260,8 +270,6 @@ async fn signal_workflow() {
|
|
|
260
270
|
)
|
|
261
271
|
.await
|
|
262
272
|
.unwrap();
|
|
263
|
-
})
|
|
264
|
-
.await;
|
|
265
273
|
|
|
266
274
|
let mut res = core.poll_workflow_activation(&task_q).await.unwrap();
|
|
267
275
|
// Sometimes both signals are complete at once, sometimes only one, depending on server
|
|
@@ -270,22 +278,22 @@ async fn signal_workflow() {
|
|
|
270
278
|
assert_matches!(
|
|
271
279
|
res.jobs.as_slice(),
|
|
272
280
|
[
|
|
273
|
-
|
|
274
|
-
variant: Some(
|
|
281
|
+
WorkflowActivationJob {
|
|
282
|
+
variant: Some(workflow_activation_job::Variant::SignalWorkflow(_)),
|
|
275
283
|
},
|
|
276
|
-
|
|
277
|
-
variant: Some(
|
|
284
|
+
WorkflowActivationJob {
|
|
285
|
+
variant: Some(workflow_activation_job::Variant::SignalWorkflow(_)),
|
|
278
286
|
}
|
|
279
287
|
]
|
|
280
288
|
);
|
|
281
289
|
} else if res.jobs.len() == 1 {
|
|
282
290
|
assert_matches!(
|
|
283
291
|
res.jobs.as_slice(),
|
|
284
|
-
[
|
|
285
|
-
variant: Some(
|
|
292
|
+
[WorkflowActivationJob {
|
|
293
|
+
variant: Some(workflow_activation_job::Variant::SignalWorkflow(_)),
|
|
286
294
|
},]
|
|
287
295
|
);
|
|
288
|
-
core.complete_workflow_activation(
|
|
296
|
+
core.complete_workflow_activation(WorkflowActivationCompletion::from_cmds(
|
|
289
297
|
&task_q,
|
|
290
298
|
res.run_id,
|
|
291
299
|
vec![],
|
|
@@ -295,8 +303,8 @@ async fn signal_workflow() {
|
|
|
295
303
|
res = core.poll_workflow_activation(&task_q).await.unwrap();
|
|
296
304
|
assert_matches!(
|
|
297
305
|
res.jobs.as_slice(),
|
|
298
|
-
[
|
|
299
|
-
variant: Some(
|
|
306
|
+
[WorkflowActivationJob {
|
|
307
|
+
variant: Some(workflow_activation_job::Variant::SignalWorkflow(_)),
|
|
300
308
|
},]
|
|
301
309
|
);
|
|
302
310
|
}
|
|
@@ -305,13 +313,14 @@ async fn signal_workflow() {
|
|
|
305
313
|
|
|
306
314
|
#[tokio::test]
|
|
307
315
|
async fn signal_workflow_signal_not_handled_on_workflow_completion() {
|
|
308
|
-
let
|
|
309
|
-
|
|
316
|
+
let (core, task_q) =
|
|
317
|
+
init_core_and_create_wf("signal_workflow_signal_not_handled_on_workflow_completion").await;
|
|
318
|
+
let workflow_id = task_q.as_str();
|
|
310
319
|
let signal_id_1 = "signal1";
|
|
311
320
|
for i in 1..=2 {
|
|
312
321
|
let res = core.poll_workflow_activation(&task_q).await.unwrap();
|
|
313
322
|
// Task is completed with a timer
|
|
314
|
-
core.complete_workflow_activation(
|
|
323
|
+
core.complete_workflow_activation(WorkflowActivationCompletion::from_cmds(
|
|
315
324
|
&task_q,
|
|
316
325
|
res.run_id,
|
|
317
326
|
vec![StartTimer {
|
|
@@ -329,16 +338,16 @@ async fn signal_workflow_signal_not_handled_on_workflow_completion() {
|
|
|
329
338
|
// First attempt we should only see the timer being fired
|
|
330
339
|
assert_matches!(
|
|
331
340
|
res.jobs.as_slice(),
|
|
332
|
-
[
|
|
333
|
-
variant: Some(
|
|
341
|
+
[WorkflowActivationJob {
|
|
342
|
+
variant: Some(workflow_activation_job::Variant::FireTimer(_)),
|
|
334
343
|
}]
|
|
335
344
|
);
|
|
336
345
|
|
|
337
346
|
let run_id = res.run_id.clone();
|
|
338
347
|
|
|
339
|
-
// Send the
|
|
340
|
-
|
|
341
|
-
|
|
348
|
+
// Send the signal to the server
|
|
349
|
+
core.server_gateway()
|
|
350
|
+
.signal_workflow_execution(
|
|
342
351
|
workflow_id.to_string(),
|
|
343
352
|
res.run_id.to_string(),
|
|
344
353
|
signal_id_1.to_string(),
|
|
@@ -346,8 +355,6 @@ async fn signal_workflow_signal_not_handled_on_workflow_completion() {
|
|
|
346
355
|
)
|
|
347
356
|
.await
|
|
348
357
|
.unwrap();
|
|
349
|
-
})
|
|
350
|
-
.await;
|
|
351
358
|
|
|
352
359
|
// Send completion - not having seen a poll response with a signal in it yet (unhandled
|
|
353
360
|
// command error will be logged as a warning and an eviction will be issued)
|
|
@@ -357,11 +364,11 @@ async fn signal_workflow_signal_not_handled_on_workflow_completion() {
|
|
|
357
364
|
let res = core.poll_workflow_activation(&task_q).await.unwrap();
|
|
358
365
|
assert_matches!(
|
|
359
366
|
res.jobs.as_slice(),
|
|
360
|
-
[
|
|
361
|
-
variant: Some(
|
|
367
|
+
[WorkflowActivationJob {
|
|
368
|
+
variant: Some(workflow_activation_job::Variant::RemoveFromCache(_)),
|
|
362
369
|
}]
|
|
363
370
|
);
|
|
364
|
-
core.complete_workflow_activation(
|
|
371
|
+
core.complete_workflow_activation(WorkflowActivationCompletion::empty(
|
|
365
372
|
task_q.clone(),
|
|
366
373
|
res.run_id,
|
|
367
374
|
))
|
|
@@ -375,11 +382,11 @@ async fn signal_workflow_signal_not_handled_on_workflow_completion() {
|
|
|
375
382
|
assert_matches!(
|
|
376
383
|
res.jobs.as_slice(),
|
|
377
384
|
[
|
|
378
|
-
|
|
379
|
-
variant: Some(
|
|
385
|
+
WorkflowActivationJob {
|
|
386
|
+
variant: Some(workflow_activation_job::Variant::FireTimer(_)),
|
|
380
387
|
},
|
|
381
|
-
|
|
382
|
-
variant: Some(
|
|
388
|
+
WorkflowActivationJob {
|
|
389
|
+
variant: Some(workflow_activation_job::Variant::SignalWorkflow(_)),
|
|
383
390
|
}
|
|
384
391
|
]
|
|
385
392
|
);
|
|
@@ -425,14 +432,14 @@ async fn wft_timeout_doesnt_create_unsolvable_autocomplete() {
|
|
|
425
432
|
assert_matches!(
|
|
426
433
|
wf_task.jobs.as_slice(),
|
|
427
434
|
[
|
|
428
|
-
|
|
429
|
-
variant: Some(
|
|
435
|
+
WorkflowActivationJob {
|
|
436
|
+
variant: Some(workflow_activation_job::Variant::SignalWorkflow(_)),
|
|
430
437
|
},
|
|
431
|
-
|
|
432
|
-
variant: Some(
|
|
438
|
+
WorkflowActivationJob {
|
|
439
|
+
variant: Some(workflow_activation_job::Variant::ResolveActivity(_)),
|
|
433
440
|
},
|
|
434
|
-
|
|
435
|
-
variant: Some(
|
|
441
|
+
WorkflowActivationJob {
|
|
442
|
+
variant: Some(workflow_activation_job::Variant::SignalWorkflow(_)),
|
|
436
443
|
}
|
|
437
444
|
]
|
|
438
445
|
);
|
|
@@ -449,36 +456,32 @@ async fn wft_timeout_doesnt_create_unsolvable_autocomplete() {
|
|
|
449
456
|
let rid = wf_task.run_id.clone();
|
|
450
457
|
// Send the signals to the server & resolve activity -- sometimes this happens too fast
|
|
451
458
|
sleep(Duration::from_millis(200)).await;
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
})
|
|
457
|
-
.await;
|
|
459
|
+
core.server_gateway()
|
|
460
|
+
.signal_workflow_execution(wf_id.to_string(), rid, signal_at_start.to_string(), None)
|
|
461
|
+
.await
|
|
462
|
+
.unwrap();
|
|
458
463
|
// Complete activity successfully.
|
|
459
464
|
core.complete_activity_task(ActivityTaskCompletion {
|
|
460
465
|
task_token: ac_task.task_token,
|
|
461
466
|
task_queue: task_q.to_string(),
|
|
462
|
-
result: Some(
|
|
467
|
+
result: Some(ActivityExecutionResult::ok(Default::default())),
|
|
463
468
|
})
|
|
464
469
|
.await
|
|
465
470
|
.unwrap();
|
|
466
471
|
let rid = wf_task.run_id.clone();
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
})
|
|
472
|
-
.await;
|
|
472
|
+
core.server_gateway()
|
|
473
|
+
.signal_workflow_execution(wf_id.to_string(), rid, signal_at_complete.to_string(), None)
|
|
474
|
+
.await
|
|
475
|
+
.unwrap();
|
|
473
476
|
// Now poll again, it will be an eviction b/c non-sticky mode.
|
|
474
477
|
let wf_task = core.poll_workflow_activation(task_q).await.unwrap();
|
|
475
478
|
assert_matches!(
|
|
476
479
|
wf_task.jobs.as_slice(),
|
|
477
|
-
[
|
|
478
|
-
variant: Some(
|
|
480
|
+
[WorkflowActivationJob {
|
|
481
|
+
variant: Some(workflow_activation_job::Variant::RemoveFromCache(_)),
|
|
479
482
|
}]
|
|
480
483
|
);
|
|
481
|
-
core.complete_workflow_activation(
|
|
484
|
+
core.complete_workflow_activation(WorkflowActivationCompletion::empty(task_q, wf_task.run_id))
|
|
482
485
|
.await
|
|
483
486
|
.unwrap();
|
|
484
487
|
// Start from the beginning
|
|
@@ -497,11 +500,11 @@ async fn wft_timeout_doesnt_create_unsolvable_autocomplete() {
|
|
|
497
500
|
);
|
|
498
501
|
assert_matches!(
|
|
499
502
|
wf_task.jobs.as_slice(),
|
|
500
|
-
[
|
|
501
|
-
variant: Some(
|
|
503
|
+
[WorkflowActivationJob {
|
|
504
|
+
variant: Some(workflow_activation_job::Variant::RemoveFromCache(_)),
|
|
502
505
|
}]
|
|
503
506
|
);
|
|
504
|
-
core.complete_workflow_activation(
|
|
507
|
+
core.complete_workflow_activation(WorkflowActivationCompletion::empty(task_q, wf_task.run_id))
|
|
505
508
|
.await
|
|
506
509
|
.unwrap();
|
|
507
510
|
// Do it all over again, without timing out this time
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
use assert_matches::assert_matches;
|
|
2
2
|
use futures::future::join_all;
|
|
3
3
|
use std::time::{Duration, Instant};
|
|
4
|
-
use
|
|
4
|
+
use temporal_sdk::{ActivityOptions, WfContext};
|
|
5
5
|
use temporal_sdk_core_protos::coresdk::{
|
|
6
|
-
activity_result::
|
|
6
|
+
activity_result::ActivityExecutionResult, activity_task::activity_task as act_task,
|
|
7
7
|
workflow_commands::ActivityCancellationType, ActivityTaskCompletion,
|
|
8
8
|
};
|
|
9
|
-
use
|
|
9
|
+
use temporal_sdk_core_test_utils::CoreWfStarter;
|
|
10
10
|
|
|
11
11
|
const CONCURRENCY: usize = 1000;
|
|
12
12
|
|
|
@@ -27,7 +27,7 @@ async fn activity_load() {
|
|
|
27
27
|
let task_queue = starter.get_task_queue().to_owned();
|
|
28
28
|
|
|
29
29
|
let pd = payload_dat.clone();
|
|
30
|
-
let wf_fn = move |
|
|
30
|
+
let wf_fn = move |ctx: WfContext| {
|
|
31
31
|
let task_queue = task_queue.clone();
|
|
32
32
|
let payload_dat = pd.clone();
|
|
33
33
|
|
|
@@ -35,6 +35,7 @@ async fn activity_load() {
|
|
|
35
35
|
let activity = ActivityOptions {
|
|
36
36
|
activity_id: Some(activity_id.to_string()),
|
|
37
37
|
activity_type: "test_activity".to_string(),
|
|
38
|
+
input: Default::default(),
|
|
38
39
|
task_queue,
|
|
39
40
|
schedule_to_start_timeout: Some(activity_timeout),
|
|
40
41
|
start_to_close_timeout: Some(activity_timeout),
|
|
@@ -86,7 +87,7 @@ async fn activity_load() {
|
|
|
86
87
|
core.complete_activity_task(ActivityTaskCompletion {
|
|
87
88
|
task_token: task.task_token,
|
|
88
89
|
task_queue: task_q,
|
|
89
|
-
result: Some(
|
|
90
|
+
result: Some(ActivityExecutionResult::ok(pd.into())),
|
|
90
91
|
})
|
|
91
92
|
.await
|
|
92
93
|
.unwrap()
|
|
@@ -104,5 +105,4 @@ async fn activity_load() {
|
|
|
104
105
|
all_acts
|
|
105
106
|
};
|
|
106
107
|
dbg!(running.elapsed());
|
|
107
|
-
core.shutdown().await;
|
|
108
108
|
}
|
package/sdk-core/tests/main.rs
CHANGED
|
@@ -6,7 +6,7 @@ mod integ_tests {
|
|
|
6
6
|
use temporal_sdk_core::{
|
|
7
7
|
ClientTlsConfig, ServerGatewayApis, ServerGatewayOptionsBuilder, TlsConfig,
|
|
8
8
|
};
|
|
9
|
-
use
|
|
9
|
+
use temporal_sdk_core_test_utils::NAMESPACE;
|
|
10
10
|
use url::Url;
|
|
11
11
|
|
|
12
12
|
mod client_tests;
|
|
@@ -51,7 +51,7 @@ mod integ_tests {
|
|
|
51
51
|
})
|
|
52
52
|
.build()
|
|
53
53
|
.unwrap();
|
|
54
|
-
let con = sgo.connect().await.unwrap();
|
|
54
|
+
let con = sgo.connect(None).await.unwrap();
|
|
55
55
|
con.list_namespaces().await.unwrap();
|
|
56
56
|
}
|
|
57
57
|
}
|