@temporalio/core-bridge 1.4.4 → 1.5.1

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 (123) hide show
  1. package/Cargo.lock +327 -419
  2. package/Cargo.toml +1 -1
  3. package/index.js +25 -2
  4. package/lib/errors.d.ts +22 -0
  5. package/lib/errors.js +65 -0
  6. package/lib/errors.js.map +1 -0
  7. package/lib/index.d.ts +440 -0
  8. package/lib/index.js +8 -0
  9. package/lib/index.js.map +1 -0
  10. package/package.json +11 -5
  11. package/releases/aarch64-apple-darwin/index.node +0 -0
  12. package/releases/aarch64-unknown-linux-gnu/index.node +0 -0
  13. package/releases/x86_64-apple-darwin/index.node +0 -0
  14. package/releases/x86_64-pc-windows-msvc/index.node +0 -0
  15. package/releases/x86_64-unknown-linux-gnu/index.node +0 -0
  16. package/sdk-core/.buildkite/docker/Dockerfile +1 -1
  17. package/sdk-core/.buildkite/docker/docker-compose.yaml +2 -2
  18. package/sdk-core/bridge-ffi/Cargo.toml +1 -1
  19. package/sdk-core/bridge-ffi/include/sdk-core-bridge.h +0 -25
  20. package/sdk-core/bridge-ffi/src/lib.rs +29 -108
  21. package/sdk-core/bridge-ffi/src/wrappers.rs +35 -25
  22. package/sdk-core/client/Cargo.toml +1 -1
  23. package/sdk-core/client/src/lib.rs +12 -20
  24. package/sdk-core/client/src/raw.rs +9 -8
  25. package/sdk-core/client/src/retry.rs +100 -23
  26. package/sdk-core/core/Cargo.toml +5 -5
  27. package/sdk-core/core/benches/workflow_replay.rs +13 -10
  28. package/sdk-core/core/src/abstractions.rs +22 -22
  29. package/sdk-core/core/src/core_tests/activity_tasks.rs +1 -1
  30. package/sdk-core/core/src/core_tests/local_activities.rs +228 -6
  31. package/sdk-core/core/src/core_tests/queries.rs +247 -89
  32. package/sdk-core/core/src/core_tests/workers.rs +2 -2
  33. package/sdk-core/core/src/core_tests/workflow_cancels.rs +1 -1
  34. package/sdk-core/core/src/core_tests/workflow_tasks.rs +46 -27
  35. package/sdk-core/core/src/lib.rs +139 -32
  36. package/sdk-core/core/src/replay/mod.rs +185 -41
  37. package/sdk-core/core/src/telemetry/log_export.rs +190 -0
  38. package/sdk-core/core/src/telemetry/metrics.rs +184 -139
  39. package/sdk-core/core/src/telemetry/mod.rs +296 -318
  40. package/sdk-core/core/src/telemetry/prometheus_server.rs +4 -3
  41. package/sdk-core/core/src/test_help/mod.rs +9 -7
  42. package/sdk-core/core/src/worker/activities/local_activities.rs +2 -1
  43. package/sdk-core/core/src/worker/activities.rs +40 -23
  44. package/sdk-core/core/src/worker/client/mocks.rs +1 -1
  45. package/sdk-core/core/src/worker/client.rs +30 -4
  46. package/sdk-core/core/src/worker/mod.rs +22 -18
  47. package/sdk-core/core/src/worker/workflow/driven_workflow.rs +10 -19
  48. package/sdk-core/core/src/worker/workflow/history_update.rs +99 -25
  49. package/sdk-core/core/src/worker/workflow/machines/activity_state_machine.rs +1 -5
  50. package/sdk-core/core/src/worker/workflow/machines/cancel_external_state_machine.rs +1 -5
  51. package/sdk-core/core/src/worker/workflow/machines/cancel_workflow_state_machine.rs +1 -5
  52. package/sdk-core/core/src/worker/workflow/machines/child_workflow_state_machine.rs +1 -5
  53. package/sdk-core/core/src/worker/workflow/machines/complete_workflow_state_machine.rs +1 -5
  54. package/sdk-core/core/src/worker/workflow/machines/continue_as_new_workflow_state_machine.rs +2 -6
  55. package/sdk-core/core/src/worker/workflow/machines/fail_workflow_state_machine.rs +1 -5
  56. package/sdk-core/core/src/worker/workflow/machines/local_activity_state_machine.rs +18 -21
  57. package/sdk-core/core/src/worker/workflow/machines/mod.rs +12 -38
  58. package/sdk-core/core/src/worker/workflow/machines/modify_workflow_properties_state_machine.rs +178 -0
  59. package/sdk-core/core/src/worker/workflow/machines/patch_state_machine.rs +1 -5
  60. package/sdk-core/core/src/worker/workflow/machines/signal_external_state_machine.rs +1 -5
  61. package/sdk-core/core/src/worker/workflow/machines/timer_state_machine.rs +1 -5
  62. package/sdk-core/core/src/worker/workflow/machines/transition_coverage.rs +8 -2
  63. package/sdk-core/core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +1 -5
  64. package/sdk-core/core/src/worker/workflow/machines/workflow_machines.rs +232 -216
  65. package/sdk-core/core/src/worker/workflow/machines/workflow_task_state_machine.rs +1 -6
  66. package/sdk-core/core/src/worker/workflow/managed_run/managed_wf_test.rs +4 -4
  67. package/sdk-core/core/src/worker/workflow/managed_run.rs +13 -5
  68. package/sdk-core/core/src/worker/workflow/mod.rs +61 -9
  69. package/sdk-core/core/src/worker/workflow/wft_poller.rs +2 -2
  70. package/sdk-core/core/src/worker/workflow/workflow_stream.rs +56 -11
  71. package/sdk-core/core-api/Cargo.toml +4 -3
  72. package/sdk-core/core-api/src/lib.rs +1 -43
  73. package/sdk-core/core-api/src/telemetry.rs +147 -0
  74. package/sdk-core/core-api/src/worker.rs +13 -0
  75. package/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.stderr +1 -1
  76. package/sdk-core/histories/evict_while_la_running_no_interference-23_history.bin +0 -0
  77. package/sdk-core/histories/evict_while_la_running_no_interference-85_history.bin +0 -0
  78. package/sdk-core/protos/api_upstream/.github/CODEOWNERS +1 -1
  79. package/sdk-core/protos/api_upstream/buf.yaml +0 -3
  80. package/sdk-core/protos/api_upstream/temporal/api/batch/v1/message.proto +3 -7
  81. package/sdk-core/protos/api_upstream/temporal/api/command/v1/message.proto +8 -0
  82. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/command_type.proto +1 -2
  83. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/event_type.proto +2 -0
  84. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +3 -0
  85. package/sdk-core/protos/api_upstream/temporal/api/history/v1/message.proto +13 -0
  86. package/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/request_response.proto +19 -59
  87. package/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/service.proto +0 -19
  88. package/sdk-core/protos/api_upstream/temporal/api/schedule/v1/message.proto +108 -29
  89. package/sdk-core/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +2 -2
  90. package/sdk-core/protos/api_upstream/temporal/api/workflow/v1/message.proto +1 -0
  91. package/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +47 -8
  92. package/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +15 -1
  93. package/sdk-core/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +2 -0
  94. package/sdk-core/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +8 -1
  95. package/sdk-core/sdk/src/interceptors.rs +36 -3
  96. package/sdk-core/sdk/src/lib.rs +7 -4
  97. package/sdk-core/sdk/src/workflow_context.rs +13 -2
  98. package/sdk-core/sdk-core-protos/src/history_builder.rs +47 -1
  99. package/sdk-core/sdk-core-protos/src/history_info.rs +22 -22
  100. package/sdk-core/sdk-core-protos/src/lib.rs +49 -27
  101. package/sdk-core/test-utils/Cargo.toml +1 -0
  102. package/sdk-core/test-utils/src/lib.rs +81 -29
  103. package/sdk-core/tests/integ_tests/metrics_tests.rs +37 -0
  104. package/sdk-core/tests/integ_tests/polling_tests.rs +0 -13
  105. package/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +145 -4
  106. package/sdk-core/tests/integ_tests/workflow_tests/modify_wf_properties.rs +53 -0
  107. package/sdk-core/tests/integ_tests/workflow_tests/replay.rs +106 -20
  108. package/sdk-core/tests/integ_tests/workflow_tests.rs +18 -8
  109. package/sdk-core/tests/main.rs +6 -4
  110. package/src/conversions.rs +52 -47
  111. package/src/errors.rs +28 -86
  112. package/src/helpers.rs +3 -4
  113. package/src/lib.rs +2 -2
  114. package/src/runtime.rs +132 -61
  115. package/src/testing.rs +7 -4
  116. package/src/worker.rs +67 -50
  117. package/ts/errors.ts +55 -0
  118. package/{index.d.ts → ts/index.ts} +121 -15
  119. package/sdk-core/core/src/log_export.rs +0 -62
  120. package/sdk-core/core/src/worker/workflow/machines/mutable_side_effect_state_machine.rs +0 -127
  121. package/sdk-core/core/src/worker/workflow/machines/side_effect_state_machine.rs +0 -71
  122. package/sdk-core/protos/api_upstream/temporal/api/cluster/v1/message.proto +0 -83
  123. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/cluster.proto +0 -40
