@temporalio/core-bridge 1.15.0 → 1.16.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 (209) hide show
  1. package/Cargo.lock +172 -70
  2. package/lib/native.d.ts +1 -1
  3. package/package.json +2 -2
  4. package/releases/aarch64-apple-darwin/index.node +0 -0
  5. package/releases/aarch64-unknown-linux-gnu/index.node +0 -0
  6. package/releases/x86_64-apple-darwin/index.node +0 -0
  7. package/releases/x86_64-pc-windows-msvc/index.node +0 -0
  8. package/releases/x86_64-unknown-linux-gnu/index.node +0 -0
  9. package/sdk-core/.github/workflows/per-pr.yml +6 -6
  10. package/sdk-core/AGENTS.md +41 -30
  11. package/sdk-core/Cargo.toml +3 -0
  12. package/sdk-core/README.md +15 -9
  13. package/sdk-core/crates/client/Cargo.toml +4 -0
  14. package/sdk-core/crates/client/README.md +139 -0
  15. package/sdk-core/crates/client/src/async_activity_handle.rs +297 -0
  16. package/sdk-core/crates/client/src/callback_based.rs +7 -0
  17. package/sdk-core/crates/client/src/errors.rs +294 -0
  18. package/sdk-core/crates/client/src/{raw.rs → grpc.rs} +280 -159
  19. package/sdk-core/crates/client/src/lib.rs +920 -1326
  20. package/sdk-core/crates/client/src/metrics.rs +24 -33
  21. package/sdk-core/crates/client/src/options_structs.rs +457 -0
  22. package/sdk-core/crates/client/src/replaceable.rs +5 -4
  23. package/sdk-core/crates/client/src/request_extensions.rs +8 -9
  24. package/sdk-core/crates/client/src/retry.rs +99 -54
  25. package/sdk-core/crates/client/src/{worker/mod.rs → worker.rs} +1 -1
  26. package/sdk-core/crates/client/src/workflow_handle.rs +826 -0
  27. package/sdk-core/crates/common/Cargo.toml +61 -2
  28. package/sdk-core/crates/common/build.rs +742 -12
  29. package/sdk-core/crates/common/protos/api_upstream/.github/workflows/ci.yml +2 -0
  30. package/sdk-core/crates/common/protos/api_upstream/Makefile +2 -1
  31. package/sdk-core/crates/common/protos/api_upstream/buf.yaml +0 -3
  32. package/sdk-core/crates/common/protos/api_upstream/cmd/check-path-conflicts/main.go +137 -0
  33. package/sdk-core/crates/common/protos/api_upstream/openapi/openapiv2.json +1166 -770
  34. package/sdk-core/crates/common/protos/api_upstream/openapi/openapiv3.yaml +1243 -750
  35. package/sdk-core/crates/common/protos/api_upstream/temporal/api/deployment/v1/message.proto +2 -2
  36. package/sdk-core/crates/common/protos/api_upstream/temporal/api/enums/v1/workflow.proto +4 -3
  37. package/sdk-core/crates/common/protos/api_upstream/temporal/api/failure/v1/message.proto +1 -0
  38. package/sdk-core/crates/common/protos/api_upstream/temporal/api/history/v1/message.proto +4 -0
  39. package/sdk-core/crates/common/protos/api_upstream/temporal/api/namespace/v1/message.proto +6 -0
  40. package/sdk-core/crates/common/protos/api_upstream/temporal/api/nexus/v1/message.proto +16 -1
  41. package/sdk-core/crates/common/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +64 -6
  42. package/sdk-core/crates/common/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +88 -33
  43. package/sdk-core/crates/common/protos/local/temporal/sdk/core/nexus/nexus.proto +4 -2
  44. package/sdk-core/crates/common/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +4 -0
  45. package/sdk-core/crates/common/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +5 -5
  46. package/sdk-core/crates/common/src/activity_definition.rs +20 -0
  47. package/sdk-core/crates/common/src/data_converters.rs +770 -0
  48. package/sdk-core/crates/common/src/envconfig.rs +5 -0
  49. package/sdk-core/crates/common/src/lib.rs +15 -211
  50. package/sdk-core/crates/common/src/payload_visitor.rs +648 -0
  51. package/sdk-core/crates/common/src/priority.rs +110 -0
  52. package/sdk-core/crates/common/src/protos/canned_histories.rs +3 -0
  53. package/sdk-core/crates/common/src/protos/history_builder.rs +45 -0
  54. package/sdk-core/crates/common/src/protos/history_info.rs +2 -0
  55. package/sdk-core/crates/common/src/protos/mod.rs +122 -27
  56. package/sdk-core/crates/common/src/protos/task_token.rs +3 -3
  57. package/sdk-core/crates/common/src/protos/utilities.rs +11 -0
  58. package/sdk-core/crates/{sdk-core → common}/src/telemetry/log_export.rs +5 -7
  59. package/sdk-core/crates/common/src/telemetry/metrics/core.rs +125 -0
  60. package/sdk-core/crates/common/src/telemetry/metrics.rs +268 -223
  61. package/sdk-core/crates/{sdk-core → common}/src/telemetry/otel.rs +8 -13
  62. package/sdk-core/crates/{sdk-core → common}/src/telemetry/prometheus_meter.rs +49 -50
  63. package/sdk-core/crates/{sdk-core → common}/src/telemetry/prometheus_server.rs +2 -3
  64. package/sdk-core/crates/common/src/telemetry.rs +264 -4
  65. package/sdk-core/crates/common/src/worker.rs +68 -603
  66. package/sdk-core/crates/common/src/workflow_definition.rs +60 -0
  67. package/sdk-core/crates/macros/Cargo.toml +5 -1
  68. package/sdk-core/crates/macros/src/activities_definitions.rs +585 -0
  69. package/sdk-core/crates/macros/src/fsm_impl.rs +507 -0
  70. package/sdk-core/crates/macros/src/lib.rs +138 -512
  71. package/sdk-core/crates/macros/src/macro_utils.rs +106 -0
  72. package/sdk-core/crates/macros/src/workflow_definitions.rs +1224 -0
  73. package/sdk-core/crates/sdk/Cargo.toml +19 -6
  74. package/sdk-core/crates/sdk/README.md +415 -0
  75. package/sdk-core/crates/sdk/src/activities.rs +417 -0
  76. package/sdk-core/crates/sdk/src/interceptors.rs +1 -1
  77. package/sdk-core/crates/sdk/src/lib.rs +757 -442
  78. package/sdk-core/crates/sdk/src/workflow_context/options.rs +45 -35
  79. package/sdk-core/crates/sdk/src/workflow_context.rs +1033 -289
  80. package/sdk-core/crates/sdk/src/workflow_future.rs +277 -213
  81. package/sdk-core/crates/sdk/src/workflows.rs +711 -0
  82. package/sdk-core/crates/sdk-core/Cargo.toml +57 -64
  83. package/sdk-core/crates/sdk-core/benches/workflow_replay_bench.rs +41 -35
  84. package/sdk-core/crates/sdk-core/machine_coverage/ActivityMachine_Coverage.puml +1 -1
  85. package/sdk-core/crates/sdk-core/src/abstractions.rs +6 -10
  86. package/sdk-core/crates/sdk-core/src/core_tests/activity_tasks.rs +6 -5
  87. package/sdk-core/crates/sdk-core/src/core_tests/mod.rs +13 -15
  88. package/sdk-core/crates/sdk-core/src/core_tests/queries.rs +21 -25
  89. package/sdk-core/crates/sdk-core/src/core_tests/replay_flag.rs +7 -10
  90. package/sdk-core/crates/sdk-core/src/core_tests/updates.rs +14 -17
  91. package/sdk-core/crates/sdk-core/src/core_tests/workers.rs +493 -26
  92. package/sdk-core/crates/sdk-core/src/core_tests/workflow_tasks.rs +4 -8
  93. package/sdk-core/crates/sdk-core/src/ephemeral_server/mod.rs +7 -7
  94. package/sdk-core/crates/sdk-core/src/histfetch.rs +20 -10
  95. package/sdk-core/crates/sdk-core/src/lib.rs +41 -111
  96. package/sdk-core/crates/sdk-core/src/pollers/mod.rs +4 -9
  97. package/sdk-core/crates/sdk-core/src/pollers/poll_buffer.rs +118 -19
  98. package/sdk-core/crates/sdk-core/src/protosext/mod.rs +2 -2
  99. package/sdk-core/crates/sdk-core/src/replay/mod.rs +14 -5
  100. package/sdk-core/crates/sdk-core/src/telemetry/metrics.rs +179 -196
  101. package/sdk-core/crates/sdk-core/src/telemetry/mod.rs +3 -280
  102. package/sdk-core/crates/sdk-core/src/test_help/integ_helpers.rs +6 -9
  103. package/sdk-core/crates/sdk-core/src/test_help/unit_helpers.rs +3 -6
  104. package/sdk-core/crates/sdk-core/src/worker/activities/local_activities.rs +11 -14
  105. package/sdk-core/crates/sdk-core/src/worker/activities.rs +16 -19
  106. package/sdk-core/crates/sdk-core/src/worker/client/mocks.rs +9 -5
  107. package/sdk-core/crates/sdk-core/src/worker/client.rs +103 -81
  108. package/sdk-core/crates/sdk-core/src/worker/heartbeat.rs +7 -11
  109. package/sdk-core/crates/sdk-core/src/worker/mod.rs +1124 -229
  110. package/sdk-core/crates/sdk-core/src/worker/nexus.rs +145 -23
  111. package/sdk-core/crates/sdk-core/src/worker/slot_provider.rs +2 -2
  112. package/sdk-core/crates/sdk-core/src/worker/tuner/fixed_size.rs +2 -2
  113. package/sdk-core/crates/sdk-core/src/worker/tuner/resource_based.rs +13 -13
  114. package/sdk-core/crates/sdk-core/src/worker/tuner.rs +28 -8
  115. package/sdk-core/crates/sdk-core/src/worker/workflow/driven_workflow.rs +9 -3
  116. package/sdk-core/crates/sdk-core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +21 -22
  117. package/sdk-core/crates/sdk-core/src/worker/workflow/machines/workflow_machines.rs +19 -4
  118. package/sdk-core/crates/sdk-core/src/worker/workflow/managed_run.rs +14 -18
  119. package/sdk-core/crates/sdk-core/src/worker/workflow/mod.rs +4 -6
  120. package/sdk-core/crates/sdk-core/src/worker/workflow/run_cache.rs +4 -7
  121. package/sdk-core/crates/sdk-core/src/worker/workflow/wft_extraction.rs +2 -4
  122. package/sdk-core/crates/sdk-core/src/worker/workflow/wft_poller.rs +8 -9
  123. package/sdk-core/crates/sdk-core/src/worker/workflow/workflow_stream.rs +1 -3
  124. package/sdk-core/crates/sdk-core/tests/activities_procmacro.rs +6 -0
  125. package/sdk-core/crates/sdk-core/tests/activities_trybuild/basic_pass.rs +54 -0
  126. package/sdk-core/crates/sdk-core/tests/activities_trybuild/invalid_self_type_fail.rs +18 -0
  127. package/sdk-core/crates/sdk-core/tests/activities_trybuild/invalid_self_type_fail.stderr +5 -0
  128. package/sdk-core/crates/sdk-core/tests/activities_trybuild/missing_context_fail.rs +14 -0
  129. package/sdk-core/crates/sdk-core/tests/activities_trybuild/missing_context_fail.stderr +5 -0
  130. package/sdk-core/crates/sdk-core/tests/activities_trybuild/multi_arg_pass.rs +48 -0
  131. package/sdk-core/crates/sdk-core/tests/activities_trybuild/no_input_pass.rs +14 -0
  132. package/sdk-core/crates/sdk-core/tests/activities_trybuild/no_return_type_pass.rs +19 -0
  133. package/sdk-core/crates/sdk-core/tests/cloud_tests.rs +14 -5
  134. package/sdk-core/crates/sdk-core/tests/common/activity_functions.rs +55 -0
  135. package/sdk-core/crates/sdk-core/tests/common/mod.rs +241 -196
  136. package/sdk-core/crates/sdk-core/tests/common/workflows.rs +41 -28
  137. package/sdk-core/crates/sdk-core/tests/global_metric_tests.rs +3 -5
  138. package/sdk-core/crates/sdk-core/tests/heavy_tests/fuzzy_workflow.rs +73 -64
  139. package/sdk-core/crates/sdk-core/tests/heavy_tests.rs +298 -252
  140. package/sdk-core/crates/sdk-core/tests/integ_tests/async_activity_client_tests.rs +230 -0
  141. package/sdk-core/crates/sdk-core/tests/integ_tests/client_tests.rs +94 -57
  142. package/sdk-core/crates/sdk-core/tests/integ_tests/data_converter_tests.rs +381 -0
  143. package/sdk-core/crates/sdk-core/tests/integ_tests/ephemeral_server_tests.rs +16 -12
  144. package/sdk-core/crates/sdk-core/tests/integ_tests/heartbeat_tests.rs +48 -40
  145. package/sdk-core/crates/sdk-core/tests/integ_tests/metrics_tests.rs +327 -255
  146. package/sdk-core/crates/sdk-core/tests/integ_tests/pagination_tests.rs +50 -45
  147. package/sdk-core/crates/sdk-core/tests/integ_tests/polling_tests.rs +147 -126
  148. package/sdk-core/crates/sdk-core/tests/integ_tests/queries_tests.rs +103 -89
  149. package/sdk-core/crates/sdk-core/tests/integ_tests/update_tests.rs +609 -453
  150. package/sdk-core/crates/sdk-core/tests/integ_tests/visibility_tests.rs +80 -62
  151. package/sdk-core/crates/sdk-core/tests/integ_tests/worker_heartbeat_tests.rs +360 -231
  152. package/sdk-core/crates/sdk-core/tests/integ_tests/worker_tests.rs +248 -185
  153. package/sdk-core/crates/sdk-core/tests/integ_tests/worker_versioning_tests.rs +52 -43
  154. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_client_tests.rs +180 -0
  155. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/activities.rs +428 -315
  156. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +82 -56
  157. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +56 -28
  158. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +364 -243
  159. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/client_interactions.rs +552 -0
  160. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +101 -42
  161. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +243 -147
  162. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/eager.rs +98 -28
  163. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +1475 -1036
  164. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/modify_wf_properties.rs +73 -41
  165. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/nexus.rs +397 -238
  166. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/patches.rs +414 -189
  167. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/queries.rs +415 -0
  168. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/replay.rs +96 -36
  169. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/resets.rs +154 -137
  170. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/signals.rs +183 -105
  171. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +85 -38
  172. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/timers.rs +142 -40
  173. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +73 -54
  174. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests.rs +363 -226
  175. package/sdk-core/crates/sdk-core/tests/main.rs +17 -15
  176. package/sdk-core/crates/sdk-core/tests/manual_tests.rs +207 -152
  177. package/sdk-core/crates/sdk-core/tests/shared_tests/mod.rs +65 -34
  178. package/sdk-core/crates/sdk-core/tests/shared_tests/priority.rs +107 -84
  179. package/sdk-core/crates/sdk-core/tests/workflows_procmacro.rs +6 -0
  180. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/async_query_fail.rs +26 -0
  181. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/async_query_fail.stderr +5 -0
  182. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/basic_pass.rs +49 -0
  183. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/minimal_pass.rs +21 -0
  184. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/mut_query_fail.rs +26 -0
  185. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/mut_query_fail.stderr +5 -0
  186. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/sync_run_fail.rs +21 -0
  187. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/sync_run_fail.stderr +5 -0
  188. package/sdk-core/crates/sdk-core-c-bridge/Cargo.toml +7 -1
  189. package/sdk-core/crates/sdk-core-c-bridge/include/temporal-sdk-core-c-bridge.h +14 -14
  190. package/sdk-core/crates/sdk-core-c-bridge/src/client.rs +83 -74
  191. package/sdk-core/crates/sdk-core-c-bridge/src/metric.rs +9 -14
  192. package/sdk-core/crates/sdk-core-c-bridge/src/runtime.rs +1 -2
  193. package/sdk-core/crates/sdk-core-c-bridge/src/tests/context.rs +13 -13
  194. package/sdk-core/crates/sdk-core-c-bridge/src/tests/mod.rs +6 -6
  195. package/sdk-core/crates/sdk-core-c-bridge/src/tests/utils.rs +3 -4
  196. package/sdk-core/crates/sdk-core-c-bridge/src/worker.rs +62 -75
  197. package/sdk-core/rustfmt.toml +2 -1
  198. package/src/client.rs +205 -318
  199. package/src/metrics.rs +22 -30
  200. package/src/runtime.rs +4 -5
  201. package/src/worker.rs +16 -19
  202. package/ts/native.ts +1 -1
  203. package/sdk-core/crates/client/src/workflow_handle/mod.rs +0 -212
  204. package/sdk-core/crates/common/src/errors.rs +0 -85
  205. package/sdk-core/crates/common/tests/worker_task_types_test.rs +0 -129
  206. package/sdk-core/crates/sdk/src/activity_context.rs +0 -238
  207. package/sdk-core/crates/sdk/src/app_data.rs +0 -37
  208. package/sdk-core/crates/sdk-core/tests/integ_tests/activity_functions.rs +0 -5
  209. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/appdata_propagation.rs +0 -61
