@temporalio/core-bridge 1.11.0 → 1.11.2

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 (75) hide show
  1. package/Cargo.lock +86 -88
  2. package/lib/index.d.ts +3 -0
  3. package/lib/index.js.map +1 -1
  4. package/package.json +3 -3
  5. package/releases/aarch64-apple-darwin/index.node +0 -0
  6. package/releases/aarch64-unknown-linux-gnu/index.node +0 -0
  7. package/releases/x86_64-apple-darwin/index.node +0 -0
  8. package/releases/x86_64-pc-windows-msvc/index.node +0 -0
  9. package/releases/x86_64-unknown-linux-gnu/index.node +0 -0
  10. package/sdk-core/.github/workflows/per-pr.yml +7 -1
  11. package/sdk-core/Cargo.toml +1 -1
  12. package/sdk-core/client/Cargo.toml +3 -3
  13. package/sdk-core/client/src/lib.rs +1 -1
  14. package/sdk-core/client/src/metrics.rs +2 -2
  15. package/sdk-core/client/src/raw.rs +39 -13
  16. package/sdk-core/client/src/retry.rs +108 -62
  17. package/sdk-core/client/src/workflow_handle/mod.rs +1 -2
  18. package/sdk-core/core/Cargo.toml +4 -5
  19. package/sdk-core/core/src/abstractions.rs +2 -3
  20. package/sdk-core/core/src/core_tests/activity_tasks.rs +1 -1
  21. package/sdk-core/core/src/core_tests/local_activities.rs +2 -2
  22. package/sdk-core/core/src/core_tests/queries.rs +8 -4
  23. package/sdk-core/core/src/core_tests/updates.rs +2 -2
  24. package/sdk-core/core/src/core_tests/workflow_cancels.rs +3 -3
  25. package/sdk-core/core/src/core_tests/workflow_tasks.rs +55 -54
  26. package/sdk-core/core/src/ephemeral_server/mod.rs +5 -3
  27. package/sdk-core/core/src/protosext/mod.rs +3 -0
  28. package/sdk-core/core/src/telemetry/mod.rs +0 -8
  29. package/sdk-core/core/src/telemetry/otel.rs +7 -3
  30. package/sdk-core/core/src/worker/activities/activity_task_poller_stream.rs +11 -0
  31. package/sdk-core/core/src/worker/activities.rs +1 -1
  32. package/sdk-core/core/src/worker/mod.rs +6 -6
  33. package/sdk-core/core/src/worker/slot_provider.rs +4 -3
  34. package/sdk-core/core/src/worker/tuner/resource_based.rs +1 -1
  35. package/sdk-core/core/src/worker/workflow/driven_workflow.rs +28 -2
  36. package/sdk-core/core/src/worker/workflow/history_update.rs +2 -2
  37. package/sdk-core/core/src/worker/workflow/machines/activity_state_machine.rs +8 -5
  38. package/sdk-core/core/src/worker/workflow/machines/cancel_external_state_machine.rs +1 -1
  39. package/sdk-core/core/src/worker/workflow/machines/cancel_workflow_state_machine.rs +1 -1
  40. package/sdk-core/core/src/worker/workflow/machines/child_workflow_state_machine.rs +7 -7
  41. package/sdk-core/core/src/worker/workflow/machines/local_activity_state_machine.rs +10 -15
  42. package/sdk-core/core/src/worker/workflow/machines/mod.rs +1 -1
  43. package/sdk-core/core/src/worker/workflow/machines/patch_state_machine.rs +3 -2
  44. package/sdk-core/core/src/worker/workflow/machines/signal_external_state_machine.rs +1 -1
  45. package/sdk-core/core/src/worker/workflow/machines/update_state_machine.rs +4 -4
  46. package/sdk-core/core/src/worker/workflow/machines/workflow_machines.rs +30 -20
  47. package/sdk-core/core/src/worker/workflow/machines/workflow_task_state_machine.rs +2 -2
  48. package/sdk-core/core/src/worker/workflow/managed_run.rs +20 -4
  49. package/sdk-core/core/src/worker/workflow/mod.rs +33 -29
  50. package/sdk-core/core/src/worker/workflow/workflow_stream.rs +2 -2
  51. package/sdk-core/core-api/src/telemetry.rs +1 -0
  52. package/sdk-core/docker/docker-compose-telem.yaml +4 -4
  53. package/sdk-core/etc/otel-collector-config.yaml +12 -9
  54. package/sdk-core/fsm/rustfsm_procmacro/src/lib.rs +2 -2
  55. package/sdk-core/sdk/src/lib.rs +30 -3
  56. package/sdk-core/sdk/src/workflow_context.rs +15 -2
  57. package/sdk-core/sdk/src/workflow_future.rs +28 -8
  58. package/sdk-core/sdk-core-protos/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +31 -12
  59. package/sdk-core/sdk-core-protos/src/lib.rs +104 -63
  60. package/sdk-core/test-utils/src/lib.rs +4 -3
  61. package/sdk-core/tests/integ_tests/client_tests.rs +36 -7
  62. package/sdk-core/tests/integ_tests/heartbeat_tests.rs +1 -1
  63. package/sdk-core/tests/integ_tests/metrics_tests.rs +50 -4
  64. package/sdk-core/tests/integ_tests/queries_tests.rs +95 -62
  65. package/sdk-core/tests/integ_tests/update_tests.rs +16 -9
  66. package/sdk-core/tests/integ_tests/visibility_tests.rs +1 -1
  67. package/sdk-core/tests/integ_tests/worker_tests.rs +82 -1
  68. package/sdk-core/tests/integ_tests/workflow_tests/activities.rs +46 -8
  69. package/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +81 -2
  70. package/sdk-core/tests/integ_tests/workflow_tests/resets.rs +139 -4
  71. package/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +43 -28
  72. package/sdk-core/tests/integ_tests/workflow_tests.rs +2 -1
  73. package/sdk-core/tests/main.rs +28 -19
  74. package/sdk-core/tests/runner.rs +7 -2
  75. package/ts/index.ts +3 -0
