@temporalio/core-bridge 1.12.2 → 1.12.3

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 (57) hide show
  1. package/package.json +3 -3
  2. package/releases/aarch64-apple-darwin/index.node +0 -0
  3. package/releases/aarch64-unknown-linux-gnu/index.node +0 -0
  4. package/releases/x86_64-apple-darwin/index.node +0 -0
  5. package/releases/x86_64-pc-windows-msvc/index.node +0 -0
  6. package/releases/x86_64-unknown-linux-gnu/index.node +0 -0
  7. package/sdk-core/.cargo/config.toml +1 -1
  8. package/sdk-core/client/src/callback_based.rs +123 -0
  9. package/sdk-core/client/src/lib.rs +96 -28
  10. package/sdk-core/client/src/metrics.rs +33 -5
  11. package/sdk-core/client/src/raw.rs +40 -1
  12. package/sdk-core/client/src/retry.rs +12 -3
  13. package/sdk-core/core/src/lib.rs +4 -2
  14. package/sdk-core/core/src/pollers/poll_buffer.rs +62 -14
  15. package/sdk-core/core/src/worker/client.rs +9 -5
  16. package/sdk-core/core/src/worker/heartbeat.rs +3 -1
  17. package/sdk-core/core-api/src/worker.rs +2 -2
  18. package/sdk-core/core-c-bridge/Cargo.toml +2 -0
  19. package/sdk-core/core-c-bridge/include/temporal-sdk-core-c-bridge.h +105 -0
  20. package/sdk-core/core-c-bridge/src/client.rs +265 -8
  21. package/sdk-core/core-c-bridge/src/tests/context.rs +11 -0
  22. package/sdk-core/core-c-bridge/src/tests/mod.rs +179 -3
  23. package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/CODEOWNERS +1 -1
  24. package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/README.md +1 -1
  25. package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/VERSION +1 -1
  26. package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/buf.yaml +1 -0
  27. package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/temporal/api/cloud/cloudservice/v1/request_response.proto +83 -0
  28. package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/temporal/api/cloud/cloudservice/v1/service.proto +37 -0
  29. package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/temporal/api/cloud/connectivityrule/v1/message.proto +64 -0
  30. package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/temporal/api/cloud/identity/v1/message.proto +3 -1
  31. package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/temporal/api/cloud/namespace/v1/message.proto +10 -0
  32. package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/temporal/api/cloud/operation/v1/message.proto +1 -0
  33. package/sdk-core/sdk-core-protos/protos/api_upstream/openapi/openapiv2.json +644 -9
  34. package/sdk-core/sdk-core-protos/protos/api_upstream/openapi/openapiv3.yaml +635 -21
  35. package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/batch/v1/message.proto +60 -2
  36. package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/common/v1/message.proto +84 -15
  37. package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/enums/v1/batch_operation.proto +3 -0
  38. package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/enums/v1/task_queue.proto +11 -0
  39. package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/history/v1/message.proto +5 -0
  40. package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/sdk/v1/task_complete_metadata.proto +1 -1
  41. package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/sdk/v1/worker_config.proto +36 -0
  42. package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +29 -0
  43. package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/worker/v1/message.proto +11 -1
  44. package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +122 -4
  45. package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +41 -0
  46. package/sdk-core/sdk-core-protos/src/lib.rs +5 -1
  47. package/sdk-core/test-utils/Cargo.toml +1 -0
  48. package/sdk-core/test-utils/src/lib.rs +90 -3
  49. package/sdk-core/tests/cloud_tests.rs +11 -74
  50. package/sdk-core/tests/integ_tests/client_tests.rs +14 -10
  51. package/sdk-core/tests/integ_tests/worker_tests.rs +8 -2
  52. package/sdk-core/tests/integ_tests/workflow_tests/activities.rs +13 -0
  53. package/sdk-core/tests/integ_tests/workflow_tests/priority.rs +2 -108
  54. package/sdk-core/tests/main.rs +3 -0
  55. package/sdk-core/tests/shared_tests/mod.rs +43 -0
  56. package/sdk-core/tests/shared_tests/priority.rs +155 -0
  57. package/src/client.rs +5 -0