@@ -9,35 +9,28 @@ homepage = "https://temporal.io/"
9
9
  repository = "https://github.com/temporalio/sdk-core"
10
10
  keywords = ["temporal", "workflow"]
11
11
  categories = ["development-tools"]
12
+ exclude = ["machine_coverage/*"]
12
13
 
13
14
  [lib]
14
15
 
15
16
  [features]
16
- default = ["otel", "prom"]
17
- otel = [
18
- "dep:opentelemetry",
19
- "dep:opentelemetry_sdk",
20
- "dep:opentelemetry-otlp",
21
- "dep:hyper",
22
- "dep:hyper-util",
23
- "dep:http-body-util",
24
- ]
25
- prom = ["dep:prometheus"]
26
- tokio-console = ["console-subscriber"]
17
+ default = ["otel"]
18
+ otel = ["dep:opentelemetry", "dep:opentelemetry_sdk", "dep:opentelemetry-otlp"]
27
19
  ephemeral-server = ["dep:flate2", "dep:reqwest", "dep:tar", "dep:zip"]
28
- debug-plugin = ["dep:reqwest"]
20
+ debug-plugin = ["dep:reqwest", "dep:hyper"]
29
21
  test-utilities = ["dep:assert_matches", "dep:bimap"]
30
22
  antithesis_assertions = ["dep:antithesis_sdk"]
