@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.
- 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 +1 -1
- package/sdk-core/client/src/callback_based.rs +123 -0
- package/sdk-core/client/src/lib.rs +96 -28
- package/sdk-core/client/src/metrics.rs +33 -5
- package/sdk-core/client/src/raw.rs +40 -1
- package/sdk-core/client/src/retry.rs +12 -3
- package/sdk-core/core/src/lib.rs +4 -2
- package/sdk-core/core/src/pollers/poll_buffer.rs +62 -14
- package/sdk-core/core/src/worker/client.rs +9 -5
- package/sdk-core/core/src/worker/heartbeat.rs +3 -1
- package/sdk-core/core-api/src/worker.rs +2 -2
- package/sdk-core/core-c-bridge/Cargo.toml +2 -0
- package/sdk-core/core-c-bridge/include/temporal-sdk-core-c-bridge.h +105 -0
- package/sdk-core/core-c-bridge/src/client.rs +265 -8
- package/sdk-core/core-c-bridge/src/tests/context.rs +11 -0
- package/sdk-core/core-c-bridge/src/tests/mod.rs +179 -3
- package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/CODEOWNERS +1 -1
- package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/README.md +1 -1
- package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/VERSION +1 -1
- package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/buf.yaml +1 -0
- package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/temporal/api/cloud/cloudservice/v1/request_response.proto +83 -0
- package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/temporal/api/cloud/cloudservice/v1/service.proto +37 -0
- package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/temporal/api/cloud/connectivityrule/v1/message.proto +64 -0
- package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/temporal/api/cloud/identity/v1/message.proto +3 -1
- package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/temporal/api/cloud/namespace/v1/message.proto +10 -0
- package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/temporal/api/cloud/operation/v1/message.proto +1 -0
- package/sdk-core/sdk-core-protos/protos/api_upstream/openapi/openapiv2.json +644 -9
- package/sdk-core/sdk-core-protos/protos/api_upstream/openapi/openapiv3.yaml +635 -21
- package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/batch/v1/message.proto +60 -2
- package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/common/v1/message.proto +84 -15
- package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/enums/v1/batch_operation.proto +3 -0
- package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/enums/v1/task_queue.proto +11 -0
- package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/history/v1/message.proto +5 -0
- package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/sdk/v1/task_complete_metadata.proto +1 -1
- package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/sdk/v1/worker_config.proto +36 -0
- package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +29 -0
- package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/worker/v1/message.proto +11 -1
- package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +122 -4
- package/sdk-core/sdk-core-protos/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +41 -0
- package/sdk-core/sdk-core-protos/src/lib.rs +5 -1
- package/sdk-core/test-utils/Cargo.toml +1 -0
- package/sdk-core/test-utils/src/lib.rs +90 -3
- package/sdk-core/tests/cloud_tests.rs +11 -74
- package/sdk-core/tests/integ_tests/client_tests.rs +14 -10
- package/sdk-core/tests/integ_tests/worker_tests.rs +8 -2
- package/sdk-core/tests/integ_tests/workflow_tests/activities.rs +13 -0
- package/sdk-core/tests/integ_tests/workflow_tests/priority.rs +2 -108
- package/sdk-core/tests/main.rs +3 -0
- package/sdk-core/tests/shared_tests/mod.rs +43 -0
- package/sdk-core/tests/shared_tests/priority.rs +155 -0
- 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
|
}
|