@temporalio/core-bridge 1.11.6 → 1.11.8

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 (191) hide show
  1. package/Cargo.lock +902 -468
  2. package/package.json +3 -3
  3. package/releases/aarch64-apple-darwin/index.node +0 -0
  4. package/releases/aarch64-unknown-linux-gnu/index.node +0 -0
  5. package/releases/x86_64-apple-darwin/index.node +0 -0
  6. package/releases/x86_64-pc-windows-msvc/index.node +0 -0
  7. package/releases/x86_64-unknown-linux-gnu/index.node +0 -0
  8. package/sdk-core/.cargo/config.toml +5 -0
  9. package/sdk-core/.github/workflows/per-pr.yml +59 -5
  10. package/sdk-core/Cargo.toml +3 -2
  11. package/sdk-core/client/Cargo.toml +3 -3
  12. package/sdk-core/client/src/lib.rs +154 -161
  13. package/sdk-core/client/src/metrics.rs +15 -8
  14. package/sdk-core/client/src/proxy.rs +1 -1
  15. package/sdk-core/client/src/raw.rs +176 -33
  16. package/sdk-core/client/src/retry.rs +102 -465
  17. package/sdk-core/client/src/worker_registry/mod.rs +2 -2
  18. package/sdk-core/client/src/workflow_handle/mod.rs +19 -1
  19. package/sdk-core/core/Cargo.toml +12 -14
  20. package/sdk-core/core/benches/workflow_replay.rs +1 -1
  21. package/sdk-core/core/src/abstractions.rs +2 -2
  22. package/sdk-core/core/src/core_tests/activity_tasks.rs +99 -46
  23. package/sdk-core/core/src/core_tests/child_workflows.rs +68 -9
  24. package/sdk-core/core/src/core_tests/determinism.rs +2 -2
  25. package/sdk-core/core/src/core_tests/local_activities.rs +20 -33
  26. package/sdk-core/core/src/core_tests/mod.rs +7 -8
  27. package/sdk-core/core/src/core_tests/queries.rs +79 -79
  28. package/sdk-core/core/src/core_tests/replay_flag.rs +5 -5
  29. package/sdk-core/core/src/core_tests/updates.rs +6 -6
  30. package/sdk-core/core/src/core_tests/workers.rs +19 -22
  31. package/sdk-core/core/src/core_tests/workflow_cancels.rs +3 -3
  32. package/sdk-core/core/src/core_tests/workflow_tasks.rs +154 -106
  33. package/sdk-core/core/src/ephemeral_server/mod.rs +66 -10
  34. package/sdk-core/core/src/internal_flags.rs +103 -12
  35. package/sdk-core/core/src/lib.rs +21 -13
  36. package/sdk-core/core/src/pollers/mod.rs +200 -6
  37. package/sdk-core/core/src/pollers/poll_buffer.rs +32 -8
  38. package/sdk-core/core/src/protosext/mod.rs +7 -7
  39. package/sdk-core/core/src/protosext/protocol_messages.rs +2 -2
  40. package/sdk-core/core/src/replay/mod.rs +8 -9
  41. package/sdk-core/core/src/retry_logic.rs +8 -6
  42. package/sdk-core/core/src/telemetry/log_export.rs +4 -4
  43. package/sdk-core/core/src/telemetry/metrics.rs +111 -25
  44. package/sdk-core/core/src/telemetry/mod.rs +11 -4
  45. package/sdk-core/core/src/telemetry/otel.rs +108 -144
  46. package/sdk-core/core/src/telemetry/prometheus_server.rs +1 -4
  47. package/sdk-core/core/src/test_help/mod.rs +27 -21
  48. package/sdk-core/core/src/worker/activities/activity_heartbeat_manager.rs +7 -5
  49. package/sdk-core/core/src/worker/activities/local_activities.rs +9 -9
  50. package/sdk-core/core/src/worker/activities.rs +34 -46
  51. package/sdk-core/core/src/worker/client/mocks.rs +24 -2
  52. package/sdk-core/core/src/worker/client.rs +169 -33
  53. package/sdk-core/core/src/worker/mod.rs +132 -56
  54. package/sdk-core/core/src/worker/nexus.rs +410 -0
  55. package/sdk-core/core/src/worker/tuner/resource_based.rs +27 -5
  56. package/sdk-core/core/src/worker/tuner.rs +29 -2
  57. package/sdk-core/core/src/worker/workflow/driven_workflow.rs +8 -3
  58. package/sdk-core/core/src/worker/workflow/history_update.rs +5 -8
  59. package/sdk-core/core/src/worker/workflow/machines/activity_state_machine.rs +83 -87
  60. package/sdk-core/core/src/worker/workflow/machines/cancel_external_state_machine.rs +38 -38
  61. package/sdk-core/core/src/worker/workflow/machines/cancel_nexus_op_state_machine.rs +117 -0
  62. package/sdk-core/core/src/worker/workflow/machines/cancel_workflow_state_machine.rs +8 -18
  63. package/sdk-core/core/src/worker/workflow/machines/child_workflow_state_machine.rs +114 -108
  64. package/sdk-core/core/src/worker/workflow/machines/complete_workflow_state_machine.rs +16 -31
  65. package/sdk-core/core/src/worker/workflow/machines/continue_as_new_workflow_state_machine.rs +7 -14
  66. package/sdk-core/core/src/worker/workflow/machines/fail_workflow_state_machine.rs +8 -15
  67. package/sdk-core/core/src/worker/workflow/machines/local_activity_state_machine.rs +34 -75
  68. package/sdk-core/core/src/worker/workflow/machines/mod.rs +26 -48
  69. package/sdk-core/core/src/worker/workflow/machines/modify_workflow_properties_state_machine.rs +10 -17
  70. package/sdk-core/core/src/worker/workflow/machines/nexus_operation_state_machine.rs +543 -0
  71. package/sdk-core/core/src/worker/workflow/machines/patch_state_machine.rs +22 -31
  72. package/sdk-core/core/src/worker/workflow/machines/signal_external_state_machine.rs +53 -51
  73. package/sdk-core/core/src/worker/workflow/machines/timer_state_machine.rs +40 -45
  74. package/sdk-core/core/src/worker/workflow/machines/transition_coverage.rs +2 -2
  75. package/sdk-core/core/src/worker/workflow/machines/update_state_machine.rs +8 -10
  76. package/sdk-core/core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +24 -30
  77. package/sdk-core/core/src/worker/workflow/machines/workflow_machines.rs +182 -116
  78. package/sdk-core/core/src/worker/workflow/machines/workflow_task_state_machine.rs +4 -8
  79. package/sdk-core/core/src/worker/workflow/managed_run.rs +75 -45
  80. package/sdk-core/core/src/worker/workflow/mod.rs +104 -55
  81. package/sdk-core/core/src/worker/workflow/run_cache.rs +23 -4
  82. package/sdk-core/core/src/worker/workflow/wft_extraction.rs +4 -4
  83. package/sdk-core/core/src/worker/workflow/wft_poller.rs +3 -3
  84. package/sdk-core/core/src/worker/workflow/workflow_stream.rs +32 -13
  85. package/sdk-core/core-api/Cargo.toml +2 -3
  86. package/sdk-core/core-api/src/errors.rs +22 -20
  87. package/sdk-core/core-api/src/lib.rs +24 -5
  88. package/sdk-core/core-api/src/telemetry/metrics.rs +27 -1
  89. package/sdk-core/core-api/src/telemetry.rs +37 -3
  90. package/sdk-core/core-api/src/worker.rs +36 -3
  91. package/sdk-core/docker/docker-compose-ci.yaml +25 -0
  92. package/sdk-core/etc/otel-collector-ci.yaml +36 -0
  93. package/sdk-core/etc/otel-collector-config.yaml +3 -3
  94. package/sdk-core/etc/prometheus.yaml +1 -1
  95. package/sdk-core/fsm/Cargo.toml +1 -1
  96. package/sdk-core/fsm/rustfsm_procmacro/Cargo.toml +1 -1
  97. package/sdk-core/fsm/rustfsm_procmacro/src/lib.rs +3 -4
  98. package/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.stderr +1 -1
  99. package/sdk-core/fsm/rustfsm_trait/Cargo.toml +1 -1
  100. package/sdk-core/sdk/Cargo.toml +1 -2
  101. package/sdk-core/sdk/src/activity_context.rs +1 -1
  102. package/sdk-core/sdk/src/interceptors.rs +1 -1
  103. package/sdk-core/sdk/src/lib.rs +126 -54
  104. package/sdk-core/sdk/src/workflow_context/options.rs +184 -74
  105. package/sdk-core/sdk/src/workflow_context.rs +193 -79
  106. package/sdk-core/sdk/src/workflow_future.rs +151 -131
  107. package/sdk-core/sdk-core-protos/Cargo.toml +3 -4
  108. package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/VERSION +1 -1
  109. package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/temporal/api/cloud/account/v1/message.proto +46 -0
  110. package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/temporal/api/cloud/cloudservice/v1/request_response.proto +254 -5
  111. package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/temporal/api/cloud/cloudservice/v1/service.proto +108 -2
  112. package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/temporal/api/cloud/identity/v1/message.proto +94 -15
  113. package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/temporal/api/cloud/namespace/v1/message.proto +102 -4
  114. package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/temporal/api/cloud/nexus/v1/message.proto +84 -0
  115. package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/temporal/api/cloud/operation/v1/message.proto +25 -10
  116. package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/temporal/api/cloud/region/v1/message.proto +14 -1
  117. package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/temporal/api/cloud/resource/v1/message.proto +25 -0
  118. package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/temporal/api/cloud/sink/v1/message.proto +41 -0
  119. package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/temporal/api/cloud/usage/v1/message.proto +59 -0
  120. package/sdk-core/sdk-core-protos/protos/api_upstream/.github/PULL_REQUEST_TEMPLATE.md +2 -0
  121. package/sdk-core/sdk-core-protos/protos/api_upstream/.github/workflows/create-release.yml +135 -0
  122. package/sdk-core/sdk-core-protos/protos/api_upstream/.github/workflows/push-to-buf.yml +20 -0
  123. package/sdk-core/sdk-core-protos/protos/api_upstream/.github/workflows/trigger-api-go-delete-release.yml +13 -0
  124. package/sdk-core/sdk-core-protos/protos/api_upstream/.github/workflows/trigger-api-go-publish-release.yml +13 -0
  125. package/sdk-core/sdk-core-protos/protos/api_upstream/.github/workflows/trigger-api-go-update.yml +13 -21
  126. package/sdk-core/sdk-core-protos/protos/api_upstream/Makefile +2 -2
  127. package/sdk-core/sdk-core-protos/protos/api_upstream/buf.yaml +1 -0
  128. package/sdk-core/sdk-core-protos/protos/api_upstream/openapi/openapiv2.json +3386 -1047
  129. package/sdk-core/sdk-core-protos/protos/api_upstream/openapi/openapiv3.yaml +3529 -1144
  130. package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/batch/v1/message.proto +39 -1
  131. package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/command/v1/message.proto +6 -0
  132. package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/common/v1/message.proto +39 -1
  133. package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/deployment/v1/message.proto +252 -0
  134. package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/enums/v1/batch_operation.proto +1 -0
  135. package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/enums/v1/common.proto +6 -0
  136. package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/enums/v1/deployment.proto +96 -0
  137. package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/enums/v1/event_type.proto +2 -0
  138. package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +2 -0
  139. package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/enums/v1/nexus.proto +42 -0
  140. package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/enums/v1/reset.proto +2 -0
  141. package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/enums/v1/workflow.proto +43 -2
  142. package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/errordetails/v1/message.proto +13 -1
  143. package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/failure/v1/message.proto +14 -0
  144. package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/history/v1/message.proto +70 -12
  145. package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/nexus/v1/message.proto +12 -0
  146. package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/query/v1/message.proto +9 -2
  147. package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +46 -2
  148. package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/workflow/v1/message.proto +206 -0
  149. package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +482 -97
  150. package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +230 -43
  151. package/sdk-core/sdk-core-protos/protos/local/temporal/sdk/core/core_interface.proto +6 -0
  152. package/sdk-core/sdk-core-protos/protos/local/temporal/sdk/core/nexus/nexus.proto +71 -0
  153. package/sdk-core/sdk-core-protos/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +46 -2
  154. package/sdk-core/sdk-core-protos/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +55 -9
  155. package/sdk-core/sdk-core-protos/src/history_builder.rs +5 -5
  156. package/sdk-core/sdk-core-protos/src/history_info.rs +5 -6
  157. package/sdk-core/sdk-core-protos/src/lib.rs +414 -34
  158. package/sdk-core/sdk-core-protos/src/task_token.rs +1 -1
  159. package/sdk-core/test-utils/Cargo.toml +3 -11
  160. package/sdk-core/test-utils/src/canned_histories.rs +1 -1
  161. package/sdk-core/test-utils/src/lib.rs +159 -85
  162. package/sdk-core/tests/fuzzy_workflow.rs +3 -3
  163. package/sdk-core/tests/heavy_tests.rs +3 -3
  164. package/sdk-core/tests/integ_tests/client_tests.rs +171 -20
  165. package/sdk-core/tests/integ_tests/ephemeral_server_tests.rs +45 -39
  166. package/sdk-core/tests/integ_tests/heartbeat_tests.rs +7 -6
  167. package/sdk-core/tests/integ_tests/metrics_tests.rs +492 -35
  168. package/sdk-core/tests/integ_tests/polling_tests.rs +7 -5
  169. package/sdk-core/tests/integ_tests/queries_tests.rs +14 -17
  170. package/sdk-core/tests/integ_tests/update_tests.rs +47 -44
  171. package/sdk-core/tests/integ_tests/visibility_tests.rs +4 -3
  172. package/sdk-core/tests/integ_tests/worker_tests.rs +5 -5
  173. package/sdk-core/tests/integ_tests/workflow_tests/activities.rs +15 -13
  174. package/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +28 -14
  175. package/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +7 -1
  176. package/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +57 -4
  177. package/sdk-core/tests/integ_tests/workflow_tests/eager.rs +1 -1
  178. package/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +24 -18
  179. package/sdk-core/tests/integ_tests/workflow_tests/nexus.rs +506 -0
  180. package/sdk-core/tests/integ_tests/workflow_tests/patches.rs +1 -1
  181. package/sdk-core/tests/integ_tests/workflow_tests/priority.rs +104 -0
  182. package/sdk-core/tests/integ_tests/workflow_tests/replay.rs +34 -31
  183. package/sdk-core/tests/integ_tests/workflow_tests/resets.rs +1 -1
  184. package/sdk-core/tests/integ_tests/workflow_tests/timers.rs +10 -7
  185. package/sdk-core/tests/integ_tests/workflow_tests.rs +152 -116
  186. package/sdk-core/tests/main.rs +36 -6
  187. package/sdk-core/tests/runner.rs +30 -9
  188. package/src/conversions/slot_supplier_bridge.rs +4 -0
  189. package/src/conversions.rs +1 -0
  190. package/src/worker.rs +5 -7
  191. package/sdk-core/core/src/worker/activities/activity_task_poller_stream.rs +0 -78