@@ -0,0 +1,155 @@
1
+ use std::time::Duration;
2
+ use temporal_client::{
3
+ GetWorkflowResultOpts, Priority, WfClientExt, WorkflowClientTrait, WorkflowOptions,
4
+ };
5
+ use temporal_sdk::{ActContext, ActivityOptions, ChildWorkflowOptions, WfContext};
6
+ use temporal_sdk_core_protos::{
7
+ coresdk::AsJsonPayloadExt,
8
+ temporal::api::{common, history::v1::history_event::Attributes},
9
+ };
10
+ use temporal_sdk_core_test_utils::CoreWfStarter;
11
+
12
+ pub(crate) async fn priority_values_sent_to_server() {
13
+ let mut starter = if let Some(wfs) =
14
+ CoreWfStarter::new_cloud_or_local("priority_values_sent_to_server", ">=1.29.0-139.2").await
15
+ {
16
+ wfs
17
+ } else {
18
+ return;
19
+ };
20
+ starter.workflow_options.priority = Some(Priority {
21
+ priority_key: 1,
22
+ fairness_key: "fair-wf".to_string(),
23
+ fairness_weight: 4.2,
24
+ });
25
+ let mut worker = starter.worker().await;
26
+ let child_type = "child-wf";
27
+
28
+ worker.register_wf(starter.get_task_queue(), move |ctx: WfContext| async move {
29
+ let child = ctx.child_workflow(ChildWorkflowOptions {
30
+ workflow_id: format!("{}-child", ctx.task_queue()),
31
+ workflow_type: child_type.to_owned(),
32
+ options: WorkflowOptions {
33
+ priority: Some(Priority {
34
+ priority_key: 4,
35
+ fairness_key: "fair-child".to_string(),
36
+ fairness_weight: 1.23,
37
+ }),
38
+ ..Default::default()
39
+ },
40
+ ..Default::default()
41
+ });
42
+
43
+ let started = child
44
+ .start(&ctx)
45
+ .await
46
+ .into_started()
47
+ .expect("Child should start OK");
48
+ let activity = ctx.activity(ActivityOptions {
49
+ activity_type: "echo".to_owned(),
50
+ input: "hello".as_json_payload().unwrap(),
51
+ start_to_close_timeout: Some(Duration::from_secs(5)),
52
+ priority: Some(Priority {
53
+ priority_key: 5,
54
+ fairness_key: "fair-act".to_string(),
55
+ fairness_weight: 1.1,
56
+ }),
57
+ // Currently no priority info attached to eagerly run activities
58
+ do_not_eagerly_execute: true,
59
+ ..Default::default()
60
+ });
61
+ started.result().await;
62
+ activity.await.unwrap_ok_payload();
63
+ Ok(().into())
64
+ });
65
+ worker.register_wf(child_type.to_owned(), |ctx: WfContext| async move {
66
+ assert_eq!(
67
+ ctx.workflow_initial_info().priority,
68
+ Some(common::v1::Priority {
69
+ priority_key: 4,
70
+ fairness_key: "fair-child".to_string(),
71
+ fairness_weight: 1.23
72
+ })
73
+ );
74
+ Ok(().into())
75
+ });
76
+ worker.register_activity("echo", |ctx: ActContext, echo_me: String| async move {
77
+ assert_eq!(
78
+ ctx.get_info().priority,
79
+ Priority {
80
+ priority_key: 5,
81
+ fairness_key: "fair-act".to_string(),
82
+ fairness_weight: 1.1
83
+ }
84
+ );
85
+ Ok(echo_me)
86
+ });
87
+
88
+ starter
89
+ .start_with_worker(starter.get_task_queue(), &mut worker)
90
+ .await;
91
+ worker.run_until_done().await.unwrap();
92
+
93
+ let client = starter.get_client().await;
94
+ let handle = client.get_untyped_workflow_handle(starter.get_task_queue(), "");
95
+ let res = handle
96
+ .get_workflow_result(GetWorkflowResultOpts::default())
97
+ .await
98
+ .unwrap();
99
+ // Expect workflow success
100
+ res.unwrap_success();
101
+ let history = client
102
+ .get_workflow_execution_history(starter.get_task_queue().to_owned(), None, vec![])
103
+ .await
104
+ .unwrap()
105
+ .history
106
+ .unwrap();
107
+ let workflow_init_event = history
108
+ .events
109
+ .iter()
110
+ .find_map(|e| {
111
+ if let Attributes::WorkflowExecutionStartedEventAttributes(e) =
112
+ e.attributes.as_ref().unwrap()
113
+ {
114
+ Some(e)
115
+ } else {
116
+ None
117
+ }
118
+ })
119
+ .unwrap();
120
+ assert_eq!(
121
+ workflow_init_event.priority.as_ref().unwrap().priority_key,
122
+ 1
123
+ );
124
+ let child_init_event = history
125
+ .events
126
+ .iter()
127
+ .find_map(|e| {
128
+ if let Attributes::StartChildWorkflowExecutionInitiatedEventAttributes(e) =
129
+ e.attributes.as_ref().unwrap()
130
+ {
131
+ Some(e)
132
+ } else {
133
+ None
134
+ }
135
+ })
136
+ .unwrap();
137
+ assert_eq!(child_init_event.priority.as_ref().unwrap().priority_key, 4);
138
+ let activity_sched_event = history
139
+ .events
140
+ .iter()
141
+ .find_map(|e| {
142
+ if let Attributes::ActivityTaskScheduledEventAttributes(e) =
143
+ e.attributes.as_ref().unwrap()
144
+ {
145
+ Some(e)
146
+ } else {
147
+ None
148
+ }
149
+ })
150
+ .unwrap();
151
+ assert_eq!(
152
+ activity_sched_event.priority.as_ref().unwrap().priority_key,
153
+ 5
154
+ );
155
+ }
package/src/client.rs CHANGED
@@ -220,6 +220,7 @@ async fn client_invoke(mut retry_client: CoreClient, call: RpcCall) -> BridgeRes
220
220
  rpc_call!(retry_client, call, describe_workflow_rule)