31
23
 
32
24
  [dependencies]
33
25
  anyhow = "1.0"
34
- antithesis_sdk = { version = "0.2.1", optional = true, default-features = false, features = ["full"] }
26
+ antithesis_sdk = { version = "0.2.1", optional = true, default-features = false, features = [
27
+ "full",
28
+ ] }
35
29
  assert_matches = { version = "1.5", optional = true }
36
30
  backoff = "0.4"
37
31
  bimap = { version = "0.6.3", optional = true }
38
32
  async-trait = "0.1"
39
33
  bon = { workspace = true }
40
- console-subscriber = { version = "0.4", optional = true }
41
34
  crossbeam-channel = "0.5"
42
35
  crossbeam-queue = "0.3"
43
36
  crossbeam-utils = "0.8"
@@ -46,49 +39,38 @@ derive_more = { workspace = true }
46
39
  enum_dispatch = "0.3"
47
40
  enum-iterator = "2"
48
41
  flate2 = { version = "1.1", optional = true }
42
+ futures = { version = "0.3", default-features = false }
49
43
  futures-util = { version = "0.3", default-features = false }
50
- futures-channel = { version = "0.3", default-features = false, features = [
51
- "std",
52
- ] }
53
44
  gethostname = "1.0.2"
54
45
  governor = "0.10"
