@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.
Files changed (209) hide show
  1. package/Cargo.lock +172 -70
  2. package/lib/native.d.ts +1 -1
  3. package/package.json +2 -2
  4. package/releases/aarch64-apple-darwin/index.node +0 -0
  5. package/releases/aarch64-unknown-linux-gnu/index.node +0 -0
  6. package/releases/x86_64-apple-darwin/index.node +0 -0
  7. package/releases/x86_64-pc-windows-msvc/index.node +0 -0
  8. package/releases/x86_64-unknown-linux-gnu/index.node +0 -0
  9. package/sdk-core/.github/workflows/per-pr.yml +6 -6
  10. package/sdk-core/AGENTS.md +41 -30
  11. package/sdk-core/Cargo.toml +3 -0
  12. package/sdk-core/README.md +15 -9
  13. package/sdk-core/crates/client/Cargo.toml +4 -0
  14. package/sdk-core/crates/client/README.md +139 -0
  15. package/sdk-core/crates/client/src/async_activity_handle.rs +297 -0
  16. package/sdk-core/crates/client/src/callback_based.rs +7 -0
  17. package/sdk-core/crates/client/src/errors.rs +294 -0
  18. package/sdk-core/crates/client/src/{raw.rs → grpc.rs} +280 -159
  19. package/sdk-core/crates/client/src/lib.rs +920 -1326
  20. package/sdk-core/crates/client/src/metrics.rs +24 -33
  21. package/sdk-core/crates/client/src/options_structs.rs +457 -0
  22. package/sdk-core/crates/client/src/replaceable.rs +5 -4
  23. package/sdk-core/crates/client/src/request_extensions.rs +8 -9
  24. package/sdk-core/crates/client/src/retry.rs +99 -54
  25. package/sdk-core/crates/client/src/{worker/mod.rs → worker.rs} +1 -1
  26. package/sdk-core/crates/client/src/workflow_handle.rs +826 -0
  27. package/sdk-core/crates/common/Cargo.toml +61 -2
  28. package/sdk-core/crates/common/build.rs +742 -12
  29. package/sdk-core/crates/common/protos/api_upstream/.github/workflows/ci.yml +2 -0
  30. package/sdk-core/crates/common/protos/api_upstream/Makefile +2 -1
  31. package/sdk-core/crates/common/protos/api_upstream/buf.yaml +0 -3
  32. package/sdk-core/crates/common/protos/api_upstream/cmd/check-path-conflicts/main.go +137 -0
  33. package/sdk-core/crates/common/protos/api_upstream/openapi/openapiv2.json +1166 -770
  34. package/sdk-core/crates/common/protos/api_upstream/openapi/openapiv3.yaml +1243 -750
  35. package/sdk-core/crates/common/protos/api_upstream/temporal/api/deployment/v1/message.proto +2 -2
  36. package/sdk-core/crates/common/protos/api_upstream/temporal/api/enums/v1/workflow.proto +4 -3
  37. package/sdk-core/crates/common/protos/api_upstream/temporal/api/failure/v1/message.proto +1 -0
  38. package/sdk-core/crates/common/protos/api_upstream/temporal/api/history/v1/message.proto +4 -0
  39. package/sdk-core/crates/common/protos/api_upstream/temporal/api/namespace/v1/message.proto +6 -0
  40. package/sdk-core/crates/common/protos/api_upstream/temporal/api/nexus/v1/message.proto +16 -1
  41. package/sdk-core/crates/common/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +64 -6
  42. package/sdk-core/crates/common/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +88 -33
  43. package/sdk-core/crates/common/protos/local/temporal/sdk/core/nexus/nexus.proto +4 -2
  44. package/sdk-core/crates/common/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +4 -0
  45. package/sdk-core/crates/common/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +5 -5
  46. package/sdk-core/crates/common/src/activity_definition.rs +20 -0
  47. package/sdk-core/crates/common/src/data_converters.rs +770 -0
  48. package/sdk-core/crates/common/src/envconfig.rs +5 -0
  49. package/sdk-core/crates/common/src/lib.rs +15 -211
  50. package/sdk-core/crates/common/src/payload_visitor.rs +648 -0
  51. package/sdk-core/crates/common/src/priority.rs +110 -0
  52. package/sdk-core/crates/common/src/protos/canned_histories.rs +3 -0
  53. package/sdk-core/crates/common/src/protos/history_builder.rs +45 -0
  54. package/sdk-core/crates/common/src/protos/history_info.rs +2 -0
  55. package/sdk-core/crates/common/src/protos/mod.rs +122 -27
  56. package/sdk-core/crates/common/src/protos/task_token.rs +3 -3
  57. package/sdk-core/crates/common/src/protos/utilities.rs +11 -0
  58. package/sdk-core/crates/{sdk-core → common}/src/telemetry/log_export.rs +5 -7
  59. package/sdk-core/crates/common/src/telemetry/metrics/core.rs +125 -0
  60. package/sdk-core/crates/common/src/telemetry/metrics.rs +268 -223
  61. package/sdk-core/crates/{sdk-core → common}/src/telemetry/otel.rs +8 -13
  62. package/sdk-core/crates/{sdk-core → common}/src/telemetry/prometheus_meter.rs +49 -50
  63. package/sdk-core/crates/{sdk-core → common}/src/telemetry/prometheus_server.rs +2 -3
  64. package/sdk-core/crates/common/src/telemetry.rs +264 -4
  65. package/sdk-core/crates/common/src/worker.rs +68 -603
  66. package/sdk-core/crates/common/src/workflow_definition.rs +60 -0
  67. package/sdk-core/crates/macros/Cargo.toml +5 -1
  68. package/sdk-core/crates/macros/src/activities_definitions.rs +585 -0
  69. package/sdk-core/crates/macros/src/fsm_impl.rs +507 -0
  70. package/sdk-core/crates/macros/src/lib.rs +138 -512
  71. package/sdk-core/crates/macros/src/macro_utils.rs +106 -0
  72. package/sdk-core/crates/macros/src/workflow_definitions.rs +1224 -0
  73. package/sdk-core/crates/sdk/Cargo.toml +19 -6
  74. package/sdk-core/crates/sdk/README.md +415 -0
  75. package/sdk-core/crates/sdk/src/activities.rs +417 -0
  76. package/sdk-core/crates/sdk/src/interceptors.rs +1 -1
  77. package/sdk-core/crates/sdk/src/lib.rs +757 -442
  78. package/sdk-core/crates/sdk/src/workflow_context/options.rs +45 -35
  79. package/sdk-core/crates/sdk/src/workflow_context.rs +1033 -289
  80. package/sdk-core/crates/sdk/src/workflow_future.rs +277 -213
  81. package/sdk-core/crates/sdk/src/workflows.rs +711 -0
  82. package/sdk-core/crates/sdk-core/Cargo.toml +57 -64
  83. package/sdk-core/crates/sdk-core/benches/workflow_replay_bench.rs +41 -35
  84. package/sdk-core/crates/sdk-core/machine_coverage/ActivityMachine_Coverage.puml +1 -1
  85. package/sdk-core/crates/sdk-core/src/abstractions.rs +6 -10
  86. package/sdk-core/crates/sdk-core/src/core_tests/activity_tasks.rs +6 -5
  87. package/sdk-core/crates/sdk-core/src/core_tests/mod.rs +13 -15
  88. package/sdk-core/crates/sdk-core/src/core_tests/queries.rs +21 -25
  89. package/sdk-core/crates/sdk-core/src/core_tests/replay_flag.rs +7 -10
  90. package/sdk-core/crates/sdk-core/src/core_tests/updates.rs +14 -17
  91. package/sdk-core/crates/sdk-core/src/core_tests/workers.rs +493 -26
  92. package/sdk-core/crates/sdk-core/src/core_tests/workflow_tasks.rs +4 -8
  93. package/sdk-core/crates/sdk-core/src/ephemeral_server/mod.rs +7 -7
  94. package/sdk-core/crates/sdk-core/src/histfetch.rs +20 -10
  95. package/sdk-core/crates/sdk-core/src/lib.rs +41 -111
  96. package/sdk-core/crates/sdk-core/src/pollers/mod.rs +4 -9
  97. package/sdk-core/crates/sdk-core/src/pollers/poll_buffer.rs +118 -19
  98. package/sdk-core/crates/sdk-core/src/protosext/mod.rs +2 -2
  99. package/sdk-core/crates/sdk-core/src/replay/mod.rs +14 -5
  100. package/sdk-core/crates/sdk-core/src/telemetry/metrics.rs +179 -196
  101. package/sdk-core/crates/sdk-core/src/telemetry/mod.rs +3 -280
  102. package/sdk-core/crates/sdk-core/src/test_help/integ_helpers.rs +6 -9
  103. package/sdk-core/crates/sdk-core/src/test_help/unit_helpers.rs +3 -6
  104. package/sdk-core/crates/sdk-core/src/worker/activities/local_activities.rs +11 -14
  105. package/sdk-core/crates/sdk-core/src/worker/activities.rs +16 -19
  106. package/sdk-core/crates/sdk-core/src/worker/client/mocks.rs +9 -5
  107. package/sdk-core/crates/sdk-core/src/worker/client.rs +103 -81
  108. package/sdk-core/crates/sdk-core/src/worker/heartbeat.rs +7 -11
  109. package/sdk-core/crates/sdk-core/src/worker/mod.rs +1124 -229
  110. package/sdk-core/crates/sdk-core/src/worker/nexus.rs +145 -23
  111. package/sdk-core/crates/sdk-core/src/worker/slot_provider.rs +2 -2
  112. package/sdk-core/crates/sdk-core/src/worker/tuner/fixed_size.rs +2 -2
  113. package/sdk-core/crates/sdk-core/src/worker/tuner/resource_based.rs +13 -13
  114. package/sdk-core/crates/sdk-core/src/worker/tuner.rs +28 -8
  115. package/sdk-core/crates/sdk-core/src/worker/workflow/driven_workflow.rs +9 -3
  116. package/sdk-core/crates/sdk-core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +21 -22
  117. package/sdk-core/crates/sdk-core/src/worker/workflow/machines/workflow_machines.rs +19 -4
  118. package/sdk-core/crates/sdk-core/src/worker/workflow/managed_run.rs +14 -18
  119. package/sdk-core/crates/sdk-core/src/worker/workflow/mod.rs +4 -6
  120. package/sdk-core/crates/sdk-core/src/worker/workflow/run_cache.rs +4 -7
  121. package/sdk-core/crates/sdk-core/src/worker/workflow/wft_extraction.rs +2 -4
  122. package/sdk-core/crates/sdk-core/src/worker/workflow/wft_poller.rs +8 -9
  123. package/sdk-core/crates/sdk-core/src/worker/workflow/workflow_stream.rs +1 -3
  124. package/sdk-core/crates/sdk-core/tests/activities_procmacro.rs +6 -0
  125. package/sdk-core/crates/sdk-core/tests/activities_trybuild/basic_pass.rs +54 -0
  126. package/sdk-core/crates/sdk-core/tests/activities_trybuild/invalid_self_type_fail.rs +18 -0
  127. package/sdk-core/crates/sdk-core/tests/activities_trybuild/invalid_self_type_fail.stderr +5 -0
  128. package/sdk-core/crates/sdk-core/tests/activities_trybuild/missing_context_fail.rs +14 -0
  129. package/sdk-core/crates/sdk-core/tests/activities_trybuild/missing_context_fail.stderr +5 -0
  130. package/sdk-core/crates/sdk-core/tests/activities_trybuild/multi_arg_pass.rs +48 -0
  131. package/sdk-core/crates/sdk-core/tests/activities_trybuild/no_input_pass.rs +14 -0
  132. package/sdk-core/crates/sdk-core/tests/activities_trybuild/no_return_type_pass.rs +19 -0
  133. package/sdk-core/crates/sdk-core/tests/cloud_tests.rs +14 -5
  134. package/sdk-core/crates/sdk-core/tests/common/activity_functions.rs +55 -0
  135. package/sdk-core/crates/sdk-core/tests/common/mod.rs +241 -196
  136. package/sdk-core/crates/sdk-core/tests/common/workflows.rs +41 -28
  137. package/sdk-core/crates/sdk-core/tests/global_metric_tests.rs +3 -5
  138. package/sdk-core/crates/sdk-core/tests/heavy_tests/fuzzy_workflow.rs +73 -64
  139. package/sdk-core/crates/sdk-core/tests/heavy_tests.rs +298 -252
  140. package/sdk-core/crates/sdk-core/tests/integ_tests/async_activity_client_tests.rs +230 -0
  141. package/sdk-core/crates/sdk-core/tests/integ_tests/client_tests.rs +94 -57
  142. package/sdk-core/crates/sdk-core/tests/integ_tests/data_converter_tests.rs +381 -0
  143. package/sdk-core/crates/sdk-core/tests/integ_tests/ephemeral_server_tests.rs +16 -12
  144. package/sdk-core/crates/sdk-core/tests/integ_tests/heartbeat_tests.rs +48 -40
  145. package/sdk-core/crates/sdk-core/tests/integ_tests/metrics_tests.rs +327 -255
  146. package/sdk-core/crates/sdk-core/tests/integ_tests/pagination_tests.rs +50 -45
  147. package/sdk-core/crates/sdk-core/tests/integ_tests/polling_tests.rs +147 -126
  148. package/sdk-core/crates/sdk-core/tests/integ_tests/queries_tests.rs +103 -89
  149. package/sdk-core/crates/sdk-core/tests/integ_tests/update_tests.rs +609 -453
  150. package/sdk-core/crates/sdk-core/tests/integ_tests/visibility_tests.rs +80 -62
  151. package/sdk-core/crates/sdk-core/tests/integ_tests/worker_heartbeat_tests.rs +360 -231
  152. package/sdk-core/crates/sdk-core/tests/integ_tests/worker_tests.rs +248 -185
  153. package/sdk-core/crates/sdk-core/tests/integ_tests/worker_versioning_tests.rs +52 -43
  154. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_client_tests.rs +180 -0
  155. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/activities.rs +428 -315
  156. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +82 -56
  157. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +56 -28
  158. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +364 -243
  159. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/client_interactions.rs +552 -0
  160. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +101 -42
  161. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +243 -147
  162. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/eager.rs +98 -28
  163. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +1475 -1036
  164. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/modify_wf_properties.rs +73 -41
  165. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/nexus.rs +397 -238
  166. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/patches.rs +414 -189
  167. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/queries.rs +415 -0
  168. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/replay.rs +96 -36
  169. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/resets.rs +154 -137
  170. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/signals.rs +183 -105
  171. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +85 -38
  172. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/timers.rs +142 -40
  173. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +73 -54
  174. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests.rs +363 -226
  175. package/sdk-core/crates/sdk-core/tests/main.rs +17 -15
  176. package/sdk-core/crates/sdk-core/tests/manual_tests.rs +207 -152
  177. package/sdk-core/crates/sdk-core/tests/shared_tests/mod.rs +65 -34
  178. package/sdk-core/crates/sdk-core/tests/shared_tests/priority.rs +107 -84
  179. package/sdk-core/crates/sdk-core/tests/workflows_procmacro.rs +6 -0
  180. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/async_query_fail.rs +26 -0
  181. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/async_query_fail.stderr +5 -0
  182. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/basic_pass.rs +49 -0
  183. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/minimal_pass.rs +21 -0
  184. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/mut_query_fail.rs +26 -0
  185. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/mut_query_fail.stderr +5 -0
  186. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/sync_run_fail.rs +21 -0
  187. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/sync_run_fail.stderr +5 -0
  188. package/sdk-core/crates/sdk-core-c-bridge/Cargo.toml +7 -1
  189. package/sdk-core/crates/sdk-core-c-bridge/include/temporal-sdk-core-c-bridge.h +14 -14
  190. package/sdk-core/crates/sdk-core-c-bridge/src/client.rs +83 -74
  191. package/sdk-core/crates/sdk-core-c-bridge/src/metric.rs +9 -14
  192. package/sdk-core/crates/sdk-core-c-bridge/src/runtime.rs +1 -2
  193. package/sdk-core/crates/sdk-core-c-bridge/src/tests/context.rs +13 -13
  194. package/sdk-core/crates/sdk-core-c-bridge/src/tests/mod.rs +6 -6
  195. package/sdk-core/crates/sdk-core-c-bridge/src/tests/utils.rs +3 -4
  196. package/sdk-core/crates/sdk-core-c-bridge/src/worker.rs +62 -75
  197. package/sdk-core/rustfmt.toml +2 -1
  198. package/src/client.rs +205 -318
  199. package/src/metrics.rs +22 -30
  200. package/src/runtime.rs +4 -5
  201. package/src/worker.rs +16 -19
  202. package/ts/native.ts +1 -1
  203. package/sdk-core/crates/client/src/workflow_handle/mod.rs +0 -212
  204. package/sdk-core/crates/common/src/errors.rs +0 -85
  205. package/sdk-core/crates/common/tests/worker_task_types_test.rs +0 -129
  206. package/sdk-core/crates/sdk/src/activity_context.rs +0 -238
  207. package/sdk-core/crates/sdk/src/app_data.rs +0 -37
  208. package/sdk-core/crates/sdk-core/tests/integ_tests/activity_functions.rs +0 -5
  209. 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, NamespacedClient, Result,