221
221
  }
222
222
  "ExecuteMultiOperation" => rpc_call!(retry_client, call, execute_multi_operation),
223
+ "FetchWorkerConfig" => rpc_call!(retry_client, call, fetch_worker_config),
223
224
  "GetClusterInfo" => rpc_call!(retry_client, call, get_cluster_info),
224
225
  "GetCurrentDeployment" => rpc_call!(retry_client, call, get_current_deployment),
225
226
  "GetDeploymentReachability" => {
@@ -399,6 +400,7 @@ async fn client_invoke(mut retry_client: CoreClient, call: RpcCall) -> BridgeRes
399
400
  rpc_call!(retry_client, call, update_namespace)
400
401
  }
401
402
  "UpdateSchedule" => rpc_call!(retry_client, call, update_schedule),
403
+ "UpdateWorkerConfig" => rpc_call!(retry_client, call, update_worker_config),
402
404
  "UpdateWorkerDeploymentVersionMetadata" => {
403
405
  rpc_call!(
404
406
  retry_client,
@@ -406,6 +408,9 @@ async fn client_invoke(mut retry_client: CoreClient, call: RpcCall) -> BridgeRes
406
408
  update_worker_deployment_version_metadata
407
409
  )
408
410
  }
411
+ "UpdateTaskQueueConfig" => {
412
+ rpc_call!(retry_client, call, update_task_queue_config)
413
+ }
409
414
  "UpdateWorkflowExecution" => {
410
415
  rpc_call!(retry_client, call, update_workflow_execution)
411
416
  }