@@ -1,5 +1,4 @@
1
1
  mod activity_heartbeat_manager;
2
- mod activity_task_poller_stream;
3
2
  mod local_activities;
4
3
 
5
4
  pub(crate) use local_activities::{
@@ -8,54 +7,49 @@ pub(crate) use local_activities::{
8
7
  };
9
8
 
10
9
  use crate::{
10
+ PollError, TaskToken,
11
11
  abstractions::{
12
- ClosableMeteredPermitDealer, MeteredPermitDealer, OwnedMeteredSemPermit,
13
- TrackedOwnedMeteredSemPermit, UsedMeteredSemPermit,
12
+ ClosableMeteredPermitDealer, MeteredPermitDealer, TrackedOwnedMeteredSemPermit,
13
+ UsedMeteredSemPermit,
14
14
  },
15
- pollers::BoxedActPoller,
16
- telemetry::metrics::{activity_type, eager, workflow_type, MetricsContext},
15
+ pollers::{BoxedActPoller, PermittedTqResp, TrackedPermittedTqResp, new_activity_task_poller},
16
+ telemetry::metrics::{MetricsContext, activity_type, eager, workflow_type},
17
17
  worker::{
18
- activities::{
19
- activity_heartbeat_manager::ActivityHeartbeatError,
20
- activity_task_poller_stream::new_activity_task_poller,
21
- },
22
- client::WorkerClient,
18
+ activities::activity_heartbeat_manager::ActivityHeartbeatError, client::WorkerClient,
23
19
  },
24
- PollActivityError, TaskToken,
25
20
  };
26
21
  use activity_heartbeat_manager::ActivityHeartbeatManager;
27
22
  use dashmap::DashMap;
28
23
  use futures_util::{
29
- stream,
24
+ Stream, StreamExt, stream,
30
25
  stream::{BoxStream, PollNext},
31
- Stream, StreamExt,
32
26
  };
33
27
  use std::{
34
28
  convert::TryInto,
35
29
  future,
36
30
  sync::{
37
- atomic::{AtomicBool, Ordering},
38
31
  Arc,
32
+ atomic::{AtomicBool, Ordering},
39
33
  },
40
34
  time::{Duration, Instant, SystemTime},
41
35
  };
42
36
  use temporal_sdk_core_api::worker::ActivitySlotKind;
43
37
  use temporal_sdk_core_protos::{
44
38
  coresdk::{
39
+ ActivityHeartbeat, ActivitySlotInfo,
45
40
  activity_result::{self as ar, activity_execution_result as aer},
46
41
  activity_task::{ActivityCancelReason, ActivityTask},
47
- ActivityHeartbeat, ActivitySlotInfo,
48
42
  },
49
43
  temporal::api::{
50
- failure::v1::{failure::FailureInfo, ApplicationFailureInfo, CanceledFailureInfo, Failure},
44
+ failure::v1::{ApplicationFailureInfo, CanceledFailureInfo, Failure, failure::FailureInfo},
51
45
  workflowservice::v1::PollActivityTaskQueueResponse,
52
46
  },
53
47
  };
54
48
  use tokio::{
55
49
  join,
56
50
  sync::{
57
- mpsc::{unbounded_channel, UnboundedReceiver, UnboundedSender},
58
51
  Mutex, Notify,
52
+ mpsc::{UnboundedReceiver, UnboundedSender, unbounded_channel},
59
53
  },
60
54
  task::JoinHandle,
61
55
  };
@@ -147,7 +141,7 @@ pub(crate) struct WorkerActivityTasks {
147
141
  heartbeat_manager: ActivityHeartbeatManager,
148
142
  /// Combined stream for any ActivityTask producing source (polls, eager activities,
149
143
  /// cancellations)
150
- activity_task_stream: Mutex<BoxStream<'static, Result<ActivityTask, PollActivityError>>>,
144
+ activity_task_stream: Mutex<BoxStream<'static, Result<ActivityTask, PollError>>>,
151
145
  /// Activities that have been issued to lang but not yet completed
152
146
  outstanding_activity_tasks: OutstandingActMap,
153
147
  /// Ensures we don't exceed this worker's maximum concurrent activity limit for activities. This
@@ -157,7 +151,7 @@ pub(crate) struct WorkerActivityTasks {
157
151
  /// Holds activity tasks we have received in direct response to workflow task completion (a.k.a
158
152
  /// eager activities). Tasks received in this stream hold a "tracked" permit that is issued by
159
153
  /// the `eager_activities_semaphore`.
160
- eager_activities_tx: UnboundedSender<TrackedPermittedTqResp>,
154
+ eager_activities_tx: UnboundedSender<TrackedPermittedTqResp<PollActivityTaskQueueResponse>>,
161
155
  /// Ensures that no activities are in the middle of flushing their results to server while we
162
156
  /// try to shut down.
163
157
  completers_lock: tokio::sync::RwLock<()>,
@@ -176,7 +170,7 @@ pub(crate) struct WorkerActivityTasks {
176
170
  #[derive(derive_more::From)]
177
171
  enum ActivityTaskSource {
178
172
  PendingCancel(PendingActivityCancel),
179
- PendingStart(Result<(PermittedTqResp, bool), PollActivityError>),
173
+ PendingStart(Result<(PermittedTqResp<PollActivityTaskQueueResponse>, bool), PollError>),
180
174
  }
181
175
 
182
176
  impl WorkerActivityTasks {
@@ -245,11 +239,14 @@ impl WorkerActivityTasks {
245
239
 
246
240
  /// Merges the server poll and eager [ActivityTask] sources
247
241
  fn merge_start_task_sources(
248
- non_poll_tasks_rx: UnboundedReceiver<TrackedPermittedTqResp>,
249
- poller_stream: impl Stream<Item = Result<PermittedTqResp, tonic::Status>>,
242
+ non_poll_tasks_rx: UnboundedReceiver<TrackedPermittedTqResp<PollActivityTaskQueueResponse>>,
243
+ poller_stream: impl Stream<
244
+ Item = Result<PermittedTqResp<PollActivityTaskQueueResponse>, tonic::Status>,
245
+ >,
250
246
  eager_activities_semaphore: Arc<ClosableMeteredPermitDealer<ActivitySlotKind>>,
251
247
  on_complete_token: CancellationToken,
252
- ) -> impl Stream<Item = Result<(PermittedTqResp, bool), PollActivityError>> {
248
+ ) -> impl Stream<Item = Result<(PermittedTqResp<PollActivityTaskQueueResponse>, bool), PollError>>
249
+ {
253
250
  let non_poll_stream = stream::unfold(
254
251
  (non_poll_tasks_rx, eager_activities_semaphore),
255
252
  |(mut non_poll_tasks_rx, eager_activities_semaphore)| async move {
@@ -302,13 +299,13 @@ impl WorkerActivityTasks {
302
299
  ///
303
300
  /// Polls the various task sources (server polls, eager activities, cancellations) while
304
301
  /// respecting the provided rate limits and allowed concurrency. Returns
305
- /// [PollActivityError::ShutDown] after shutdown is completed and all tasks sources are
302
+ /// [PollError::ShutDown] after shutdown is completed and all tasks sources are
306
303
  /// depleted.
307
- pub(crate) async fn poll(&self) -> Result<ActivityTask, PollActivityError> {
304
+ pub(crate) async fn poll(&self) -> Result<ActivityTask, PollError> {
308
305
  let mut poller_stream = self.activity_task_stream.lock().await;
309
306
  poller_stream.next().await.unwrap_or_else(|| {
310
307
  self.poll_returned_shutdown_token.cancel();
311
- Err(PollActivityError::ShutDown)
308
+ Err(PollError::ShutDown)
312
309
  })
313
310
  }
314
311
 
@@ -354,7 +351,7 @@ impl WorkerActivityTasks {
354
351
  aer::Status::Failed(ar::Failure { failure }) => {
355
352
  act_metrics.act_execution_failed();
356
353
  client
357
- .fail_activity_task(task_token.clone(), failure.map(Into::into))
354
+ .fail_activity_task(task_token.clone(), failure)
358
355
  .await
359
356
  .err()
360
357
  }
@@ -389,7 +386,7 @@ impl WorkerActivityTasks {
389
386
  None
390
387
  };
391
388
  client
392
- .cancel_activity_task(task_token.clone(), details.map(Into::into))
389
+ .cancel_activity_task(task_token.clone(), details)
393
390
  .await
394
391
  .err()
395
392
  }
@@ -485,7 +482,7 @@ where
485
482
  /// cancels_stream ------------------------------+--- activity_task_stream
486
483
  /// eager_activities_rx ---+--- starts_stream ---|
487
484
  /// server_poll_stream ---|
488
- fn streamify(self) -> impl Stream<Item = Result<ActivityTask, PollActivityError>> {
485
+ fn streamify(self) -> impl Stream<Item = Result<ActivityTask, PollError>> {
489
486
  let outstanding_tasks_clone = self.outstanding_tasks.clone();
490
487
  let should_issue_immediate_cancel = Arc::new(AtomicBool::new(false));
491
488
  let should_issue_immediate_cancel_clone = should_issue_immediate_cancel.clone();
@@ -662,7 +659,7 @@ where
662
659
  /// Allows for the handling of activities returned by WFT completions.
663
660
  pub(crate) struct ActivitiesFromWFTsHandle {
664
661
  sem: Arc<ClosableMeteredPermitDealer<ActivitySlotKind>>,
665
- tx: UnboundedSender<TrackedPermittedTqResp>,
662
+ tx: UnboundedSender<TrackedPermittedTqResp<PollActivityTaskQueueResponse>>,
666
663
  }
667
664
 
668
665
  impl ActivitiesFromWFTsHandle {
@@ -675,7 +672,10 @@ impl ActivitiesFromWFTsHandle {
675
672
 
676
673
  /// Queue new activity tasks for dispatch received from non-polling sources (ex: eager returns
677
674
  /// from WFT completion)
678
- pub(crate) fn add_tasks(&self, tasks: impl IntoIterator<Item = TrackedPermittedTqResp>) {
675
+ pub(crate) fn add_tasks(
676
+ &self,
677
+ tasks: impl IntoIterator<Item = TrackedPermittedTqResp<PollActivityTaskQueueResponse>>,
678
+ ) {
679
679
  for t in tasks.into_iter() {
680
680
  // Technically we should be reporting `activity_task_received` here, but for simplicity
681
681
  // and time insensitivity, that metric is tracked in `about_to_issue_task`.
@@ -684,18 +684,6 @@ impl ActivitiesFromWFTsHandle {
684
684
  }
685
685
  }
686
686
 
687
- #[derive(Debug)]
688
- pub(crate) struct PermittedTqResp {
689
- pub(crate) permit: OwnedMeteredSemPermit<ActivitySlotKind>,
690
- pub(crate) resp: PollActivityTaskQueueResponse,
691
- }
692
-
693
- #[derive(Debug)]
694
- pub(crate) struct TrackedPermittedTqResp {
695
- pub(crate) permit: TrackedOwnedMeteredSemPermit<ActivitySlotKind>,
696
- pub(crate) resp: PollActivityTaskQueueResponse,
697
- }
698
-
699
687
  fn worker_shutdown_failure() -> Failure {
700
688
  Failure {
701
689
  message: "Worker is shutting down and this activity did not complete in time".to_string(),
@@ -794,7 +782,7 @@ mod tests {
794
782
  )
795
783
  .await;
796
784
  atm.initiate_shutdown();
797
- assert_matches!(atm.poll().await.unwrap_err(), PollActivityError::ShutDown);
785
+ assert_matches!(atm.poll().await.unwrap_err(), PollError::ShutDown);
798
786
  atm.shutdown().await;
799
787
  }
800
788
 
@@ -882,7 +870,7 @@ mod tests {
882
870
  }
883
871
 
884
872
  atm.initiate_shutdown();
885
- assert_matches!(atm.poll().await.unwrap_err(), PollActivityError::ShutDown);
873
+ assert_matches!(atm.poll().await.unwrap_err(), PollError::ShutDown);
886
874
  atm.shutdown().await;
887
875
  }
888
876
 
@@ -967,7 +955,7 @@ mod tests {
967
955
  .await;
968
956
 
969
957
  atm.initiate_shutdown();
970
- assert_matches!(atm.poll().await.unwrap_err(), PollActivityError::ShutDown);
958
+ assert_matches!(atm.poll().await.unwrap_err(), PollError::ShutDown);
971
959
  atm.shutdown().await;
972
960
  }
973
961
  }
@@ -1,7 +1,6 @@
1
1
  use super::*;
2
2
  use futures_util::Future;
3
- use std::sync::Arc;
4
- use std::sync::LazyLock;
3
+ use std::sync::{Arc, LazyLock};
5
4
  use temporal_client::SlotManager;
6
5
 
7
6
  pub(crate) static DEFAULT_WORKERS_REGISTRY: LazyLock<Arc<SlotManager>> =
@@ -32,6 +31,8 @@ pub(crate) fn mock_workflow_client() -> MockWorkerClient {
32
31
  r.expect_is_mock().returning(|| true);
33
32
  r.expect_shutdown_worker()
34
33
  .returning(|_| Ok(ShutdownWorkerResponse {}));
34
+ r.expect_sdk_name_and_version()
35
+ .returning(|| ("test-core".to_string(), "0.0.0".to_string()));
35
36
  r
36
37
  }
37
38
 
@@ -43,6 +44,8 @@ pub(crate) fn mock_manual_workflow_client() -> MockManualWorkerClient {
43
44
  r.expect_workers()
44
45
  .returning(|| DEFAULT_WORKERS_REGISTRY.clone());
45
46
  r.expect_is_mock().returning(|| true);
47
+ r.expect_sdk_name_and_version()
48
+ .returning(|| ("test-core".to_string(), "0.0.0".to_string()));
46
49
  r
47
50
  }
48
51
 
@@ -61,6 +64,10 @@ mockall::mock! {
61
64
  -> impl Future<Output = Result<PollActivityTaskQueueResponse>> + Send + 'b
62
65
  where 'a: 'b, Self: 'b;
63
66
 
67
+ fn poll_nexus_task<'a, 'b>(&self, task_queue: String)
68
+ -> impl Future<Output = Result<PollNexusTaskQueueResponse>> + Send + 'b
69
+ where 'a: 'b, Self: 'b;
70
+
64
71
  fn complete_workflow_task<'a, 'b>(
65
72
  &self,
66
73
  request: WorkflowTaskCompletion,
@@ -74,6 +81,13 @@ mockall::mock! {
74
81
  ) -> impl Future<Output = Result<RespondActivityTaskCompletedResponse>> + Send + 'b
75
82
  where 'a: 'b, Self: 'b;
76
83
 
84
+ fn complete_nexus_task<'a, 'b>(
85
+ &self,
86
+ task_token: TaskToken,
87
+ response: nexus::v1::Response,
88
+ ) -> impl Future<Output = Result<RespondNexusTaskCompletedResponse>> + Send + 'b
89
+ where 'a: 'b, Self: 'b;
90
+
77
91
  fn cancel_activity_task<'a, 'b>(
78
92
  &self,
79
93
  task_token: TaskToken,
@@ -96,6 +110,13 @@ mockall::mock! {
96
110
  ) -> impl Future<Output = Result<RespondWorkflowTaskFailedResponse>> + Send + 'b
97
111
  where 'a: 'b, Self: 'b;
98
112
 
113
+ fn fail_nexus_task<'a, 'b>(
114
+ &self,
115
+ task_token: TaskToken,
116
+ error: nexus::v1::HandlerError,
117
+ ) -> impl Future<Output = Result<RespondNexusTaskFailedResponse>> + Send + 'b
118
+ where 'a: 'b, Self: 'b;
119
+
99
120
  fn record_activity_heartbeat<'a, 'b>(
100
121
  &self,
101
122
  task_token: TaskToken,
@@ -129,5 +150,6 @@ mockall::mock! {
129
150
  fn capabilities(&self) -> Option<Capabilities>;
130
151
  fn workers(&self) -> Arc<SlotManager>;
131
152
  fn is_mock(&self) -> bool;
153
+ fn sdk_name_and_version(&self) -> (String, String);
132
154
  }
133
155
  }
@@ -3,8 +3,12 @@
3
3
  pub(crate) mod mocks;
4
4
  use parking_lot::RwLock;
5
5
  use std::sync::Arc;
6
- use temporal_client::{Client, Namespace, RetryClient, SlotManager, WorkflowService};
6
+ use temporal_client::{
7
+ Client, IsWorkerTaskLongPoll, Namespace, NamespacedClient, RetryClient, SlotManager,
8
+ WorkflowService,
9
+ };
7
10
  use temporal_sdk_core_protos::{
11
+ TaskToken,
8
12
  coresdk::workflow_commands::QueryResult,
9
13
  temporal::api::{
10
14
  command::v1::Command,
@@ -14,14 +18,15 @@ use temporal_sdk_core_protos::{
14
18
  },
15
19
  enums::v1::{TaskQueueKind, WorkflowTaskFailedCause},
16
20
  failure::v1::Failure,
21
+ nexus,
17
22
  protocol::v1::Message as ProtocolMessage,
18
23
  query::v1::WorkflowQueryResult,
19
24
  sdk::v1::WorkflowTaskCompletedMetadata,
20
25
  taskqueue::v1::{StickyExecutionAttributes, TaskQueue, TaskQueueMetadata},
21
26
  workflowservice::v1::{get_system_info_response::Capabilities, *},
22
27
  },
23
- TaskToken,
24
28
  };
29
+ use tonic::IntoRequest;
25
30
 
26
31
  type Result<T, E = tonic::Status> = std::result::Result<T, E>;
27
32
 
@@ -72,6 +77,8 @@ impl WorkerClientBag {
72
77
  Some(WorkerVersionCapabilities {
73
78
  build_id: self.worker_build_id.clone(),
74
79
  use_versioning: self.use_versioning,
80
+ // TODO: https://github.com/temporalio/sdk-core/issues/866
81
+ deployment_series_name: "".to_string(),
75
82
  })
76
83
  } else {
77
84
  None
@@ -104,6 +111,7 @@ pub(crate) trait WorkerClient: Sync + Send {
104
111
  task_queue: String,
105
112
  max_tasks_per_sec: Option<f64>,
106
113
  ) -> Result<PollActivityTaskQueueResponse>;
114
+ async fn poll_nexus_task(&self, task_queue: String) -> Result<PollNexusTaskQueueResponse>;
107
115
  async fn complete_workflow_task(
108
116
  &self,
109
117
  request: WorkflowTaskCompletion,
@@ -113,6 +121,11 @@ pub(crate) trait WorkerClient: Sync + Send {
113
121
  task_token: TaskToken,
114
122
  result: Option<Payloads>,
115
123
  ) -> Result<RespondActivityTaskCompletedResponse>;
124
+ async fn complete_nexus_task(
125
+ &self,
126
+ task_token: TaskToken,
127
+ response: nexus::v1::Response,
128
+ ) -> Result<RespondNexusTaskCompletedResponse>;
116
129
  async fn record_activity_heartbeat(
117
130
  &self,
118
131
  task_token: TaskToken,
@@ -134,6 +147,11 @@ pub(crate) trait WorkerClient: Sync + Send {
134
147
  cause: WorkflowTaskFailedCause,
135
148
  failure: Option<Failure>,
136
149
  ) -> Result<RespondWorkflowTaskFailedResponse>;
150
+ async fn fail_nexus_task(
151
+ &self,
152
+ task_token: TaskToken,
153
+ error: nexus::v1::HandlerError,
154
+ ) -> Result<RespondNexusTaskFailedResponse>;
137
155
  async fn get_workflow_execution_history(
138
156
  &self,
139
157
  workflow_id: String,
@@ -152,6 +170,8 @@ pub(crate) trait WorkerClient: Sync + Send {
152
170
  fn capabilities(&self) -> Option<Capabilities>;
153
171
  fn workers(&self) -> Arc<SlotManager>;
154
172
  fn is_mock(&self) -> bool;
173
+ /// Return (sdk_name, sdk_version) from the underlying client configuration
174
+ fn sdk_name_and_version(&self) -> (String, String);
155
175
  }
156
176
 
157
177
  #[async_trait::async_trait]
@@ -160,13 +180,17 @@ impl WorkerClient for WorkerClientBag {
160
180
  &self,
161
181
  task_queue: TaskQueue,
162
182
  ) -> Result<PollWorkflowTaskQueueResponse> {
163
- let request = PollWorkflowTaskQueueRequest {
183
+ #[allow(deprecated)] // want to list all fields explicitly
184
+ let mut request = PollWorkflowTaskQueueRequest {
164
185
  namespace: self.namespace.clone(),
165
186
  task_queue: Some(task_queue),
166
187
  identity: self.identity.clone(),
167
188
  binary_checksum: self.binary_checksum(),
168
189
  worker_version_capabilities: self.worker_version_capabilities(),
169
- };
190
+ deployment_options: None,
191
+ }
192
+ .into_request();
193
+ request.extensions_mut().insert(IsWorkerTaskLongPoll);
170
194
 
171
195
  Ok(self
172
196
  .cloned_client()
@@ -180,7 +204,8 @@ impl WorkerClient for WorkerClientBag {
180
204
  task_queue: String,
181
205
  max_tasks_per_sec: Option<f64>,
182
206
  ) -> Result<PollActivityTaskQueueResponse> {
183
- let request = PollActivityTaskQueueRequest {
207
+ #[allow(deprecated)] // want to list all fields explicitly
208
+ let mut request = PollActivityTaskQueueRequest {
184
209
  namespace: self.namespace.clone(),
185
210
  task_queue: Some(TaskQueue {
186
211
  name: task_queue,
@@ -192,7 +217,10 @@ impl WorkerClient for WorkerClientBag {
192
217
  max_tasks_per_second: Some(tps),
193
218
  }),
194
219
  worker_version_capabilities: self.worker_version_capabilities(),
195
- };
220
+ deployment_options: None,
221
+ }
222
+ .into_request();
223
+ request.extensions_mut().insert(IsWorkerTaskLongPoll);
196
224
 
197
225
  Ok(self
198
226
  .cloned_client()
@@ -201,10 +229,34 @@ impl WorkerClient for WorkerClientBag {
201
229
  .into_inner())
202
230
  }
203
231
 
232
+ async fn poll_nexus_task(&self, task_queue: String) -> Result<PollNexusTaskQueueResponse> {
233
+ #[allow(deprecated)] // want to list all fields explicitly
234
+ let mut request = PollNexusTaskQueueRequest {
235
+ namespace: self.namespace.clone(),
236
+ task_queue: Some(TaskQueue {
237
+ name: task_queue,
238
+ kind: TaskQueueKind::Normal as i32,
239
+ normal_name: "".to_string(),
240
+ }),
241
+ identity: self.identity.clone(),
242
+ worker_version_capabilities: self.worker_version_capabilities(),
243
+ deployment_options: None,
244
+ }
245
+ .into_request();
246
+ request.extensions_mut().insert(IsWorkerTaskLongPoll);
247
+
248
+ Ok(self
249
+ .cloned_client()
250
+ .poll_nexus_task_queue(request)
251
+ .await?
252
+ .into_inner())
253
+ }
254
+
204
255
  async fn complete_workflow_task(
205
256
  &self,
206
257
  request: WorkflowTaskCompletion,
207
258
  ) -> Result<RespondWorkflowTaskCompletedResponse> {
259
+ #[allow(deprecated)] // want to list all fields explicitly
208
260
  let request = RespondWorkflowTaskCompletedRequest {
209
261
  task_token: request.task_token.into(),
210
262
  commands: request.commands,
@@ -226,6 +278,8 @@ impl WorkerClient for WorkerClientBag {
226
278
  result_type: completed_type as i32,
227
279
  answer: query_result,
228
280
  error_message,
281
+ // TODO: https://github.com/temporalio/sdk-core/issues/867
282
+ failure: None,
229
283
  },
230
284
  )
231
285
  })
@@ -233,7 +287,13 @@ impl WorkerClient for WorkerClientBag {
233
287
  namespace: self.namespace.clone(),
234
288
  sdk_metadata: Some(request.sdk_metadata),
235
289
  metering_metadata: Some(request.metering_metadata),
236
- capabilities: None,
290
+ capabilities: Some(respond_workflow_task_completed_request::Capabilities {
291
+ discard_speculative_workflow_task_with_events: true,
292
+ }),
293
+ // TODO: https://github.com/temporalio/sdk-core/issues/866
294
+ deployment: None,
295
+ versioning_behavior: 0,
296
+ deployment_options: None,
237
297
  };
238
298
  Ok(self
239
299
  .cloned_client()
@@ -249,12 +309,35 @@ impl WorkerClient for WorkerClientBag {
249
309
  ) -> Result<RespondActivityTaskCompletedResponse> {
250
310
  Ok(self
251
311
  .cloned_client()
252
- .respond_activity_task_completed(RespondActivityTaskCompletedRequest {
253
- task_token: task_token.0,
254
- result,
255
- identity: self.identity.clone(),
312
+ .respond_activity_task_completed(
313
+ #[allow(deprecated)] // want to list all fields explicitly
314
+ RespondActivityTaskCompletedRequest {
315
+ task_token: task_token.0,
316
+ result,
317
+ identity: self.identity.clone(),
318
+ namespace: self.namespace.clone(),
319
+ worker_version: self.worker_version_stamp(),
320
+ // TODO: https://github.com/temporalio/sdk-core/issues/866
321
+ deployment: None,
322
+ deployment_options: None,
323
+ },
324
+ )
325
+ .await?
326
+ .into_inner())
327
+ }
328
+
329
+ async fn complete_nexus_task(
330
+ &self,
331
+ task_token: TaskToken,
332
+ response: nexus::v1::Response,
333
+ ) -> Result<RespondNexusTaskCompletedResponse> {
334
+ Ok(self
335
+ .cloned_client()
336
+ .respond_nexus_task_completed(RespondNexusTaskCompletedRequest {
256
337
  namespace: self.namespace.clone(),
257
- worker_version: self.worker_version_stamp(),
338
+ identity: self.identity.clone(),
339
+ task_token: task_token.0,
340
+ response: Some(response),
258
341
  })
259
342
  .await?
260
343
  .into_inner())
@@ -284,13 +367,19 @@ impl WorkerClient for WorkerClientBag {
284
367
  ) -> Result<RespondActivityTaskCanceledResponse> {
285
368
  Ok(self
286
369
  .cloned_client()
287
- .respond_activity_task_canceled(RespondActivityTaskCanceledRequest {
288
- task_token: task_token.0,
289
- details,
290
- identity: self.identity.clone(),
291
- namespace: self.namespace.clone(),
292
- worker_version: self.worker_version_stamp(),
293
- })
370
+ .respond_activity_task_canceled(
371
+ #[allow(deprecated)] // want to list all fields explicitly
372
+ RespondActivityTaskCanceledRequest {
373
+ task_token: task_token.0,
374
+ details,
375
+ identity: self.identity.clone(),
376
+ namespace: self.namespace.clone(),
377
+ worker_version: self.worker_version_stamp(),
378
+ // TODO: https://github.com/temporalio/sdk-core/issues/866
379
+ deployment: None,
380
+ deployment_options: None,
381
+ },
382
+ )
294
383
  .await?
295
384
  .into_inner())
296
385
  }
@@ -302,15 +391,21 @@ impl WorkerClient for WorkerClientBag {
302
391
  ) -> Result<RespondActivityTaskFailedResponse> {
303
392
  Ok(self
304
393
  .cloned_client()
305
- .respond_activity_task_failed(RespondActivityTaskFailedRequest {
306
- task_token: task_token.0,
307
- failure,
308
- identity: self.identity.clone(),
309
- namespace: self.namespace.clone(),
310
- // TODO: Implement - https://github.com/temporalio/sdk-core/issues/293
311
- last_heartbeat_details: None,
312
- worker_version: self.worker_version_stamp(),
313
- })
394
+ .respond_activity_task_failed(
395
+ #[allow(deprecated)] // want to list all fields explicitly
396
+ RespondActivityTaskFailedRequest {
397
+ task_token: task_token.0,
398
+ failure,
399
+ identity: self.identity.clone(),
400
+ namespace: self.namespace.clone(),
401
+ // TODO: Implement - https://github.com/temporalio/sdk-core/issues/293
402
+ last_heartbeat_details: None,
403
+ worker_version: self.worker_version_stamp(),
404
+ // TODO: https://github.com/temporalio/sdk-core/issues/866
405
+ deployment: None,
406
+ deployment_options: None,
407
+ },
408
+ )
314
409
  .await?
315
410
  .into_inner())
316
411
  }
@@ -321,6 +416,7 @@ impl WorkerClient for WorkerClientBag {
321
416
  cause: WorkflowTaskFailedCause,
322
417
  failure: Option<Failure>,
323
418
  ) -> Result<RespondWorkflowTaskFailedResponse> {
419
+ #[allow(deprecated)] // want to list all fields explicitly
324
420
  let request = RespondWorkflowTaskFailedRequest {
325
421
  task_token: task_token.0,
326
422
  cause: cause as i32,
@@ -330,6 +426,9 @@ impl WorkerClient for WorkerClientBag {
330
426
  namespace: self.namespace.clone(),
331
427
  messages: vec![],
332
428
  worker_version: self.worker_version_stamp(),
429
+ // TODO: https://github.com/temporalio/sdk-core/issues/866
430
+ deployment: None,
431
+ deployment_options: None,
333
432
  };
334
433
  Ok(self
335
434
  .cloned_client()
@@ -338,6 +437,23 @@ impl WorkerClient for WorkerClientBag {
338
437
  .into_inner())
339
438
  }
340
439
 
440
+ async fn fail_nexus_task(
441
+ &self,
442
+ task_token: TaskToken,
443
+ error: nexus::v1::HandlerError,
444
+ ) -> Result<RespondNexusTaskFailedResponse> {
445
+ Ok(self
446
+ .cloned_client()
447
+ .respond_nexus_task_failed(RespondNexusTaskFailedRequest {
448
+ namespace: self.namespace.clone(),
449
+ identity: self.identity.clone(),
450
+ task_token: task_token.0,
451
+ error: Some(error),
452
+ })
453
+ .await?
454
+ .into_inner())
455
+ }
456
+
341
457
  async fn get_workflow_execution_history(
342
458
  &self,
343
459
  workflow_id: String,
@@ -373,17 +489,21 @@ impl WorkerClient for WorkerClientBag {
373
489
  query_result,
374
490
  error_message,
375
491
  namespace: self.namespace.clone(),
492
+ // TODO: https://github.com/temporalio/sdk-core/issues/867
493
+ failure: None,
376
494
  })
377
495
  .await?
378
496
  .into_inner())
379
497
  }
380
498
 
381
499
  async fn describe_namespace(&self) -> Result<DescribeNamespaceResponse> {
382
- temporal_client::WorkflowClientTrait::describe_namespace(
383
- &self.cloned_client(),
384
- Namespace::Name(self.namespace.clone()),
385
- )
386
- .await
500
+ Ok(self
501
+ .cloned_client()
502
+ .describe_namespace(
503
+ Namespace::Name(self.namespace.clone()).into_describe_namespace_request(),
504
+ )
505
+ .await?
506
+ .into_inner())
387
507
  }
388
508
 
389
509
  async fn shutdown_worker(&self, sticky_task_queue: String) -> Result<ShutdownWorkerResponse> {
@@ -419,6 +539,22 @@ impl WorkerClient for WorkerClientBag {
419
539
  fn is_mock(&self) -> bool {
420
540
  false
421
541
  }
542
+
543
+ fn sdk_name_and_version(&self) -> (String, String) {
544
+ let lock = self.replaceable_client.read();
545
+ let opts = lock.get_client().inner().options();
546
+ (opts.client_name.clone(), opts.client_version.clone())
547
+ }
548
+ }
549
+
550
+ impl NamespacedClient for WorkerClientBag {
551
+ fn namespace(&self) -> &str {
552
+ &self.namespace
553
+ }
554
+
555
+ fn get_identity(&self) -> &str {
556
+ &self.identity
557
+ }
422
558
  }
423
559
 
424
560
  /// A version of [RespondWorkflowTaskCompletedRequest] that will finish being filled out by the