@@ -0,0 +1,178 @@
1
+ use super::{
2
+ workflow_machines::{MachineResponse, WFMachinesError},
3
+ NewMachineWithCommand,
4
+ };
5
+ use crate::worker::workflow::machines::{Cancellable, EventInfo, WFMachinesAdapter};
6
+ use rustfsm::{fsm, TransitionResult};
7
+ use temporal_sdk_core_protos::{
8
+ coresdk::workflow_commands::ModifyWorkflowProperties,
9
+ temporal::api::{
10
+ command::v1::Command,
11
+ enums::v1::{CommandType, EventType},
12
+ history::v1::HistoryEvent,
13
+ },
14
+ };
15
+
16
+ fsm! {
17
+ pub(super) name ModifyWorkflowPropertiesMachine;
18
+ command ModifyWorkflowPropertiesMachineCommand;
19
+ error WFMachinesError;
20
+ shared_state SharedState;
21
+
22
+ Created --(CommandScheduled) --> CommandIssued;
23
+ CommandIssued --(CommandRecorded) --> Done;
24
+ }
25
+
26
+ /// Instantiates an ModifyWorkflowPropertiesMachine and packs it together with the command to
27
+ /// be sent to server.
28
+ pub(super) fn modify_workflow_properties(
29
+ lang_cmd: ModifyWorkflowProperties,
30
+ ) -> NewMachineWithCommand {
31
+ let sm = ModifyWorkflowPropertiesMachine {
32
+ state: Created {}.into(),
33
+ shared_state: (),
34
+ };
35
+ let cmd = Command {
36
+ command_type: CommandType::ModifyWorkflowProperties as i32,
37
+ attributes: Some(lang_cmd.into()),
38
+ };
39
+ NewMachineWithCommand {
40
+ command: cmd,
41
+ machine: sm.into(),
42
+ }
43
+ }
44
+
45
+ type SharedState = ();
46
+
47
+ #[derive(Debug, derive_more::Display)]
48
+ pub(super) enum ModifyWorkflowPropertiesMachineCommand {}
49
+
50
+ #[derive(Debug, Default, Clone, derive_more::Display)]
51
+ pub(super) struct Created {}
52
+
53
+ #[derive(Debug, Default, Clone, derive_more::Display)]
54
+ pub(super) struct CommandIssued {}
55
+
56
+ #[derive(Debug, Default, Clone, derive_more::Display)]
57
+ pub(super) struct Done {}
58
+
59
+ impl WFMachinesAdapter for ModifyWorkflowPropertiesMachine {
60
+ fn adapt_response(
61
+ &self,
62
+ _my_command: Self::Command,
63
+ _event_info: Option<EventInfo>,
64
+ ) -> Result<Vec<MachineResponse>, Self::Error> {
65
+ Err(Self::Error::Nondeterminism(
66
+ "ModifyWorkflowProperties does not use state machine commands".to_string(),
67
+ ))
68
+ }
69
+
70
+ fn matches_event(&self, event: &HistoryEvent) -> bool {
71
+ matches!(event.event_type(), EventType::WorkflowPropertiesModified)
72
+ }
73
+ }
74
+
75
+ impl Cancellable for ModifyWorkflowPropertiesMachine {}
76
+
77
+ impl TryFrom<HistoryEvent> for ModifyWorkflowPropertiesMachineEvents {
78
+ type Error = WFMachinesError;
79
+
80
+ fn try_from(e: HistoryEvent) -> Result<Self, Self::Error> {
81
+ match e.event_type() {
82
+ EventType::WorkflowPropertiesModified => {
83
+ Ok(ModifyWorkflowPropertiesMachineEvents::CommandRecorded)
84
+ }
85
+ _ => Err(Self::Error::Nondeterminism(format!(
86
+ "ModifyWorkflowPropertiesMachine does not handle {e}"
87
+ ))),
88
+ }
89
+ }
90
+ }
91
+
92
+ impl TryFrom<CommandType> for ModifyWorkflowPropertiesMachineEvents {
93
+ type Error = WFMachinesError;
94
+
95
+ fn try_from(c: CommandType) -> Result<Self, Self::Error> {
96
+ match c {
97
+ CommandType::ModifyWorkflowProperties => {
98
+ Ok(ModifyWorkflowPropertiesMachineEvents::CommandScheduled)
99
+ }
100
+ _ => Err(Self::Error::Nondeterminism(format!(
101
+ "ModifyWorkflowPropertiesMachine does not handle command type {c:?}"
102
+ ))),
103
+ }
104
+ }
105
+ }
106
+
107
+ impl From<CommandIssued> for Done {
108
+ fn from(_: CommandIssued) -> Self {
109
+ Self {}
110
+ }
111
+ }
112
+
113
+ impl From<Created> for CommandIssued {
114
+ fn from(_: Created) -> Self {
115
+ Self {}
116
+ }
117
+ }
118
+
119
+ #[cfg(test)]
120
+ mod tests {
121
+ use super::*;
122
+ use crate::{replay::TestHistoryBuilder, worker::workflow::ManagedWFFunc};
123
+ use temporal_sdk::{WfContext, WorkflowFunction};
124
+ use temporal_sdk_core_protos::temporal::api::{
125
+ command::v1::command::Attributes, common::v1::Payload,
126
+ };
127
+
128
+ #[tokio::test]
129
+ async fn workflow_modify_props() {
130
+ let mut t = TestHistoryBuilder::default();
131
+ t.add_by_type(EventType::WorkflowExecutionStarted);
132
+ t.add_full_wf_task();
133
+ t.add_workflow_execution_completed();
134
+
135
+ let (k1, k2) = ("foo", "bar");
136
+
137
+ let wff = WorkflowFunction::new(move |ctx: WfContext| async move {
138
+ ctx.upsert_memo([
139
+ (
140
+ String::from(k1),
141
+ Payload {
142
+ data: vec![0x01],
143
+ ..Default::default()
144
+ },
145
+ ),
146
+ (
147
+ String::from(k2),
148
+ Payload {
149
+ data: vec![0x02],
150
+ ..Default::default()
151
+ },
152
+ ),
153
+ ]);
154
+ Ok(().into())
155
+ });
156
+ let mut wfm = ManagedWFFunc::new(t, wff, vec![]);
157
+
158
+ wfm.get_next_activation().await.unwrap();
159
+ let commands = wfm.get_server_commands().commands;
160
+ assert!(!commands.is_empty());
161
+ let cmd = commands[0].clone();
162
+ assert_eq!(
163
+ cmd.command_type,
164
+ CommandType::ModifyWorkflowProperties as i32
165
+ );
166
+ assert_matches!(
167
+ cmd.attributes.unwrap(),
168
+ Attributes::ModifyWorkflowPropertiesCommandAttributes(msg) => {
169
+ let fields = &msg.upserted_memo.unwrap().fields;
170
+ let payload1 = fields.get(k1).unwrap();
171
+ let payload2 = fields.get(k2).unwrap();
172
+ assert_eq!(payload1.data[0], 0x01);
173
+ assert_eq!(payload2.data[0], 0x02);
174
+ assert_eq!(fields.len(), 2);
175
+ });
176
+ wfm.shutdown().await.unwrap();
177
+ }
178
+ }
@@ -18,7 +18,7 @@
18
18
  //! | replaying, no marker | deprecate_patch | Call allowed |
