@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,13 +1,21 @@
|
|
|
1
1
|
use crate::{
|
|
2
|
-
ERROR_RETURNED_DUE_TO_SHORT_CIRCUIT, MESSAGE_TOO_LARGE_KEY,
|
|
3
|
-
|
|
4
|
-
raw::IsUserLongPoll,
|
|
2
|
+
ERROR_RETURNED_DUE_TO_SHORT_CIRCUIT, MESSAGE_TOO_LARGE_KEY,
|
|
3
|
+
grpc::IsUserLongPoll,
|
|
5
4
|
request_extensions::{IsWorkerTaskLongPoll, NoRetryOnMatching, RetryConfigForCall},
|
|
6
5
|
};
|
|
7
|
-
use backoff::{
|
|
6
|
+
use backoff::{
|
|
7
|
+
Clock, SystemClock,
|
|
8
|
+
backoff::Backoff,
|
|
9
|
+
exponential::{self, ExponentialBackoff},
|
|
10
|
+
};
|
|
8
11
|
use futures_retry::{ErrorHandler, FutureRetry, RetryPolicy};
|
|
9
|
-
use std::{
|
|
10
|
-
|
|
12
|
+
use std::{
|
|
13
|
+
error::Error,
|
|
14
|
+
fmt::Debug,
|
|
15
|
+
future::Future,
|
|
16
|
+
time::{Duration, Instant},
|
|
17
|
+
};
|
|
18
|
+
use tonic::Code;
|
|
11
19
|
|
|
12
20
|
/// List of gRPC error codes that client will retry.
|
|
13
21
|
#[doc(hidden)]
|
|
@@ -22,44 +30,77 @@ pub const RETRYABLE_ERROR_CODES: [Code; 7] = [
|
|
|
22
30
|
];
|
|
23
31
|
const LONG_POLL_FATAL_GRACE: Duration = Duration::from_secs(60);
|
|
24
32
|
|
|
25
|
-
///
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
33
|
+
/// Configuration for retrying requests to the server
|
|
34
|
+
#[derive(Clone, Debug, PartialEq)]
|
|
35
|
+
pub struct RetryOptions {
|
|
36
|
+
/// initial wait time before the first retry.
|
|
37
|
+
pub initial_interval: Duration,
|
|
38
|
+
/// randomization jitter that is used as a multiplier for the current retry interval
|
|
39
|
+
/// and is added or subtracted from the interval length.
|
|
40
|
+
pub randomization_factor: f64,
|
|
41
|
+
/// rate at which retry time should be increased, until it reaches max_interval.
|
|
42
|
+
pub multiplier: f64,
|
|
43
|
+
/// maximum amount of time to wait between retries.
|
|
44
|
+
pub max_interval: Duration,
|
|
45
|
+
/// maximum total amount of time requests should be retried for, if None is set then no limit
|
|
46
|
+
/// will be used.
|
|
47
|
+
pub max_elapsed_time: Option<Duration>,
|
|
48
|
+
/// maximum number of retry attempts.
|
|
49
|
+
pub max_retries: usize,
|
|
31
50
|
}
|
|
32
51
|
|
|
33
|
-
impl
|
|
34
|
-
|
|
35
|
-
pub fn new(client: SG, retry_config: RetryOptions) -> Self {
|
|
52
|
+
impl Default for RetryOptions {
|
|
53
|
+
fn default() -> Self {
|
|
36
54
|
Self {
|
|
37
|
-
|
|
38
|
-
|
|
55
|
+
initial_interval: Duration::from_millis(100), // 100 ms wait by default.
|
|
56
|
+
randomization_factor: 0.2, // +-20% jitter.
|
|
57
|
+
multiplier: 1.7, // each next retry delay will increase by 70%
|
|
58
|
+
max_interval: Duration::from_secs(5), // until it reaches 5 seconds.
|
|
59
|
+
max_elapsed_time: Some(Duration::from_secs(10)), // 10 seconds total allocated time for all retries.
|
|
60
|
+
max_retries: 10,
|
|
39
61
|
}
|
|
40
62
|
}
|
|
41
63
|
}
|
|
42
64
|
|
|
43
|
-
impl
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
65
|
+
impl RetryOptions {
|
|
66
|
+
pub(crate) const fn task_poll_retry_policy() -> Self {
|
|
67
|
+
Self {
|
|
68
|
+
initial_interval: Duration::from_millis(200),
|
|
69
|
+
randomization_factor: 0.2,
|
|
70
|
+
multiplier: 2.0,
|
|
71
|
+
max_interval: Duration::from_secs(10),
|
|
72
|
+
max_elapsed_time: None,
|
|
73
|
+
max_retries: 0,
|
|
74
|
+
}
|
|
47
75
|
}
|
|
48
76
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
77
|
+
pub(crate) const fn throttle_retry_policy() -> Self {
|
|
78
|
+
Self {
|
|
79
|
+
initial_interval: Duration::from_secs(1),
|
|
80
|
+
randomization_factor: 0.2,
|
|
81
|
+
multiplier: 2.0,
|
|
82
|
+
max_interval: Duration::from_secs(10),
|
|
83
|
+
max_elapsed_time: None,
|
|
84
|
+
max_retries: 0,
|
|
85
|
+
}
|
|
52
86
|
}
|
|
53
87
|
|
|
54
|
-
///
|
|
55
|
-
pub fn
|
|
56
|
-
|
|
88
|
+
/// A retry policy that never retires
|
|
89
|
+
pub const fn no_retries() -> Self {
|
|
90
|
+
Self {
|
|
91
|
+
initial_interval: Duration::from_secs(0),
|
|
92
|
+
randomization_factor: 0.0,
|
|
93
|
+
multiplier: 1.0,
|
|
94
|
+
max_interval: Duration::from_secs(0),
|
|
95
|
+
max_elapsed_time: None,
|
|
96
|
+
max_retries: 1,
|
|
97
|
+
}
|
|
57
98
|
}
|
|
58
99
|
|
|
59
100
|
pub(crate) fn get_call_info<R>(
|
|
60
101
|
&self,
|
|
61
102
|
call_name: &'static str,
|
|
62
|
-
request: Option<&Request<R>>,
|
|
103
|
+
request: Option<&tonic::Request<R>>,
|
|
63
104
|
) -> CallInfo {
|
|
64
105
|
let mut call_type = CallType::Normal;
|
|
65
106
|
let mut retry_short_circuit = None;
|
|
@@ -80,7 +121,7 @@ impl<SG> RetryClient<SG> {
|
|
|
80
121
|
} else if call_type == CallType::TaskLongPoll {
|
|
81
122
|
RetryOptions::task_poll_retry_policy()
|
|
82
123
|
} else {
|
|
83
|
-
|
|
124
|
+
self.clone()
|
|
84
125
|
};
|
|
85
126
|
CallInfo {
|
|
86
127
|
call_type,
|
|
@@ -90,32 +131,38 @@ impl<SG> RetryClient<SG> {
|
|
|
90
131
|
}
|
|
91
132
|
}
|
|
92
133
|
|
|
93
|
-
pub(crate) fn
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
)
|
|
134
|
+
pub(crate) fn into_exp_backoff<C>(self, clock: C) -> exponential::ExponentialBackoff<C> {
|
|
135
|
+
exponential::ExponentialBackoff {
|
|
136
|
+
current_interval: self.initial_interval,
|
|
137
|
+
initial_interval: self.initial_interval,
|
|
138
|
+
randomization_factor: self.randomization_factor,
|
|
139
|
+
multiplier: self.multiplier,
|
|
140
|
+
max_interval: self.max_interval,
|
|
141
|
+
max_elapsed_time: self.max_elapsed_time,
|
|
142
|
+
clock,
|
|
143
|
+
start_time: Instant::now(),
|
|
144
|
+
}
|
|
105
145
|
}
|
|
106
146
|
}
|
|
107
147
|
|
|
108
|
-
impl<
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
{
|
|
112
|
-
fn namespace(&self) -> String {
|
|
113
|
-
self.client.namespace()
|
|
148
|
+
impl From<RetryOptions> for backoff::ExponentialBackoff {
|
|
149
|
+
fn from(c: RetryOptions) -> Self {
|
|
150
|
+
c.into_exp_backoff(SystemClock::default())
|
|
114
151
|
}
|
|
152
|
+
}
|
|
115
153
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
154
|
+
pub(crate) fn make_future_retry<R, F, Fut>(
|
|
155
|
+
info: CallInfo,
|
|
156
|
+
factory: F,
|
|
157
|
+
) -> FutureRetry<F, TonicErrorHandler<SystemClock>>
|
|
158
|
+
where
|
|
159
|
+
F: FnMut() -> Fut + Unpin,
|
|
160
|
+
Fut: Future<Output = Result<R, tonic::Status>>,
|
|
161
|
+
{
|
|
162
|
+
FutureRetry::new(
|
|
163
|
+
factory,
|
|
164
|
+
TonicErrorHandler::new(info, RetryOptions::throttle_retry_policy()),
|
|
165
|
+
)
|
|
119
166
|
}
|
|
120
167
|
|
|
121
168
|
#[derive(Debug)]
|
|
@@ -525,12 +572,11 @@ mod tests {
|
|
|
525
572
|
) {
|
|
526
573
|
// A bit odd, but we don't need a real client to test the retry client passes through the
|
|
527
574
|
// correct retry config
|
|
528
|
-
let fake_retry = RetryClient::new((), TEST_RETRY_CONFIG);
|
|
529
575
|
let mut req = req.into_request();
|
|
530
576
|
req.extensions_mut().insert(IsWorkerTaskLongPoll);
|
|
531
577
|
for i in 1..=50 {
|
|
532
578
|
let mut err_handler = TonicErrorHandler::new(
|
|
533
|
-
|
|
579
|
+
TEST_RETRY_CONFIG.get_call_info::<R>(call_name, Some(&req)),
|
|
534
580
|
RetryOptions::throttle_retry_policy(),
|
|
535
581
|
);
|
|
536
582
|
let result = err_handler.handle(i, Status::new(Code::Unknown, "Ahh"));
|
|
@@ -557,13 +603,12 @@ mod tests {
|
|
|
557
603
|
)]
|
|
558
604
|
(call_name, req): (&'static str, R),
|
|
559
605
|
) {
|
|
560
|
-
let fake_retry = RetryClient::new((), TEST_RETRY_CONFIG);
|
|
561
606
|
let mut req = req.into_request();
|
|
562
607
|
req.extensions_mut().insert(IsWorkerTaskLongPoll);
|
|
563
608
|
// For some reason we will get cancelled in these situations occasionally (always?) too
|
|
564
609
|
for code in [Code::Cancelled, Code::DeadlineExceeded] {
|
|
565
610
|
let mut err_handler = TonicErrorHandler::new(
|
|
566
|
-
|
|
611
|
+
TEST_RETRY_CONFIG.get_call_info::<R>(call_name, Some(&req)),
|
|
567
612
|
RetryOptions::throttle_retry_policy(),
|
|
568
613
|
);
|
|
569
614
|
for i in 1..=5 {
|
|
@@ -298,7 +298,7 @@ pub trait SharedNamespaceWorkerTrait {
|
|
|
298
298
|
/// Enables local workers to make themselves visible to a shared client instance.
|
|
299
299
|
///
|
|
300
300
|
/// For slot managing, there can only be one worker registered per
|
|
301
|
-
/// namespace+queue_name+
|
|
301
|
+
/// namespace+queue_name+connection, others will return an error.
|
|
302
302
|
/// It also provides a convenient method to find compatible slots within the collection.
|
|
303
303
|
pub struct ClientWorkerSet {
|
|
304
304
|
worker_grouping_key: Uuid,
|