@temporalio/core-bridge 1.15.0 → 1.16.1
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 +172 -70
- package/lib/native.d.ts +1 -1
- package/package.json +2 -2
- 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/.github/workflows/per-pr.yml +6 -6
- package/sdk-core/AGENTS.md +41 -30
- package/sdk-core/Cargo.toml +3 -0
- package/sdk-core/README.md +15 -9
- package/sdk-core/crates/client/Cargo.toml +4 -0
- package/sdk-core/crates/client/README.md +139 -0
- package/sdk-core/crates/client/src/async_activity_handle.rs +297 -0
- package/sdk-core/crates/client/src/callback_based.rs +7 -0
- package/sdk-core/crates/client/src/errors.rs +294 -0
- package/sdk-core/crates/client/src/{raw.rs → grpc.rs} +280 -159
- package/sdk-core/crates/client/src/lib.rs +920 -1326
- package/sdk-core/crates/client/src/metrics.rs +24 -33
- package/sdk-core/crates/client/src/options_structs.rs +457 -0
- package/sdk-core/crates/client/src/replaceable.rs +5 -4
- package/sdk-core/crates/client/src/request_extensions.rs +8 -9
- package/sdk-core/crates/client/src/retry.rs +99 -54
- package/sdk-core/crates/client/src/{worker/mod.rs → worker.rs} +1 -1
- package/sdk-core/crates/client/src/workflow_handle.rs +826 -0
- package/sdk-core/crates/common/Cargo.toml +61 -2
- package/sdk-core/crates/common/build.rs +742 -12
- package/sdk-core/crates/common/protos/api_upstream/.github/workflows/ci.yml +2 -0
- package/sdk-core/crates/common/protos/api_upstream/Makefile +2 -1
- package/sdk-core/crates/common/protos/api_upstream/buf.yaml +0 -3
- package/sdk-core/crates/common/protos/api_upstream/cmd/check-path-conflicts/main.go +137 -0
- package/sdk-core/crates/common/protos/api_upstream/openapi/openapiv2.json +1166 -770
- package/sdk-core/crates/common/protos/api_upstream/openapi/openapiv3.yaml +1243 -750
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/deployment/v1/message.proto +2 -2
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/enums/v1/workflow.proto +4 -3
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/failure/v1/message.proto +1 -0
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/history/v1/message.proto +4 -0
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/namespace/v1/message.proto +6 -0
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/nexus/v1/message.proto +16 -1
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +64 -6
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +88 -33
- package/sdk-core/crates/common/protos/local/temporal/sdk/core/nexus/nexus.proto +4 -2
- package/sdk-core/crates/common/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +4 -0
- package/sdk-core/crates/common/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +5 -5
- package/sdk-core/crates/common/src/activity_definition.rs +20 -0
- package/sdk-core/crates/common/src/data_converters.rs +770 -0
- package/sdk-core/crates/common/src/envconfig.rs +5 -0
- package/sdk-core/crates/common/src/lib.rs +15 -211
- package/sdk-core/crates/common/src/payload_visitor.rs +648 -0
- package/sdk-core/crates/common/src/priority.rs +110 -0
- package/sdk-core/crates/common/src/protos/canned_histories.rs +3 -0
- package/sdk-core/crates/common/src/protos/history_builder.rs +45 -0
- package/sdk-core/crates/common/src/protos/history_info.rs +2 -0
- package/sdk-core/crates/common/src/protos/mod.rs +122 -27
- package/sdk-core/crates/common/src/protos/task_token.rs +3 -3
- package/sdk-core/crates/common/src/protos/utilities.rs +11 -0
- package/sdk-core/crates/{sdk-core → common}/src/telemetry/log_export.rs +5 -7
- package/sdk-core/crates/common/src/telemetry/metrics/core.rs +125 -0
- package/sdk-core/crates/common/src/telemetry/metrics.rs +268 -223
- package/sdk-core/crates/{sdk-core → common}/src/telemetry/otel.rs +8 -13
- package/sdk-core/crates/{sdk-core → common}/src/telemetry/prometheus_meter.rs +49 -50
- package/sdk-core/crates/{sdk-core → common}/src/telemetry/prometheus_server.rs +2 -3
- package/sdk-core/crates/common/src/telemetry.rs +264 -4
- package/sdk-core/crates/common/src/worker.rs +68 -603
- package/sdk-core/crates/common/src/workflow_definition.rs +60 -0
- package/sdk-core/crates/macros/Cargo.toml +5 -1
- package/sdk-core/crates/macros/src/activities_definitions.rs +585 -0
- package/sdk-core/crates/macros/src/fsm_impl.rs +507 -0
- package/sdk-core/crates/macros/src/lib.rs +138 -512
- package/sdk-core/crates/macros/src/macro_utils.rs +106 -0
- package/sdk-core/crates/macros/src/workflow_definitions.rs +1224 -0
- package/sdk-core/crates/sdk/Cargo.toml +19 -6
- package/sdk-core/crates/sdk/README.md +415 -0
- package/sdk-core/crates/sdk/src/activities.rs +417 -0
- package/sdk-core/crates/sdk/src/interceptors.rs +1 -1
- package/sdk-core/crates/sdk/src/lib.rs +757 -442
- package/sdk-core/crates/sdk/src/workflow_context/options.rs +45 -35
- package/sdk-core/crates/sdk/src/workflow_context.rs +1033 -289
- package/sdk-core/crates/sdk/src/workflow_future.rs +277 -213
- package/sdk-core/crates/sdk/src/workflows.rs +711 -0
- package/sdk-core/crates/sdk-core/Cargo.toml +57 -64
- package/sdk-core/crates/sdk-core/benches/workflow_replay_bench.rs +41 -35
- package/sdk-core/crates/sdk-core/machine_coverage/ActivityMachine_Coverage.puml +1 -1
- package/sdk-core/crates/sdk-core/src/abstractions.rs +6 -10
- package/sdk-core/crates/sdk-core/src/core_tests/activity_tasks.rs +6 -5
- package/sdk-core/crates/sdk-core/src/core_tests/mod.rs +13 -15
- package/sdk-core/crates/sdk-core/src/core_tests/queries.rs +21 -25
- package/sdk-core/crates/sdk-core/src/core_tests/replay_flag.rs +7 -10
- package/sdk-core/crates/sdk-core/src/core_tests/updates.rs +14 -17
- package/sdk-core/crates/sdk-core/src/core_tests/workers.rs +493 -26
- package/sdk-core/crates/sdk-core/src/core_tests/workflow_tasks.rs +4 -8
- package/sdk-core/crates/sdk-core/src/ephemeral_server/mod.rs +7 -7
- package/sdk-core/crates/sdk-core/src/histfetch.rs +20 -10
- package/sdk-core/crates/sdk-core/src/lib.rs +41 -111
- package/sdk-core/crates/sdk-core/src/pollers/mod.rs +4 -9
- package/sdk-core/crates/sdk-core/src/pollers/poll_buffer.rs +118 -19
- package/sdk-core/crates/sdk-core/src/protosext/mod.rs +2 -2
- package/sdk-core/crates/sdk-core/src/replay/mod.rs +14 -5
- package/sdk-core/crates/sdk-core/src/telemetry/metrics.rs +179 -196
- package/sdk-core/crates/sdk-core/src/telemetry/mod.rs +3 -280
- package/sdk-core/crates/sdk-core/src/test_help/integ_helpers.rs +6 -9
- package/sdk-core/crates/sdk-core/src/test_help/unit_helpers.rs +3 -6
- package/sdk-core/crates/sdk-core/src/worker/activities/local_activities.rs +11 -14
- package/sdk-core/crates/sdk-core/src/worker/activities.rs +16 -19
- package/sdk-core/crates/sdk-core/src/worker/client/mocks.rs +9 -5
- package/sdk-core/crates/sdk-core/src/worker/client.rs +103 -81
- package/sdk-core/crates/sdk-core/src/worker/heartbeat.rs +7 -11
- package/sdk-core/crates/sdk-core/src/worker/mod.rs +1124 -229
- package/sdk-core/crates/sdk-core/src/worker/nexus.rs +145 -23
- package/sdk-core/crates/sdk-core/src/worker/slot_provider.rs +2 -2
- package/sdk-core/crates/sdk-core/src/worker/tuner/fixed_size.rs +2 -2
- package/sdk-core/crates/sdk-core/src/worker/tuner/resource_based.rs +13 -13
- package/sdk-core/crates/sdk-core/src/worker/tuner.rs +28 -8
- package/sdk-core/crates/sdk-core/src/worker/workflow/driven_workflow.rs +9 -3
- package/sdk-core/crates/sdk-core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +21 -22
- package/sdk-core/crates/sdk-core/src/worker/workflow/machines/workflow_machines.rs +19 -4
- package/sdk-core/crates/sdk-core/src/worker/workflow/managed_run.rs +14 -18
- package/sdk-core/crates/sdk-core/src/worker/workflow/mod.rs +4 -6
- package/sdk-core/crates/sdk-core/src/worker/workflow/run_cache.rs +4 -7
- package/sdk-core/crates/sdk-core/src/worker/workflow/wft_extraction.rs +2 -4
- package/sdk-core/crates/sdk-core/src/worker/workflow/wft_poller.rs +8 -9
- package/sdk-core/crates/sdk-core/src/worker/workflow/workflow_stream.rs +1 -3
- package/sdk-core/crates/sdk-core/tests/activities_procmacro.rs +6 -0
- package/sdk-core/crates/sdk-core/tests/activities_trybuild/basic_pass.rs +54 -0
- package/sdk-core/crates/sdk-core/tests/activities_trybuild/invalid_self_type_fail.rs +18 -0
- package/sdk-core/crates/sdk-core/tests/activities_trybuild/invalid_self_type_fail.stderr +5 -0
- package/sdk-core/crates/sdk-core/tests/activities_trybuild/missing_context_fail.rs +14 -0
- package/sdk-core/crates/sdk-core/tests/activities_trybuild/missing_context_fail.stderr +5 -0
- package/sdk-core/crates/sdk-core/tests/activities_trybuild/multi_arg_pass.rs +48 -0
- package/sdk-core/crates/sdk-core/tests/activities_trybuild/no_input_pass.rs +14 -0
- package/sdk-core/crates/sdk-core/tests/activities_trybuild/no_return_type_pass.rs +19 -0
- package/sdk-core/crates/sdk-core/tests/cloud_tests.rs +14 -5
- package/sdk-core/crates/sdk-core/tests/common/activity_functions.rs +55 -0
- package/sdk-core/crates/sdk-core/tests/common/mod.rs +241 -196
- package/sdk-core/crates/sdk-core/tests/common/workflows.rs +41 -28
- package/sdk-core/crates/sdk-core/tests/global_metric_tests.rs +3 -5
- package/sdk-core/crates/sdk-core/tests/heavy_tests/fuzzy_workflow.rs +73 -64
- package/sdk-core/crates/sdk-core/tests/heavy_tests.rs +298 -252
- package/sdk-core/crates/sdk-core/tests/integ_tests/async_activity_client_tests.rs +230 -0
- package/sdk-core/crates/sdk-core/tests/integ_tests/client_tests.rs +94 -57
- package/sdk-core/crates/sdk-core/tests/integ_tests/data_converter_tests.rs +381 -0
- package/sdk-core/crates/sdk-core/tests/integ_tests/ephemeral_server_tests.rs +16 -12
- package/sdk-core/crates/sdk-core/tests/integ_tests/heartbeat_tests.rs +48 -40
- package/sdk-core/crates/sdk-core/tests/integ_tests/metrics_tests.rs +327 -255
- package/sdk-core/crates/sdk-core/tests/integ_tests/pagination_tests.rs +50 -45
- package/sdk-core/crates/sdk-core/tests/integ_tests/polling_tests.rs +147 -126
- package/sdk-core/crates/sdk-core/tests/integ_tests/queries_tests.rs +103 -89
- package/sdk-core/crates/sdk-core/tests/integ_tests/update_tests.rs +609 -453
- package/sdk-core/crates/sdk-core/tests/integ_tests/visibility_tests.rs +80 -62
- package/sdk-core/crates/sdk-core/tests/integ_tests/worker_heartbeat_tests.rs +360 -231
- package/sdk-core/crates/sdk-core/tests/integ_tests/worker_tests.rs +248 -185
- package/sdk-core/crates/sdk-core/tests/integ_tests/worker_versioning_tests.rs +52 -43
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_client_tests.rs +180 -0
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/activities.rs +428 -315
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +82 -56
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +56 -28
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +364 -243
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/client_interactions.rs +552 -0
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +101 -42
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +243 -147
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/eager.rs +98 -28
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +1475 -1036
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/modify_wf_properties.rs +73 -41
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/nexus.rs +397 -238
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/patches.rs +414 -189
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/queries.rs +415 -0
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/replay.rs +96 -36
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/resets.rs +154 -137
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/signals.rs +183 -105
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +85 -38
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/timers.rs +142 -40
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +73 -54
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests.rs +363 -226
- package/sdk-core/crates/sdk-core/tests/main.rs +17 -15
- package/sdk-core/crates/sdk-core/tests/manual_tests.rs +207 -152
- package/sdk-core/crates/sdk-core/tests/shared_tests/mod.rs +65 -34
- package/sdk-core/crates/sdk-core/tests/shared_tests/priority.rs +107 -84
- package/sdk-core/crates/sdk-core/tests/workflows_procmacro.rs +6 -0
- package/sdk-core/crates/sdk-core/tests/workflows_trybuild/async_query_fail.rs +26 -0
- package/sdk-core/crates/sdk-core/tests/workflows_trybuild/async_query_fail.stderr +5 -0
- package/sdk-core/crates/sdk-core/tests/workflows_trybuild/basic_pass.rs +49 -0
- package/sdk-core/crates/sdk-core/tests/workflows_trybuild/minimal_pass.rs +21 -0
- package/sdk-core/crates/sdk-core/tests/workflows_trybuild/mut_query_fail.rs +26 -0
- package/sdk-core/crates/sdk-core/tests/workflows_trybuild/mut_query_fail.stderr +5 -0
- package/sdk-core/crates/sdk-core/tests/workflows_trybuild/sync_run_fail.rs +21 -0
- package/sdk-core/crates/sdk-core/tests/workflows_trybuild/sync_run_fail.stderr +5 -0
- package/sdk-core/crates/sdk-core-c-bridge/Cargo.toml +7 -1
- package/sdk-core/crates/sdk-core-c-bridge/include/temporal-sdk-core-c-bridge.h +14 -14
- package/sdk-core/crates/sdk-core-c-bridge/src/client.rs +83 -74
- package/sdk-core/crates/sdk-core-c-bridge/src/metric.rs +9 -14
- package/sdk-core/crates/sdk-core-c-bridge/src/runtime.rs +1 -2
- package/sdk-core/crates/sdk-core-c-bridge/src/tests/context.rs +13 -13
- package/sdk-core/crates/sdk-core-c-bridge/src/tests/mod.rs +6 -6
- package/sdk-core/crates/sdk-core-c-bridge/src/tests/utils.rs +3 -4
- package/sdk-core/crates/sdk-core-c-bridge/src/worker.rs +62 -75
- package/sdk-core/rustfmt.toml +2 -1
- package/src/client.rs +205 -318
- package/src/metrics.rs +22 -30
- package/src/runtime.rs +4 -5
- package/src/worker.rs +16 -19
- package/ts/native.ts +1 -1
- package/sdk-core/crates/client/src/workflow_handle/mod.rs +0 -212
- package/sdk-core/crates/common/src/errors.rs +0 -85
- package/sdk-core/crates/common/tests/worker_task_types_test.rs +0 -129
- package/sdk-core/crates/sdk/src/activity_context.rs +0 -238
- package/sdk-core/crates/sdk/src/app_data.rs +0 -37
- package/sdk-core/crates/sdk-core/tests/integ_tests/activity_functions.rs +0 -5
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/appdata_propagation.rs +0 -61
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
use crate::{
|
|
2
2
|
common::{
|
|
3
|
-
CoreWfStarter, fake_grpc_server::fake_server,
|
|
4
|
-
get_integ_server_options, get_integ_telem_options, mock_sdk_cfg,
|
|
3
|
+
CoreWfStarter, activity_functions::StdActivities, fake_grpc_server::fake_server,
|
|
4
|
+
get_integ_runtime_options, get_integ_server_options, get_integ_telem_options, mock_sdk_cfg,
|
|
5
5
|
},
|
|
6
|
-
shared_tests,
|
|
6
|
+
shared_tests::{self, is_oversize_grpc_event},
|
|
7
7
|
};
|
|
8
8
|
use assert_matches::assert_matches;
|
|
9
9
|
use futures_util::FutureExt;
|
|
@@ -18,10 +18,9 @@ use std::{
|
|
|
18
18
|
},
|
|
19
19
|
time::Duration,
|
|
20
20
|
};
|
|
21
|
-
use temporalio_client::
|
|
21
|
+
use temporalio_client::{Connection, WorkflowStartOptions};
|
|
22
22
|
use temporalio_common::{
|
|
23
|
-
|
|
24
|
-
errors::WorkerValidationError,
|
|
23
|
+
data_converters::{DataConverter, RawValue},
|
|
25
24
|
protos::{
|
|
26
25
|
DEFAULT_WORKFLOW_TYPE, TestHistoryBuilder, canned_histories,
|
|
27
26
|
coresdk::{
|
|
@@ -35,13 +34,15 @@ use temporalio_common::{
|
|
|
35
34
|
command::v1::command::Attributes,
|
|
36
35
|
common::v1::WorkerVersionStamp,
|
|
37
36
|
enums::v1::{
|
|
38
|
-
EventType,
|
|
37
|
+
EventType,
|
|
38
|
+
WorkflowTaskFailedCause::{self},
|
|
39
39
|
},
|
|
40
40
|
failure::v1::Failure as InnerFailure,
|
|
41
41
|
history::v1::{
|
|
42
|
-
ActivityTaskScheduledEventAttributes,
|
|
43
|
-
history_event::
|
|
44
|
-
self
|
|
42
|
+
ActivityTaskScheduledEventAttributes,
|
|
43
|
+
history_event::{
|
|
44
|
+
self,
|
|
45
|
+
Attributes::{self as EventAttributes},
|
|
45
46
|
},
|
|
46
47
|
},
|
|
47
48
|
workflowservice::v1::{
|
|
@@ -50,18 +51,20 @@ use temporalio_common::{
|
|
|
50
51
|
},
|
|
51
52
|
},
|
|
52
53
|
},
|
|
53
|
-
worker::
|
|
54
|
-
ActivitySlotKind, LocalActivitySlotKind, PollerBehavior, SlotInfo, SlotInfoTrait,
|
|
55
|
-
SlotMarkUsedContext, SlotReleaseContext, SlotReservationContext, SlotSupplier,
|
|
56
|
-
SlotSupplierPermit, WorkerConfig, WorkerTaskTypes, WorkerVersioningStrategy,
|
|
57
|
-
WorkflowSlotKind,
|
|
58
|
-
},
|
|
54
|
+
worker::WorkerTaskTypes,
|
|
59
55
|
};
|
|
56
|
+
use temporalio_macros::{activities, workflow, workflow_methods};
|
|
60
57
|
use temporalio_sdk::{
|
|
61
|
-
ActivityOptions, LocalActivityOptions,
|
|
58
|
+
ActivityOptions, LocalActivityOptions, WorkerOptions, WorkflowContext, WorkflowResult,
|
|
59
|
+
WorkflowTermination,
|
|
60
|
+
activities::{ActivityContext, ActivityError},
|
|
61
|
+
interceptors::WorkerInterceptor,
|
|
62
62
|
};
|
|
63
63
|
use temporalio_sdk_core::{
|
|
64
|
-
|
|
64
|
+
ActivitySlotKind, CoreRuntime, LocalActivitySlotKind, PollError, PollerBehavior,
|
|
65
|
+
ResourceBasedTuner, ResourceSlotOptions, SlotInfo, SlotInfoTrait, SlotMarkUsedContext,
|
|
66
|
+
SlotReleaseContext, SlotReservationContext, SlotSupplier, SlotSupplierPermit, TunerBuilder,
|
|
67
|
+
WorkerConfig, WorkerValidationError, WorkerVersioningStrategy, WorkflowSlotKind, init_worker,
|
|
65
68
|
test_help::{
|
|
66
69
|
FakeWfResponses, MockPollCfg, ResponseType, build_mock_pollers, drain_pollers_and_shutdown,
|
|
67
70
|
hist_to_poll_resp, mock_worker, mock_worker_client,
|
|
@@ -73,14 +76,12 @@ use uuid::Uuid;
|
|
|
73
76
|
|
|
74
77
|
#[tokio::test]
|
|
75
78
|
async fn worker_validation_fails_on_nonexistent_namespace() {
|
|
76
|
-
let opts = get_integ_server_options();
|
|
79
|
+
let mut opts = get_integ_server_options();
|
|
77
80
|
let runtime =
|
|
78
81
|
CoreRuntime::new_assume_tokio(get_integ_runtime_options(get_integ_telem_options()))
|
|
79
82
|
.unwrap();
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
.await
|
|
83
|
-
.unwrap();
|
|
83
|
+
opts.metrics_meter = runtime.telemetry().get_temporal_metric_meter();
|
|
84
|
+
let connection = Connection::connect(opts).await.unwrap();
|
|
84
85
|
|
|
85
86
|
let worker = init_worker(
|
|
86
87
|
&runtime,
|
|
@@ -93,7 +94,7 @@ async fn worker_validation_fails_on_nonexistent_namespace() {
|
|
|
93
94
|
.task_types(WorkerTaskTypes::all())
|
|
94
95
|
.build()
|
|
95
96
|
.unwrap(),
|
|
96
|
-
|
|
97
|
+
connection,
|
|
97
98
|
)
|
|
98
99
|
.unwrap();
|
|
99
100
|
|
|
@@ -110,12 +111,13 @@ async fn worker_handles_unknown_workflow_types_gracefully() {
|
|
|
110
111
|
let mut starter = CoreWfStarter::new(wf_type);
|
|
111
112
|
let mut worker = starter.worker().await;
|
|
112
113
|
|
|
114
|
+
let task_queue = starter.get_task_queue().to_owned();
|
|
115
|
+
let wf_id = format!("wce-{}", Uuid::new_v4());
|
|
113
116
|
let run_id = worker
|
|
114
117
|
.submit_wf(
|
|
115
|
-
format!("wce-{}", Uuid::new_v4()),
|
|
116
118
|
"unregistered".to_string(),
|
|
117
119
|
vec![],
|
|
118
|
-
|
|
120
|
+
WorkflowStartOptions::new(task_queue, wf_id).build(),
|
|
119
121
|
)
|
|
120
122
|
.await
|
|
121
123
|
.unwrap();
|
|
@@ -172,36 +174,41 @@ async fn worker_handles_unknown_workflow_types_gracefully() {
|
|
|
172
174
|
});
|
|
173
175
|
}
|
|
174
176
|
|
|
177
|
+
#[workflow]
|
|
178
|
+
#[derive(Default)]
|
|
179
|
+
struct ResourceBasedNonStickyWf;
|
|
180
|
+
|
|
181
|
+
#[workflow_methods]
|
|
182
|
+
impl ResourceBasedNonStickyWf {
|
|
183
|
+
#[run]
|
|
184
|
+
async fn run(_ctx: &mut WorkflowContext<Self>) -> WorkflowResult<()> {
|
|
185
|
+
Ok(())
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
175
189
|
#[tokio::test]
|
|
176
190
|
async fn resource_based_few_pollers_guarantees_non_sticky_poll() {
|
|
177
191
|
let wf_name = "resource_based_few_pollers_guarantees_non_sticky_poll";
|
|
178
192
|
let mut starter = CoreWfStarter::new(wf_name);
|
|
179
|
-
starter.
|
|
180
|
-
starter.worker_config.max_outstanding_local_activities = None;
|
|
181
|
-
starter.worker_config.max_outstanding_activities = None;
|
|
182
|
-
starter.worker_config.max_outstanding_nexus_tasks = None;
|
|
183
|
-
starter.worker_config.task_types = WorkerTaskTypes::workflow_only();
|
|
193
|
+
starter.sdk_config.task_types = WorkerTaskTypes::workflow_only();
|
|
184
194
|
// 3 pollers so the minimum slots of 2 can both be handed out to a sticky poller
|
|
185
|
-
starter.
|
|
195
|
+
starter.sdk_config.workflow_task_poller_behavior = PollerBehavior::SimpleMaximum(3_usize);
|
|
186
196
|
// Set the limits to zero so it's essentially unwilling to hand out slots
|
|
187
197
|
let mut tuner = ResourceBasedTuner::new(0.0, 0.0);
|
|
188
198
|
tuner.with_workflow_slots_options(ResourceSlotOptions::new(2, 10, Duration::from_millis(0)));
|
|
189
|
-
starter.
|
|
199
|
+
starter.sdk_config.tuner = Arc::new(tuner);
|
|
190
200
|
let mut worker = starter.worker().await;
|
|
191
201
|
|
|
192
202
|
// Workflow doesn't actually need to do anything. We just need to see that we don't get stuck
|
|
193
203
|
// by assigning all slots to sticky pollers.
|
|
194
|
-
worker.
|
|
195
|
-
|
|
196
|
-
|_: WfContext| async move { Ok(().into()) },
|
|
197
|
-
);
|
|
204
|
+
worker.register_workflow::<ResourceBasedNonStickyWf>();
|
|
205
|
+
let task_queue = starter.get_task_queue().to_owned();
|
|
198
206
|
for i in 0..20 {
|
|
199
207
|
worker
|
|
200
|
-
.
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
WorkflowOptions::default(),
|
|
208
|
+
.submit_workflow(
|
|
209
|
+
ResourceBasedNonStickyWf::run,
|
|
210
|
+
(),
|
|
211
|
+
WorkflowStartOptions::new(task_queue.clone(), format!("{wf_name}_{i}")).build(),
|
|
205
212
|
)
|
|
206
213
|
.await
|
|
207
214
|
.unwrap();
|
|
@@ -217,31 +224,47 @@ async fn oversize_grpc_message() {
|
|
|
217
224
|
let (telemopts, addr, _aborter) = prom_metrics(None);
|
|
218
225
|
let runtime = CoreRuntime::new_assume_tokio(get_integ_runtime_options(telemopts)).unwrap();
|
|
219
226
|
let mut starter = CoreWfStarter::new_with_runtime(wf_name, runtime);
|
|
220
|
-
starter.
|
|
227
|
+
starter.sdk_config.task_types = WorkerTaskTypes::workflow_only();
|
|
221
228
|
let mut core = starter.worker().await;
|
|
222
229
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
230
|
+
let has_run = Arc::new(AtomicBool::new(false));
|
|
231
|
+
let has_run_clone = has_run.clone();
|
|
232
|
+
|
|
233
|
+
#[workflow]
|
|
234
|
+
struct OversizeGrpcMessageWf {
|
|
235
|
+
has_run: Arc<AtomicBool>,
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
#[workflow_methods(factory_only)]
|
|
239
|
+
impl OversizeGrpcMessageWf {
|
|
240
|
+
#[run]
|
|
241
|
+
async fn run(ctx: &mut WorkflowContext<Self>) -> WorkflowResult<Vec<u8>> {
|
|
242
|
+
if ctx.state(|wf| wf.has_run.load(Relaxed)) {
|
|
243
|
+
Ok(vec![])
|
|
244
|
+
} else {
|
|
245
|
+
ctx.state(|wf| wf.has_run.store(true, Relaxed));
|
|
246
|
+
let result: Vec<u8> = vec![0; 5000000];
|
|
247
|
+
Ok(result)
|
|
248
|
+
}
|
|
231
249
|
}
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
core.register_workflow_with_factory(move || OversizeGrpcMessageWf {
|
|
253
|
+
has_run: has_run_clone.clone(),
|
|
232
254
|
});
|
|
233
|
-
starter
|
|
255
|
+
starter
|
|
256
|
+
.start_with_worker(OversizeGrpcMessageWf::name(), &mut core)
|
|
257
|
+
.await;
|
|
234
258
|
core.run_until_done().await.unwrap();
|
|
235
259
|
|
|
236
|
-
assert!(
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
}));
|
|
260
|
+
assert!(
|
|
261
|
+
starter
|
|
262
|
+
.get_history()
|
|
263
|
+
.await
|
|
264
|
+
.events
|
|
265
|
+
.iter()
|
|
266
|
+
.any(is_oversize_grpc_event)
|
|
267
|
+
);
|
|
245
268
|
|
|
246
269
|
// Verify the workflow task failure metric includes the GrpcMessageTooLarge reason
|
|
247
270
|
let tq = starter.get_task_queue();
|
|
@@ -357,7 +380,10 @@ async fn activity_tasks_from_completion_reserve_slots() {
|
|
|
357
380
|
cfg.max_outstanding_activities = Some(2);
|
|
358
381
|
});
|
|
359
382
|
let core = Arc::new(mock_worker(mock));
|
|
360
|
-
let mut worker = crate::common::TestWorker::new(
|
|
383
|
+
let mut worker = crate::common::TestWorker::new(temporalio_sdk::Worker::new_from_core(
|
|
384
|
+
core.clone(),
|
|
385
|
+
DataConverter::default(),
|
|
386
|
+
));
|
|
361
387
|
|
|
362
388
|
// First poll for activities twice, occupying both slots
|
|
363
389
|
let at1 = core.poll_activity_task().await.unwrap();
|
|
@@ -365,33 +391,45 @@ async fn activity_tasks_from_completion_reserve_slots() {
|
|
|
365
391
|
let workflow_complete_token = CancellationToken::new();
|
|
366
392
|
let workflow_complete_token_clone = workflow_complete_token.clone();
|
|
367
393
|
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
})
|
|
380
|
-
.await;
|
|
381
|
-
complete_token.cancel();
|
|
382
|
-
Ok(().into())
|
|
394
|
+
struct FakeAct;
|
|
395
|
+
#[activities]
|
|
396
|
+
impl FakeAct {
|
|
397
|
+
#[activity(name = "act1")]
|
|
398
|
+
fn act1(_: ActivityContext) -> Result<RawValue, ActivityError> {
|
|
399
|
+
unreachable!("doesn't actually run")
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
#[activity(name = "act2")]
|
|
403
|
+
fn act2(_: ActivityContext) -> Result<RawValue, ActivityError> {
|
|
404
|
+
unreachable!("doesn't actually run")
|
|
383
405
|
}
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
#[workflow]
|
|
409
|
+
struct ActivityTasksCompletionWf {
|
|
410
|
+
complete_token: CancellationToken,
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
#[workflow_methods(factory_only)]
|
|
414
|
+
impl ActivityTasksCompletionWf {
|
|
415
|
+
#[run(name = DEFAULT_WORKFLOW_TYPE)]
|
|
416
|
+
async fn run(ctx: &mut WorkflowContext<Self>) -> WorkflowResult<()> {
|
|
417
|
+
ctx.start_activity(FakeAct::act1, (), ActivityOptions::default())
|
|
418
|
+
.await
|
|
419
|
+
.map_err(|e| WorkflowTermination::from(anyhow::Error::from(e)))?;
|
|
420
|
+
ctx.start_activity(FakeAct::act2, (), ActivityOptions::default())
|
|
421
|
+
.await
|
|
422
|
+
.map_err(|e| WorkflowTermination::from(anyhow::Error::from(e)))?;
|
|
423
|
+
ctx.state(|wf| wf.complete_token.cancel());
|
|
424
|
+
Ok(())
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
let wf_token = workflow_complete_token.clone();
|
|
429
|
+
worker.register_workflow_with_factory(move || ActivityTasksCompletionWf {
|
|
430
|
+
complete_token: wf_token.clone(),
|
|
384
431
|
});
|
|
385
432
|
|
|
386
|
-
worker
|
|
387
|
-
.submit_wf(
|
|
388
|
-
wf_id.to_owned(),
|
|
389
|
-
DEFAULT_WORKFLOW_TYPE,
|
|
390
|
-
vec![],
|
|
391
|
-
WorkflowOptions::default(),
|
|
392
|
-
)
|
|
393
|
-
.await
|
|
394
|
-
.unwrap();
|
|
395
433
|
let act_completer = async {
|
|
396
434
|
barr.wait().await;
|
|
397
435
|
core.complete_activity_task(ActivityTaskCompletion {
|
|
@@ -407,13 +445,13 @@ async fn activity_tasks_from_completion_reserve_slots() {
|
|
|
407
445
|
.await
|
|
408
446
|
.unwrap();
|
|
409
447
|
barr.wait().await;
|
|
410
|
-
// Wait for workflow to complete in order for all eager activities to be requested before
|
|
411
|
-
// After shutdown, no eager activities slots can be allocated.
|
|
448
|
+
// Wait for workflow to complete in order for all eager activities to be requested before
|
|
449
|
+
// shutting down. After shutdown, no eager activities slots can be allocated.
|
|
412
450
|
workflow_complete_token_clone.cancelled().await;
|
|
413
451
|
core.initiate_shutdown();
|
|
414
452
|
// Even though this test requests eager activity tasks, none are returned in poll responses.
|
|
415
453
|
let err = core.poll_activity_task().await.unwrap_err();
|
|
416
|
-
assert_matches!(err,
|
|
454
|
+
assert_matches!(err, PollError::ShutDown);
|
|
417
455
|
};
|
|
418
456
|
// This wf poll should *not* set the flag that it wants tasks back since both slots are
|
|
419
457
|
// occupied
|
|
@@ -438,23 +476,27 @@ async fn max_wft_respected() {
|
|
|
438
476
|
cfg.max_cached_workflows = total_wfs as usize;
|
|
439
477
|
cfg.max_outstanding_workflow_tasks = Some(1);
|
|
440
478
|
});
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
.
|
|
479
|
+
static ACTIVE_COUNT: Semaphore = Semaphore::const_new(1);
|
|
480
|
+
|
|
481
|
+
#[workflow]
|
|
482
|
+
#[derive(Default)]
|
|
483
|
+
struct MaxWftWf;
|
|
484
|
+
|
|
485
|
+
#[workflow_methods]
|
|
486
|
+
impl MaxWftWf {
|
|
487
|
+
#[run(name = DEFAULT_WORKFLOW_TYPE)]
|
|
488
|
+
async fn run(ctx: &mut WorkflowContext<Self>) -> WorkflowResult<()> {
|
|
489
|
+
drop(
|
|
490
|
+
ACTIVE_COUNT
|
|
491
|
+
.try_acquire()
|
|
492
|
+
.expect("No multiple concurrent workflow tasks!"),
|
|
493
|
+
);
|
|
494
|
+
ctx.timer(Duration::from_secs(1)).await;
|
|
495
|
+
Ok(())
|
|
496
|
+
}
|
|
457
497
|
}
|
|
498
|
+
|
|
499
|
+
worker.register_workflow::<MaxWftWf>();
|
|
458
500
|
worker.run_until_done().await.unwrap();
|
|
459
501
|
}
|
|
460
502
|
|
|
@@ -527,23 +569,24 @@ async fn history_length_with_fail_and_timeout(
|
|
|
527
569
|
wc.max_cached_workflows = 1;
|
|
528
570
|
}
|
|
529
571
|
});
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
572
|
+
#[workflow]
|
|
573
|
+
#[derive(Default)]
|
|
574
|
+
struct HistoryLengthWf;
|
|
575
|
+
|
|
576
|
+
#[workflow_methods]
|
|
577
|
+
impl HistoryLengthWf {
|
|
578
|
+
#[run(name = DEFAULT_WORKFLOW_TYPE)]
|
|
579
|
+
async fn run(ctx: &mut WorkflowContext<Self>) -> WorkflowResult<()> {
|
|
580
|
+
assert_eq!(ctx.history_length(), 3);
|
|
581
|
+
ctx.timer(Duration::from_secs(1)).await;
|
|
582
|
+
assert_eq!(ctx.history_length(), 14);
|
|
583
|
+
ctx.timer(Duration::from_secs(1)).await;
|
|
584
|
+
assert_eq!(ctx.history_length(), 19);
|
|
585
|
+
Ok(())
|
|
586
|
+
}
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
worker.register_workflow::<HistoryLengthWf>();
|
|
547
590
|
worker.run_until_done().await.unwrap();
|
|
548
591
|
}
|
|
549
592
|
|
|
@@ -583,31 +626,37 @@ async fn sets_build_id_from_wft_complete() {
|
|
|
583
626
|
},
|
|
584
627
|
);
|
|
585
628
|
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
)
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
629
|
+
#[workflow]
|
|
630
|
+
#[derive(Default)]
|
|
631
|
+
struct BuildIdWf;
|
|
632
|
+
|
|
633
|
+
#[workflow_methods]
|
|
634
|
+
impl BuildIdWf {
|
|
635
|
+
#[run(name = DEFAULT_WORKFLOW_TYPE)]
|
|
636
|
+
async fn run(ctx: &mut WorkflowContext<Self>) -> WorkflowResult<()> {
|
|
637
|
+
// First task, it should be empty, since replaying and nothing in first WFT completed
|
|
638
|
+
assert_eq!(ctx.current_deployment_version(), None);
|
|
639
|
+
ctx.timer(Duration::from_secs(1)).await;
|
|
640
|
+
assert_eq!(
|
|
641
|
+
ctx.current_deployment_version().unwrap().build_id,
|
|
642
|
+
"enchi-cat"
|
|
643
|
+
);
|
|
644
|
+
ctx.timer(Duration::from_secs(1)).await;
|
|
645
|
+
// Not replaying at this point, so we should see the worker's build id
|
|
646
|
+
assert_eq!(
|
|
647
|
+
ctx.current_deployment_version().unwrap().build_id,
|
|
648
|
+
"fierce-predator"
|
|
649
|
+
);
|
|
650
|
+
ctx.timer(Duration::from_secs(1)).await;
|
|
651
|
+
assert_eq!(
|
|
652
|
+
ctx.current_deployment_version().unwrap().build_id,
|
|
653
|
+
"fierce-predator"
|
|
654
|
+
);
|
|
655
|
+
Ok(())
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
worker.register_workflow::<BuildIdWf>();
|
|
611
660
|
worker.run_until_done().await.unwrap();
|
|
612
661
|
}
|
|
613
662
|
|
|
@@ -666,7 +715,7 @@ impl<SK> TrackingSlotSupplier<SK> {
|
|
|
666
715
|
#[async_trait::async_trait]
|
|
667
716
|
impl<SK> SlotSupplier for TrackingSlotSupplier<SK>
|
|
668
717
|
where
|
|
669
|
-
SK:
|
|
718
|
+
SK: temporalio_sdk_core::SlotKind + Send + Sync,
|
|
670
719
|
SK::Info: SlotInfoTrait,
|
|
671
720
|
{
|
|
672
721
|
type SlotKind = SK;
|
|
@@ -711,50 +760,56 @@ async fn test_custom_slot_supplier_simple() {
|
|
|
711
760
|
));
|
|
712
761
|
|
|
713
762
|
let mut starter = CoreWfStarter::new("test_custom_slot_supplier_simple");
|
|
714
|
-
starter.
|
|
715
|
-
starter.worker_config.max_outstanding_local_activities = None;
|
|
716
|
-
starter.worker_config.max_outstanding_activities = None;
|
|
717
|
-
starter.worker_config.max_outstanding_nexus_tasks = None;
|
|
763
|
+
starter.sdk_config.register_activities(StdActivities);
|
|
718
764
|
|
|
719
765
|
let mut tb = TunerBuilder::default();
|
|
720
766
|
tb.workflow_slot_supplier(wf_supplier.clone());
|
|
721
767
|
tb.activity_slot_supplier(activity_supplier.clone());
|
|
722
768
|
tb.local_activity_slot_supplier(local_activity_supplier.clone());
|
|
723
|
-
starter.
|
|
769
|
+
starter.sdk_config.tuner = Arc::new(tb.build());
|
|
724
770
|
|
|
725
771
|
let mut worker = starter.worker().await;
|
|
726
772
|
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
773
|
+
#[workflow]
|
|
774
|
+
#[derive(Default)]
|
|
775
|
+
struct SlotSupplierWorkflow;
|
|
776
|
+
|
|
777
|
+
#[workflow_methods]
|
|
778
|
+
impl SlotSupplierWorkflow {
|
|
779
|
+
#[run]
|
|
780
|
+
async fn run(ctx: &mut WorkflowContext<Self>) -> WorkflowResult<()> {
|
|
734
781
|
let _result = ctx
|
|
735
|
-
.
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
782
|
+
.start_activity(
|
|
783
|
+
StdActivities::no_op,
|
|
784
|
+
(),
|
|
785
|
+
ActivityOptions {
|
|
786
|
+
start_to_close_timeout: Some(Duration::from_secs(10)),
|
|
787
|
+
..Default::default()
|
|
788
|
+
},
|
|
789
|
+
)
|
|
740
790
|
.await;
|
|
741
791
|
let _result = ctx
|
|
742
|
-
.
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
792
|
+
.start_local_activity(
|
|
793
|
+
StdActivities::no_op,
|
|
794
|
+
(),
|
|
795
|
+
LocalActivityOptions {
|
|
796
|
+
start_to_close_timeout: Some(Duration::from_secs(10)),
|
|
797
|
+
..Default::default()
|
|
798
|
+
},
|
|
799
|
+
)
|
|
747
800
|
.await;
|
|
748
|
-
Ok(()
|
|
749
|
-
}
|
|
750
|
-
|
|
801
|
+
Ok(())
|
|
802
|
+
}
|
|
803
|
+
}
|
|
751
804
|
|
|
805
|
+
worker.register_workflow::<SlotSupplierWorkflow>();
|
|
806
|
+
|
|
807
|
+
let task_queue = starter.get_task_queue().to_owned();
|
|
752
808
|
worker
|
|
753
|
-
.
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
Default::default(),
|
|
809
|
+
.submit_workflow(
|
|
810
|
+
SlotSupplierWorkflow::run,
|
|
811
|
+
(),
|
|
812
|
+
WorkflowStartOptions::new(task_queue, "test-wf".to_owned()).build(),
|
|
758
813
|
)
|
|
759
814
|
.await
|
|
760
815
|
.unwrap();
|
|
@@ -825,7 +880,7 @@ async fn test_custom_slot_supplier_simple() {
|
|
|
825
880
|
slot_type: "activity",
|
|
826
881
|
activity_type: Some(act_type),
|
|
827
882
|
..
|
|
828
|
-
} if act_type
|
|
883
|
+
} if act_type.contains("no_op")))
|
|
829
884
|
);
|
|
830
885
|
assert!(
|
|
831
886
|
local_activity_events
|
|
@@ -834,7 +889,7 @@ async fn test_custom_slot_supplier_simple() {
|
|
|
834
889
|
slot_type: "local_activity",
|
|
835
890
|
activity_type: Some(act_type),
|
|
836
891
|
..
|
|
837
|
-
} if act_type
|
|
892
|
+
} if act_type.contains("no_op")))
|
|
838
893
|
);
|
|
839
894
|
assert!(wf_events.iter().any(|e| matches!(
|
|
840
895
|
e,
|
|
@@ -907,12 +962,13 @@ async fn shutdown_worker_not_retried() {
|
|
|
907
962
|
.await;
|
|
908
963
|
|
|
909
964
|
let mut opts = get_integ_server_options();
|
|
910
|
-
|
|
911
|
-
.parse()
|
|
965
|
+
opts.target = format!("http://localhost:{}", fs.addr.port())
|
|
966
|
+
.parse::<url::Url>()
|
|
912
967
|
.unwrap();
|
|
913
|
-
opts.
|
|
914
|
-
|
|
915
|
-
let
|
|
968
|
+
opts.set_skip_get_system_info(true);
|
|
969
|
+
let connection = Connection::connect(opts).await.unwrap();
|
|
970
|
+
let client_opts = temporalio_client::ClientOptions::new("ns").build();
|
|
971
|
+
let client = temporalio_client::Client::new(connection, client_opts).unwrap();
|
|
916
972
|
|
|
917
973
|
let wf_type = "shutdown_worker_not_retried";
|
|
918
974
|
let mut starter = CoreWfStarter::new_with_overrides(wf_type, None, Some(client));
|
|
@@ -920,3 +976,10 @@ async fn shutdown_worker_not_retried() {
|
|
|
920
976
|
drain_pollers_and_shutdown(&worker).await;
|
|
921
977
|
assert_eq!(shutdown_call_count.load(Ordering::Relaxed), 1);
|
|
922
978
|
}
|
|
979
|
+
|
|
980
|
+
#[test]
|
|
981
|
+
fn test_default_build_id() {
|
|
982
|
+
let o = WorkerOptions::new("task_queue").build();
|
|
983
|
+
assert!(!o.deployment_options.version.build_id.is_empty());
|
|
984
|
+
assert_ne!(o.deployment_options.version.build_id, "undetermined");
|
|
985
|
+
}
|