19
19
 
20
20
  use super::{
21
- workflow_machines::MachineResponse, Cancellable, EventInfo, MachineKind, NewMachineWithCommand,
21
+ workflow_machines::MachineResponse, Cancellable, EventInfo, NewMachineWithCommand,
22
22
  OnEventWrapper, WFMachinesAdapter, WFMachinesError,
23
23
  };
24
24
  use crate::protosext::HistoryEventExt;
@@ -186,10 +186,6 @@ impl WFMachinesAdapter for PatchMachine {
186
186
  fn matches_event(&self, event: &HistoryEvent) -> bool {
187
187
  event.get_patch_marker_details().is_some()
188
188
  }
189
-
190
- fn kind(&self) -> MachineKind {
191
- MachineKind::Patch
192
- }
193
189
  }
194
190
 
195
191
  impl Cancellable for PatchMachine {}
@@ -1,5 +1,5 @@
1
1
  use super::{
2
- workflow_machines::MachineResponse, Cancellable, EventInfo, MachineKind, NewMachineWithCommand,
2
+ workflow_machines::MachineResponse, Cancellable, EventInfo, NewMachineWithCommand,
3
3
  OnEventWrapper, WFMachinesAdapter, WFMachinesError,
4
4
  };
5
5
  use rustfsm::{fsm, MachineError, TransitionResult};
