@temporalio/core-bridge 1.14.2-canary-release-testing.0 → 1.16.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 +794 -650
- package/bridge-macros/src/derive_tryintojs.rs +40 -0
- package/lib/native.d.ts +24 -3
- package/package.json +4 -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/.github/workflows/per-pr.yml +6 -6
- package/sdk-core/AGENTS.md +42 -31
- package/sdk-core/Cargo.toml +4 -1
- package/sdk-core/README.md +19 -13
- 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} +370 -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} +104 -29
- package/sdk-core/crates/client/src/workflow_handle.rs +826 -0
- package/sdk-core/crates/common/Cargo.toml +62 -3
- 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/.github/workflows/create-release.yml +0 -5
- package/sdk-core/crates/common/protos/api_upstream/Makefile +2 -1
- package/sdk-core/crates/common/protos/api_upstream/README.md +8 -0
- 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 +3329 -2647
- package/sdk-core/crates/common/protos/api_upstream/openapi/openapiv3.yaml +2734 -708
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/activity/v1/message.proto +155 -3
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/command/v1/message.proto +26 -0
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/common/v1/message.proto +8 -1
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/deployment/v1/message.proto +27 -1
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/enums/v1/activity.proto +81 -0
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/enums/v1/event_type.proto +4 -0
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +4 -0
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/enums/v1/task_queue.proto +15 -0
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/enums/v1/workflow.proto +63 -15
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/errordetails/v1/message.proto +8 -0
- 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 +111 -17
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/namespace/v1/message.proto +21 -0
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/nexus/v1/message.proto +20 -1
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/operatorservice/v1/request_response.proto +4 -0
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/schedule/v1/message.proto +2 -2
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +2 -0
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/worker/v1/message.proto +4 -7
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/workflow/v1/message.proto +80 -22
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +347 -23
- package/sdk-core/crates/common/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +242 -43
- package/sdk-core/crates/common/protos/local/temporal/sdk/core/core_interface.proto +15 -0
- package/sdk-core/crates/common/protos/local/temporal/sdk/core/nexus/nexus.proto +9 -2
- package/sdk-core/crates/common/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +8 -0
- package/sdk-core/crates/common/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +22 -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 +19 -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 +134 -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 +11 -16
- package/sdk-core/crates/common/src/telemetry/metrics/core.rs +125 -0
- package/sdk-core/crates/common/src/telemetry/metrics.rs +272 -225
- 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 +278 -19
- package/sdk-core/crates/common/src/worker.rs +68 -636
- 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 +759 -442
- package/sdk-core/crates/sdk/src/workflow_context/options.rs +64 -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 +59 -65
- package/sdk-core/crates/sdk-core/benches/workflow_replay_bench.rs +45 -54
- 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 +22 -21
- 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 +647 -27
- package/sdk-core/crates/sdk-core/src/core_tests/workflow_tasks.rs +46 -41
- package/sdk-core/crates/sdk-core/src/ephemeral_server/mod.rs +13 -16
- package/sdk-core/crates/sdk-core/src/histfetch.rs +20 -10
- package/sdk-core/crates/sdk-core/src/lib.rs +60 -123
- package/sdk-core/crates/sdk-core/src/pollers/mod.rs +4 -9
- package/sdk-core/crates/sdk-core/src/pollers/poll_buffer.rs +411 -32
- 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 +183 -198
- package/sdk-core/crates/sdk-core/src/telemetry/mod.rs +3 -281
- package/sdk-core/crates/sdk-core/src/test_help/integ_helpers.rs +35 -16
- package/sdk-core/crates/sdk-core/src/test_help/unit_helpers.rs +3 -6
- package/sdk-core/crates/sdk-core/src/worker/activities/activity_heartbeat_manager.rs +1 -0
- 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 +11 -5
- package/sdk-core/crates/sdk-core/src/worker/client.rs +104 -86
- package/sdk-core/crates/sdk-core/src/worker/heartbeat.rs +10 -14
- package/sdk-core/crates/sdk-core/src/worker/mod.rs +1175 -241
- package/sdk-core/crates/sdk-core/src/worker/nexus.rs +150 -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 +25 -27
- package/sdk-core/crates/sdk-core/src/worker/tuner.rs +64 -44
- package/sdk-core/crates/sdk-core/src/worker/workflow/driven_workflow.rs +9 -3
- package/sdk-core/crates/sdk-core/src/worker/workflow/machines/patch_state_machine.rs +5 -8
- 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 +28 -4
- package/sdk-core/crates/sdk-core/src/worker/workflow/managed_run.rs +20 -41
- package/sdk-core/crates/sdk-core/src/worker/workflow/mod.rs +50 -9
- 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 +281 -236
- package/sdk-core/crates/sdk-core/tests/common/workflows.rs +41 -28
- package/sdk-core/crates/sdk-core/tests/global_metric_tests.rs +9 -14
- package/sdk-core/crates/sdk-core/tests/heavy_tests/fuzzy_workflow.rs +73 -66
- package/sdk-core/crates/sdk-core/tests/heavy_tests.rs +306 -268
- 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 +37 -38
- package/sdk-core/crates/sdk-core/tests/integ_tests/heartbeat_tests.rs +49 -40
- package/sdk-core/crates/sdk-core/tests/integ_tests/metrics_tests.rs +447 -300
- 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 +157 -157
- 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 -463
- 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 +389 -265
- package/sdk-core/crates/sdk-core/tests/integ_tests/worker_tests.rs +250 -185
- package/sdk-core/crates/sdk-core/tests/integ_tests/worker_versioning_tests.rs +52 -49
- 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 +437 -327
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +82 -58
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +56 -30
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +364 -251
- 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 +110 -46
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +243 -149
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/eager.rs +98 -32
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +1475 -1040
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/modify_wf_properties.rs +73 -43
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/nexus.rs +402 -245
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/patches.rs +343 -207
- 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 +155 -140
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/signals.rs +183 -113
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +85 -44
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/timers.rs +142 -48
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +73 -56
- package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests.rs +365 -242
- package/sdk-core/crates/sdk-core/tests/main.rs +22 -16
- package/sdk-core/crates/sdk-core/tests/manual_tests.rs +233 -187
- package/sdk-core/crates/sdk-core/tests/runner.rs +4 -6
- package/sdk-core/crates/sdk-core/tests/shared_tests/mod.rs +73 -27
- 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 +8 -1
- package/sdk-core/crates/sdk-core-c-bridge/include/temporal-sdk-core-c-bridge.h +37 -26
- package/sdk-core/crates/sdk-core-c-bridge/src/client.rs +180 -87
- package/sdk-core/crates/sdk-core-c-bridge/src/lib.rs +89 -5
- package/sdk-core/crates/sdk-core-c-bridge/src/metric.rs +10 -16
- package/sdk-core/crates/sdk-core-c-bridge/src/runtime.rs +59 -67
- package/sdk-core/crates/sdk-core-c-bridge/src/testing.rs +10 -10
- package/sdk-core/crates/sdk-core-c-bridge/src/tests/context.rs +57 -22
- package/sdk-core/crates/sdk-core-c-bridge/src/tests/mod.rs +108 -12
- package/sdk-core/crates/sdk-core-c-bridge/src/tests/utils.rs +9 -52
- package/sdk-core/crates/sdk-core-c-bridge/src/worker.rs +74 -91
- package/sdk-core/rustfmt.toml +2 -1
- package/src/client.rs +206 -289
- package/src/helpers/try_into_js.rs +88 -2
- package/src/metrics.rs +277 -35
- package/src/runtime.rs +94 -45
- package/src/testing.rs +9 -16
- package/src/worker.rs +86 -68
- package/ts/native.ts +39 -3
- 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/macros/LICENSE.txt +0 -21
- 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, WorkerConfigBuilder, 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,18 +76,16 @@ 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,
|
|
87
|
-
|
|
88
|
+
WorkerConfig::builder()
|
|
88
89
|
.namespace("i_dont_exist")
|
|
89
90
|
.task_queue("Wheee!")
|
|
90
91
|
.versioning_strategy(WorkerVersioningStrategy::None {
|
|
@@ -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,35 +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
|
-
|
|
181
|
-
|
|
182
|
-
.task_types(WorkerTaskTypes::workflow_only())
|
|
183
|
-
// 3 pollers so the minimum slots of 2 can both be handed out to a sticky poller
|
|
184
|
-
.workflow_task_poller_behavior(PollerBehavior::SimpleMaximum(3_usize));
|
|
193
|
+
starter.sdk_config.task_types = WorkerTaskTypes::workflow_only();
|
|
194
|
+
// 3 pollers so the minimum slots of 2 can both be handed out to a sticky poller
|
|
195
|
+
starter.sdk_config.workflow_task_poller_behavior = PollerBehavior::SimpleMaximum(3_usize);
|
|
185
196
|
// Set the limits to zero so it's essentially unwilling to hand out slots
|
|
186
197
|
let mut tuner = ResourceBasedTuner::new(0.0, 0.0);
|
|
187
198
|
tuner.with_workflow_slots_options(ResourceSlotOptions::new(2, 10, Duration::from_millis(0)));
|
|
188
|
-
starter.
|
|
199
|
+
starter.sdk_config.tuner = Arc::new(tuner);
|
|
189
200
|
let mut worker = starter.worker().await;
|
|
190
201
|
|
|
191
202
|
// Workflow doesn't actually need to do anything. We just need to see that we don't get stuck
|
|
192
203
|
// by assigning all slots to sticky pollers.
|
|
193
|
-
worker.
|
|
194
|
-
|
|
195
|
-
|_: WfContext| async move { Ok(().into()) },
|
|
196
|
-
);
|
|
204
|
+
worker.register_workflow::<ResourceBasedNonStickyWf>();
|
|
205
|
+
let task_queue = starter.get_task_queue().to_owned();
|
|
197
206
|
for i in 0..20 {
|
|
198
207
|
worker
|
|
199
|
-
.
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
WorkflowOptions::default(),
|
|
208
|
+
.submit_workflow(
|
|
209
|
+
ResourceBasedNonStickyWf::run,
|
|
210
|
+
(),
|
|
211
|
+
WorkflowStartOptions::new(task_queue.clone(), format!("{wf_name}_{i}")).build(),
|
|
204
212
|
)
|
|
205
213
|
.await
|
|
206
214
|
.unwrap();
|
|
@@ -216,33 +224,47 @@ async fn oversize_grpc_message() {
|
|
|
216
224
|
let (telemopts, addr, _aborter) = prom_metrics(None);
|
|
217
225
|
let runtime = CoreRuntime::new_assume_tokio(get_integ_runtime_options(telemopts)).unwrap();
|
|
218
226
|
let mut starter = CoreWfStarter::new_with_runtime(wf_name, runtime);
|
|
219
|
-
starter
|
|
220
|
-
.worker_config
|
|
221
|
-
.task_types(WorkerTaskTypes::workflow_only());
|
|
227
|
+
starter.sdk_config.task_types = WorkerTaskTypes::workflow_only();
|
|
222
228
|
let mut core = starter.worker().await;
|
|
223
229
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
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
|
+
}
|
|
232
249
|
}
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
core.register_workflow_with_factory(move || OversizeGrpcMessageWf {
|
|
253
|
+
has_run: has_run_clone.clone(),
|
|
233
254
|
});
|
|
234
|
-
starter
|
|
255
|
+
starter
|
|
256
|
+
.start_with_worker(OversizeGrpcMessageWf::name(), &mut core)
|
|
257
|
+
.await;
|
|
235
258
|
core.run_until_done().await.unwrap();
|
|
236
259
|
|
|
237
|
-
assert!(
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
}));
|
|
260
|
+
assert!(
|
|
261
|
+
starter
|
|
262
|
+
.get_history()
|
|
263
|
+
.await
|
|
264
|
+
.events
|
|
265
|
+
.iter()
|
|
266
|
+
.any(is_oversize_grpc_event)
|
|
267
|
+
);
|
|
246
268
|
|
|
247
269
|
// Verify the workflow task failure metric includes the GrpcMessageTooLarge reason
|
|
248
270
|
let tq = starter.get_task_queue();
|
|
@@ -358,7 +380,10 @@ async fn activity_tasks_from_completion_reserve_slots() {
|
|
|
358
380
|
cfg.max_outstanding_activities = Some(2);
|
|
359
381
|
});
|
|
360
382
|
let core = Arc::new(mock_worker(mock));
|
|
361
|
-
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
|
+
));
|
|
362
387
|
|
|
363
388
|
// First poll for activities twice, occupying both slots
|
|
364
389
|
let at1 = core.poll_activity_task().await.unwrap();
|
|
@@ -366,33 +391,45 @@ async fn activity_tasks_from_completion_reserve_slots() {
|
|
|
366
391
|
let workflow_complete_token = CancellationToken::new();
|
|
367
392
|
let workflow_complete_token_clone = workflow_complete_token.clone();
|
|
368
393
|
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
})
|
|
381
|
-
.await;
|
|
382
|
-
complete_token.cancel();
|
|
383
|
-
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")
|
|
384
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(),
|
|
385
431
|
});
|
|
386
432
|
|
|
387
|
-
worker
|
|
388
|
-
.submit_wf(
|
|
389
|
-
wf_id.to_owned(),
|
|
390
|
-
DEFAULT_WORKFLOW_TYPE,
|
|
391
|
-
vec![],
|
|
392
|
-
WorkflowOptions::default(),
|
|
393
|
-
)
|
|
394
|
-
.await
|
|
395
|
-
.unwrap();
|
|
396
433
|
let act_completer = async {
|
|
397
434
|
barr.wait().await;
|
|
398
435
|
core.complete_activity_task(ActivityTaskCompletion {
|
|
@@ -408,13 +445,13 @@ async fn activity_tasks_from_completion_reserve_slots() {
|
|
|
408
445
|
.await
|
|
409
446
|
.unwrap();
|
|
410
447
|
barr.wait().await;
|
|
411
|
-
// Wait for workflow to complete in order for all eager activities to be requested before
|
|
412
|
-
// 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.
|
|
413
450
|
workflow_complete_token_clone.cancelled().await;
|
|
414
451
|
core.initiate_shutdown();
|
|
415
452
|
// Even though this test requests eager activity tasks, none are returned in poll responses.
|
|
416
453
|
let err = core.poll_activity_task().await.unwrap_err();
|
|
417
|
-
assert_matches!(err,
|
|
454
|
+
assert_matches!(err, PollError::ShutDown);
|
|
418
455
|
};
|
|
419
456
|
// This wf poll should *not* set the flag that it wants tasks back since both slots are
|
|
420
457
|
// occupied
|
|
@@ -439,23 +476,27 @@ async fn max_wft_respected() {
|
|
|
439
476
|
cfg.max_cached_workflows = total_wfs as usize;
|
|
440
477
|
cfg.max_outstanding_workflow_tasks = Some(1);
|
|
441
478
|
});
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
.
|
|
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
|
+
}
|
|
458
497
|
}
|
|
498
|
+
|
|
499
|
+
worker.register_workflow::<MaxWftWf>();
|
|
459
500
|
worker.run_until_done().await.unwrap();
|
|
460
501
|
}
|
|
461
502
|
|
|
@@ -528,23 +569,24 @@ async fn history_length_with_fail_and_timeout(
|
|
|
528
569
|
wc.max_cached_workflows = 1;
|
|
529
570
|
}
|
|
530
571
|
});
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
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>();
|
|
548
590
|
worker.run_until_done().await.unwrap();
|
|
549
591
|
}
|
|
550
592
|
|
|
@@ -584,31 +626,37 @@ async fn sets_build_id_from_wft_complete() {
|
|
|
584
626
|
},
|
|
585
627
|
);
|
|
586
628
|
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
)
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
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>();
|
|
612
660
|
worker.run_until_done().await.unwrap();
|
|
613
661
|
}
|
|
614
662
|
|
|
@@ -667,7 +715,7 @@ impl<SK> TrackingSlotSupplier<SK> {
|
|
|
667
715
|
#[async_trait::async_trait]
|
|
668
716
|
impl<SK> SlotSupplier for TrackingSlotSupplier<SK>
|
|
669
717
|
where
|
|
670
|
-
SK:
|
|
718
|
+
SK: temporalio_sdk_core::SlotKind + Send + Sync,
|
|
671
719
|
SK::Info: SlotInfoTrait,
|
|
672
720
|
{
|
|
673
721
|
type SlotKind = SK;
|
|
@@ -712,47 +760,56 @@ async fn test_custom_slot_supplier_simple() {
|
|
|
712
760
|
));
|
|
713
761
|
|
|
714
762
|
let mut starter = CoreWfStarter::new("test_custom_slot_supplier_simple");
|
|
715
|
-
starter.
|
|
763
|
+
starter.sdk_config.register_activities(StdActivities);
|
|
716
764
|
|
|
717
765
|
let mut tb = TunerBuilder::default();
|
|
718
766
|
tb.workflow_slot_supplier(wf_supplier.clone());
|
|
719
767
|
tb.activity_slot_supplier(activity_supplier.clone());
|
|
720
768
|
tb.local_activity_slot_supplier(local_activity_supplier.clone());
|
|
721
|
-
starter.
|
|
769
|
+
starter.sdk_config.tuner = Arc::new(tb.build());
|
|
722
770
|
|
|
723
771
|
let mut worker = starter.worker().await;
|
|
724
772
|
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
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<()> {
|
|
732
781
|
let _result = ctx
|
|
733
|
-
.
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
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
|
+
)
|
|
738
790
|
.await;
|
|
739
791
|
let _result = ctx
|
|
740
|
-
.
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
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
|
+
)
|
|
745
800
|
.await;
|
|
746
|
-
Ok(()
|
|
747
|
-
}
|
|
748
|
-
|
|
801
|
+
Ok(())
|
|
802
|
+
}
|
|
803
|
+
}
|
|
749
804
|
|
|
805
|
+
worker.register_workflow::<SlotSupplierWorkflow>();
|
|
806
|
+
|
|
807
|
+
let task_queue = starter.get_task_queue().to_owned();
|
|
750
808
|
worker
|
|
751
|
-
.
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
Default::default(),
|
|
809
|
+
.submit_workflow(
|
|
810
|
+
SlotSupplierWorkflow::run,
|
|
811
|
+
(),
|
|
812
|
+
WorkflowStartOptions::new(task_queue, "test-wf".to_owned()).build(),
|
|
756
813
|
)
|
|
757
814
|
.await
|
|
758
815
|
.unwrap();
|
|
@@ -823,7 +880,7 @@ async fn test_custom_slot_supplier_simple() {
|
|
|
823
880
|
slot_type: "activity",
|
|
824
881
|
activity_type: Some(act_type),
|
|
825
882
|
..
|
|
826
|
-
} if act_type
|
|
883
|
+
} if act_type.contains("no_op")))
|
|
827
884
|
);
|
|
828
885
|
assert!(
|
|
829
886
|
local_activity_events
|
|
@@ -832,7 +889,7 @@ async fn test_custom_slot_supplier_simple() {
|
|
|
832
889
|
slot_type: "local_activity",
|
|
833
890
|
activity_type: Some(act_type),
|
|
834
891
|
..
|
|
835
|
-
} if act_type
|
|
892
|
+
} if act_type.contains("no_op")))
|
|
836
893
|
);
|
|
837
894
|
assert!(wf_events.iter().any(|e| matches!(
|
|
838
895
|
e,
|
|
@@ -905,12 +962,13 @@ async fn shutdown_worker_not_retried() {
|
|
|
905
962
|
.await;
|
|
906
963
|
|
|
907
964
|
let mut opts = get_integ_server_options();
|
|
908
|
-
|
|
909
|
-
.parse()
|
|
965
|
+
opts.target = format!("http://localhost:{}", fs.addr.port())
|
|
966
|
+
.parse::<url::Url>()
|
|
910
967
|
.unwrap();
|
|
911
|
-
opts.
|
|
912
|
-
|
|
913
|
-
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();
|
|
914
972
|
|
|
915
973
|
let wf_type = "shutdown_worker_not_retried";
|
|
916
974
|
let mut starter = CoreWfStarter::new_with_overrides(wf_type, None, Some(client));
|
|
@@ -918,3 +976,10 @@ async fn shutdown_worker_not_retried() {
|
|
|
918
976
|
drain_pollers_and_shutdown(&worker).await;
|
|
919
977
|
assert_eq!(shutdown_call_count.load(Ordering::Relaxed), 1);
|
|
920
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
|
+
}
|