package/Cargo.lock CHANGED
@@ -143,7 +143,7 @@ dependencies = [
143
143
  "rustversion",
144
144
  "serde",
145
145
  "sync_wrapper 1.0.1",
146
- "tower",
146
+ "tower 0.4.13",
147
147
  "tower-layer",
148
148
  "tower-service",
149
149
  ]
@@ -302,12 +302,6 @@ version = "0.3.0"
302
302
  source = "registry+https://github.com/rust-lang/crates.io-index"
303
303
  checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2"
304
304
 
305
- [[package]]
306
- name = "convert_case"
307
- version = "0.4.0"
308
- source = "registry+https://github.com/rust-lang/crates.io-index"
309
- checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
310
-
311
305
  [[package]]
312
306
  name = "core-foundation"
313
307
  version = "0.9.4"
@@ -366,25 +360,6 @@ dependencies = [
366
360
  "crossbeam-utils",
367
361
  ]
368
362
 
369
- [[package]]
370
- name = "crossbeam-deque"
371
- version = "0.8.5"
372
- source = "registry+https://github.com/rust-lang/crates.io-index"
373
- checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d"
374
- dependencies = [
375
- "crossbeam-epoch",
376
- "crossbeam-utils",
377
- ]
378
-
379
- [[package]]
380
- name = "crossbeam-epoch"
381
- version = "0.9.18"
382
- source = "registry+https://github.com/rust-lang/crates.io-index"
383
- checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
384
- dependencies = [
385
- "crossbeam-utils",
386
- ]
387
-
388
363
  [[package]]
389
364
  name = "crossbeam-queue"
390
365
  version = "0.3.11"