@@ -268,10 +268,6 @@ impl WFMachinesAdapter for SignalExternalMachine {
268
268
  | EventType::SignalExternalWorkflowExecutionFailed
269
269
  )
270
270
  }
271
-
272
- fn kind(&self) -> MachineKind {
273
- MachineKind::SignalExternalWorkflow
274
- }
275
271
  }
276
272
 
277
273
  impl Cancellable for SignalExternalMachine {
@@ -2,7 +2,7 @@
2
2
 
3
3
  use super::{
4
4
  workflow_machines::{MachineResponse, WFMachinesError},
5
- Cancellable, EventInfo, MachineKind, NewMachineWithCommand, OnEventWrapper, WFMachinesAdapter,
5
+ Cancellable, EventInfo, NewMachineWithCommand, OnEventWrapper, WFMachinesAdapter,
6
6
  };
7
7
  use rustfsm::{fsm, MachineError, StateMachine, TransitionResult};
8
8
  use std::convert::TryFrom;
@@ -246,10 +246,6 @@ impl WFMachinesAdapter for TimerMachine {
246
246
  EventType::TimerStarted | EventType::TimerCanceled | EventType::TimerFired
247
247
  )
248
248
  }
249
-
250
- fn kind(&self) -> MachineKind {
251
- MachineKind::Timer
252
- }
253
249
  }
