@temporalio/core-bridge 0.21.1 → 1.0.0-rc.0
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/Cargo.lock +121 -15
- package/Cargo.toml +3 -1
- package/README.md +1 -1
- package/index.d.ts +140 -32
- 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/.buildkite/docker/docker-compose.yaml +8 -5
- package/sdk-core/ARCHITECTURE.md +9 -7
- package/sdk-core/README.md +5 -1
- package/sdk-core/arch_docs/diagrams/workflow_internals.svg +1 -0
- package/sdk-core/bridge-ffi/src/lib.rs +1 -1
- package/sdk-core/bridge-ffi/src/wrappers.rs +60 -37
- package/sdk-core/client/Cargo.toml +2 -0
- package/sdk-core/client/src/lib.rs +100 -22
- package/sdk-core/client/src/raw.rs +176 -56
- package/sdk-core/client/src/retry.rs +21 -5
- package/sdk-core/client/src/workflow_handle/mod.rs +185 -0
- package/sdk-core/core/Cargo.toml +2 -0
- package/sdk-core/core/benches/workflow_replay.rs +1 -7
- package/sdk-core/core/src/abstractions.rs +137 -16
- package/sdk-core/core/src/core_tests/activity_tasks.rs +258 -63
- package/sdk-core/core/src/core_tests/child_workflows.rs +8 -11
- package/sdk-core/core/src/core_tests/determinism.rs +10 -21
- package/sdk-core/core/src/core_tests/local_activities.rs +28 -37
- package/sdk-core/core/src/core_tests/queries.rs +266 -56
- package/sdk-core/core/src/core_tests/replay_flag.rs +1 -1
- package/sdk-core/core/src/core_tests/workers.rs +43 -57
- package/sdk-core/core/src/core_tests/workflow_cancels.rs +1 -1
- package/sdk-core/core/src/core_tests/workflow_tasks.rs +538 -243
- package/sdk-core/core/src/lib.rs +8 -5
- package/sdk-core/core/src/pollers/poll_buffer.rs +16 -10
- package/sdk-core/core/src/protosext/mod.rs +7 -9
- package/sdk-core/core/src/retry_logic.rs +73 -16
- package/sdk-core/core/src/telemetry/metrics.rs +21 -7
- package/sdk-core/core/src/telemetry/mod.rs +183 -111
- package/sdk-core/core/src/test_help/mod.rs +373 -91
- package/sdk-core/core/src/worker/activities/activity_heartbeat_manager.rs +18 -9
- package/sdk-core/core/src/worker/activities/local_activities.rs +22 -25
- package/sdk-core/core/src/worker/activities.rs +156 -29
- package/sdk-core/core/src/worker/client.rs +1 -0
- package/sdk-core/core/src/worker/mod.rs +134 -613
- package/sdk-core/core/src/{workflow → worker/workflow}/bridge.rs +1 -1
- package/sdk-core/core/src/{workflow → worker/workflow}/driven_workflow.rs +1 -1
- package/sdk-core/core/src/{workflow → worker/workflow}/history_update.rs +16 -2
- package/sdk-core/core/src/{workflow → worker/workflow}/machines/activity_state_machine.rs +39 -4
- package/sdk-core/core/src/{workflow → worker/workflow}/machines/cancel_external_state_machine.rs +5 -2
- package/sdk-core/core/src/{workflow → worker/workflow}/machines/cancel_workflow_state_machine.rs +1 -1
- package/sdk-core/core/src/{workflow → worker/workflow}/machines/child_workflow_state_machine.rs +2 -4
- package/sdk-core/core/src/{workflow → worker/workflow}/machines/complete_workflow_state_machine.rs +0 -0
- package/sdk-core/core/src/{workflow → worker/workflow}/machines/continue_as_new_workflow_state_machine.rs +1 -1
- package/sdk-core/core/src/{workflow → worker/workflow}/machines/fail_workflow_state_machine.rs +0 -0
- package/sdk-core/core/src/{workflow → worker/workflow}/machines/local_activity_state_machine.rs +2 -5
- package/sdk-core/core/src/{workflow → worker/workflow}/machines/mod.rs +2 -2
- package/sdk-core/core/src/{workflow → worker/workflow}/machines/mutable_side_effect_state_machine.rs +0 -0
- package/sdk-core/core/src/{workflow → worker/workflow}/machines/patch_state_machine.rs +1 -1
- package/sdk-core/core/src/{workflow → worker/workflow}/machines/side_effect_state_machine.rs +0 -0
- package/sdk-core/core/src/{workflow → worker/workflow}/machines/signal_external_state_machine.rs +4 -2
- package/sdk-core/core/src/{workflow → worker/workflow}/machines/timer_state_machine.rs +3 -4
- package/sdk-core/core/src/{workflow → worker/workflow}/machines/transition_coverage.rs +1 -1
- package/sdk-core/core/src/{workflow → worker/workflow}/machines/upsert_search_attributes_state_machine.rs +5 -7
- package/sdk-core/core/src/{workflow → worker/workflow}/machines/workflow_machines/local_acts.rs +2 -2
- package/sdk-core/core/src/{workflow → worker/workflow}/machines/workflow_machines.rs +34 -17
- package/sdk-core/core/src/{workflow → worker/workflow}/machines/workflow_task_state_machine.rs +0 -0
- package/sdk-core/core/src/worker/workflow/managed_run/managed_wf_test.rs +198 -0
- package/sdk-core/core/src/worker/workflow/managed_run.rs +627 -0
- package/sdk-core/core/src/worker/workflow/mod.rs +1115 -0
- package/sdk-core/core/src/worker/workflow/run_cache.rs +143 -0
- package/sdk-core/core/src/worker/workflow/wft_poller.rs +88 -0
- package/sdk-core/core/src/worker/workflow/workflow_stream.rs +936 -0
- package/sdk-core/core-api/src/errors.rs +3 -10
- package/sdk-core/core-api/src/lib.rs +2 -1
- package/sdk-core/core-api/src/worker.rs +34 -1
- package/sdk-core/etc/dynamic-config.yaml +2 -0
- package/sdk-core/integ-with-otel.sh +1 -1
- package/sdk-core/protos/api_upstream/Makefile +4 -4
- package/sdk-core/protos/api_upstream/api-linter.yaml +2 -0
- package/sdk-core/protos/api_upstream/buf.yaml +8 -9
- package/sdk-core/protos/api_upstream/temporal/api/cluster/v1/message.proto +83 -0
- package/sdk-core/protos/api_upstream/temporal/api/command/v1/message.proto +7 -1
- package/sdk-core/protos/api_upstream/temporal/api/enums/v1/cluster.proto +40 -0
- package/sdk-core/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +3 -0
- package/sdk-core/protos/api_upstream/temporal/api/enums/v1/reset.proto +3 -1
- package/sdk-core/protos/api_upstream/temporal/api/enums/v1/schedule.proto +60 -0
- package/sdk-core/protos/api_upstream/temporal/api/enums/v1/workflow.proto +3 -0
- package/sdk-core/protos/api_upstream/temporal/api/errordetails/v1/message.proto +32 -4
- package/sdk-core/protos/api_upstream/temporal/api/history/v1/message.proto +69 -19
- package/sdk-core/protos/api_upstream/temporal/api/namespace/v1/message.proto +13 -0
- package/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/request_response.proto +163 -0
- package/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/service.proto +97 -0
- package/sdk-core/protos/api_upstream/temporal/api/schedule/v1/message.proto +300 -0
- package/sdk-core/protos/api_upstream/temporal/api/workflow/v1/message.proto +25 -0
- package/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +180 -3
- package/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +53 -3
- package/sdk-core/protos/local/temporal/sdk/core/activity_result/activity_result.proto +2 -2
- package/sdk-core/protos/local/temporal/sdk/core/activity_task/activity_task.proto +6 -5
- package/sdk-core/protos/local/temporal/sdk/core/bridge/bridge.proto +27 -6
- package/sdk-core/protos/local/temporal/sdk/core/child_workflow/child_workflow.proto +2 -1
- package/sdk-core/protos/local/temporal/sdk/core/common/common.proto +0 -64
- package/sdk-core/protos/local/temporal/sdk/core/core_interface.proto +2 -1
- package/sdk-core/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +11 -8
- package/sdk-core/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +30 -25
- package/sdk-core/sdk/Cargo.toml +1 -0
- package/sdk-core/sdk/src/activity_context.rs +230 -0
- package/sdk-core/sdk/src/app_data.rs +37 -0
- package/sdk-core/sdk/src/interceptors.rs +8 -2
- package/sdk-core/sdk/src/lib.rs +233 -155
- package/sdk-core/sdk/src/workflow_context/options.rs +8 -6
- package/sdk-core/sdk/src/workflow_context.rs +14 -19
- package/sdk-core/sdk/src/workflow_future.rs +9 -3
- package/sdk-core/sdk-core-protos/src/history_builder.rs +19 -5
- package/sdk-core/sdk-core-protos/src/history_info.rs +11 -6
- package/sdk-core/sdk-core-protos/src/lib.rs +87 -176
- package/sdk-core/test-utils/Cargo.toml +1 -0
- package/sdk-core/test-utils/src/histfetch.rs +1 -1
- package/sdk-core/test-utils/src/lib.rs +125 -68
- package/sdk-core/tests/integ_tests/client_tests.rs +2 -2
- package/sdk-core/tests/integ_tests/heartbeat_tests.rs +11 -9
- package/sdk-core/tests/integ_tests/polling_tests.rs +12 -0
- package/sdk-core/tests/integ_tests/queries_tests.rs +39 -22
- package/sdk-core/tests/integ_tests/workflow_tests/activities.rs +59 -7
- package/sdk-core/tests/integ_tests/workflow_tests/appdata_propagation.rs +61 -0
- package/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +1 -1
- package/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +0 -1
- package/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +0 -3
- package/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +53 -28
- package/sdk-core/tests/integ_tests/workflow_tests/replay.rs +19 -0
- package/sdk-core/tests/integ_tests/workflow_tests/resets.rs +10 -1
- package/sdk-core/tests/integ_tests/workflow_tests/signals.rs +0 -1
- package/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +6 -3
- package/sdk-core/tests/integ_tests/workflow_tests.rs +81 -26
- package/sdk-core/tests/load_tests.rs +85 -6
- package/sdk-core/tests/main.rs +7 -3
- package/src/conversions.rs +149 -70
- package/src/errors.rs +10 -21
- package/src/lib.rs +400 -319
- package/sdk-core/core/src/pending_activations.rs +0 -162
- package/sdk-core/core/src/worker/wft_delivery.rs +0 -81
- package/sdk-core/core/src/workflow/mod.rs +0 -478
- package/sdk-core/core/src/workflow/workflow_tasks/cache_manager.rs +0 -149
- package/sdk-core/core/src/workflow/workflow_tasks/concurrency_manager.rs +0 -404
- package/sdk-core/core/src/workflow/workflow_tasks/mod.rs +0 -900
package/Cargo.lock
CHANGED
|
@@ -43,6 +43,17 @@ version = "1.5.0"
|
|
|
43
43
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
44
44
|
checksum = "c5d78ce20460b82d3fa150275ed9d55e21064fc7951177baacf86a145c4a4b1f"
|
|
45
45
|
|
|
46
|
+
[[package]]
|
|
47
|
+
name = "async-channel"
|
|
48
|
+
version = "1.6.1"
|
|
49
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
50
|
+
checksum = "2114d64672151c0c5eaa5e131ec84a74f06e1e559830dabba01ca30605d66319"
|
|
51
|
+
dependencies = [
|
|
52
|
+
"concurrent-queue",
|
|
53
|
+
"event-listener",
|
|
54
|
+
"futures-core",
|
|
55
|
+
]
|
|
56
|
+
|
|
46
57
|
[[package]]
|
|
47
58
|
name = "async-stream"
|
|
48
59
|
version = "0.3.3"
|
|
@@ -134,6 +145,15 @@ version = "1.0.0"
|
|
|
134
145
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
135
146
|
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
|
136
147
|
|
|
148
|
+
[[package]]
|
|
149
|
+
name = "concurrent-queue"
|
|
150
|
+
version = "1.2.2"
|
|
151
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
152
|
+
checksum = "30ed07550be01594c6026cff2a1d7fe9c8f683caa798e12b68694ac9e88286a3"
|
|
153
|
+
dependencies = [
|
|
154
|
+
"cache-padded",
|
|
155
|
+
]
|
|
156
|
+
|
|
137
157
|
[[package]]
|
|
138
158
|
name = "convert_case"
|
|
139
159
|
version = "0.4.0"
|
|
@@ -225,12 +245,6 @@ dependencies = [
|
|
|
225
245
|
"lazy_static",
|
|
226
246
|
]
|
|
227
247
|
|
|
228
|
-
[[package]]
|
|
229
|
-
name = "cslice"
|
|
230
|
-
version = "0.2.0"
|
|
231
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
232
|
-
checksum = "697c714f50560202b1f4e2e09cd50a421881c83e9025db75d15f276616f04f40"
|
|
233
|
-
|
|
234
248
|
[[package]]
|
|
235
249
|
name = "darling"
|
|
236
250
|
version = "0.14.0"
|
|
@@ -361,6 +375,12 @@ dependencies = [
|
|
|
361
375
|
"syn",
|
|
362
376
|
]
|
|
363
377
|
|
|
378
|
+
[[package]]
|
|
379
|
+
name = "event-listener"
|
|
380
|
+
version = "2.5.2"
|
|
381
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
382
|
+
checksum = "77f3309417938f28bf8228fcff79a4a37103981e3e186d2ccd19c74b38f4eb71"
|
|
383
|
+
|
|
364
384
|
[[package]]
|
|
365
385
|
name = "fastrand"
|
|
366
386
|
version = "1.7.0"
|
|
@@ -489,6 +509,12 @@ version = "0.3.21"
|
|
|
489
509
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
490
510
|
checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a"
|
|
491
511
|
|
|
512
|
+
[[package]]
|
|
513
|
+
name = "futures-timer"
|
|
514
|
+
version = "3.0.2"
|
|
515
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
516
|
+
checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c"
|
|
517
|
+
|
|
492
518
|
[[package]]
|
|
493
519
|
name = "futures-util"
|
|
494
520
|
version = "0.3.21"
|
|
@@ -518,6 +544,23 @@ dependencies = [
|
|
|
518
544
|
"wasi 0.10.2+wasi-snapshot-preview1",
|
|
519
545
|
]
|
|
520
546
|
|
|
547
|
+
[[package]]
|
|
548
|
+
name = "governor"
|
|
549
|
+
version = "0.4.2"
|
|
550
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
551
|
+
checksum = "19775995ee20209163239355bc3ad2f33f83da35d9ef72dea26e5af753552c87"
|
|
552
|
+
dependencies = [
|
|
553
|
+
"dashmap 5.2.0",
|
|
554
|
+
"futures",
|
|
555
|
+
"futures-timer",
|
|
556
|
+
"no-std-compat",
|
|
557
|
+
"nonzero_ext",
|
|
558
|
+
"parking_lot 0.12.0",
|
|
559
|
+
"quanta",
|
|
560
|
+
"rand",
|
|
561
|
+
"smallvec",
|
|
562
|
+
]
|
|
563
|
+
|
|
521
564
|
[[package]]
|
|
522
565
|
name = "h2"
|
|
523
566
|
version = "0.3.13"
|
|
@@ -744,6 +787,15 @@ dependencies = [
|
|
|
744
787
|
"hashbrown",
|
|
745
788
|
]
|
|
746
789
|
|
|
790
|
+
[[package]]
|
|
791
|
+
name = "mach"
|
|
792
|
+
version = "0.3.2"
|
|
793
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
794
|
+
checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa"
|
|
795
|
+
dependencies = [
|
|
796
|
+
"libc",
|
|
797
|
+
]
|
|
798
|
+
|
|
747
799
|
[[package]]
|
|
748
800
|
name = "matchers"
|
|
749
801
|
version = "0.1.0"
|
|
@@ -832,11 +884,10 @@ checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a"
|
|
|
832
884
|
|
|
833
885
|
[[package]]
|
|
834
886
|
name = "neon"
|
|
835
|
-
version = "0.
|
|
887
|
+
version = "0.10.1"
|
|
836
888
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
837
|
-
checksum = "
|
|
889
|
+
checksum = "28e15415261d880aed48122e917a45e87bb82cf0260bb6db48bbab44b7464373"
|
|
838
890
|
dependencies = [
|
|
839
|
-
"cslice",
|
|
840
891
|
"neon-build",
|
|
841
892
|
"neon-macros",
|
|
842
893
|
"neon-runtime",
|
|
@@ -846,31 +897,44 @@ dependencies = [
|
|
|
846
897
|
|
|
847
898
|
[[package]]
|
|
848
899
|
name = "neon-build"
|
|
849
|
-
version = "0.
|
|
900
|
+
version = "0.10.1"
|
|
850
901
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
851
|
-
checksum = "
|
|
902
|
+
checksum = "8bac98a702e71804af3dacfde41edde4a16076a7bbe889ae61e56e18c5b1c811"
|
|
852
903
|
|
|
853
904
|
[[package]]
|
|
854
905
|
name = "neon-macros"
|
|
855
|
-
version = "0.
|
|
906
|
+
version = "0.10.1"
|
|
856
907
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
857
|
-
checksum = "
|
|
908
|
+
checksum = "b7288eac8b54af7913c60e0eb0e2a7683020dffa342ab3fd15e28f035ba897cf"
|
|
858
909
|
dependencies = [
|
|
859
910
|
"quote",
|
|
860
911
|
"syn",
|
|
912
|
+
"syn-mid",
|
|
861
913
|
]
|
|
862
914
|
|
|
863
915
|
[[package]]
|
|
864
916
|
name = "neon-runtime"
|
|
865
|
-
version = "0.
|
|
917
|
+
version = "0.10.1"
|
|
866
918
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
867
|
-
checksum = "
|
|
919
|
+
checksum = "4676720fa8bb32c64c3d9f49c47a47289239ec46b4bdb66d0913cc512cb0daca"
|
|
868
920
|
dependencies = [
|
|
869
921
|
"cfg-if",
|
|
870
922
|
"libloading",
|
|
871
923
|
"smallvec",
|
|
872
924
|
]
|
|
873
925
|
|
|
926
|
+
[[package]]
|
|
927
|
+
name = "no-std-compat"
|
|
928
|
+
version = "0.4.1"
|
|
929
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
930
|
+
checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c"
|
|
931
|
+
|
|
932
|
+
[[package]]
|
|
933
|
+
name = "nonzero_ext"
|
|
934
|
+
version = "0.3.0"
|
|
935
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
936
|
+
checksum = "38bf9645c8b145698bb0b18a4637dcacbc421ea49bef2317e4fd8065a387cf21"
|
|
937
|
+
|
|
874
938
|
[[package]]
|
|
875
939
|
name = "normalize-line-endings"
|
|
876
940
|
version = "0.3.0"
|
|
@@ -1201,6 +1265,22 @@ version = "2.27.1"
|
|
|
1201
1265
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1202
1266
|
checksum = "cf7e6d18738ecd0902d30d1ad232c9125985a3422929b16c65517b38adc14f96"
|
|
1203
1267
|
|
|
1268
|
+
[[package]]
|
|
1269
|
+
name = "quanta"
|
|
1270
|
+
version = "0.9.3"
|
|
1271
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1272
|
+
checksum = "20afe714292d5e879d8b12740aa223c6a88f118af41870e8b6196e39a02238a8"
|
|
1273
|
+
dependencies = [
|
|
1274
|
+
"crossbeam-utils",
|
|
1275
|
+
"libc",
|
|
1276
|
+
"mach",
|
|
1277
|
+
"once_cell",
|
|
1278
|
+
"raw-cpuid",
|
|
1279
|
+
"wasi 0.10.2+wasi-snapshot-preview1",
|
|
1280
|
+
"web-sys",
|
|
1281
|
+
"winapi",
|
|
1282
|
+
]
|
|
1283
|
+
|
|
1204
1284
|
[[package]]
|
|
1205
1285
|
name = "quote"
|
|
1206
1286
|
version = "1.0.18"
|
|
@@ -1240,6 +1320,15 @@ dependencies = [
|
|
|
1240
1320
|
"getrandom",
|
|
1241
1321
|
]
|
|
1242
1322
|
|
|
1323
|
+
[[package]]
|
|
1324
|
+
name = "raw-cpuid"
|
|
1325
|
+
version = "10.3.0"
|
|
1326
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1327
|
+
checksum = "738bc47119e3eeccc7e94c4a506901aea5e7b4944ecd0829cbebf4af04ceda12"
|
|
1328
|
+
dependencies = [
|
|
1329
|
+
"bitflags",
|
|
1330
|
+
]
|
|
1331
|
+
|
|
1243
1332
|
[[package]]
|
|
1244
1333
|
name = "redox_syscall"
|
|
1245
1334
|
version = "0.2.13"
|
|
@@ -1550,6 +1639,17 @@ dependencies = [
|
|
|
1550
1639
|
"unicode-xid",
|
|
1551
1640
|
]
|
|
1552
1641
|
|
|
1642
|
+
[[package]]
|
|
1643
|
+
name = "syn-mid"
|
|
1644
|
+
version = "0.5.3"
|
|
1645
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1646
|
+
checksum = "baa8e7560a164edb1621a55d18a0c59abf49d360f47aa7b821061dd7eea7fac9"
|
|
1647
|
+
dependencies = [
|
|
1648
|
+
"proc-macro2",
|
|
1649
|
+
"quote",
|
|
1650
|
+
"syn",
|
|
1651
|
+
]
|
|
1652
|
+
|
|
1553
1653
|
[[package]]
|
|
1554
1654
|
name = "tempfile"
|
|
1555
1655
|
version = "3.3.0"
|
|
@@ -1568,6 +1668,7 @@ dependencies = [
|
|
|
1568
1668
|
name = "temporal-client"
|
|
1569
1669
|
version = "0.1.0"
|
|
1570
1670
|
dependencies = [
|
|
1671
|
+
"anyhow",
|
|
1571
1672
|
"async-trait",
|
|
1572
1673
|
"backoff",
|
|
1573
1674
|
"derive_builder",
|
|
@@ -1576,6 +1677,7 @@ dependencies = [
|
|
|
1576
1677
|
"futures-retry",
|
|
1577
1678
|
"http",
|
|
1578
1679
|
"opentelemetry 0.17.0",
|
|
1680
|
+
"parking_lot 0.12.0",
|
|
1579
1681
|
"prost-types",
|
|
1580
1682
|
"temporal-sdk-core-protos",
|
|
1581
1683
|
"thiserror",
|
|
@@ -1593,6 +1695,7 @@ version = "0.1.0"
|
|
|
1593
1695
|
dependencies = [
|
|
1594
1696
|
"anyhow",
|
|
1595
1697
|
"arc-swap",
|
|
1698
|
+
"async-channel",
|
|
1596
1699
|
"async-trait",
|
|
1597
1700
|
"base64",
|
|
1598
1701
|
"crossbeam",
|
|
@@ -1601,6 +1704,7 @@ dependencies = [
|
|
|
1601
1704
|
"derive_more",
|
|
1602
1705
|
"enum_dispatch",
|
|
1603
1706
|
"futures",
|
|
1707
|
+
"governor",
|
|
1604
1708
|
"http",
|
|
1605
1709
|
"hyper",
|
|
1606
1710
|
"itertools",
|
|
@@ -1682,11 +1786,13 @@ dependencies = [
|
|
|
1682
1786
|
"neon",
|
|
1683
1787
|
"once_cell",
|
|
1684
1788
|
"opentelemetry 0.16.0",
|
|
1789
|
+
"parking_lot 0.12.0",
|
|
1685
1790
|
"prost",
|
|
1686
1791
|
"prost-types",
|
|
1687
1792
|
"temporal-client",
|
|
1688
1793
|
"temporal-sdk-core",
|
|
1689
1794
|
"tokio",
|
|
1795
|
+
"tokio-stream",
|
|
1690
1796
|
]
|
|
1691
1797
|
|
|
1692
1798
|
[[package]]
|
package/Cargo.toml
CHANGED
|
@@ -19,11 +19,13 @@ incremental = false
|
|
|
19
19
|
[dependencies]
|
|
20
20
|
futures = { version = "0.3", features = ["executor"] }
|
|
21
21
|
log = "0.4"
|
|
22
|
-
neon = { version = "0.
|
|
22
|
+
neon = { version = "0.10", default-features = false, features = ["napi-6", "event-queue-api"] }
|
|
23
23
|
opentelemetry = "0.16"
|
|
24
|
+
parking_lot = "0.12"
|
|
24
25
|
prost = "0.9"
|
|
25
26
|
prost-types = "0.9"
|
|
26
27
|
tokio = "1.13"
|
|
27
28
|
once_cell = "1.7.2"
|
|
28
29
|
temporal-sdk-core = { version = "*", path = "./sdk-core/core" }
|
|
29
30
|
temporal-client = { version = "*", path = "./sdk-core/client" }
|
|
31
|
+
tokio-stream = "0.1"
|
package/README.md
CHANGED
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/@temporalio/core-bridge)
|
|
4
4
|
|
|
5
|
-
Part of [Temporal](https://temporal.io)'s [TypeScript SDK](https://docs.temporal.io/
|
|
5
|
+
Part of [Temporal](https://temporal.io)'s [TypeScript SDK](https://docs.temporal.io/typescript/introduction/).
|
package/index.d.ts
CHANGED
|
@@ -27,15 +27,6 @@ export interface ClientOptions {
|
|
|
27
27
|
*/
|
|
28
28
|
url: string;
|
|
29
29
|
|
|
30
|
-
/**
|
|
31
|
-
* A human-readable string that can identify your worker
|
|
32
|
-
*/
|
|
33
|
-
identity: string;
|
|
34
|
-
/**
|
|
35
|
-
* A string that should be unique to the exact worker code/binary being executed
|
|
36
|
-
*/
|
|
37
|
-
workerBinaryId: string;
|
|
38
|
-
|
|
39
30
|
/** Version string for the whole node SDK. Should never be set by user */
|
|
40
31
|
sdkVersion: string;
|
|
41
32
|
|
|
@@ -51,35 +42,133 @@ export interface ClientOptions {
|
|
|
51
42
|
* Optional retry options for server requests.
|
|
52
43
|
*/
|
|
53
44
|
retry?: RetryOptions;
|
|
54
|
-
}
|
|
55
45
|
|
|
56
|
-
export interface TelemetryOptions {
|
|
57
46
|
/**
|
|
58
|
-
*
|
|
59
|
-
*
|
|
47
|
+
* Optional mapping of gRPC metadata (HTTP headers) to send with each request to the server.
|
|
48
|
+
*
|
|
49
|
+
* Set statically at connection time, can be replaced later using {@link clientUpdateHeaders}.
|
|
60
50
|
*/
|
|
61
|
-
|
|
51
|
+
metadata?: Record<string, string>;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Log directly to console
|
|
56
|
+
*/
|
|
57
|
+
export interface ConsoleLogger {
|
|
58
|
+
console: {};
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Forward logs to {@link Runtime} logger
|
|
63
|
+
*/
|
|
64
|
+
export interface ForwardLogger {
|
|
65
|
+
forward: {
|
|
66
|
+
/**
|
|
67
|
+
* What level, if any, logs should be forwarded from core at
|
|
68
|
+
*
|
|
69
|
+
*/
|
|
70
|
+
// These strings should match the log::LevelFilter enum in rust
|
|
71
|
+
level: LogLevel;
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Logger types supported by Core
|
|
77
|
+
*/
|
|
78
|
+
export type Logger = ConsoleLogger | ForwardLogger;
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* OpenTelemetry Collector options for exporting metrics or traces
|
|
82
|
+
*/
|
|
83
|
+
export interface OtelCollectorExporter {
|
|
84
|
+
otel: {
|
|
85
|
+
/**
|
|
86
|
+
* URL of a gRPC OpenTelemetry collector.
|
|
87
|
+
*/
|
|
88
|
+
url: string;
|
|
89
|
+
/**
|
|
90
|
+
* Optional set of HTTP request headers to send to Collector (e.g. for authentication)
|
|
91
|
+
*/
|
|
92
|
+
headers?: Record<string, string>;
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Prometheus metrics exporter options
|
|
98
|
+
*/
|
|
99
|
+
export interface PrometheusMetricsExporter {
|
|
100
|
+
prometheus: {
|
|
101
|
+
/**
|
|
102
|
+
* Address to bind the Prometheus HTTP metrics exporter server
|
|
103
|
+
* (for example, `0.0.0.0:1234`).
|
|
104
|
+
*
|
|
105
|
+
* Metrics will be available for scraping under the standard `/metrics` route.
|
|
106
|
+
*/
|
|
107
|
+
bindAddress: string;
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Metrics exporters supported by Core
|
|
113
|
+
*/
|
|
114
|
+
export type MetricsExporter = PrometheusMetricsExporter | OtelCollectorExporter;
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Trace exporters supported by Core
|
|
118
|
+
*/
|
|
119
|
+
export type TraceExporter = OtelCollectorExporter;
|
|
120
|
+
|
|
121
|
+
export interface TelemetryOptions {
|
|
62
122
|
/**
|
|
63
123
|
* A string in the env filter format specified here:
|
|
64
124
|
* https://docs.rs/tracing-subscriber/0.2.20/tracing_subscriber/struct.EnvFilter.html
|
|
65
125
|
*
|
|
66
126
|
* Which determines what tracing data is collected in the Core SDK
|
|
127
|
+
*
|
|
128
|
+
* @default `temporal_sdk_core=WARN`
|
|
67
129
|
*/
|
|
68
130
|
tracingFilter?: string;
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
*
|
|
74
|
-
*
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* If set true, do not prefix metrics with `temporal_`. Will be removed eventually as
|
|
134
|
+
* the prefix is consistent with other SDKs.
|
|
135
|
+
*
|
|
136
|
+
* @default `false`
|
|
137
|
+
*/
|
|
138
|
+
noTemporalPrefixForMetrics?: boolean;
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Control where to send Rust Core logs
|
|
142
|
+
*
|
|
143
|
+
* @default log to console
|
|
144
|
+
*/
|
|
145
|
+
logging?: Logger;
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Control where to send traces generated by Rust Core, optional and turned off by default.
|
|
75
149
|
*
|
|
76
|
-
*
|
|
77
|
-
* Metrics will be available for scraping under the standard `/metrics` route.
|
|
150
|
+
* This is typically used for profiling SDK internals.
|
|
78
151
|
*/
|
|
79
|
-
|
|
152
|
+
tracing?: TraceExporter;
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Control exporting {@link NativeConnection} and {@link Worker} metrics.
|
|
156
|
+
*
|
|
157
|
+
* Turned off by default
|
|
158
|
+
*/
|
|
159
|
+
metrics?: MetricsExporter;
|
|
80
160
|
}
|
|
81
161
|
|
|
82
162
|
export interface WorkerOptions {
|
|
163
|
+
/**
|
|
164
|
+
* A human-readable string that can identify your worker
|
|
165
|
+
*/
|
|
166
|
+
identity: string;
|
|
167
|
+
/**
|
|
168
|
+
* A string that should be unique to the exact worker code/binary being executed
|
|
169
|
+
*/
|
|
170
|
+
buildId: string;
|
|
171
|
+
|
|
83
172
|
/**
|
|
84
173
|
* The task queue the worker will pull from
|
|
85
174
|
*/
|
|
@@ -87,16 +176,14 @@ export interface WorkerOptions {
|
|
|
87
176
|
|
|
88
177
|
maxConcurrentActivityTaskExecutions: number;
|
|
89
178
|
maxConcurrentWorkflowTaskExecutions: number;
|
|
90
|
-
|
|
91
|
-
|
|
179
|
+
maxConcurrentLocalActivityExecutions: number;
|
|
180
|
+
|
|
92
181
|
/**
|
|
93
|
-
* `
|
|
94
|
-
*
|
|
95
|
-
* the sticky queue will allow 4 max pollers while the nonsticky queue will allow one. The
|
|
96
|
-
* minimum for either poller is 1, so if `max_concurrent_wft_polls` is 1 and sticky queues are
|
|
97
|
-
* enabled, there will be 2 concurrent polls.
|
|
182
|
+
* If set to `false` this worker will only handle workflow tasks and local activities, it will not
|
|
183
|
+
* poll for activity tasks.
|
|
98
184
|
*/
|
|
99
|
-
|
|
185
|
+
enableNonLocalActivities: boolean;
|
|
186
|
+
|
|
100
187
|
/**
|
|
101
188
|
* How long a workflow task is allowed to sit on the sticky queue before it is timed out
|
|
102
189
|
* and moved to the non-sticky queue where it may be picked up by any worker.
|
|
@@ -121,6 +208,21 @@ export interface WorkerOptions {
|
|
|
121
208
|
* @default 30 seconds
|
|
122
209
|
*/
|
|
123
210
|
defaultHeartbeatThrottleIntervalMs: number;
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Sets the maximum number of activities per second the task queue will dispatch, controlled
|
|
214
|
+
* server-side. Note that this only takes effect upon an activity poll request. If multiple
|
|
215
|
+
* workers on the same queue have different values set, they will thrash with the last poller
|
|
216
|
+
* winning.
|
|
217
|
+
*/
|
|
218
|
+
maxTaskQueueActivitiesPerSecond?: number;
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* Limits the number of activities per second that this worker will process. The worker will
|
|
222
|
+
* not poll for new activities if by doing so it might receive and execute an activity which
|
|
223
|
+
* would cause it to exceed this limit. Must be a positive floating point number.
|
|
224
|
+
*/
|
|
225
|
+
maxActivitiesPerSecond?: number;
|
|
124
226
|
}
|
|
125
227
|
|
|
126
228
|
/** Log level - must match rust log level names */
|
|
@@ -161,7 +263,13 @@ export declare function newReplayWorker(
|
|
|
161
263
|
history: ArrayBuffer,
|
|
162
264
|
callback: WorkerCallback
|
|
163
265
|
): void;
|
|
164
|
-
export declare function
|
|
266
|
+
export declare function workerInitiateShutdown(worker: Worker, callback: VoidCallback): void;
|
|
267
|
+
export declare function workerFinalizeShutdown(worker: Worker): void;
|
|
268
|
+
export declare function clientUpdateHeaders(
|
|
269
|
+
client: Client,
|
|
270
|
+
headers: Record<string, string>,
|
|
271
|
+
callback: VoidCallback
|
|
272
|
+
): void;
|
|
165
273
|
export declare function clientClose(client: Client): void;
|
|
166
274
|
export declare function runtimeShutdown(runtime: Runtime, callback: VoidCallback): void;
|
|
167
275
|
export declare function pollLogs(runtime: Runtime, callback: LogsCallback): void;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@temporalio/core-bridge",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0-rc.0",
|
|
4
4
|
"description": "Temporal.io SDK Core<>Node bridge",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"types": "index.d.ts",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"license": "MIT",
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"@opentelemetry/api": "^1.0.3",
|
|
23
|
-
"@temporalio/internal-non-workflow-common": "^0.
|
|
23
|
+
"@temporalio/internal-non-workflow-common": "^1.0.0-rc.0",
|
|
24
24
|
"arg": "^5.0.1",
|
|
25
25
|
"cargo-cp-artifact": "^0.1.4",
|
|
26
26
|
"which": "^2.0.2"
|
|
@@ -43,5 +43,5 @@
|
|
|
43
43
|
"publishConfig": {
|
|
44
44
|
"access": "public"
|
|
45
45
|
},
|
|
46
|
-
"gitHead": "
|
|
46
|
+
"gitHead": "c25e91309b980f2118df4048d760306982019871"
|
|
47
47
|
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -9,7 +9,7 @@ services:
|
|
|
9
9
|
# - '9042:9042'
|
|
10
10
|
|
|
11
11
|
temporal:
|
|
12
|
-
image: temporalio/auto-setup:1.
|
|
12
|
+
image: temporalio/auto-setup:1.16.2
|
|
13
13
|
ports:
|
|
14
14
|
- "7233:7233"
|
|
15
15
|
- "7234:7234"
|
|
@@ -21,17 +21,20 @@ services:
|
|
|
21
21
|
# - "6939:6939"
|
|
22
22
|
environment:
|
|
23
23
|
- "CASSANDRA_SEEDS=cassandra"
|
|
24
|
-
- "DYNAMIC_CONFIG_FILE_PATH
|
|
24
|
+
- "DYNAMIC_CONFIG_FILE_PATH=/etc/dynamic-config.yaml"
|
|
25
|
+
volumes:
|
|
26
|
+
- ../../etc/dynamic-config.yaml:/etc/dynamic-config.yaml
|
|
25
27
|
depends_on:
|
|
26
28
|
- cassandra
|
|
27
29
|
|
|
28
30
|
temporal-web:
|
|
29
|
-
image: temporalio/
|
|
31
|
+
image: temporalio/ui:0.10.2
|
|
30
32
|
logging:
|
|
31
33
|
driver: none
|
|
32
34
|
ports:
|
|
33
|
-
- "
|
|
35
|
+
- "8080:8080"
|
|
34
36
|
environment:
|
|
35
|
-
-
|
|
37
|
+
- TEMPORAL_ADDRESS=temporal:7233
|
|
38
|
+
- TEMPORAL_CORS_ORIGINS=http://localhost:3000
|
|
36
39
|
depends_on:
|
|
37
40
|
- temporal
|
package/sdk-core/ARCHITECTURE.md
CHANGED
|
@@ -20,10 +20,9 @@ There are many concepts involved in the chain of communication from server->core
|
|
|
20
20
|
* `HistoryEvent` (often referred to simply as an `Event`): These events come from the server and represent the history of the workflow. They are defined in the protobuf definitions for the Temporal service itself.
|
|
21
21
|
* `Command`: These are the commands defined in the temporal service protobufs that are returned by clients upon completing a `WorkflowTask`. For example, starting a timer or an activity.
|
|
22
22
|
* `WorkflowTask`: These are how the server represents the need to run user workflow code (or the result of it executing). See the `HistoryEvent` proto definition for more.
|
|
23
|
-
* `
|
|
24
|
-
* `
|
|
25
|
-
* `
|
|
26
|
-
* `TaskCompletion`: Provided by the lang side when calling `Core::complete_task`. Can be the result of a `WfActivation` or an `ActivityTask`. In the case of workflow activations, the (successful) completion contains one or more `Command`s, which may be literal `Command`s as defined in the Temporal service protobufs, or may be `CoreCommand`s, which support things like query responses.
|
|
23
|
+
* `WorkflowActivation`: These are produced by the Core SDK when the lang sdk needs to "activate" the user's workflow code, either running it from the beginning or resuming a cached workflow.
|
|
24
|
+
* `WorkflowActivationJob` (shorthand: `Job`s): These are included in `WorkflowActivation`s and represent the actual things that have happened since the last time the workflow was activated (if ever). EX: Firing a timer, proceeding with the result of an activity, etc. They are typically derived from `HistoryEvent`s, but also include things like evicting a run from the cache.
|
|
25
|
+
* `WorkflowActivationCompletion`: Provided by the lang side when completing an activation. The (successful) completion contains one or more `WorkflowCommand`s, which are often translated into `Command`s as defined in the Temporal service protobufs, but also include things like query responses.
|
|
27
26
|
|
|
28
27
|
Additional clarifications that are internal to Core:
|
|
29
28
|
* `StateMachine`s also handle events and produce commands, which often map directly to the above `HistoryEvent`s and `Command`s, but are distinct types. The state machine library is Temporal agnostic - but all interactions with the machines pass through a `TemporalStateMachine` trait, which accepts `HistoryEvent`s, and produces `WorkflowTrigger`s.
|
|
@@ -33,7 +32,7 @@ Additional clarifications that are internal to Core:
|
|
|
33
32
|
### Core SDK Responsibilities
|
|
34
33
|
|
|
35
34
|
- Communication with Temporal service using a generated gRPC client, which is wrapped with somewhat more ergonomic traits.
|
|
36
|
-
- Provide interface for language-specific SDK to drive event loop and handle returned commands. The lang sdk will continuously call/poll the core SDK to receive new
|
|
35
|
+
- Provide interface for language-specific SDK to drive event loop and handle returned commands. The lang sdk will continuously call/poll the core SDK to receive new tasks, which either represent workflows being started or awoken (`WorkflowActivation`) or activities to execute (`ActivityTask`). It will then call its workflow/activity functions with the provided information as appropriate, and will then push completed tasks back into the core SDK.
|
|
37
36
|
- Advance state machines and report back to the temporal server as appropriate when handling events and commands
|
|
38
37
|
|
|
39
38
|
### Language Specific SDK Responsibilities
|
|
@@ -61,7 +60,7 @@ async fn hello_activity(name: &str) -> String {
|
|
|
61
60
|
}
|
|
62
61
|
```
|
|
63
62
|
|
|
64
|
-
[](https://mermaid-js.github.io/mermaid-live-editor/edit#pako:eNptk81O6zAQhV9l5AWr8gIRqoQCC0QXQJDuJpvBnrZWbY-vf9rbi3h3bJqE0JKVlfP5zMyx_S4kKxKNiPQ3k5N0p3ET0PYOyucxJC21R5egA4zwStZzQAMdhb2WdIm1FWs5EHR3j5fyqsordJuTfAJWcL1cQtvAg9NJo9H_CQ4cdhTmetfAJnjZQJeK4Z-irw0f7v-RzEmzG80Ms__aXVVIGHfgA0uKUbvNCWl_-j2xMaPda-GfM-Vhsg6uh9aqEOEKtjomDseizb0KcOu9OU5yYogJE4FFudWO4ometUh7KnnU5VkItR1YcwCUSe-xzhanWpVZNTC2ezshc5MCvGQ3hbCoAahcIgDJ1qJTcaKHmpd-LVtvqK5u3sJSskuoXUnwzOJ7fLXHcn1-nZqcGk_nLPoXip6dmqc_FCZ1sXdKqNvmpPhQfouFsBQsalWu8HvFepG2ZKkXTVkqDLte9O6jcNmr0tm90uV8RLNGE2khMCfujk6KJoVMIzS8gYH6-ASOZQf0)
|
|
65
64
|
|
|
66
65
|
## API Definition
|
|
67
66
|
|
|
@@ -71,4 +70,7 @@ See the latest API definition [here](https://github.com/temporalio/sdk-core/blob
|
|
|
71
70
|
|
|
72
71
|
|
|
73
72
|
## Other topics
|
|
74
|
-
- [Sticky task queues](arch_docs/sticky_queues.md)
|
|
73
|
+
- [Sticky task queues](arch_docs/sticky_queues.md)
|
|
74
|
+
|
|
75
|
+
## Workflow Processing Internals
|
|
76
|
+

|
package/sdk-core/README.md
CHANGED
|
@@ -61,6 +61,7 @@ The passed in options to initialization can be customized to export to an OTel c
|
|
|
61
61
|
|
|
62
62
|
To run integ tests with OTel collection on, you can use `integ-with-otel.sh`. You will want to make
|
|
63
63
|
sure you are running the collector via docker, which can be done like so:
|
|
64
|
+
|
|
64
65
|
`docker-compose -f .buildkite/docker/docker-compose.yaml -f .buildkite/docker/docker-compose-telem.yaml up`
|
|
65
66
|
|
|
66
67
|
If you are working on a language SDK, you are expected to initialize tracing early in your `main`
|
|
@@ -70,7 +71,10 @@ equivalent.
|
|
|
70
71
|
|
|
71
72
|
This repo uses a subtree for upstream protobuf files. The path `protos/api_upstream` is a
|
|
72
73
|
subtree. To update it, use:
|
|
73
|
-
|
|
74
|
+
|
|
75
|
+
`git pull --squash -s subtree ssh://git@github.com/temporalio/api.git master --allow-unrelated-histories`
|
|
76
|
+
|
|
77
|
+
Do not question why this git command is the way it is. It is not our place to interpret git's ways.
|
|
74
78
|
|
|
75
79
|
## Fetching Histories
|
|
76
80
|
Tests which would like to replay stored histories rely on that history being made available in
|