@temporalio/core-bridge 0.17.2 → 0.18.0

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 (170) hide show
  1. package/Cargo.lock +339 -226
  2. package/Cargo.toml +7 -3
  3. package/common.js +50 -0
  4. package/index.d.ts +7 -0
  5. package/index.js +12 -0
  6. package/package.json +7 -4
  7. package/releases/aarch64-apple-darwin/index.node +0 -0
  8. package/releases/aarch64-unknown-linux-gnu/index.node +0 -0
  9. package/{index.node → releases/index.node} +0 -0
  10. package/releases/x86_64-apple-darwin/index.node +0 -0
  11. package/releases/x86_64-pc-windows-msvc/index.node +0 -0
  12. package/releases/x86_64-unknown-linux-gnu/index.node +0 -0
  13. package/scripts/build.js +10 -50
  14. package/sdk-core/.buildkite/docker/Dockerfile +1 -1
  15. package/sdk-core/.buildkite/docker/docker-compose.yaml +2 -2
  16. package/sdk-core/.buildkite/pipeline.yml +2 -0
  17. package/sdk-core/Cargo.toml +1 -88
  18. package/sdk-core/README.md +30 -6
  19. package/sdk-core/bridge-ffi/Cargo.toml +24 -0
  20. package/sdk-core/bridge-ffi/LICENSE.txt +23 -0
  21. package/sdk-core/bridge-ffi/build.rs +25 -0
  22. package/sdk-core/bridge-ffi/include/sdk-core-bridge.h +216 -0
  23. package/sdk-core/bridge-ffi/src/lib.rs +829 -0
  24. package/sdk-core/bridge-ffi/src/wrappers.rs +193 -0
  25. package/sdk-core/client/Cargo.toml +32 -0
  26. package/sdk-core/{src/pollers/gateway.rs → client/src/lib.rs} +101 -195
  27. package/sdk-core/client/src/metrics.rs +89 -0
  28. package/sdk-core/client/src/mocks.rs +167 -0
  29. package/sdk-core/{src/pollers → client/src}/retry.rs +172 -14
  30. package/sdk-core/core/Cargo.toml +96 -0
  31. package/sdk-core/{src → core/src}/core_tests/activity_tasks.rs +193 -37
  32. package/sdk-core/{src → core/src}/core_tests/child_workflows.rs +14 -14
  33. package/sdk-core/{src → core/src}/core_tests/determinism.rs +8 -8
  34. package/sdk-core/core/src/core_tests/local_activities.rs +328 -0
  35. package/sdk-core/{src → core/src}/core_tests/mod.rs +6 -9
  36. package/sdk-core/{src → core/src}/core_tests/queries.rs +45 -52
  37. package/sdk-core/{src → core/src}/core_tests/replay_flag.rs +8 -12
  38. package/sdk-core/{src → core/src}/core_tests/workers.rs +120 -33
  39. package/sdk-core/{src → core/src}/core_tests/workflow_cancels.rs +16 -26
  40. package/sdk-core/{src → core/src}/core_tests/workflow_tasks.rs +264 -286
  41. package/sdk-core/core/src/lib.rs +374 -0
  42. package/sdk-core/{src → core/src}/log_export.rs +3 -27
  43. package/sdk-core/core/src/pending_activations.rs +162 -0
  44. package/sdk-core/{src → core/src}/pollers/mod.rs +4 -22
  45. package/sdk-core/{src → core/src}/pollers/poll_buffer.rs +1 -1
  46. package/sdk-core/core/src/protosext/mod.rs +396 -0
  47. package/sdk-core/core/src/replay/mod.rs +210 -0
  48. package/sdk-core/core/src/retry_logic.rs +144 -0
  49. package/sdk-core/{src → core/src}/telemetry/metrics.rs +3 -58
  50. package/sdk-core/{src → core/src}/telemetry/mod.rs +8 -8
  51. package/sdk-core/{src → core/src}/telemetry/prometheus_server.rs +0 -0
  52. package/sdk-core/{src → core/src}/test_help/mod.rs +34 -73
  53. package/sdk-core/{src → core/src}/worker/activities/activity_heartbeat_manager.rs +95 -42
  54. package/sdk-core/core/src/worker/activities/local_activities.rs +973 -0
  55. package/sdk-core/{src → core/src}/worker/activities.rs +52 -33
  56. package/sdk-core/{src → core/src}/worker/dispatcher.rs +8 -6
  57. package/sdk-core/{src → core/src}/worker/mod.rs +305 -195
  58. package/sdk-core/core/src/worker/wft_delivery.rs +81 -0
  59. package/sdk-core/{src → core/src}/workflow/bridge.rs +5 -2
  60. package/sdk-core/{src → core/src}/workflow/driven_workflow.rs +17 -7
  61. package/sdk-core/{src → core/src}/workflow/history_update.rs +33 -7
  62. package/sdk-core/{src → core/src/workflow}/machines/activity_state_machine.rs +26 -26
  63. package/sdk-core/{src → core/src/workflow}/machines/cancel_external_state_machine.rs +8 -11
  64. package/sdk-core/{src → core/src/workflow}/machines/cancel_workflow_state_machine.rs +19 -21
  65. package/sdk-core/{src → core/src/workflow}/machines/child_workflow_state_machine.rs +19 -21
  66. package/sdk-core/{src → core/src/workflow}/machines/complete_workflow_state_machine.rs +3 -5
  67. package/sdk-core/{src → core/src/workflow}/machines/continue_as_new_workflow_state_machine.rs +18 -18
  68. package/sdk-core/{src → core/src/workflow}/machines/fail_workflow_state_machine.rs +5 -6
  69. package/sdk-core/core/src/workflow/machines/local_activity_state_machine.rs +1451 -0
  70. package/sdk-core/{src → core/src/workflow}/machines/mod.rs +54 -107
  71. package/sdk-core/{src → core/src/workflow}/machines/mutable_side_effect_state_machine.rs +0 -0
  72. package/sdk-core/{src → core/src/workflow}/machines/patch_state_machine.rs +29 -30
  73. package/sdk-core/{src → core/src/workflow}/machines/side_effect_state_machine.rs +0 -0
  74. package/sdk-core/{src → core/src/workflow}/machines/signal_external_state_machine.rs +17 -19
  75. package/sdk-core/{src → core/src/workflow}/machines/timer_state_machine.rs +20 -21
  76. package/sdk-core/{src → core/src/workflow}/machines/transition_coverage.rs +5 -2
  77. package/sdk-core/{src → core/src/workflow}/machines/upsert_search_attributes_state_machine.rs +0 -0
  78. package/sdk-core/core/src/workflow/machines/workflow_machines/local_acts.rs +96 -0
  79. package/sdk-core/{src → core/src/workflow}/machines/workflow_machines.rs +344 -160
  80. package/sdk-core/{src → core/src/workflow}/machines/workflow_task_state_machine.rs +1 -1
  81. package/sdk-core/{src → core/src}/workflow/mod.rs +200 -39
  82. package/sdk-core/{src → core/src}/workflow/workflow_tasks/cache_manager.rs +0 -0
  83. package/sdk-core/{src → core/src}/workflow/workflow_tasks/concurrency_manager.rs +38 -5
  84. package/sdk-core/{src → core/src}/workflow/workflow_tasks/mod.rs +297 -81
  85. package/sdk-core/{test_utils → core-api}/Cargo.toml +10 -7
  86. package/sdk-core/{src → core-api/src}/errors.rs +42 -90
  87. package/sdk-core/core-api/src/lib.rs +158 -0
  88. package/sdk-core/{src/worker/config.rs → core-api/src/worker.rs} +18 -23
  89. package/sdk-core/etc/deps.svg +156 -0
  90. package/sdk-core/fsm/rustfsm_procmacro/src/lib.rs +5 -5
  91. package/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.stderr +3 -5
  92. package/sdk-core/fsm/rustfsm_trait/src/lib.rs +7 -1
  93. package/sdk-core/histories/fail_wf_task.bin +0 -0
  94. package/sdk-core/histories/timer_workflow_history.bin +0 -0
  95. package/sdk-core/protos/api_upstream/temporal/api/command/v1/message.proto +44 -13
  96. package/sdk-core/protos/api_upstream/temporal/api/common/v1/message.proto +19 -1
  97. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/common.proto +1 -1
  98. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +9 -0
  99. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/namespace.proto +1 -0
  100. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/reset.proto +1 -0
  101. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/task_queue.proto +13 -0
  102. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/workflow.proto +14 -7
  103. package/sdk-core/protos/api_upstream/temporal/api/history/v1/message.proto +176 -18
  104. package/sdk-core/protos/api_upstream/temporal/api/namespace/v1/message.proto +6 -0
  105. package/sdk-core/protos/api_upstream/temporal/api/query/v1/message.proto +11 -0
  106. package/sdk-core/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +3 -0
  107. package/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +156 -7
  108. package/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +135 -104
  109. package/sdk-core/protos/local/temporal/sdk/core/activity_result/activity_result.proto +78 -0
  110. package/sdk-core/protos/local/temporal/sdk/core/activity_task/activity_task.proto +78 -0
  111. package/sdk-core/protos/local/temporal/sdk/core/bridge/bridge.proto +205 -0
  112. package/sdk-core/protos/local/temporal/sdk/core/bridge/service.proto +61 -0
  113. package/sdk-core/protos/local/{child_workflow.proto → temporal/sdk/core/child_workflow/child_workflow.proto} +1 -1
  114. package/sdk-core/protos/local/{common.proto → temporal/sdk/core/common/common.proto} +5 -3
  115. package/sdk-core/protos/local/{core_interface.proto → temporal/sdk/core/core_interface.proto} +10 -10
  116. package/sdk-core/protos/local/temporal/sdk/core/external_data/external_data.proto +30 -0
  117. package/sdk-core/protos/local/{workflow_activation.proto → temporal/sdk/core/workflow_activation/workflow_activation.proto} +35 -11
  118. package/sdk-core/protos/local/{workflow_commands.proto → temporal/sdk/core/workflow_commands/workflow_commands.proto} +55 -4
  119. package/sdk-core/protos/local/{workflow_completion.proto → temporal/sdk/core/workflow_completion/workflow_completion.proto} +3 -3
  120. package/sdk-core/sdk/Cargo.toml +32 -0
  121. package/sdk-core/{src/prototype_rust_sdk → sdk/src}/conversions.rs +0 -0
  122. package/sdk-core/sdk/src/lib.rs +699 -0
  123. package/sdk-core/sdk/src/payload_converter.rs +11 -0
  124. package/sdk-core/sdk/src/workflow_context/options.rs +180 -0
  125. package/sdk-core/{src/prototype_rust_sdk → sdk/src}/workflow_context.rs +201 -124
  126. package/sdk-core/{src/prototype_rust_sdk → sdk/src}/workflow_future.rs +63 -30
  127. package/sdk-core/sdk-core-protos/Cargo.toml +10 -0
  128. package/sdk-core/sdk-core-protos/build.rs +28 -6
  129. package/sdk-core/sdk-core-protos/src/constants.rs +7 -0
  130. package/sdk-core/{src/test_help → sdk-core-protos/src}/history_builder.rs +134 -49
  131. package/sdk-core/sdk-core-protos/src/history_info.rs +216 -0
  132. package/sdk-core/sdk-core-protos/src/lib.rs +594 -168
  133. package/sdk-core/sdk-core-protos/src/task_token.rs +38 -0
  134. package/sdk-core/sdk-core-protos/src/utilities.rs +14 -0
  135. package/sdk-core/test-utils/Cargo.toml +32 -0
  136. package/sdk-core/{src/test_help → test-utils/src}/canned_histories.rs +59 -78
  137. package/sdk-core/test-utils/src/histfetch.rs +28 -0
  138. package/sdk-core/{test_utils → test-utils}/src/lib.rs +131 -68
  139. package/sdk-core/tests/integ_tests/client_tests.rs +1 -1
  140. package/sdk-core/tests/integ_tests/heartbeat_tests.rs +11 -7
  141. package/sdk-core/tests/integ_tests/polling_tests.rs +12 -11
  142. package/sdk-core/tests/integ_tests/queries_tests.rs +82 -78
  143. package/sdk-core/tests/integ_tests/workflow_tests/activities.rs +91 -71
  144. package/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +3 -4
  145. package/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +2 -4
  146. package/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +4 -6
  147. package/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +4 -6
  148. package/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +3 -4
  149. package/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +496 -0
  150. package/sdk-core/tests/integ_tests/workflow_tests/patches.rs +5 -8
  151. package/sdk-core/tests/integ_tests/workflow_tests/replay.rs +125 -0
  152. package/sdk-core/tests/integ_tests/workflow_tests/signals.rs +7 -13
  153. package/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +33 -5
  154. package/sdk-core/tests/integ_tests/workflow_tests/timers.rs +12 -16
  155. package/sdk-core/tests/integ_tests/workflow_tests.rs +85 -82
  156. package/sdk-core/tests/load_tests.rs +6 -6
  157. package/sdk-core/tests/main.rs +2 -2
  158. package/src/conversions.rs +24 -21
  159. package/src/errors.rs +8 -0
  160. package/src/lib.rs +323 -211
  161. package/sdk-core/protos/local/activity_result.proto +0 -46
  162. package/sdk-core/protos/local/activity_task.proto +0 -66
  163. package/sdk-core/src/core_tests/retry.rs +0 -147
  164. package/sdk-core/src/lib.rs +0 -403
  165. package/sdk-core/src/machines/local_activity_state_machine.rs +0 -117
  166. package/sdk-core/src/pending_activations.rs +0 -249
  167. package/sdk-core/src/protosext/mod.rs +0 -160
  168. package/sdk-core/src/prototype_rust_sdk.rs +0 -412
  169. package/sdk-core/src/task_token.rs +0 -20
  170. package/sdk-core/src/test_help/history_info.rs +0 -158