254
250
 
255
251
  impl Cancellable for TimerMachine {
@@ -75,8 +75,10 @@ mod machine_coverage_report {
75
75
  complete_workflow_state_machine::CompleteWorkflowMachine,
76
76
  continue_as_new_workflow_state_machine::ContinueAsNewWorkflowMachine,
77
77
  fail_workflow_state_machine::FailWorkflowMachine,
78
- local_activity_state_machine::LocalActivityMachine, patch_state_machine::PatchMachine,
79
- signal_external_state_machine::SignalExternalMachine, timer_state_machine::TimerMachine,
78
+ local_activity_state_machine::LocalActivityMachine,
79
+ modify_workflow_properties_state_machine::ModifyWorkflowPropertiesMachine,
80
+ patch_state_machine::PatchMachine, signal_external_state_machine::SignalExternalMachine,
81
+ timer_state_machine::TimerMachine,
80
82
  upsert_search_attributes_state_machine::UpsertSearchAttributesMachine,
81
83
  workflow_task_state_machine::WorkflowTaskMachine,
82
84
  };
@@ -115,6 +117,7 @@ mod machine_coverage_report {
115
117
  let mut cancel_ext = CancelExternalMachine::visualizer().to_owned();
116
118
  let mut la_mach = LocalActivityMachine::visualizer().to_owned();
117
119
  let mut upsert_search_attr = UpsertSearchAttributesMachine::visualizer().to_owned();
120
+ let mut modify_wf_props = ModifyWorkflowPropertiesMachine::visualizer().to_owned();
118
121
 
119
122
  // This isn't at all efficient but doesn't need to be.
120
123
  // Replace transitions in the vizzes with green color if they are covered.
@@ -138,6 +141,9 @@ mod machine_coverage_report {
138
141
  m @ "UpsertSearchAttributesMachine" => {
139
142
  cover_transitions(m, &mut upsert_search_attr, coverage)
140
143
  }
144
+ m @ "ModifyWorkflowPropertiesMachine" => {
145
+ cover_transitions(m, &mut modify_wf_props, coverage)
146
+ }
141
147
  m => panic!("Unknown machine {}", m),
142
148
  }
143
149
  }
@@ -2,7 +2,7 @@ use super::{
2
2
  workflow_machines::{MachineResponse, WFMachinesError},
3
3
  NewMachineWithCommand,
4
4
  };
5
- use crate::worker::workflow::machines::{Cancellable, EventInfo, MachineKind, WFMachinesAdapter};
5
+ use crate::worker::workflow::machines::{Cancellable, EventInfo, WFMachinesAdapter};
6
6
  use rustfsm::{fsm, TransitionResult};
7
7
  use temporal_sdk_core_protos::{
8
8
  coresdk::workflow_commands::UpsertWorkflowSearchAttributes,
@@ -102,10 +102,6 @@ impl WFMachinesAdapter for UpsertSearchAttributesMachine {
102
102
  EventType::UpsertWorkflowSearchAttributes
103
103
  )
104
104
  }
105
-
106
- fn kind(&self) -> MachineKind {
107
- MachineKind::UpsertSearchAttributes
108
- }
109
105
  }
110
106
 
111
107
  impl Cancellable for UpsertSearchAttributesMachine {}