temporalio 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +175 -4
- data/bridge/Cargo.lock +44 -21
- data/bridge/Cargo.toml +1 -0
- data/bridge/sdk-core/Cargo.toml +1 -1
- data/bridge/sdk-core/README.md +1 -4
- data/bridge/sdk-core/client/Cargo.toml +1 -1
- data/bridge/sdk-core/client/src/lib.rs +12 -20
- data/bridge/sdk-core/client/src/raw.rs +9 -8
- data/bridge/sdk-core/client/src/retry.rs +100 -23
- data/bridge/sdk-core/core/Cargo.toml +7 -7
- data/bridge/sdk-core/core/benches/workflow_replay.rs +13 -10
- data/bridge/sdk-core/core/src/abstractions.rs +22 -22
- data/bridge/sdk-core/core/src/core_tests/activity_tasks.rs +146 -43
- data/bridge/sdk-core/core/src/core_tests/local_activities.rs +419 -9
- data/bridge/sdk-core/core/src/core_tests/queries.rs +247 -89
- data/bridge/sdk-core/core/src/core_tests/workers.rs +2 -2
- data/bridge/sdk-core/core/src/core_tests/workflow_cancels.rs +1 -1
- data/bridge/sdk-core/core/src/core_tests/workflow_tasks.rs +47 -27
- data/bridge/sdk-core/core/src/lib.rs +139 -32
- data/bridge/sdk-core/core/src/protosext/mod.rs +1 -1
- data/bridge/sdk-core/core/src/replay/mod.rs +185 -41
- data/bridge/sdk-core/core/src/telemetry/log_export.rs +190 -0
- data/bridge/sdk-core/core/src/telemetry/metrics.rs +184 -139
- data/bridge/sdk-core/core/src/telemetry/mod.rs +310 -315
- data/bridge/sdk-core/core/src/telemetry/prometheus_server.rs +4 -3
- data/bridge/sdk-core/core/src/test_help/mod.rs +23 -9
- data/bridge/sdk-core/core/src/worker/activities/local_activities.rs +12 -6
- data/bridge/sdk-core/core/src/worker/activities.rs +40 -23
- data/bridge/sdk-core/core/src/worker/client/mocks.rs +1 -1
- data/bridge/sdk-core/core/src/worker/client.rs +30 -4
- data/bridge/sdk-core/core/src/worker/mod.rs +23 -19
- data/bridge/sdk-core/core/src/worker/workflow/driven_workflow.rs +10 -19
- data/bridge/sdk-core/core/src/worker/workflow/history_update.rs +99 -25
- data/bridge/sdk-core/core/src/worker/workflow/machines/activity_state_machine.rs +1 -5
- data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_external_state_machine.rs +1 -5
- data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_workflow_state_machine.rs +1 -5
- data/bridge/sdk-core/core/src/worker/workflow/machines/child_workflow_state_machine.rs +3 -5
- data/bridge/sdk-core/core/src/worker/workflow/machines/complete_workflow_state_machine.rs +1 -5
- data/bridge/sdk-core/core/src/worker/workflow/machines/continue_as_new_workflow_state_machine.rs +2 -6
- data/bridge/sdk-core/core/src/worker/workflow/machines/fail_workflow_state_machine.rs +1 -5
- data/bridge/sdk-core/core/src/worker/workflow/machines/local_activity_state_machine.rs +24 -22
- data/bridge/sdk-core/core/src/worker/workflow/machines/mod.rs +12 -38
- data/bridge/sdk-core/core/src/worker/workflow/machines/modify_workflow_properties_state_machine.rs +178 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/patch_state_machine.rs +1 -5
- data/bridge/sdk-core/core/src/worker/workflow/machines/signal_external_state_machine.rs +1 -5
- data/bridge/sdk-core/core/src/worker/workflow/machines/timer_state_machine.rs +1 -5
- data/bridge/sdk-core/core/src/worker/workflow/machines/transition_coverage.rs +8 -2
- data/bridge/sdk-core/core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +1 -5
- data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines/local_acts.rs +1 -1
- data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines.rs +233 -217
- data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_task_state_machine.rs +1 -6
- data/bridge/sdk-core/core/src/worker/workflow/managed_run/managed_wf_test.rs +4 -4
- data/bridge/sdk-core/core/src/worker/workflow/managed_run.rs +13 -5
- data/bridge/sdk-core/core/src/worker/workflow/mod.rs +86 -29
- data/bridge/sdk-core/core/src/worker/workflow/wft_poller.rs +2 -2
- data/bridge/sdk-core/core/src/worker/workflow/workflow_stream.rs +56 -11
- data/bridge/sdk-core/core-api/Cargo.toml +4 -3
- data/bridge/sdk-core/core-api/src/lib.rs +1 -43
- data/bridge/sdk-core/core-api/src/telemetry.rs +147 -0
- data/bridge/sdk-core/core-api/src/worker.rs +13 -0
- data/bridge/sdk-core/etc/deps.svg +115 -140
- data/bridge/sdk-core/etc/regen-depgraph.sh +5 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.stderr +1 -1
- data/bridge/sdk-core/histories/evict_while_la_running_no_interference-23_history.bin +0 -0
- data/bridge/sdk-core/histories/evict_while_la_running_no_interference-85_history.bin +0 -0
- data/bridge/sdk-core/protos/api_upstream/buf.yaml +0 -3
- data/bridge/sdk-core/protos/api_upstream/build/go.mod +7 -0
- data/bridge/sdk-core/protos/api_upstream/build/go.sum +5 -0
- data/bridge/sdk-core/protos/api_upstream/{temporal/api/update/v1/message.proto → build/tools.go} +6 -23
- data/bridge/sdk-core/protos/api_upstream/go.mod +6 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/batch/v1/message.proto +12 -9
- data/bridge/sdk-core/protos/api_upstream/temporal/api/command/v1/message.proto +20 -19
- data/bridge/sdk-core/protos/api_upstream/temporal/api/common/v1/message.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/batch_operation.proto +3 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/command_type.proto +4 -4
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/common.proto +3 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/event_type.proto +5 -3
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +23 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/{cluster.proto → interaction_type.proto} +10 -11
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/namespace.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/query.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/reset.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/schedule.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/task_queue.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/update.proto +2 -13
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/workflow.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/errordetails/v1/message.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/failure/v1/message.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/filter/v1/message.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/history/v1/message.proto +26 -19
- data/bridge/sdk-core/protos/api_upstream/temporal/api/interaction/v1/message.proto +87 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/namespace/v1/message.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/request_response.proto +21 -61
- data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/service.proto +2 -21
- data/bridge/sdk-core/protos/api_upstream/temporal/api/query/v1/message.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/replication/v1/message.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/schedule/v1/message.proto +110 -31
- data/bridge/sdk-core/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +4 -4
- data/bridge/sdk-core/protos/api_upstream/temporal/api/version/v1/message.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/workflow/v1/message.proto +3 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +60 -16
- data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +17 -3
- data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +2 -0
- data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +8 -1
- data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/request_response.proto +2 -2
- data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/service.proto +2 -2
- data/bridge/sdk-core/sdk/Cargo.toml +2 -2
- data/bridge/sdk-core/sdk/src/interceptors.rs +36 -3
- data/bridge/sdk-core/sdk/src/lib.rs +7 -5
- data/bridge/sdk-core/sdk/src/workflow_context.rs +13 -2
- data/bridge/sdk-core/sdk/src/workflow_future.rs +3 -7
- data/bridge/sdk-core/sdk-core-protos/Cargo.toml +1 -1
- data/bridge/sdk-core/sdk-core-protos/build.rs +0 -1
- data/bridge/sdk-core/sdk-core-protos/src/history_builder.rs +65 -18
- data/bridge/sdk-core/sdk-core-protos/src/history_info.rs +22 -22
- data/bridge/sdk-core/sdk-core-protos/src/lib.rs +104 -44
- data/bridge/sdk-core/test-utils/Cargo.toml +2 -1
- data/bridge/sdk-core/test-utils/src/lib.rs +81 -29
- data/bridge/sdk-core/tests/integ_tests/heartbeat_tests.rs +5 -2
- data/bridge/sdk-core/tests/integ_tests/metrics_tests.rs +37 -0
- data/bridge/sdk-core/tests/integ_tests/polling_tests.rs +0 -13
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +167 -13
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/modify_wf_properties.rs +53 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/replay.rs +106 -20
- data/bridge/sdk-core/tests/integ_tests/workflow_tests.rs +18 -8
- data/bridge/sdk-core/tests/main.rs +6 -4
- data/bridge/src/connection.rs +81 -62
- data/bridge/src/lib.rs +92 -33
- data/bridge/src/runtime.rs +9 -2
- data/bridge/src/worker.rs +53 -2
- data/lib/bridge.so +0 -0
- data/lib/gen/temporal/api/batch/v1/message_pb.rb +8 -6
- data/lib/gen/temporal/api/command/v1/message_pb.rb +17 -9
- data/lib/gen/temporal/api/common/v1/message_pb.rb +1 -1
- data/lib/gen/temporal/api/enums/v1/batch_operation_pb.rb +2 -1
- data/lib/gen/temporal/api/enums/v1/command_type_pb.rb +3 -1
- data/lib/gen/temporal/api/enums/v1/common_pb.rb +2 -1
- data/lib/gen/temporal/api/enums/v1/event_type_pb.rb +3 -2
- data/lib/gen/temporal/api/enums/v1/failed_cause_pb.rb +7 -1
- data/lib/gen/temporal/api/enums/v1/interaction_type_pb.rb +25 -0
- data/lib/gen/temporal/api/enums/v1/namespace_pb.rb +1 -1
- data/lib/gen/temporal/api/enums/v1/query_pb.rb +1 -1
- data/lib/gen/temporal/api/enums/v1/reset_pb.rb +1 -1
- data/lib/gen/temporal/api/enums/v1/schedule_pb.rb +1 -1
- data/lib/gen/temporal/api/enums/v1/task_queue_pb.rb +1 -1
- data/lib/gen/temporal/api/enums/v1/update_pb.rb +1 -6
- data/lib/gen/temporal/api/enums/v1/workflow_pb.rb +1 -1
- data/lib/gen/temporal/api/errordetails/v1/message_pb.rb +1 -1
- data/lib/gen/temporal/api/failure/v1/message_pb.rb +1 -1
- data/lib/gen/temporal/api/filter/v1/message_pb.rb +1 -1
- data/lib/gen/temporal/api/history/v1/message_pb.rb +19 -18
- data/lib/gen/temporal/api/interaction/v1/message_pb.rb +49 -0
- data/lib/gen/temporal/api/namespace/v1/message_pb.rb +1 -1
- data/lib/gen/temporal/api/operatorservice/v1/request_response_pb.rb +11 -51
- data/lib/gen/temporal/api/operatorservice/v1/service_pb.rb +1 -1
- data/lib/gen/temporal/api/query/v1/message_pb.rb +1 -1
- data/lib/gen/temporal/api/replication/v1/message_pb.rb +1 -1
- data/lib/gen/temporal/api/schedule/v1/message_pb.rb +22 -1
- data/lib/gen/temporal/api/taskqueue/v1/message_pb.rb +2 -2
- data/lib/gen/temporal/api/version/v1/message_pb.rb +1 -1
- data/lib/gen/temporal/api/workflow/v1/message_pb.rb +2 -1
- data/lib/gen/temporal/api/workflowservice/v1/request_response_pb.rb +27 -10
- data/lib/gen/temporal/api/workflowservice/v1/service_pb.rb +1 -1
- data/lib/gen/temporal/sdk/core/workflow_activation/workflow_activation_pb.rb +1 -0
- data/lib/gen/temporal/sdk/core/workflow_commands/workflow_commands_pb.rb +5 -1
- data/lib/temporalio/activity/context.rb +97 -0
- data/lib/temporalio/activity/info.rb +67 -0
- data/lib/temporalio/activity.rb +85 -0
- data/lib/temporalio/bridge/error.rb +8 -0
- data/lib/temporalio/bridge.rb +14 -0
- data/lib/{temporal → temporalio}/client/implementation.rb +49 -48
- data/lib/{temporal → temporalio}/client/workflow_handle.rb +35 -35
- data/lib/{temporal → temporalio}/client.rb +19 -32
- data/lib/{temporal → temporalio}/connection.rb +238 -223
- data/lib/{temporal → temporalio}/data_converter.rb +76 -35
- data/lib/{temporal → temporalio}/error/failure.rb +6 -6
- data/lib/{temporal → temporalio}/error/workflow_failure.rb +4 -2
- data/lib/{temporal → temporalio}/errors.rb +19 -1
- data/lib/{temporal → temporalio}/failure_converter/base.rb +5 -5
- data/lib/{temporal → temporalio}/failure_converter/basic.rb +58 -52
- data/lib/temporalio/failure_converter.rb +7 -0
- data/lib/{temporal → temporalio}/interceptor/chain.rb +2 -1
- data/lib/{temporal → temporalio}/interceptor/client.rb +22 -1
- data/lib/{temporal → temporalio}/payload_codec/base.rb +5 -5
- data/lib/{temporal → temporalio}/payload_converter/base.rb +3 -3
- data/lib/{temporal → temporalio}/payload_converter/bytes.rb +4 -3
- data/lib/{temporal → temporalio}/payload_converter/composite.rb +7 -5
- data/lib/{temporal → temporalio}/payload_converter/encoding_base.rb +4 -4
- data/lib/{temporal → temporalio}/payload_converter/json.rb +4 -3
- data/lib/{temporal → temporalio}/payload_converter/nil.rb +4 -3
- data/lib/temporalio/payload_converter.rb +14 -0
- data/lib/{temporal → temporalio}/retry_policy.rb +4 -4
- data/lib/{temporal → temporalio}/retry_state.rb +1 -1
- data/lib/temporalio/runtime.rb +25 -0
- data/lib/{temporal → temporalio}/timeout_type.rb +2 -2
- data/lib/temporalio/version.rb +3 -0
- data/lib/temporalio/worker/activity_runner.rb +92 -0
- data/lib/temporalio/worker/activity_worker.rb +138 -0
- data/lib/temporalio/worker/reactor.rb +46 -0
- data/lib/temporalio/worker/runner.rb +63 -0
- data/lib/temporalio/worker/sync_worker.rb +88 -0
- data/lib/temporalio/worker/thread_pool_executor.rb +51 -0
- data/lib/temporalio/worker.rb +198 -0
- data/lib/{temporal → temporalio}/workflow/execution_info.rb +4 -4
- data/lib/{temporal → temporalio}/workflow/execution_status.rb +1 -1
- data/lib/{temporal → temporalio}/workflow/id_reuse_policy.rb +6 -6
- data/lib/{temporal → temporalio}/workflow/query_reject_condition.rb +5 -5
- data/lib/temporalio.rb +12 -3
- data/temporalio.gemspec +7 -3
- metadata +79 -56
- data/bridge/sdk-core/bridge-ffi/Cargo.toml +0 -24
- data/bridge/sdk-core/bridge-ffi/LICENSE.txt +0 -23
- data/bridge/sdk-core/bridge-ffi/build.rs +0 -25
- data/bridge/sdk-core/bridge-ffi/include/sdk-core-bridge.h +0 -249
- data/bridge/sdk-core/bridge-ffi/src/lib.rs +0 -825
- data/bridge/sdk-core/bridge-ffi/src/wrappers.rs +0 -211
- data/bridge/sdk-core/core/src/log_export.rs +0 -62
- data/bridge/sdk-core/core/src/worker/workflow/machines/mutable_side_effect_state_machine.rs +0 -127
- data/bridge/sdk-core/core/src/worker/workflow/machines/side_effect_state_machine.rs +0 -71
- data/bridge/sdk-core/protos/api_upstream/temporal/api/cluster/v1/message.proto +0 -83
- data/bridge/sdk-core/protos/local/temporal/sdk/core/bridge/bridge.proto +0 -210
- data/bridge/sdk-core/sdk/src/conversions.rs +0 -8
- data/lib/gen/temporal/api/cluster/v1/message_pb.rb +0 -67
- data/lib/gen/temporal/api/enums/v1/cluster_pb.rb +0 -26
- data/lib/gen/temporal/api/update/v1/message_pb.rb +0 -26
- data/lib/temporal/bridge.rb +0 -14
- data/lib/temporal/failure_converter.rb +0 -8
- data/lib/temporal/payload_converter.rb +0 -14
- data/lib/temporal/runtime.rb +0 -22
- data/lib/temporal/version.rb +0 -3
- data/lib/temporal.rb +0 -8
@@ -10,6 +10,7 @@ use crate::{
|
|
10
10
|
ActivityHeartbeat, Worker, WorkerConfigBuilder,
|
11
11
|
};
|
12
12
|
use futures::FutureExt;
|
13
|
+
use itertools::Itertools;
|
13
14
|
use std::{
|
14
15
|
cell::RefCell,
|
15
16
|
collections::{hash_map::Entry, HashMap, VecDeque},
|
@@ -23,7 +24,6 @@ use std::{
|
|
23
24
|
use temporal_client::WorkflowOptions;
|
24
25
|
use temporal_sdk::{ActivityOptions, WfContext};
|
25
26
|
use temporal_sdk_core_api::{errors::CompleteActivityError, Worker as WorkerTrait};
|
26
|
-
use temporal_sdk_core_protos::temporal::api::command::v1::ScheduleActivityTaskCommandAttributes;
|
27
27
|
use temporal_sdk_core_protos::{
|
28
28
|
coresdk::{
|
29
29
|
activity_result::{
|
@@ -40,7 +40,7 @@ use temporal_sdk_core_protos::{
|
|
40
40
|
ActivityTaskCompletion,
|
41
41
|
},
|
42
42
|
temporal::api::{
|
43
|
-
command::v1::command::Attributes,
|
43
|
+
command::v1::{command::Attributes, ScheduleActivityTaskCommandAttributes},
|
44
44
|
enums::v1::EventType,
|
45
45
|
workflowservice::v1::{
|
46
46
|
PollActivityTaskQueueResponse, RecordActivityTaskHeartbeatResponse,
|
@@ -437,7 +437,7 @@ async fn many_concurrent_heartbeat_cancels() {
|
|
437
437
|
#[tokio::test]
|
438
438
|
async fn activity_timeout_no_double_resolve() {
|
439
439
|
let t = canned_histories::activity_double_resolve_repro();
|
440
|
-
let core = build_fake_worker("fake_wf_id", t,
|
440
|
+
let core = build_fake_worker("fake_wf_id", t, [3]);
|
441
441
|
let activity_id = 1;
|
442
442
|
|
443
443
|
poll_and_reply(
|
@@ -613,24 +613,105 @@ async fn max_tq_acts_set_passed_to_poll_properly() {
|
|
613
613
|
worker.poll_activity_task().await.unwrap();
|
614
614
|
}
|
615
615
|
|
616
|
+
/// This test doesn't test the real worker config since [mock_worker] bypasses the worker
|
617
|
+
/// constructor, [mock_worker] will not pass an activity poller to the worker when
|
618
|
+
/// `no_remote_activities` is set to `true`.
|
619
|
+
#[tokio::test]
|
620
|
+
async fn no_eager_activities_requested_when_worker_options_disable_remote_activities() {
|
621
|
+
let wfid = "fake_wf_id";
|
622
|
+
let mut t = TestHistoryBuilder::default();
|
623
|
+
t.add_by_type(EventType::WorkflowExecutionStarted);
|
624
|
+
t.add_full_wf_task();
|
625
|
+
let scheduled_event_id = t.add_activity_task_scheduled("act_id");
|
626
|
+
let started_event_id = t.add_activity_task_started(scheduled_event_id);
|
627
|
+
t.add_activity_task_completed(scheduled_event_id, started_event_id, b"hi".into());
|
628
|
+
t.add_full_wf_task();
|
629
|
+
t.add_workflow_execution_completed();
|
630
|
+
let num_eager_requested = Arc::new(AtomicUsize::new(0));
|
631
|
+
// Clone it to move into the callback below
|
632
|
+
let num_eager_requested_clone = num_eager_requested.clone();
|
633
|
+
|
634
|
+
let mut mock = mock_workflow_client();
|
635
|
+
mock.expect_complete_workflow_task()
|
636
|
+
.times(1)
|
637
|
+
.returning(move |req| {
|
638
|
+
// Store the number of eager activities requested to be checked below
|
639
|
+
let count = req
|
640
|
+
.commands
|
641
|
+
.into_iter()
|
642
|
+
.filter(|c| match c.attributes {
|
643
|
+
Some(Attributes::ScheduleActivityTaskCommandAttributes(
|
644
|
+
ScheduleActivityTaskCommandAttributes {
|
645
|
+
request_eager_execution,
|
646
|
+
..
|
647
|
+
},
|
648
|
+
)) => request_eager_execution,
|
649
|
+
_ => false,
|
650
|
+
})
|
651
|
+
.count();
|
652
|
+
num_eager_requested_clone.store(count, Ordering::Relaxed);
|
653
|
+
Ok(RespondWorkflowTaskCompletedResponse {
|
654
|
+
workflow_task: None,
|
655
|
+
activity_tasks: vec![],
|
656
|
+
reset_history_event_id: 0,
|
657
|
+
})
|
658
|
+
});
|
659
|
+
let mut mock = single_hist_mock_sg(wfid, t, [1], mock, true);
|
660
|
+
let mut mock_poller = mock_manual_poller();
|
661
|
+
mock_poller
|
662
|
+
.expect_poll()
|
663
|
+
.returning(|| futures::future::pending().boxed());
|
664
|
+
mock.set_act_poller(Box::new(mock_poller));
|
665
|
+
mock.worker_cfg(|wc| {
|
666
|
+
wc.max_cached_workflows = 2;
|
667
|
+
wc.no_remote_activities = true;
|
668
|
+
});
|
669
|
+
let core = mock_worker(mock);
|
670
|
+
|
671
|
+
// Test start
|
672
|
+
let wf_task = core.poll_workflow_activation().await.unwrap();
|
673
|
+
let cmds = vec![ScheduleActivity {
|
674
|
+
seq: 1,
|
675
|
+
activity_id: "act_id".to_string(),
|
676
|
+
task_queue: TEST_Q.to_string(),
|
677
|
+
cancellation_type: ActivityCancellationType::TryCancel as i32,
|
678
|
+
..Default::default()
|
679
|
+
}
|
680
|
+
.into()];
|
681
|
+
|
682
|
+
core.complete_workflow_activation(WorkflowActivationCompletion::from_cmds(
|
683
|
+
wf_task.run_id,
|
684
|
+
cmds,
|
685
|
+
))
|
686
|
+
.await
|
687
|
+
.unwrap();
|
688
|
+
|
689
|
+
core.shutdown().await;
|
690
|
+
|
691
|
+
assert_eq!(num_eager_requested.load(Ordering::Relaxed), 0);
|
692
|
+
}
|
693
|
+
|
616
694
|
/// This test verifies that activity tasks which come as replies to completing a WFT are properly
|
617
695
|
/// delivered via polling.
|
618
696
|
#[tokio::test]
|
619
697
|
async fn activity_tasks_from_completion_are_delivered() {
|
698
|
+
// Construct the history - one task with 5 activities, 4 on the same task queue, and 1 on a
|
699
|
+
// different queue, 3 activities will be executed eagerly as specified by the
|
700
|
+
// MAX_EAGER_ACTIVITY_RESERVATIONS_PER_WORKFLOW_TASK constant.
|
620
701
|
let wfid = "fake_wf_id";
|
621
702
|
let mut t = TestHistoryBuilder::default();
|
622
703
|
t.add_by_type(EventType::WorkflowExecutionStarted);
|
623
704
|
t.add_full_wf_task();
|
624
|
-
let
|
625
|
-
|
626
|
-
|
627
|
-
t.
|
628
|
-
|
629
|
-
|
630
|
-
|
631
|
-
|
705
|
+
let act_same_queue_scheduled_ids = (1..4)
|
706
|
+
.map(|i| t.add_activity_task_scheduled(format!("act_id_{}_same_queue", i)))
|
707
|
+
.collect_vec();
|
708
|
+
t.add_activity_task_scheduled("act_id_same_queue_not_eager");
|
709
|
+
t.add_activity_task_scheduled("act_id_different_queue");
|
710
|
+
for scheduled_event_id in act_same_queue_scheduled_ids {
|
711
|
+
let started_event_id = t.add_activity_task_started(scheduled_event_id);
|
712
|
+
t.add_activity_task_completed(scheduled_event_id, started_event_id, b"hi".into());
|
713
|
+
}
|
632
714
|
t.add_full_wf_task();
|
633
|
-
t.add_activity_task_cancel_requested(act_different_queue_sched_id);
|
634
715
|
t.add_workflow_execution_completed();
|
635
716
|
|
636
717
|
let num_eager_requested = Arc::new(AtomicUsize::new(0));
|
@@ -658,15 +739,18 @@ async fn activity_tasks_from_completion_are_delivered() {
|
|
658
739
|
num_eager_requested_clone.store(count, Ordering::Relaxed);
|
659
740
|
Ok(RespondWorkflowTaskCompletedResponse {
|
660
741
|
workflow_task: None,
|
661
|
-
activity_tasks:
|
662
|
-
|
663
|
-
|
664
|
-
|
665
|
-
|
742
|
+
activity_tasks: (1..4)
|
743
|
+
.map(|i| PollActivityTaskQueueResponse {
|
744
|
+
task_token: vec![i],
|
745
|
+
activity_id: format!("act_id_{}_same_queue", i),
|
746
|
+
..Default::default()
|
747
|
+
})
|
748
|
+
.collect_vec(),
|
749
|
+
reset_history_event_id: 0,
|
666
750
|
})
|
667
751
|
});
|
668
752
|
mock.expect_complete_activity_task()
|
669
|
-
.times(
|
753
|
+
.times(3)
|
670
754
|
.returning(|_, _| Ok(RespondActivityTaskCompletedResponse::default()));
|
671
755
|
let mut mock = single_hist_mock_sg(wfid, t, [1], mock, true);
|
672
756
|
let mut mock_poller = mock_manual_poller();
|
@@ -677,46 +761,65 @@ async fn activity_tasks_from_completion_are_delivered() {
|
|
677
761
|
mock.worker_cfg(|wc| wc.max_cached_workflows = 2);
|
678
762
|
let core = mock_worker(mock);
|
679
763
|
|
764
|
+
// Test start
|
680
765
|
let wf_task = core.poll_workflow_activation().await.unwrap();
|
681
|
-
|
682
|
-
|
683
|
-
vec![
|
766
|
+
let mut cmds = (1..4)
|
767
|
+
.map(|seq| {
|
684
768
|
ScheduleActivity {
|
685
|
-
seq
|
686
|
-
activity_id: "
|
769
|
+
seq,
|
770
|
+
activity_id: format!("act_id_{}_same_queue", seq),
|
687
771
|
task_queue: TEST_Q.to_string(),
|
688
772
|
cancellation_type: ActivityCancellationType::TryCancel as i32,
|
689
773
|
..Default::default()
|
690
774
|
}
|
691
|
-
.into()
|
692
|
-
|
693
|
-
|
694
|
-
|
695
|
-
|
696
|
-
|
697
|
-
|
698
|
-
|
699
|
-
|
700
|
-
|
775
|
+
.into()
|
776
|
+
})
|
777
|
+
.collect_vec();
|
778
|
+
cmds.push(
|
779
|
+
ScheduleActivity {
|
780
|
+
seq: 4,
|
781
|
+
activity_id: "act_id_same_queue_not_eager".to_string(),
|
782
|
+
task_queue: TEST_Q.to_string(),
|
783
|
+
cancellation_type: ActivityCancellationType::TryCancel as i32,
|
784
|
+
..Default::default()
|
785
|
+
}
|
786
|
+
.into(),
|
787
|
+
);
|
788
|
+
cmds.push(
|
789
|
+
ScheduleActivity {
|
790
|
+
seq: 5,
|
791
|
+
activity_id: "act_id_different_queue".to_string(),
|
792
|
+
task_queue: "different_queue".to_string(),
|
793
|
+
cancellation_type: ActivityCancellationType::Abandon as i32,
|
794
|
+
..Default::default()
|
795
|
+
}
|
796
|
+
.into(),
|
797
|
+
);
|
798
|
+
|
799
|
+
core.complete_workflow_activation(WorkflowActivationCompletion::from_cmds(
|
800
|
+
wf_task.run_id,
|
801
|
+
cmds,
|
701
802
|
))
|
702
803
|
.await
|
703
804
|
.unwrap();
|
704
805
|
|
705
|
-
// We should see the
|
706
|
-
|
707
|
-
|
806
|
+
// We should see the 3 eager activities when we poll now
|
807
|
+
for i in 1..4 {
|
808
|
+
let act_task = core.poll_activity_task().await.unwrap();
|
809
|
+
assert_eq!(act_task.task_token, vec![i]);
|
708
810
|
|
709
|
-
|
710
|
-
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
|
811
|
+
core.complete_activity_task(ActivityTaskCompletion {
|
812
|
+
task_token: act_task.task_token.clone(),
|
813
|
+
result: Some(ActivityExecutionResult::ok("hi".into())),
|
814
|
+
})
|
815
|
+
.await
|
816
|
+
.unwrap();
|
817
|
+
}
|
715
818
|
|
716
819
|
core.shutdown().await;
|
717
820
|
|
718
821
|
// Verify only a single eager activity was scheduled (the one on our worker's task queue)
|
719
|
-
assert_eq!(num_eager_requested.load(Ordering::Relaxed),
|
822
|
+
assert_eq!(num_eager_requested.load(Ordering::Relaxed), 3);
|
720
823
|
}
|
721
824
|
|
722
825
|
#[tokio::test]
|