55
- http-body-util = { version = "0.1", optional = true }
56
46
  hyper = { version = "1.7", optional = true }
57
- hyper-util = { version = "0.1", features = [
58
- "server",
59
- "http1",
60
- "http2",
61
- "tokio",
62
- ], optional = true }
63
47
  itertools = "0.14"
64
48
  lru = "0.16"
65
49
  mockall = "0.13"
66
50
  opentelemetry = { workspace = true, features = ["metrics"], optional = true }
67
51
  opentelemetry_sdk = { version = "0.31", features = [
68
- "rt-tokio",
69
- "metrics",
70
- "spec_unstable_metrics_views",
52
+ "rt-tokio",
53
+ "metrics",
54
+ "spec_unstable_metrics_views",
71
55
  ], optional = true }
72
56
  opentelemetry-otlp = { version = "0.31", features = [
73
- "tokio",
74
- "metrics",
75
- "tls",
76
- "http-proto",
77
- "grpc-tonic",
57
+ "tokio",
58
+ "metrics",
59
+ "tls",
60
+ "http-proto",
61
+ "grpc-tonic",
78
62
  ], optional = true }
79
63
  parking_lot = { version = "0.12", features = ["send_guard"] }
80
64
  pid = "4.0"
81
65
  pin-project = "1.1"
82
- prometheus = { version = "0.14", optional = true }
83
66
  prost = { workspace = true }
84
67
  prost-types = { workspace = true }
85
68
  rand = "0.9"
86
69
  reqwest = { version = "0.12", features = [
87
- "json",
88
- "stream",
89
- "rustls-tls-native-roots",
70
+ "json",
71
+ "stream",
72
+ "rustls-tls-native-roots",
90
73
  ], default-features = false, optional = true }
91
- ringbuf = "0.4"
92
74
  serde = "1.0"
93
75
  serde_json = "1.0"
