@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.
- package/Cargo.lock +902 -468
- package/package.json +3 -3
- 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/.cargo/config.toml +5 -0
- package/sdk-core/.github/workflows/per-pr.yml +59 -5
- package/sdk-core/Cargo.toml +3 -2
- package/sdk-core/client/Cargo.toml +3 -3
- package/sdk-core/client/src/lib.rs +154 -161
- package/sdk-core/client/src/metrics.rs +15 -8
- package/sdk-core/client/src/proxy.rs +1 -1
- package/sdk-core/client/src/raw.rs +176 -33
- package/sdk-core/client/src/retry.rs +102 -465
- package/sdk-core/client/src/worker_registry/mod.rs +2 -2
- package/sdk-core/client/src/workflow_handle/mod.rs +19 -1
- package/sdk-core/core/Cargo.toml +12 -14
- package/sdk-core/core/benches/workflow_replay.rs +1 -1
- package/sdk-core/core/src/abstractions.rs +2 -2
- package/sdk-core/core/src/core_tests/activity_tasks.rs +99 -46
- package/sdk-core/core/src/core_tests/child_workflows.rs +68 -9
- package/sdk-core/core/src/core_tests/determinism.rs +2 -2
- package/sdk-core/core/src/core_tests/local_activities.rs +20 -33
- package/sdk-core/core/src/core_tests/mod.rs +7 -8
- package/sdk-core/core/src/core_tests/queries.rs +79 -79
- package/sdk-core/core/src/core_tests/replay_flag.rs +5 -5
- package/sdk-core/core/src/core_tests/updates.rs +6 -6
- package/sdk-core/core/src/core_tests/workers.rs +19 -22
- package/sdk-core/core/src/core_tests/workflow_cancels.rs +3 -3
- package/sdk-core/core/src/core_tests/workflow_tasks.rs +154 -106
- package/sdk-core/core/src/ephemeral_server/mod.rs +66 -10
- package/sdk-core/core/src/internal_flags.rs +103 -12
- package/sdk-core/core/src/lib.rs +21 -13
- package/sdk-core/core/src/pollers/mod.rs +200 -6
- package/sdk-core/core/src/pollers/poll_buffer.rs +32 -8
- package/sdk-core/core/src/protosext/mod.rs +7 -7
- package/sdk-core/core/src/protosext/protocol_messages.rs +2 -2
- package/sdk-core/core/src/replay/mod.rs +8 -9
- package/sdk-core/core/src/retry_logic.rs +8 -6
- package/sdk-core/core/src/telemetry/log_export.rs +4 -4
- package/sdk-core/core/src/telemetry/metrics.rs +111 -25
- package/sdk-core/core/src/telemetry/mod.rs +11 -4
- package/sdk-core/core/src/telemetry/otel.rs +108 -144
- package/sdk-core/core/src/telemetry/prometheus_server.rs +1 -4
- package/sdk-core/core/src/test_help/mod.rs +27 -21
- package/sdk-core/core/src/worker/activities/activity_heartbeat_manager.rs +7 -5
- package/sdk-core/core/src/worker/activities/local_activities.rs +9 -9
- package/sdk-core/core/src/worker/activities.rs +34 -46
- package/sdk-core/core/src/worker/client/mocks.rs +24 -2
- package/sdk-core/core/src/worker/client.rs +169 -33
- package/sdk-core/core/src/worker/mod.rs +132 -56
- package/sdk-core/core/src/worker/nexus.rs +410 -0
- package/sdk-core/core/src/worker/tuner/resource_based.rs +27 -5
- package/sdk-core/core/src/worker/tuner.rs +29 -2
- package/sdk-core/core/src/worker/workflow/driven_workflow.rs +8 -3
- package/sdk-core/core/src/worker/workflow/history_update.rs +5 -8
- package/sdk-core/core/src/worker/workflow/machines/activity_state_machine.rs +83 -87
- package/sdk-core/core/src/worker/workflow/machines/cancel_external_state_machine.rs +38 -38
- package/sdk-core/core/src/worker/workflow/machines/cancel_nexus_op_state_machine.rs +117 -0
- package/sdk-core/core/src/worker/workflow/machines/cancel_workflow_state_machine.rs +8 -18
- package/sdk-core/core/src/worker/workflow/machines/child_workflow_state_machine.rs +114 -108
- package/sdk-core/core/src/worker/workflow/machines/complete_workflow_state_machine.rs +16 -31
- package/sdk-core/core/src/worker/workflow/machines/continue_as_new_workflow_state_machine.rs +7 -14
- package/sdk-core/core/src/worker/workflow/machines/fail_workflow_state_machine.rs +8 -15
- package/sdk-core/core/src/worker/workflow/machines/local_activity_state_machine.rs +34 -75
- package/sdk-core/core/src/worker/workflow/machines/mod.rs +26 -48
- package/sdk-core/core/src/worker/workflow/machines/modify_workflow_properties_state_machine.rs +10 -17
- package/sdk-core/core/src/worker/workflow/machines/nexus_operation_state_machine.rs +543 -0
- package/sdk-core/core/src/worker/workflow/machines/patch_state_machine.rs +22 -31
- package/sdk-core/core/src/worker/workflow/machines/signal_external_state_machine.rs +53 -51
- package/sdk-core/core/src/worker/workflow/machines/timer_state_machine.rs +40 -45
- package/sdk-core/core/src/worker/workflow/machines/transition_coverage.rs +2 -2
- package/sdk-core/core/src/worker/workflow/machines/update_state_machine.rs +8 -10
- package/sdk-core/core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +24 -30
- package/sdk-core/core/src/worker/workflow/machines/workflow_machines.rs +182 -116
- package/sdk-core/core/src/worker/workflow/machines/workflow_task_state_machine.rs +4 -8
- package/sdk-core/core/src/worker/workflow/managed_run.rs +75 -45
- package/sdk-core/core/src/worker/workflow/mod.rs +104 -55
- package/sdk-core/core/src/worker/workflow/run_cache.rs +23 -4
- package/sdk-core/core/src/worker/workflow/wft_extraction.rs +4 -4
- package/sdk-core/core/src/worker/workflow/wft_poller.rs +3 -3
- package/sdk-core/core/src/worker/workflow/workflow_stream.rs +32 -13
- package/sdk-core/core-api/Cargo.toml +2 -3
- package/sdk-core/core-api/src/errors.rs +22 -20
- package/sdk-core/core-api/src/lib.rs +24 -5
- package/sdk-core/core-api/src/telemetry/metrics.rs +27 -1
- package/sdk-core/core-api/src/telemetry.rs +37 -3
- package/sdk-core/core-api/src/worker.rs +36 -3
- package/sdk-core/docker/docker-compose-ci.yaml +25 -0
- package/sdk-core/etc/otel-collector-ci.yaml +36 -0
- package/sdk-core/etc/otel-collector-config.yaml +3 -3
- package/sdk-core/etc/prometheus.yaml +1 -1
- package/sdk-core/fsm/Cargo.toml +1 -1
- package/sdk-core/fsm/rustfsm_procmacro/Cargo.toml +1 -1
- package/sdk-core/fsm/rustfsm_procmacro/src/lib.rs +3 -4
- package/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.stderr +1 -1
- package/sdk-core/fsm/rustfsm_trait/Cargo.toml +1 -1
- package/sdk-core/sdk/Cargo.toml +1 -2
- package/sdk-core/sdk/src/activity_context.rs +1 -1
- package/sdk-core/sdk/src/interceptors.rs +1 -1
- package/sdk-core/sdk/src/lib.rs +126 -54
- package/sdk-core/sdk/src/workflow_context/options.rs +184 -74
- package/sdk-core/sdk/src/workflow_context.rs +193 -79
- package/sdk-core/sdk/src/workflow_future.rs +151 -131
- package/sdk-core/sdk-core-protos/Cargo.toml +3 -4
- package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/VERSION +1 -1
- package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/temporal/api/cloud/account/v1/message.proto +46 -0
- package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/temporal/api/cloud/cloudservice/v1/request_response.proto +254 -5
- package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/temporal/api/cloud/cloudservice/v1/service.proto +108 -2
- package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/temporal/api/cloud/identity/v1/message.proto +94 -15
- package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/temporal/api/cloud/namespace/v1/message.proto +102 -4
- package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/temporal/api/cloud/nexus/v1/message.proto +84 -0
- package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/temporal/api/cloud/operation/v1/message.proto +25 -10
- package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/temporal/api/cloud/region/v1/message.proto +14 -1
- package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/temporal/api/cloud/resource/v1/message.proto +25 -0
- package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/temporal/api/cloud/sink/v1/message.proto +41 -0
- package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/temporal/api/cloud/usage/v1/message.proto +59 -0
- package/sdk-core/sdk-core-protos/protos/api_upstream/.github/PULL_REQUEST_TEMPLATE.md +2 -0
- package/sdk-core/sdk-core-protos/protos/api_upstream/.github/workflows/create-release.yml +135 -0
- package/sdk-core/sdk-core-protos/protos/api_upstream/.github/workflows/push-to-buf.yml +20 -0
- package/sdk-core/sdk-core-protos/protos/api_upstream/.github/workflows/trigger-api-go-delete-release.yml +13 -0
- package/sdk-core/sdk-core-protos/protos/api_upstream/.github/workflows/trigger-api-go-publish-release.yml +13 -0
- package/sdk-core/sdk-core-protos/protos/api_upstream/.github/workflows/trigger-api-go-update.yml +13 -21
- package/sdk-core/sdk-core-protos/protos/api_upstream/Makefile +2 -2
- package/sdk-core/sdk-core-protos/protos/api_upstream/buf.yaml +1 -0
- package/sdk-core/sdk-core-protos/protos/api_upstream/openapi/openapiv2.json +3386 -1047
- package/sdk-core/sdk-core-protos/protos/api_upstream/openapi/openapiv3.yaml +3529 -1144
- package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/batch/v1/message.proto +39 -1
- package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/command/v1/message.proto +6 -0
- package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/common/v1/message.proto +39 -1
- package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/deployment/v1/message.proto +252 -0
- package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/enums/v1/batch_operation.proto +1 -0
- package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/enums/v1/common.proto +6 -0
- package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/enums/v1/deployment.proto +96 -0
- package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/enums/v1/event_type.proto +2 -0
- package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +2 -0
- package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/enums/v1/nexus.proto +42 -0
- package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/enums/v1/reset.proto +2 -0
- package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/enums/v1/workflow.proto +43 -2
- package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/errordetails/v1/message.proto +13 -1
- package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/failure/v1/message.proto +14 -0
- package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/history/v1/message.proto +70 -12
- package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/nexus/v1/message.proto +12 -0
- package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/query/v1/message.proto +9 -2
- package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +46 -2
- package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/workflow/v1/message.proto +206 -0
- package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +482 -97
- package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +230 -43
- package/sdk-core/sdk-core-protos/protos/local/temporal/sdk/core/core_interface.proto +6 -0
- package/sdk-core/sdk-core-protos/protos/local/temporal/sdk/core/nexus/nexus.proto +71 -0
- package/sdk-core/sdk-core-protos/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +46 -2
- package/sdk-core/sdk-core-protos/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +55 -9
- package/sdk-core/sdk-core-protos/src/history_builder.rs +5 -5
- package/sdk-core/sdk-core-protos/src/history_info.rs +5 -6
- package/sdk-core/sdk-core-protos/src/lib.rs +414 -34
- package/sdk-core/sdk-core-protos/src/task_token.rs +1 -1
- package/sdk-core/test-utils/Cargo.toml +3 -11
- package/sdk-core/test-utils/src/canned_histories.rs +1 -1
- package/sdk-core/test-utils/src/lib.rs +159 -85
- package/sdk-core/tests/fuzzy_workflow.rs +3 -3
- package/sdk-core/tests/heavy_tests.rs +3 -3
- package/sdk-core/tests/integ_tests/client_tests.rs +171 -20
- package/sdk-core/tests/integ_tests/ephemeral_server_tests.rs +45 -39
- package/sdk-core/tests/integ_tests/heartbeat_tests.rs +7 -6
- package/sdk-core/tests/integ_tests/metrics_tests.rs +492 -35
- package/sdk-core/tests/integ_tests/polling_tests.rs +7 -5
- package/sdk-core/tests/integ_tests/queries_tests.rs +14 -17
- package/sdk-core/tests/integ_tests/update_tests.rs +47 -44
- package/sdk-core/tests/integ_tests/visibility_tests.rs +4 -3
- package/sdk-core/tests/integ_tests/worker_tests.rs +5 -5
- package/sdk-core/tests/integ_tests/workflow_tests/activities.rs +15 -13
- package/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +28 -14
- package/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +7 -1
- package/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +57 -4
- package/sdk-core/tests/integ_tests/workflow_tests/eager.rs +1 -1
- package/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +24 -18
- package/sdk-core/tests/integ_tests/workflow_tests/nexus.rs +506 -0
- package/sdk-core/tests/integ_tests/workflow_tests/patches.rs +1 -1
- package/sdk-core/tests/integ_tests/workflow_tests/priority.rs +104 -0
- package/sdk-core/tests/integ_tests/workflow_tests/replay.rs +34 -31
- package/sdk-core/tests/integ_tests/workflow_tests/resets.rs +1 -1
- package/sdk-core/tests/integ_tests/workflow_tests/timers.rs +10 -7
- package/sdk-core/tests/integ_tests/workflow_tests.rs +152 -116
- package/sdk-core/tests/main.rs +36 -6
- package/sdk-core/tests/runner.rs +30 -9
- package/src/conversions/slot_supplier_bridge.rs +4 -0
- package/src/conversions.rs +1 -0
- package/src/worker.rs +5 -7
- 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,
|
|
13
|
-
|
|
12
|
+
ClosableMeteredPermitDealer, MeteredPermitDealer, TrackedOwnedMeteredSemPermit,
|
|
13
|
+
UsedMeteredSemPermit,
|
|
14
14
|
},
|
|
15
|
-
pollers::BoxedActPoller,
|
|
16
|
-
telemetry::metrics::{activity_type, eager, workflow_type
|
|
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::{
|
|
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,
|
|
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
|
|
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<
|
|
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
|
|
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
|
-
/// [
|
|
302
|
+
/// [PollError::ShutDown] after shutdown is completed and all tasks sources are
|
|
306
303
|
/// depleted.
|
|
307
|
-
pub(crate) async fn poll(&self) -> Result<ActivityTask,
|
|
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(
|
|
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
|
|
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
|
|
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,
|
|
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(
|
|
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(),
|
|
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(),
|
|
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(),
|
|
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::{
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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(
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
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
|
-
|
|
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(
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
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(
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
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
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
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
|