@@ -1,15 +1,17 @@
1
1
  use assert_matches::assert_matches;
2
2
  use futures::future::join_all;
3
3
  use std::time::Duration;
4
- use temporal_sdk_core::prototype_rust_sdk::{WfContext, WorkflowResult};
4
+ use temporal_sdk::{WfContext, WorkflowResult};
5
5
  use temporal_sdk_core_protos::coresdk::{
6
6
  activity_task::activity_task as act_task,
7
- workflow_activation::{wf_activation_job, FireTimer, WfActivationJob},
7
+ workflow_activation::{workflow_activation_job, FireTimer, WorkflowActivationJob},
8
8
  workflow_commands::{ActivityCancellationType, RequestCancelActivity, StartTimer},
9
- workflow_completion::WfActivationCompletion,
9
+ workflow_completion::WorkflowActivationCompletion,
10
10
  IntoCompletion,
11
11
  };
12
- use test_utils::{init_core_and_create_wf, schedule_activity_cmd, CoreTestHelpers, CoreWfStarter};
12
+ use temporal_sdk_core_test_utils::{
13
+ init_core_and_create_wf, schedule_activity_cmd, CoreTestHelpers, CoreWfStarter,
14
+ };
13
15
  use tokio::time::timeout;
14
16
 
15
17
  #[tokio::test]