94
76
  siphasher = "1.0"
@@ -97,38 +79,40 @@ sysinfo = { version = "0.37", default-features = false, features = ["system"] }
97
79
  tar = { version = "0.4", optional = true }
98
80
  thiserror = { workspace = true }
99
81
  tokio = { version = "1.47", features = [
100
- "rt",
101
- "rt-multi-thread",
102
- "parking_lot",
103
- "time",
104
- "fs",
105
- "process",
82
+ "rt",
83
+ "rt-multi-thread",
84
+ "parking_lot",
85
+ "time",
86
+ "fs",
87
+ "process",
106
88
  ] }
107
89
  tokio-util = { version = "0.7", features = ["io", "io-util"] }
108
90
  tokio-stream = "0.1"
109
91
  tonic = { workspace = true, features = ["tls-ring", "tls-native-roots"] }
110
92
  tracing = "0.1"
111
- tracing-subscriber = { version = "0.3", default-features = false, features = [
112
- "parking_lot",
113
- "env-filter",
114
- "registry",
115
- "ansi",
116
- ] }
117
93
  url = "2.5"
118
94
  uuid = { version = "1.18", features = ["v4"] }
119
95
  # Only need specific features to decompress zip files for ephemeral server download
120
- zip = { version = "4.6", optional = true, default-features = false, features = ["deflate", "bzip2", "zstd"] }
96
+ zip = { version = "4.6", optional = true, default-features = false, features = [
97
+ "deflate",
98
+ "bzip2",
99
+ "zstd",
100
+ ] }
121
101
 
122
102
  # 1st party local deps
123
103
  [dependencies.temporalio-common]
124
104
  path = "../common"
125
- features = ["otel_impls", "history_builders", "test-utilities"]
105
+ version = "0.1"
106
+ features = ["core-based-sdk", "history_builders", "test-utilities"]
126
107
 
127
108
  [dependencies.temporalio-client]
128
109
  path = "../client"
110
+ version = "0.1"
111
+ features = ["core-based-sdk"]
129
112
 
130
113
  [dependencies.temporalio-macros]
131
114
  path = "../macros"
115
+ version = "0.1"
132
116
 
133
117
  [dev-dependencies]
134
118
  assert_matches = "1.5"
@@ -136,19 +120,28 @@ bimap = "0.6.3"
136
120
  bytes = "1.10"
137
121
  clap = { version = "4.5", features = ["derive"] }
138
122
  criterion = { version = "0.7", features = ["async", "async_tokio"] }
123
+ http-body-util = { version = "0.1" }
124
+ hyper = { version = "1.7" }
125
+ hyper-util = { version = "0.1", features = [
126
+ "server",
127
+ "http1",
128
+ "http2",
129
+ "tokio",
130
+ ] }
139
131
  rstest = "0.26"
140
132
  semver = "1.0"
141
133
  temporalio-sdk = { path = "../sdk" }
142
134
  tokio = { version = "1.47", features = [
143
- "rt",
144
- "rt-multi-thread",
145
- "parking_lot",
146
- "time",
147
- "fs",
148
- "process",
149
- "test-util",
135
+ "rt",
136
+ "rt-multi-thread",
137
+ "parking_lot",
138
+ "time",
139
+ "fs",
140
+ "process",
141
+ "test-util",
150
142
  ] }
151
143
  tokio-stream = { version = "0.1", features = ["net"] }
144
+ tracing-subscriber = { version = "0.3", default-features = false }
152
145
  trybuild = { version = "1.0", features = ["diff"] }
153
146
 
154
147
  [[bin]]
@@ -163,9 +156,9 @@ path = "tests/main.rs"
163
156
  # `cargo test --test integ_tests`
164
157
  test = false
165
158
  required-features = [
166
- "temporalio-common/serde_serialize",
167
- "test-utilities",
168
- "ephemeral-server",
159
+ "temporalio-common/serde_serialize",
160
+ "test-utilities",
161
+ "ephemeral-server",
169
162
  ]
170
163
 
171
164
  [[test]]
@@ -213,9 +206,9 @@ path = "tests/runner.rs"
213
206
  harness = false
214
207
  test = false
215
208
  required-features = [
216
- "temporalio-common/serde_serialize",
217
- "test-utilities",
218
- "ephemeral-server",
209
+ "temporalio-common/serde_serialize",
210
+ "test-utilities",
211
+ "ephemeral-server",
219
212
  ]
220
213
 
221
214
 
@@ -7,7 +7,6 @@ use crate::common::{
7
7
  DONT_AUTO_INIT_INTEG_TELEM, get_integ_runtime_options, prom_metrics, replay_sdk_worker,
8
8
  };
9
9
  use criterion::{BatchSize, Criterion, criterion_group, criterion_main};