@@ -531,15 +506,23 @@ dependencies = [
531
506
 
532
507
  [[package]]
533
508
  name = "derive_more"
534
- version = "0.99.18"
509
+ version = "1.0.0"
510
+ source = "registry+https://github.com/rust-lang/crates.io-index"
511
+ checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05"
512
+ dependencies = [
513
+ "derive_more-impl",
514
+ ]
515
+
516
+ [[package]]
517
+ name = "derive_more-impl"
518
+ version = "1.0.0"
535
519
  source = "registry+https://github.com/rust-lang/crates.io-index"
536
- checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce"
520
+ checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22"
537
521
  dependencies = [
538
- "convert_case",
539
522
  "proc-macro2",
540
523
  "quote",
541
- "rustc_version",
542
524
  "syn 2.0.72",
525
+ "unicode-xid",
543
526
  ]
544
527
 
545
528
  [[package]]
@@ -1017,7 +1000,7 @@ dependencies = [
1017
1000
  "pin-project-lite",
1018
1001
  "socket2",
1019
1002
  "tokio",
1020
- "tower",
1003
+ "tower 0.4.13",
1021
1004
  "tower-service",
1022
1005
  "tracing",
1023
1006
  ]
@@ -1240,14 +1223,13 @@ dependencies = [
1240
1223
 
1241
1224
  [[package]]
1242
1225
  name = "mockall"
1243
- version = "0.12.1"
1226
+ version = "0.13.0"
1244
1227
  source = "registry+https://github.com/rust-lang/crates.io-index"
1245
- checksum = "43766c2b5203b10de348ffe19f7e54564b64f3d6018ff7648d1e2d6d3a0f0a48"
1228
+ checksum = "d4c28b3fb6d753d28c20e826cd46ee611fda1cf3cde03a443a974043247c065a"
1246
1229
  dependencies = [
1247
1230
  "cfg-if",
1248
1231
  "downcast",
1249
1232
  "fragile",
1250
- "lazy_static",
1251
1233
  "mockall_derive",
1252
1234
  "predicates",
1253
1235
  "predicates-tree",
@@ -1255,9 +1237,9 @@ dependencies = [
1255
1237
 
1256
1238
  [[package]]
1257
1239
  name = "mockall_derive"
1258
- version = "0.12.1"
1240
+ version = "0.13.0"
1259
1241
  source = "registry+https://github.com/rust-lang/crates.io-index"
1260
- checksum = "af7cbce79ec385a1d4f54baa90a76401eb15d9cab93685f62e7e9f942aa00ae2"
1242
+ checksum = "341014e7f530314e9a1fdbc7400b244efea7122662c96bfa248c31da5bfb2020"
1261
1243
  dependencies = [
1262
1244
  "cfg-if",
1263
1245
  "proc-macro2",
@@ -1280,7 +1262,7 @@ dependencies = [
1280
1262
  "neon-build",
1281
1263
  "neon-macros",
1282
1264
  "neon-runtime",
1283
- "semver 0.9.0",
1265
+ "semver",
1284
1266
  "smallvec",
1285
1267
  ]
1286
1268
 
@@ -1870,26 +1852,6 @@ dependencies = [
1870
1852
  "bitflags 2.6.0",
1871
1853
  ]
1872
1854
 
1873
- [[package]]
1874
- name = "rayon"
1875
- version = "1.10.0"
1876
- source = "registry+https://github.com/rust-lang/crates.io-index"
1877
- checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa"
1878
- dependencies = [
1879
- "either",
1880
- "rayon-core",
1881
- ]
1882
-
1883
- [[package]]
1884
- name = "rayon-core"
1885
- version = "1.12.1"
1886
- source = "registry+https://github.com/rust-lang/crates.io-index"
1887
- checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2"
1888
- dependencies = [
1889
- "crossbeam-deque",
1890
- "crossbeam-utils",
1891
- ]
1892
-
1893
1855
  [[package]]
1894
1856
  name = "redox_syscall"
1895
1857
  version = "0.4.1"
@@ -2032,15 +1994,6 @@ version = "2.0.0"
2032
1994
  source = "registry+https://github.com/rust-lang/crates.io-index"
2033
1995
  checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152"
2034
1996
 
2035
- [[package]]
2036
- name = "rustc_version"
2037
- version = "0.4.0"
2038
- source = "registry+https://github.com/rust-lang/crates.io-index"
2039
- checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
2040
- dependencies = [
2041
- "semver 1.0.23",
2042
- ]
2043
-
2044
1997
  [[package]]
2045
1998
  name = "rustfsm"
2046
1999
  version = "0.1.0"
@@ -2191,12 +2144,6 @@ dependencies = [
2191
2144
  "semver-parser",
2192
2145
  ]
2193
2146
 
2194
- [[package]]
2195
- name = "semver"
2196
- version = "1.0.23"
2197
- source = "registry+https://github.com/rust-lang/crates.io-index"
2198
- checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b"
2199
-
2200
2147
  [[package]]
2201
2148
  name = "semver-parser"
2202
2149
  version = "0.7.0"
@@ -2396,16 +2343,14 @@ checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394"
2396
2343
 
2397
2344
  [[package]]
2398
2345
  name = "sysinfo"
2399
- version = "0.30.13"
2346
+ version = "0.31.4"
2400
2347
  source = "registry+https://github.com/rust-lang/crates.io-index"
2401
- checksum = "0a5b4ddaee55fb2bea2bf0e5000747e5f5c0de765e5a5ff87f4cd106439f4bb3"
2348
+ checksum = "355dbe4f8799b304b05e1b0f05fc59b2a18d36645cf169607da45bde2f69a1be"
2402
2349
  dependencies = [
2403
- "cfg-if",
2404
2350
  "core-foundation-sys",
2405
2351
  "libc",
2352
+ "memchr",
2406
2353
  "ntapi",
2407
- "once_cell",
2408
- "rayon",
2409
2354
  "windows",
2410
2355
  ]
2411
2356
 
@@ -2458,7 +2403,7 @@ dependencies = [
2458
2403
  "thiserror",
2459
2404
  "tokio",
2460
2405
  "tonic",
2461
- "tower",
2406
+ "tower 0.5.1",
2462
2407
  "tracing",
2463
2408
  "url",
2464
2409
  "uuid",
@@ -2742,7 +2687,7 @@ dependencies = [
2742
2687
  "tokio",
2743
2688
  "tokio-rustls",
2744
2689
  "tokio-stream",
2745
- "tower",
2690
+ "tower 0.4.13",
2746
2691
  "tower-layer",
2747
2692
  "tower-service",
2748
2693
  "tracing",
@@ -2781,17 +2726,31 @@ dependencies = [
2781
2726
  "tracing",
2782
2727
  ]
2783
2728
 
2729
+ [[package]]
2730
+ name = "tower"
2731
+ version = "0.5.1"
2732
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2733
+ checksum = "2873938d487c3cfb9aed7546dc9f2711d867c9f90c46b889989a2cb84eba6b4f"
2734
+ dependencies = [
2735
+ "futures-core",
2736
+ "futures-util",
2737
+ "pin-project-lite",
2738
+ "sync_wrapper 0.1.2",
2739
+ "tower-layer",
2740
+ "tower-service",
2741
+ ]
2742
+
2784
2743
  [[package]]
2785
2744
  name = "tower-layer"
2786
- version = "0.3.2"
2745
+ version = "0.3.3"
2787
2746
  source = "registry+https://github.com/rust-lang/crates.io-index"
2788
- checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0"
2747
+ checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e"
2789
2748
 
2790
2749
  [[package]]
2791
2750
  name = "tower-service"
2792
- version = "0.3.2"
2751
+ version = "0.3.3"
2793
2752
  source = "registry+https://github.com/rust-lang/crates.io-index"
2794
- checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
2753
+ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3"
2795
2754
 
2796
2755
  [[package]]
2797
2756
  name = "tracing"
@@ -2799,7 +2758,6 @@ version = "0.1.40"
2799
2758
  source = "registry+https://github.com/rust-lang/crates.io-index"
2800
2759
  checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
2801
2760
  dependencies = [
2802
- "log",
2803
2761
  "pin-project-lite",
2804
2762
  "tracing-attributes",
2805
2763
  "tracing-core",
@@ -2919,6 +2877,12 @@ dependencies = [
2919
2877
  "tinyvec",
2920
2878
  ]
2921
2879
 
2880
+ [[package]]
2881
+ name = "unicode-xid"
2882
+ version = "0.2.5"
2883
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2884
+ checksum = "229730647fbc343e3a80e463c1db7f78f3855d3f3739bee0dda773c9a037c90a"
2885
+
2922
2886
  [[package]]
2923
2887
  name = "untrusted"
2924
2888
  version = "0.9.0"
@@ -3094,9 +3058,9 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
3094
3058
 
3095
3059
  [[package]]
3096
3060
  name = "windows"
3097
- version = "0.52.0"
3061
+ version = "0.57.0"
3098
3062
  source = "registry+https://github.com/rust-lang/crates.io-index"
3099
- checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be"
3063
+ checksum = "12342cb4d8e3b046f3d80effd474a7a02447231330ef77d71daa6fbc40681143"
3100
3064
  dependencies = [
3101
3065
  "windows-core",
3102
3066
  "windows-targets 0.52.6",
@@ -3104,9 +3068,43 @@ dependencies = [
3104
3068
 
3105
3069
  [[package]]
3106
3070
  name = "windows-core"
3107
- version = "0.52.0"
3071
+ version = "0.57.0"
3072
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3073
+ checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d"
3074
+ dependencies = [
3075
+ "windows-implement",
3076
+ "windows-interface",
3077
+ "windows-result",
3078
+ "windows-targets 0.52.6",
3079
+ ]
3080
+
3081
+ [[package]]
3082
+ name = "windows-implement"
3083
+ version = "0.57.0"
3084
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3085
+ checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7"
3086
+ dependencies = [
3087
+ "proc-macro2",
3088
+ "quote",
3089
+ "syn 2.0.72",
3090
+ ]
3091
+
3092
+ [[package]]
3093
+ name = "windows-interface"
3094
+ version = "0.57.0"
3095
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3096
+ checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7"
3097
+ dependencies = [
3098
+ "proc-macro2",
3099
+ "quote",
3100
+ "syn 2.0.72",
3101
+ ]
3102
+
3103
+ [[package]]
3104
+ name = "windows-result"
3105
+ version = "0.1.2"
3108
3106
  source = "registry+https://github.com/rust-lang/crates.io-index"
3109
- checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
3107
+ checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8"
3110
3108
  dependencies = [
3111
3109
  "windows-targets 0.52.6",
3112
3110
  ]
package/lib/index.d.ts CHANGED
@@ -101,6 +101,9 @@ export interface OtelCollectorExporter {
101
101
  otel: {
102
102
  /**
103
103
  * URL of a gRPC OpenTelemetry collector.
104
+ *
105
+ * @format Starts with "grpc://" or "http://" for an unsecured connection (typical), or "grpcs://" or "https://" for a TLS connection.
106
+ * @note The `OTEL_EXPORTER_OTLP_ENDPOINT` environment variable, if set, will override this property.
104
107
  */
105
108
  url: string;
106
109
  /**
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../ts/index.ts"],"names":[],"mappings":";;;AAykBA,mCAA0E;AAAjE,uGAAA,aAAa,OAAA;AAAE,wGAAA,cAAc,OAAA;AAAE,yGAAA,eAAe,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../ts/index.ts"],"names":[],"mappings":";;;AA4kBA,mCAA0E;AAAjE,uGAAA,aAAa,OAAA;AAAE,wGAAA,cAAc,OAAA;AAAE,yGAAA,eAAe,OAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@temporalio/core-bridge",
3
- "version": "1.11.0",
3
+ "version": "1.11.2",
4
4
  "description": "Temporal.io SDK Core<>Node bridge",
5
5
  "main": "index.js",
6
6
  "types": "lib/index.d.ts",
@@ -22,7 +22,7 @@
22
22
  "author": "Temporal Technologies Inc. <sdk@temporal.io>",
23
23
  "license": "MIT",
24
24
  "dependencies": {
25
- "@temporalio/common": "1.11.0",
25
+ "@temporalio/common": "1.11.2",
26
26
  "arg": "^5.0.2",
27
27
  "cargo-cp-artifact": "^0.1.8",
28
28
  "which": "^4.0.0"
@@ -52,5 +52,5 @@
52
52
  "publishConfig": {
53
53
  "access": "public"
54
54
  },
55
- "gitHead": "3d7dd521cadc2ebcc4989360eeb0bedacd4533ab"
55
+ "gitHead": "e78b4f71236ccd3227e674bad68439e961fec639"
56
56
  }
@@ -61,8 +61,13 @@ jobs:
61
61
  name: state-machine-coverage
62
62
  path: machine_coverage/
63
63
 
64
- fmt:
64
+ integ-tests:
65
65
  name: Integ tests
66
+ env:
67
+ TEMPORAL_CLOUD_ADDRESS: https://${{ vars.TEMPORAL_CLIENT_NAMESPACE }}.tmprl.cloud:7233
68
+ TEMPORAL_CLOUD_NAMESPACE: ${{ vars.TEMPORAL_CLIENT_NAMESPACE }}
69
+ TEMPORAL_CLIENT_CERT: ${{ secrets.TEMPORAL_CLIENT_CERT }}
70
+ TEMPORAL_CLIENT_KEY: ${{ secrets.TEMPORAL_CLIENT_KEY }}
66
71
  timeout-minutes: 20
67
72
  runs-on: ubuntu-latest
68
73
  steps:
@@ -76,5 +81,6 @@ jobs:
76
81
  # TODO: Upgrade proto once https://github.com/arduino/setup-protoc/issues/99 is fixed
77
82
  version: '23.x'
78
83
  repo-token: ${{ secrets.GITHUB_TOKEN }}
84
+
79
85
  - uses: Swatinem/rust-cache@v2
80
86
  - run: cargo integ-test
@@ -8,7 +8,7 @@ license-file = "LICENSE.txt"
8
8
 
9
9
  [workspace.dependencies]
10
10
  derive_builder = "0.20"
11
- derive_more = { version = "0.99", default-features = false, features = ["constructor", "display", "from", "into"] }
11
+ derive_more = { version = "1.0", features = ["constructor", "display", "from", "into", "debug"] }
12
12
  once_cell = "1.16"
13
13
  tonic = "0.12"
14
14
  tonic-build = "0.12"
@@ -19,7 +19,7 @@ async-trait = "0.1"
19
19
  backoff = "0.4"
20
20
  base64 = "0.22"
21
21
  derive_builder = { workspace = true }
22
- derive_more = "0.99"
22
+ derive_more = { workspace = true }
23
23
  futures = "0.3"
24
24
  futures-retry = "0.6.0"
25
25
  http = "1.1.0"
@@ -34,7 +34,7 @@ slotmap = "1.0"
34
34
  thiserror = "1.0"
35
35
  tokio = "1.1"
36
36
  tonic = { workspace = true, features = ["tls", "tls-roots"] }
37
- tower = "0.4"
37
+ tower = { version = "0.5", features = ["util"] }
38
38
  tracing = "0.1"
39
39
  url = "2.2"
40
40
  uuid = { version = "1.1", features = ["v4"] }
@@ -47,7 +47,7 @@ path = "../core-api"
47
47
 
48
48
  [dev-dependencies]
49
49
  assert_matches = "1"
50
- mockall = "0.12"
50
+ mockall = "0.13"
51
51
 
52
52
  [lints]
53
53
  workspace = true
@@ -206,7 +206,7 @@ impl Default for ClientKeepAliveConfig {
206
206
  }
207
207
 
208
208
  /// Configuration for retrying requests to the server
209
- #[derive(Clone, Debug)]
209
+ #[derive(Clone, Debug, PartialEq)]
210
210
  pub struct RetryConfig {
211
211
  /// initial wait time before the first retry.
212
212
  pub initial_interval: Duration,
@@ -15,8 +15,8 @@ use tower::Service;
15
15
  /// Used to track context associated with metrics, and record/update them
16
16
  // Possible improvement: make generic over some type tag so that methods are only exposed if the
17
17
  // appropriate k/vs have already been set.
18
- #[derive(Clone, derive_more::DebugCustom)]
19
- #[debug(fmt = "MetricsContext {{ attribs: {kvs:?}, poll_is_long: {poll_is_long} }}")]
18
+ #[derive(Clone, derive_more::Debug)]
19
+ #[debug("MetricsContext {{ attribs: {kvs:?}, poll_is_long: {poll_is_long} }}")]
20
20
  pub(crate) struct MetricsContext {
21
21
  meter: Arc<dyn CoreMeter>,
22
22
  kvs: MetricAttributes,
@@ -149,12 +149,12 @@ where
149
149
  F: FnMut(&mut Self, Request<Req>) -> BoxFuture<'static, Result<Response<Resp>, Status>>,
150
150
  F: Send + Sync + Unpin + 'static,
151
151
  {
152
- let rtc = self.get_retry_config(call_name);
152
+ let info = self.get_call_info(call_name, Some(&req));
153
153
  let fact = || {
154
154
  let req_clone = req_cloner(&req);
155
155
  callfn(self, req_clone)
156
156
  };
157
- let res = Self::make_future_retry(rtc, fact, call_name);
157
+ let res = Self::make_future_retry(info, fact);
158
158
  res.map_err(|(e, _attempt)| e).map_ok(|x| x.0).await
159
159
  }
160
160
  }
@@ -318,7 +318,6 @@ impl RawClientLike for Client {
318
318
  }
319
319
 
320
320
  /// Helper for cloning a tonic request as long as the inner message may be cloned.
321
- /// We drop extensions, so, lang bridges can't pass those in :shrug:
322
321
  fn req_cloner<T: Clone>(cloneme: &Request<T>) -> Request<T> {
323
322
  let msg = cloneme.get_ref().clone();
324
323
  let mut new_req = Request::new(msg);
@@ -333,6 +332,7 @@ fn req_cloner<T: Clone>(cloneme: &Request<T>) -> Request<T> {
333
332
  }
334
333
  }
335
334
  }
335
+ *new_req.extensions_mut() = cloneme.extensions().clone();
336
336
  new_req
337
337
  }
338
338
 
@@ -359,6 +359,11 @@ impl AttachMetricLabels {
359
359
  }
360
360
  }
361
361
 
362
+ /// A request extension that, when set, should make the [RetryClient] consider this call to be a
363
+ /// [super::retry::CallType::UserLongPoll]
364
+ #[derive(Copy, Clone, Debug)]
365
+ pub(super) struct IsUserLongPoll;
366
+
362
367
  // Blanket impl the trait for all raw-client-like things. Since the trait default-implements
363
368
  // everything, there's nothing to actually implement.
364
369
  impl<RC, T> WorkflowService for RC
@@ -413,6 +418,15 @@ where
413
418
  }
414
419
 
415
420
  /// Helps re-declare gRPC client methods
421
+ ///
422
+ /// There are two forms:
423
+ ///
424
+ /// * The first takes a closure that can modify the request. This is only called once, before the
425
+ /// actual rpc call is made, and before determinations are made about the kind of call (long poll
426
+ /// or not) and retry policy.
427
+ /// * The second takes three closures. The first can modify the request like in the first form.
428
+ /// The second can modify the request and return a value, and is called right before every call
429
+ /// (including on retries). The third is called with the response to the call after it resolves.
416
430
  macro_rules! proxy {
417
431
  ($client_type:tt, $client_meth:ident, $method:ident, $req:ty, $resp:ty $(, $closure:expr)?) => {
418
432
  #[doc = concat!("See [", stringify!($client_type), "::", stringify!($method), "]")]
@@ -420,22 +434,27 @@ macro_rules! proxy {
420
434
  &mut self,
421
435
  request: impl tonic::IntoRequest<$req>,
422
436
  ) -> BoxFuture<Result<tonic::Response<$resp>, tonic::Status>> {
437
+ #[allow(unused_mut)]
438
+ let mut as_req = request.into_request();
439
+ $( type_closure_arg(&mut as_req, $closure); )*
423
440
  #[allow(unused_mut)]
424
441
  let fact = |c: &mut Self, mut req: tonic::Request<$req>| {
425
- $( type_closure_arg(&mut req, $closure); )*
426
442
  let mut c = c.$client_meth().clone();
427
443
  async move { c.$method(req).await }.boxed()
428
444
  };
429
- self.call(stringify!($method), fact, request.into_request())
445
+ self.call(stringify!($method), fact, as_req)
430
446
  }
431
447
  };
432
448
  ($client_type:tt, $client_meth:ident, $method:ident, $req:ty, $resp:ty,
433
- $closure_before:expr, $closure_after:expr) => {
449
+ $closure_request:expr, $closure_before:expr, $closure_after:expr) => {
434
450
  #[doc = concat!("See [", stringify!($client_type), "::", stringify!($method), "]")]
435
451
  fn $method(
436
452
  &mut self,
437
453
  request: impl tonic::IntoRequest<$req>,
438
454
  ) -> BoxFuture<Result<tonic::Response<$resp>, tonic::Status>> {
455
+ #[allow(unused_mut)]
456
+ let mut as_req = request.into_request();
457
+ type_closure_arg(&mut as_req, $closure_request);
439
458
  #[allow(unused_mut)]
440
459
  let fact = |c: &mut Self, mut req: tonic::Request<$req>| {
441
460
  let data = type_closure_two_arg(&mut req, c.get_workers_info().unwrap(),
@@ -445,13 +464,14 @@ macro_rules! proxy {
445
464
  type_closure_two_arg(c.$method(req).await, data, $closure_after)
446
465
  }.boxed()
447
466
  };
448
- self.call(stringify!($method), fact, request.into_request())
467
+ self.call(stringify!($method), fact, as_req)
449
468
  }
450
469
  };
451
470
  }
452
471
  macro_rules! proxier {
453
472
  ( $trait_name:ident; $impl_list_name:ident; $client_type:tt; $client_meth:ident;
454
- $(($method:ident, $req:ty, $resp:ty $(, $closure:expr $(, $closure_after:expr)?)? );)* ) => {
473
+ $(($method:ident, $req:ty, $resp:ty
474
+ $(, $closure:expr $(, $closure_before:expr, $closure_after:expr)?)? );)* ) => {
455
475
  #[cfg(test)]
456
476
  const $impl_list_name: &'static [&'static str] = &[$(stringify!($method)),*];
457
477
  /// Trait version of the generated client with modifications to attach appropriate metric
@@ -470,7 +490,7 @@ macro_rules! proxier {
470
490
  {
471
491
  $(
472
492
  proxy!($client_type, $client_meth, $method, $req, $resp
473
- $(,$closure $(,$closure_after)*)*);
493
+ $(,$closure $(,$closure_before, $closure_after)*)*);
474
494
  )*
475
495
  }
476
496
  };
@@ -548,15 +568,18 @@ proxier! {
548
568
  start_workflow_execution,
549
569
  StartWorkflowExecutionRequest,
550
570
  StartWorkflowExecutionResponse,
551
- |r, workers| {
552
- let mut slot: Option<Box<dyn Slot + Send>> = None;
571
+ |r| {
553
572
  let mut labels = namespaced_request!(r);
554
573
  labels.task_q(r.get_ref().task_queue.clone());
555
574
  r.extensions_mut().insert(labels);
575
+ },
576
+ |r, workers| {
577
+ let mut slot: Option<Box<dyn Slot + Send>> = None;
556
578
  let req_mut = r.get_mut();
557
579
  if req_mut.request_eager_execution {
558
580
  let namespace = req_mut.namespace.clone();
559
- let task_queue = req_mut.task_queue.clone().unwrap().name.clone();
581
+ let task_queue = req_mut.task_queue.as_ref()
582
+ .map(|tq| tq.name.clone()).unwrap_or_default();
560
583
  match workers.try_reserve_wft_slot(namespace, task_queue) {
561
584
  Some(s) => slot = Some(s),
562
585
  None => req_mut.request_eager_execution = false
@@ -586,6 +609,9 @@ proxier! {
586
609
  |r| {
587
610
  let labels = namespaced_request!(r);
588
611
  r.extensions_mut().insert(labels);
612
+ if r.get_ref().wait_new_event {
613
+ r.extensions_mut().insert(IsUserLongPoll);
614
+ }
589
615
  if r.get_ref().wait_new_event {
590
616
  r.set_default_timeout(LONG_POLL_TIMEOUT);
591
617
  }
@@ -981,7 +1007,7 @@ proxier! {
981
1007
  GetWorkerTaskReachabilityRequest,
982
1008
  GetWorkerTaskReachabilityResponse,
983
1009
  |r| {
984
- let mut labels = namespaced_request!(r);
1010
+ let labels = namespaced_request!(r);
985
1011
  r.extensions_mut().insert(labels);
986
1012
  }
987
1013
  );