@@ -52,8 +54,8 @@ async fn out_of_order_completion_doesnt_hang() {
52
54
  assert_matches!(
53
55
  task.jobs.as_slice(),
54
56
  [
55
- WfActivationJob {
56
- variant: Some(wf_activation_job::Variant::FireTimer(
57
+ WorkflowActivationJob {
58
+ variant: Some(workflow_activation_job::Variant::FireTimer(
57
59
  FireTimer { seq: t_seq }
58
60
  )),
59
61
  },
@@ -73,8 +75,8 @@ async fn out_of_order_completion_doesnt_hang() {
73
75
  .unwrap();
74
76
  assert_matches!(
75
77
  task.jobs.as_slice(),
76
- [WfActivationJob {
77
- variant: Some(wf_activation_job::Variant::ResolveActivity(_)),
78
+ [WorkflowActivationJob {
79
+ variant: Some(workflow_activation_job::Variant::ResolveActivity(_)),
78
80
  }]
79
81
  );
80
82
  cc.complete_execution(&tq, &task.run_id).await;
@@ -83,7 +85,7 @@ async fn out_of_order_completion_doesnt_hang() {
83
85
  tokio::time::sleep(Duration::from_millis(100)).await;
84
86
  // Then complete the (last) WFT with a request to cancel the AT, which should produce a
85
87
  // pending activation, unblocking the (already started) poll
86
- core.complete_workflow_activation(WfActivationCompletion::from_cmds(
88
+ core.complete_workflow_activation(WorkflowActivationCompletion::from_cmds(
87
89
  &task_q,
88
90
  task.run_id,
89
91
  vec![RequestCancelActivity { seq: 0 }.into()],
@@ -94,7 +96,7 @@ async fn out_of_order_completion_doesnt_hang() {
94
96
  jh.await.unwrap();
95
97
  }
96
98
 
97
- pub async fn many_parallel_timers_longhist(mut ctx: WfContext) -> WorkflowResult<()> {
99
+ pub async fn many_parallel_timers_longhist(ctx: WfContext) -> WorkflowResult<()> {
98
100
  for _ in 0..20 {
99
101
  let mut futs = vec![];
100
102
  for _ in 0..1000 {
@@ -122,5 +124,4 @@ async fn can_paginate_long_history() {
122
124
  .await
123
125
  .unwrap();
124
126
  worker.run_until_done().await.unwrap();
125
- starter.shutdown().await;
126
127
  }
@@ -3,21 +3,21 @@ use futures::{prelude::stream::FuturesUnordered, FutureExt, StreamExt};
3
3
  use std::time::Duration;
4
4
  use temporal_sdk_core_protos::{
5
5
  coresdk::{
6
- workflow_activation::{wf_activation_job, WfActivationJob},
6
+ workflow_activation::{workflow_activation_job, WorkflowActivationJob},
7
7
  workflow_commands::{QueryResult, QuerySuccess, StartTimer},
8
- workflow_completion::WfActivationCompletion,
8
+ workflow_completion::WorkflowActivationCompletion,
9
9
  },
10
10
  temporal::api::{failure::v1::Failure, query::v1::WorkflowQuery},
11
11
  };
12
- use test_utils::{init_core_and_create_wf, with_gw, CoreTestHelpers, CoreWfStarter, GwApi};
12
+ use temporal_sdk_core_test_utils::{init_core_and_create_wf, CoreTestHelpers, CoreWfStarter};
13
13
 
14
14
  #[tokio::test]
15
15
  async fn simple_query_legacy() {
16
- let workflow_id = "simple_query";
17
16
  let query_resp = b"response";
18
- let (core, task_q) = init_core_and_create_wf(workflow_id).await;
17
+ let (core, task_q) = init_core_and_create_wf("simple_query_legacy").await;
18
+ let workflow_id = task_q.clone();
19
19
  let task = core.poll_workflow_activation(&task_q).await.unwrap();
20
- core.complete_workflow_activation(WfActivationCompletion::from_cmds(
20
+ core.complete_workflow_activation(WorkflowActivationCompletion::from_cmds(
21
21
  &task_q,
22
22
  task.run_id.clone(),
23
23
  vec![
@@ -37,18 +37,20 @@ async fn simple_query_legacy() {
37
37
  .unwrap();
38
38
  tokio::time::sleep(Duration::from_secs(1)).await;
39
39
  // Query after timer should have fired and there should be new WFT
40
- let query_fut = with_gw(core.as_ref(), |gw: GwApi| async move {
41
- gw.query_workflow_execution(
42
- workflow_id.to_string(),
43
- task.run_id.to_string(),
44
- WorkflowQuery {
45
- query_type: "myquery".to_string(),
46
- query_args: Some(b"hi".into()),
47
- },
48
- )
49
- .await
50
- .unwrap()
51
- });
40
+ let query_fut = async {
41
+ core.server_gateway()
42
+ .query_workflow_execution(
43
+ workflow_id,
44
+ task.run_id.to_string(),
45
+ WorkflowQuery {
46
+ query_type: "myquery".to_string(),
47
+ query_args: Some(b"hi".into()),
48
+ header: None,
49
+ },
50
+ )
51
+ .await
52
+ .unwrap()
53
+ };
52
54
  let workflow_completions_future = async {
53
55
  // Give query a beat to get going
54
56
  tokio::time::sleep(Duration::from_millis(400)).await;
@@ -57,11 +59,11 @@ async fn simple_query_legacy() {
57
59
  let task = core.poll_workflow_activation(&task_q).await.unwrap();
58
60
  assert_matches!(
59
61
  task.jobs.as_slice(),
60
- [WfActivationJob {
61
- variant: Some(wf_activation_job::Variant::FireTimer(_)),
62
+ [WorkflowActivationJob {
63
+ variant: Some(workflow_activation_job::Variant::FireTimer(_)),
62
64
  }]
63
65
  );
64
- core.complete_workflow_activation(WfActivationCompletion::from_cmds(
66
+ core.complete_workflow_activation(WorkflowActivationCompletion::from_cmds(
65
67
  &task_q,
66
68
  task.run_id,
67
69
  vec![],
@@ -72,12 +74,12 @@ async fn simple_query_legacy() {
72
74
  // Poll again, and we end up getting a `query` field query response
73
75
  let query = assert_matches!(
74
76
  task.jobs.as_slice(),
75
- [WfActivationJob {
76
- variant: Some(wf_activation_job::Variant::QueryWorkflow(q)),
77
+ [WorkflowActivationJob {
78
+ variant: Some(workflow_activation_job::Variant::QueryWorkflow(q)),
77
79
  }] => q
78
80
  );
79
81
  // Complete the query
80
- core.complete_workflow_activation(WfActivationCompletion::from_cmd(
82
+ core.complete_workflow_activation(WorkflowActivationCompletion::from_cmd(
81
83
  &task_q,
82
84
  task.run_id,
83
85
  QueryResult {
@@ -107,9 +109,10 @@ async fn simple_query_legacy() {
107
109
  #[case::with_eviction(true)]
108
110
  #[tokio::test]
109
111
  async fn query_after_execution_complete(#[case] do_evict: bool) {
110
- let workflow_id = &format!("after_done_query_evict-{}", do_evict);
111
112
  let query_resp = b"response";
112
- let (ref core, ref task_q) = init_core_and_create_wf(workflow_id).await;
113
+ let (ref core, ref task_q) =
114
+ init_core_and_create_wf(&format!("after_done_query_evict-{}", do_evict)).await;
115
+ let workflow_id = task_q.as_str();
113
116
 
114
117
  let do_workflow = |go_until_query: bool| async move {
115
118
  loop {
@@ -117,11 +120,11 @@ async fn query_after_execution_complete(#[case] do_evict: bool) {
117
120
 
118
121
  // When we see the query, handle it.
119
122
  if go_until_query {
120
- if let [WfActivationJob {
121
- variant: Some(wf_activation_job::Variant::QueryWorkflow(query)),
123
+ if let [WorkflowActivationJob {
124
+ variant: Some(workflow_activation_job::Variant::QueryWorkflow(query)),
122
125
  }] = task.jobs.as_slice()
123
126
  {
124
- core.complete_workflow_activation(WfActivationCompletion::from_cmd(
127
+ core.complete_workflow_activation(WorkflowActivationCompletion::from_cmd(
125
128
  task_q,
126
129
  task.run_id,
127
130
  QueryResult {
@@ -143,11 +146,11 @@ async fn query_after_execution_complete(#[case] do_evict: bool) {
143
146
 
144
147
  if matches!(
145
148
  task.jobs.as_slice(),
146
- [WfActivationJob {
147
- variant: Some(wf_activation_job::Variant::RemoveFromCache(_)),
149
+ [WorkflowActivationJob {
150
+ variant: Some(workflow_activation_job::Variant::RemoveFromCache(_)),
148
151
  }]
149
152
  ) {
150
- core.complete_workflow_activation(WfActivationCompletion::empty(
153
+ core.complete_workflow_activation(WorkflowActivationCompletion::empty(
151
154
  task_q,
152
155
  task.run_id,
153
156
  ))
@@ -157,8 +160,8 @@ async fn query_after_execution_complete(#[case] do_evict: bool) {
157
160
  }
158
161
  assert_matches!(
159
162
  task.jobs.as_slice(),
160
- [WfActivationJob {
161
- variant: Some(wf_activation_job::Variant::StartWorkflow(_)),
163
+ [WorkflowActivationJob {
164
+ variant: Some(workflow_activation_job::Variant::StartWorkflow(_)),
162
165
  }]
163
166
  );
164
167
  let run_id = task.run_id.clone();
@@ -191,6 +194,7 @@ async fn query_after_execution_complete(#[case] do_evict: bool) {
191
194
  WorkflowQuery {
192
195
  query_type: "myquery".to_string(),
193
196
  query_args: Some(b"hi".into()),
197
+ header: None,
194
198
  },
195
199
  )
196
200
  .await
@@ -209,11 +213,9 @@ async fn query_after_execution_complete(#[case] do_evict: bool) {
209
213
  #[tokio::test]
210
214
  async fn repros_query_dropped_on_floor() {
211
215
  // This test reliably repros the server dropping one of the two simultaneously issued queries.
212
-
213
- let workflow_id = "queries_in_wf_task";
214
216
  let q1_resp = b"query_1_resp";
215
217
  let q2_resp = b"query_2_resp";
216
- let mut wf_starter = CoreWfStarter::new(workflow_id);
218
+ let mut wf_starter = CoreWfStarter::new("repros_query_dropped_on_floor");
217
219
  // Easiest way I discovered to reliably trigger new query path is with a WFT timeout
218
220
  wf_starter.wft_timeout(Duration::from_secs(1));
219
221
  let core = wf_starter.get_core().await;
@@ -228,7 +230,7 @@ async fn repros_query_dropped_on_floor() {
228
230
  let task = core.poll_workflow_activation(task_q).await.unwrap();
229
231
  tokio::time::sleep(Duration::from_secs(2)).await;
230
232
  // Complete now-timed-out task (add a new timer)
231
- core.complete_workflow_activation(WfActivationCompletion::from_cmds(
233
+ core.complete_workflow_activation(WorkflowActivationCompletion::from_cmds(
232
234
  task_q,
233
235
  task.run_id.clone(),
234
236
  vec![],
@@ -237,35 +239,35 @@ async fn repros_query_dropped_on_floor() {
237
239
  .unwrap();
238
240
 
239
241
  let run_id = task.run_id.to_string();
240
- let q1_fut = with_gw(core.as_ref(), |gw: GwApi| async move {
241
- let res = gw
242
+ let q1_fut = async {
243
+ core.server_gateway()
242
244
  .query_workflow_execution(
243
- workflow_id.to_string(),
245
+ task_q.to_string(),
244
246
  run_id,
245
247
  WorkflowQuery {
246
248
  query_type: "query_1".to_string(),
247
249
  query_args: Some(b"hi 1".into()),
250
+ header: None,
248
251
  },
249
252
  )
250
253
  .await
251
- .unwrap();
252
- res
253
- });
254
+ .unwrap()
255
+ };
254
256
  let run_id = task.run_id.to_string();
255
- let q2_fut = with_gw(core.as_ref(), |gw: GwApi| async move {
256
- let res = gw
257
+ let q2_fut = async {
258
+ core.server_gateway()
257
259
  .query_workflow_execution(
258
- workflow_id.to_string(),
260
+ task_q.to_string(),
259
261
  run_id,
260
262
  WorkflowQuery {
261
263
  query_type: "query_2".to_string(),
262
264
  query_args: Some(b"hi 2".into()),
265
+ header: None,
263
266
  },
264
267
  )
265
268
  .await
266
- .unwrap();
267
- res
268
- });
269
+ .unwrap()
270
+ };
269
271
  let workflow_completions_future = async {
270
272
  let mut seen_q1 = false;
271
273
  let mut seen_q2 = false;
@@ -274,8 +276,8 @@ async fn repros_query_dropped_on_floor() {
274
276
 
275
277
  if matches!(
276
278
  task.jobs[0],
277
- WfActivationJob {
278
- variant: Some(wf_activation_job::Variant::RemoveFromCache(_)),
279
+ WorkflowActivationJob {
280
+ variant: Some(workflow_activation_job::Variant::RemoveFromCache(_)),
279
281
  }
280
282
  ) {
281
283
  let task = core.poll_workflow_activation(task_q).await.unwrap();
@@ -286,8 +288,8 @@ async fn repros_query_dropped_on_floor() {
286
288
 
287
289
  if matches!(
288
290
  task.jobs[0],
289
- WfActivationJob {
290
- variant: Some(wf_activation_job::Variant::FireTimer(_)),
291
+ WorkflowActivationJob {
292
+ variant: Some(workflow_activation_job::Variant::FireTimer(_)),
291
293
  }
292
294
  ) {
293
295
  // If we get the timer firing after replay, be done.
@@ -297,8 +299,8 @@ async fn repros_query_dropped_on_floor() {
297
299
  // There should be a query job (really, there should be both... server only sends one?)
298
300
  let query = assert_matches!(
299
301
  task.jobs.as_slice(),
300
- [WfActivationJob {
301
- variant: Some(wf_activation_job::Variant::QueryWorkflow(q)),
302
+ [WorkflowActivationJob {
303
+ variant: Some(workflow_activation_job::Variant::QueryWorkflow(q)),
302
304
  }] => q
303
305
  );
304
306
  let resp = if query.query_type == "query_1" {
@@ -309,7 +311,7 @@ async fn repros_query_dropped_on_floor() {
309
311
  q2_resp
310
312
  };
311
313
  // Complete the query
312
- core.complete_workflow_activation(WfActivationCompletion::from_cmds(
314
+ core.complete_workflow_activation(WorkflowActivationCompletion::from_cmds(
313
315
  task_q,
314
316
  task.run_id,
315
317
  vec![QueryResult {
@@ -335,11 +337,11 @@ async fn repros_query_dropped_on_floor() {
335
337
 
336
338
  #[tokio::test]
337
339
  async fn fail_legacy_query() {
338
- let workflow_id = "fail_legacy_query";
339
340
  let query_err = "oh no broken";
340
- let (core, task_q) = init_core_and_create_wf(workflow_id).await;
341
+ let (core, task_q) = init_core_and_create_wf("fail_legacy_query").await;
342
+ let workflow_id = task_q.clone();
341
343
  let task = core.poll_workflow_activation(&task_q).await.unwrap();
342
- core.complete_workflow_activation(WfActivationCompletion::from_cmds(
344
+ core.complete_workflow_activation(WorkflowActivationCompletion::from_cmds(
343
345
  &task_q,
344
346
  task.run_id.clone(),
345
347
  vec![
@@ -359,18 +361,20 @@ async fn fail_legacy_query() {
359
361
  .unwrap();
360
362
  tokio::time::sleep(Duration::from_secs(1)).await;
361
363
  // Query after timer should have fired and there should be new WFT
362
- let query_fut = with_gw(core.as_ref(), |gw: GwApi| async move {
363
- gw.query_workflow_execution(
364
- workflow_id.to_string(),
365
- task.run_id.to_string(),
366
- WorkflowQuery {
367
- query_type: "myquery".to_string(),
368
- query_args: Some(b"hi".into()),
369
- },
370
- )
371
- .await
372
- .unwrap_err()
373
- });
364
+ let query_fut = async {
365
+ core.server_gateway()
366
+ .query_workflow_execution(
367
+ workflow_id.to_string(),
368
+ task.run_id.to_string(),
369
+ WorkflowQuery {
370
+ query_type: "myquery".to_string(),
371
+ query_args: Some(b"hi".into()),
372
+ header: None,
373
+ },
374
+ )
375
+ .await
376
+ .unwrap_err()
377
+ };
374
378
  let workflow_completions_future = async {
375
379
  // Give query a beat to get going
376
380
  tokio::time::sleep(Duration::from_millis(400)).await;
@@ -379,11 +383,11 @@ async fn fail_legacy_query() {
379
383
  let task = core.poll_workflow_activation(&task_q).await.unwrap();
380
384
  assert_matches!(
381
385
  task.jobs.as_slice(),
382
- [WfActivationJob {
383
- variant: Some(wf_activation_job::Variant::FireTimer(_)),
386
+ [WorkflowActivationJob {
387
+ variant: Some(workflow_activation_job::Variant::FireTimer(_)),
384
388
  }]
385
389
  );
386
- core.complete_workflow_activation(WfActivationCompletion::from_cmds(
390
+ core.complete_workflow_activation(WorkflowActivationCompletion::from_cmds(
387
391
  &task_q,
388
392
  task.run_id,
389
393
  vec![],
@@ -394,12 +398,12 @@ async fn fail_legacy_query() {
394
398
  // Poll again, and we end up getting a `query` field query response
395
399
  assert_matches!(
396
400
  task.jobs.as_slice(),
397
- [WfActivationJob {
398
- variant: Some(wf_activation_job::Variant::QueryWorkflow(q)),
401
+ [WorkflowActivationJob {
402
+ variant: Some(workflow_activation_job::Variant::QueryWorkflow(q)),
399
403
  }] => q
400
404
  );
401
405
  // Fail this task
402
- core.complete_workflow_activation(WfActivationCompletion::fail(
406
+ core.complete_workflow_activation(WorkflowActivationCompletion::fail(
403
407
  &task_q,
404
408
  task.run_id,
405
409
  Failure {