10
- use futures_util::StreamExt;
11
10
  use std::{
12
11
  sync::{Arc, mpsc},
13
12
  thread,
@@ -17,7 +16,8 @@ use temporalio_common::{
17
16
  protos::{DEFAULT_WORKFLOW_TYPE, canned_histories},
18
17
  telemetry::metrics::{MetricKeyValue, MetricParameters, NewAttributes},
19
18
  };
20
- use temporalio_sdk::{WfContext, WorkflowFunction};
19
+ use temporalio_macros::{workflow, workflow_methods};
20
+ use temporalio_sdk::{SyncWorkflowContext, WorkflowContext, WorkflowResult};
21
21
  use temporalio_sdk_core::{CoreRuntime, replay::HistoryForReplay};
22
22
 
23
23
  pub fn criterion_benchmark(c: &mut Criterion) {
@@ -30,19 +30,13 @@ pub fn criterion_benchmark(c: &mut Criterion) {
30
30
 
31
31
  let num_timers = 10;
32
32
  let t = canned_histories::long_sequential_timers(num_timers as usize);
33
- let hist = HistoryForReplay::new(
34
- t.get_full_history_info().unwrap().into(),
35
- "whatever".to_string(),
36
- );
33
+ let hist = HistoryForReplay::new(t.get_full_history_info().unwrap(), "whatever".to_string());
37
34
 
38
35
  c.bench_function("Small history replay", |b| {
39
36
  b.to_async(&tokio_runtime).iter_batched(
40
- || {
41
- let func = timers_wf(num_timers);
42
- (func, replay_sdk_worker([hist.clone()]))
43
- },
44
- |(func, mut worker)| async move {
45
- worker.register_wf(DEFAULT_WORKFLOW_TYPE, func);
37
+ || replay_sdk_worker([hist.clone()]),
38
+ |mut worker| async move {
39
+ worker.register_workflow_with_factory(move || TimersWf { num_timers });
46
40
  worker.run().await.unwrap();
47
41
  },
48
42
  BatchSize::SmallInput,
@@ -51,19 +45,16 @@ pub fn criterion_benchmark(c: &mut Criterion) {
51
45
 
52
46
  let num_tasks = 50;
53
47
  let t = canned_histories::lots_of_big_signals(num_tasks);
54
- let hist = HistoryForReplay::new(
55
- t.get_full_history_info().unwrap().into(),
56
- "whatever".to_string(),
57
- );
48
+ let hist = HistoryForReplay::new(t.get_full_history_info().unwrap(), "whatever".to_string());
58
49
 
59
50
  c.bench_function("Large payloads history replay", |b| {
60
51
  b.to_async(&tokio_runtime).iter_batched(
61
- || {
62
- let func = big_signals_wf(num_tasks);
63
- (func, replay_sdk_worker([hist.clone()]))
64
- },
65
- |(func, mut worker)| async move {
66
- worker.register_wf(DEFAULT_WORKFLOW_TYPE, func);
52
+ || replay_sdk_worker([hist.clone()]),
53
+ |mut worker| async move {
54
+ worker.register_workflow_with_factory(move || BigSignalsWf {
55
+ num_tasks,
56
+ signal_count: 0,
57
+ });
67
58
  worker.run().await.unwrap();
68
59
  },
69
60
  BatchSize::SmallInput,
@@ -142,24 +133,39 @@ pub fn bench_metrics(c: &mut Criterion) {
142
133
  criterion_group!(benches, criterion_benchmark, bench_metrics);
143
134
  criterion_main!(benches);
144
135
 
145
- fn timers_wf(num_timers: u32) -> WorkflowFunction {
146
- WorkflowFunction::new(move |ctx: WfContext| async move {
147
- for _ in 1..=num_timers {
136
+ #[workflow]
137
+ struct TimersWf {
138
+ num_timers: u32,
139
+ }
140
+
141
+ #[workflow_methods(factory_only)]
142
+ impl TimersWf {
143
+ #[run(name = DEFAULT_WORKFLOW_TYPE)]
144
+ async fn run(ctx: &mut WorkflowContext<Self>) -> WorkflowResult<()> {
145
+ for _ in 1..=ctx.state(|s| s.num_timers) {
148
146
  ctx.timer(Duration::from_secs(1)).await;
149
147
  }
150
148
  Ok(().into())
151
- })
149
+ }
152
150
  }
153
151
 
154
- fn big_signals_wf(num_tasks: usize) -> WorkflowFunction {
155
- WorkflowFunction::new(move |ctx: WfContext| async move {
156
- let mut sigs = ctx.make_signal_channel("bigsig");
157
- for _ in 1..=num_tasks {
158
- for _ in 1..=5 {
159
- let _ = sigs.next().await.unwrap();
160
- }
161
- }
152
+ #[workflow]
153
+ struct BigSignalsWf {
154
+ num_tasks: usize,
155
+ signal_count: usize,
156
+ }
162
157
 
158
+ #[workflow_methods(factory_only)]
159
+ impl BigSignalsWf {
160
+ #[run(name = DEFAULT_WORKFLOW_TYPE)]
161
+ async fn run(ctx: &mut WorkflowContext<Self>) -> WorkflowResult<()> {
162
+ let target_count = ctx.state(|s| s.num_tasks * 5);
163
+ ctx.wait_condition(|s| s.signal_count >= target_count).await;
163
164
  Ok(().into())
164
- })
165
+ }
166
+
167
+ #[signal(name = "bigsig")]
168
+ fn handle_signal(&mut self, _ctx: &mut SyncWorkflowContext<Self>, _: Vec<u8>) {
169
+ self.signal_count += 1;
170
+ }
165
171
  }
@@ -26,7 +26,7 @@ StartedActivityCancelEventRecorded -[#blue]-> TimedOut: ActivityTaskTimedOut
26
26
  StartedActivityCancelEventRecorded -[#blue]-> Canceled: ActivityTaskCanceled
27
27
  Canceled -[#blue]-> Canceled: ActivityTaskStarted
28
28
  Canceled -[#blue]-> Canceled: ActivityTaskCompleted
29
- TimedOut --> [*]
30
29
  Failed --> [*]
30
+ TimedOut --> [*]
31
31
  Completed --> [*]
32
32
  @enduml
@@ -2,7 +2,7 @@
2
2
 
3
3
  pub(crate) mod take_cell;
4
4
 
5
- use crate::MetricsContext;
5
+ use crate::{MetricsContext, worker::*};
6
6
  use std::{
7
7
  fmt::{Debug, Formatter},
8
8
  sync::{
@@ -10,13 +10,7 @@ use std::{
10
10
  atomic::{AtomicBool, AtomicUsize, Ordering},
11
11
  },
12
12
  };
13
- use temporalio_common::{
14
- telemetry::metrics::TemporalMeter,
15
- worker::{
16
- SlotKind, SlotMarkUsedContext, SlotReleaseContext, SlotReservationContext, SlotSupplier,
17
- SlotSupplierPermit, WorkerDeploymentVersion, WorkflowSlotKind,
18
- },
19
- };
13
+ use temporalio_common::{telemetry::metrics::TemporalMeter, worker::WorkerDeploymentVersion};
20
14
  use tokio::sync::watch;
21
15
  use tokio_util::sync::CancellationToken;
22
16
 
@@ -475,9 +469,11 @@ where
475
469
  #[cfg(test)]
476
470
  pub(crate) mod tests {
477
471
  use super::*;
478
- use crate::{advance_fut, worker::tuner::FixedSizeSlotSupplier};
472
+ use crate::{
473
+ advance_fut,
474
+ worker::{WorkflowSlotKind, tuner::FixedSizeSlotSupplier},
475
+ };
479
476
  use futures_util::FutureExt;
480
- use temporalio_common::worker::WorkflowSlotKind;
481
477
 
482
478
  pub(crate) fn fixed_size_permit_dealer<SK: SlotKind + Send + Sync + 'static>(
483
479
  size: usize,
@@ -1,12 +1,15 @@
1
1
  use crate::{
2
- ActivityHeartbeat, Worker, advance_fut, job_assert, prost_dur,
2
+ ActivityHeartbeat, CompleteActivityError, Worker, advance_fut, job_assert, prost_dur,
3
3
  test_help::{
4
4
  MockPollCfg, MockWorkerInputs, MocksHolder, QueueResponse, WorkerExt,
5
5
  WorkflowCachingPolicy, build_fake_worker, build_mock_pollers, fanout_tasks,
6
6
  gen_assert_and_reply, mock_manual_poller, mock_poller, mock_worker, poll_and_reply,
7
7
  single_hist_mock_sg, test_worker_cfg,
8
8
  },
9
- worker::client::mocks::{mock_manual_worker_client, mock_worker_client},
9
+ worker::{
10
+ PollerBehavior,
11
+ client::mocks::{mock_manual_worker_client, mock_worker_client},
12
+ },
10
13
  };
11
14
  use futures_util::FutureExt;
12
15
  use itertools::Itertools;
@@ -22,8 +25,6 @@ use std::{
22
25
  time::{Duration, Instant},
23
26
  };
24
27
  use temporalio_common::{
25
- Worker as WorkerTrait,
26
- errors::CompleteActivityError,
27
28
  protos::{
28
29
  TestHistoryBuilder, canned_histories,
29
30
  coresdk::{
@@ -53,7 +54,7 @@ use temporalio_common::{
53
54
  },
54
55
  test_utils::start_timer_cmd,
55
56
  },
56
- worker::{PollerBehavior, WorkerTaskTypes},
57
+ worker::WorkerTaskTypes,
57
58
  };
58
59
  use tokio::{join, time::sleep};
59
60
  use tokio_util::sync::CancellationToken;
@@ -7,28 +7,26 @@ mod workflow_cancels;
7
7
  mod workflow_tasks;
8
8
 
9
9
  use crate::{
10
- Worker,
11
- errors::PollError,
10
+ PollError, Worker,
12
11
  test_help::{
13
12
  MockPollCfg, build_mock_pollers, mock_worker, single_hist_mock_sg, test_worker_cfg,
14
13
  },
15
- worker::client::mocks::{mock_manual_worker_client, mock_worker_client},
14
+ worker::{
15
+ PollerBehavior,
16
+ client::mocks::{mock_manual_worker_client, mock_worker_client},
17
+ },
16
18
  };
17
19
  use futures_util::FutureExt;
18
20
  use std::{sync::LazyLock, time::Duration};
19
- use temporalio_common::{
20
- Worker as WorkerTrait,
21
- protos::{
22
- TestHistoryBuilder, canned_histories,
23
- coresdk::{
24
- workflow_activation::{WorkflowActivationJob, workflow_activation_job},
25
- workflow_completion::WorkflowActivationCompletion,
26
- },
27
- temporal::api::{
28
- enums::v1::EventType, history::v1::WorkflowExecutionOptionsUpdatedEventAttributes,
29
- },
21
+ use temporalio_common::protos::{
22
+ TestHistoryBuilder, canned_histories,
23
+ coresdk::{
24
+ workflow_activation::{WorkflowActivationJob, workflow_activation_job},
25
+ workflow_completion::WorkflowActivationCompletion,
26
+ },
27
+ temporal::api::{
28
+ enums::v1::EventType, history::v1::WorkflowExecutionOptionsUpdatedEventAttributes,
30
29
  },
31
- worker::PollerBehavior,
32
30
  };
33
31
  use tokio::{sync::Barrier, time::sleep};
34
32
 
@@ -4,7 +4,7 @@ use crate::{
4
4
  hist_to_poll_resp, mock_worker, single_hist_mock_sg,
5
5
  },
6
6
  worker::{
7
- LEGACY_QUERY_ID,
7
+ LEGACY_QUERY_ID, WorkerVersioningStrategy,
8
8
  client::{LegacyQueryResult, mocks::mock_worker_client},
9
9
  },
10
10
  };
@@ -13,33 +13,29 @@ use std::{
13
13
  collections::{HashMap, VecDeque},
14
14
  time::Duration,
15
15
  };
16
- use temporalio_common::{
17
- Worker as WorkerTrait,
18
- protos::{
19
- TestHistoryBuilder, canned_histories,
20
- coresdk::{
21
- workflow_activation::{
22
- WorkflowActivationJob, remove_from_cache::EvictionReason, workflow_activation_job,
23
- },
24
- workflow_commands::{
25
- ActivityCancellationType, CompleteWorkflowExecution,
26
- ContinueAsNewWorkflowExecution, QueryResult, RequestCancelActivity, query_result,
27
- },
28
- workflow_completion::WorkflowActivationCompletion,
16
+ use temporalio_common::protos::{
17
+ TestHistoryBuilder, canned_histories,
18
+ coresdk::{
19
+ workflow_activation::{
20
+ WorkflowActivationJob, remove_from_cache::EvictionReason, workflow_activation_job,
29
21
  },
30
- temporal::api::{
31
- common::v1::Payload,
32
- enums::v1::{CommandType, EventType, WorkflowTaskFailedCause},
33
- failure::v1::Failure,
34
- history::v1::{ActivityTaskCancelRequestedEventAttributes, History, history_event},
35
- query::v1::WorkflowQuery,
36
- workflowservice::v1::{
37
- GetWorkflowExecutionHistoryResponse, RespondWorkflowTaskCompletedResponse,
38
- },
22
+ workflow_commands::{
23
+ ActivityCancellationType, CompleteWorkflowExecution, ContinueAsNewWorkflowExecution,
24
+ QueryResult, RequestCancelActivity, query_result,
25
+ },
26
+ workflow_completion::WorkflowActivationCompletion,
27
+ },
28
+ temporal::api::{
29
+ common::v1::Payload,
30
+ enums::v1::{CommandType, EventType, WorkflowTaskFailedCause},
31
+ failure::v1::Failure,
32
+ history::v1::{ActivityTaskCancelRequestedEventAttributes, History, history_event},
33
+ query::v1::WorkflowQuery,
34
+ workflowservice::v1::{
35
+ GetWorkflowExecutionHistoryResponse, RespondWorkflowTaskCompletedResponse,
39
36
  },
40
- test_utils::{query_ok, schedule_activity_cmd, start_timer_cmd},
41
37
  },
42
- worker::WorkerVersioningStrategy,
38
+ test_utils::{query_ok, schedule_activity_cmd, start_timer_cmd},
43
39
  };
44
40
 
45
41
  #[rstest::rstest]
@@ -3,17 +3,14 @@ use crate::{
3
3
  worker::{LEGACY_QUERY_ID, client::mocks::mock_worker_client},
4
4
  };
5
5
  use std::{collections::VecDeque, time::Duration};
6
- use temporalio_common::{
7
- Worker as CoreWorker,
8
- protos::{
9
- TestHistoryBuilder, canned_histories,
10
- coresdk::{
11
- workflow_activation::{WorkflowActivationJob, workflow_activation_job},
12
- workflow_completion::WorkflowActivationCompletion,
13
- },
14
- temporal::api::{enums::v1::EventType, query::v1::WorkflowQuery},
15
- test_utils::{query_ok, start_timer_cmd},
6
+ use temporalio_common::protos::{
7
+ TestHistoryBuilder, canned_histories,
8
+ coresdk::{
9
+ workflow_activation::{WorkflowActivationJob, workflow_activation_job},
10
+ workflow_completion::WorkflowActivationCompletion,
16
11
  },
12
+ temporal::api::{enums::v1::EventType, query::v1::WorkflowQuery},
13
+ test_utils::{query_ok, start_timer_cmd},
17
14
  };
18
15
 
19
16
  #[tokio::test]
@@ -6,24 +6,21 @@ use crate::{
6
6
  },
7
7
  worker::client::mocks::mock_worker_client,
8
8
  };
9
- use temporalio_common::{
10
- Worker,
11
- protos::{
12
- DEFAULT_ACTIVITY_TYPE, TestHistoryBuilder,
13
- coresdk::{
14
- workflow_activation::{WorkflowActivationJob, workflow_activation_job},
15
- workflow_commands::{
16
- CompleteWorkflowExecution, ScheduleActivity, StartTimer, UpdateResponse,
17
- update_response::Response,
18
- },
19
- workflow_completion::WorkflowActivationCompletion,
20
- },
21
- temporal::api::{
22
- common::v1::Payload,
23
- enums::v1::EventType,
24
- update::v1::{Acceptance, Rejection},
25
- workflowservice::v1::RespondWorkflowTaskCompletedResponse,
9
+ use temporalio_common::protos::{
10
+ DEFAULT_ACTIVITY_TYPE, TestHistoryBuilder,
11
+ coresdk::{
12
+ workflow_activation::{WorkflowActivationJob, workflow_activation_job},
13
+ workflow_commands::{
14
+ CompleteWorkflowExecution, ScheduleActivity, StartTimer, UpdateResponse,
15
+ update_response::Response,
26
16
  },
17
+ workflow_completion::WorkflowActivationCompletion,
18
+ },
19
+ temporal::api::{
20
+ common::v1::Payload,
21
+ enums::v1::EventType,
22
+ update::v1::{Acceptance, Rejection},
23
+ workflowservice::v1::RespondWorkflowTaskCompletedResponse,
27
24
  },
28
25
  };
29
26