3
- RetryOptions,
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::{Clock, SystemClock, backoff::Backoff, exponential::ExponentialBackoff};
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::{error::Error, fmt::Debug, future::Future, sync::Arc, time::Duration};
10
- use tonic::{Code, Request};
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
- /// A wrapper for a [crate::WorkflowClientTrait] or [crate::WorkflowService] implementor which
26
- /// performs auto-retries
27
- #[derive(Debug, Clone)]
28
- pub struct RetryClient<SG> {
29
- client: SG,
30
- retry_config: Arc<RetryOptions>,
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<SG> RetryClient<SG> {
34
- /// Use the provided retry config with the provided client
35
- pub fn new(client: SG, retry_config: RetryOptions) -> Self {
52
+ impl Default for RetryOptions {
53
+ fn default() -> Self {
36
54
  Self {
37
- client,
38
- retry_config: Arc::new(retry_config),
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<SG> RetryClient<SG> {
44
- /// Return the inner client type
45
- pub fn get_client(&self) -> &SG {
46
- &self.client
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
- /// Return the inner client type mutably
50
- pub fn get_client_mut(&mut self) -> &mut SG {
51
- &mut self.client
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
- /// Disable retry and return the inner client type
55
- pub fn into_inner(self) -> SG {
56
- self.client
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
- (*self.retry_config).clone()
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 make_future_retry<R, F, Fut>(
94
- info: CallInfo,
95
- factory: F,
96
- ) -> FutureRetry<F, TonicErrorHandler<SystemClock>>
97
- where
98
- F: FnMut() -> Fut + Unpin,
99
- Fut: Future<Output = Result<R>>,
100
- {
101
- FutureRetry::new(
102
- factory,
103
- TonicErrorHandler::new(info, RetryOptions::throttle_retry_policy()),
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<SG> NamespacedClient for RetryClient<SG>
109
- where
110
- SG: NamespacedClient,
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
- fn identity(&self) -> String {
117
- self.client.identity()
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
- fake_retry.get_call_info::<R>(call_name, Some(&req)),
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
- fake_retry.get_call_info::<R>(call_name, Some(&req)),
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+client, others will return an error.
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,