temporalio 0.0.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.
- checksums.yaml +7 -0
- data/Gemfile +3 -0
- data/LICENSE +20 -0
- data/README.md +130 -0
- data/bridge/Cargo.lock +2865 -0
- data/bridge/Cargo.toml +26 -0
- data/bridge/sdk-core/ARCHITECTURE.md +76 -0
- data/bridge/sdk-core/Cargo.lock +2606 -0
- data/bridge/sdk-core/Cargo.toml +2 -0
- data/bridge/sdk-core/LICENSE.txt +23 -0
- data/bridge/sdk-core/README.md +107 -0
- data/bridge/sdk-core/arch_docs/diagrams/README.md +10 -0
- data/bridge/sdk-core/arch_docs/diagrams/sticky_queues.puml +40 -0
- data/bridge/sdk-core/arch_docs/diagrams/workflow_internals.svg +1 -0
- data/bridge/sdk-core/arch_docs/sticky_queues.md +51 -0
- data/bridge/sdk-core/bridge-ffi/Cargo.toml +24 -0
- data/bridge/sdk-core/bridge-ffi/LICENSE.txt +23 -0
- data/bridge/sdk-core/bridge-ffi/build.rs +25 -0
- data/bridge/sdk-core/bridge-ffi/include/sdk-core-bridge.h +249 -0
- data/bridge/sdk-core/bridge-ffi/src/lib.rs +825 -0
- data/bridge/sdk-core/bridge-ffi/src/wrappers.rs +211 -0
- data/bridge/sdk-core/client/Cargo.toml +40 -0
- data/bridge/sdk-core/client/LICENSE.txt +23 -0
- data/bridge/sdk-core/client/src/lib.rs +1294 -0
- data/bridge/sdk-core/client/src/metrics.rs +165 -0
- data/bridge/sdk-core/client/src/raw.rs +931 -0
- data/bridge/sdk-core/client/src/retry.rs +674 -0
- data/bridge/sdk-core/client/src/workflow_handle/mod.rs +185 -0
- data/bridge/sdk-core/core/Cargo.toml +116 -0
- data/bridge/sdk-core/core/LICENSE.txt +23 -0
- data/bridge/sdk-core/core/benches/workflow_replay.rs +73 -0
- data/bridge/sdk-core/core/src/abstractions.rs +166 -0
- data/bridge/sdk-core/core/src/core_tests/activity_tasks.rs +911 -0
- data/bridge/sdk-core/core/src/core_tests/child_workflows.rs +221 -0
- data/bridge/sdk-core/core/src/core_tests/determinism.rs +107 -0
- data/bridge/sdk-core/core/src/core_tests/local_activities.rs +515 -0
- data/bridge/sdk-core/core/src/core_tests/mod.rs +100 -0
- data/bridge/sdk-core/core/src/core_tests/queries.rs +736 -0
- data/bridge/sdk-core/core/src/core_tests/replay_flag.rs +65 -0
- data/bridge/sdk-core/core/src/core_tests/workers.rs +259 -0
- data/bridge/sdk-core/core/src/core_tests/workflow_cancels.rs +124 -0
- data/bridge/sdk-core/core/src/core_tests/workflow_tasks.rs +2070 -0
- data/bridge/sdk-core/core/src/ephemeral_server/mod.rs +515 -0
- data/bridge/sdk-core/core/src/lib.rs +175 -0
- data/bridge/sdk-core/core/src/log_export.rs +62 -0
- data/bridge/sdk-core/core/src/pollers/mod.rs +54 -0
- data/bridge/sdk-core/core/src/pollers/poll_buffer.rs +297 -0
- data/bridge/sdk-core/core/src/protosext/mod.rs +428 -0
- data/bridge/sdk-core/core/src/replay/mod.rs +71 -0
- data/bridge/sdk-core/core/src/retry_logic.rs +202 -0
- data/bridge/sdk-core/core/src/telemetry/metrics.rs +383 -0
- data/bridge/sdk-core/core/src/telemetry/mod.rs +412 -0
- data/bridge/sdk-core/core/src/telemetry/prometheus_server.rs +77 -0
- data/bridge/sdk-core/core/src/test_help/mod.rs +875 -0
- data/bridge/sdk-core/core/src/worker/activities/activity_heartbeat_manager.rs +580 -0
- data/bridge/sdk-core/core/src/worker/activities/local_activities.rs +1042 -0
- data/bridge/sdk-core/core/src/worker/activities.rs +464 -0
- data/bridge/sdk-core/core/src/worker/client/mocks.rs +87 -0
- data/bridge/sdk-core/core/src/worker/client.rs +347 -0
- data/bridge/sdk-core/core/src/worker/mod.rs +566 -0
- data/bridge/sdk-core/core/src/worker/workflow/bridge.rs +37 -0
- data/bridge/sdk-core/core/src/worker/workflow/driven_workflow.rs +110 -0
- data/bridge/sdk-core/core/src/worker/workflow/history_update.rs +458 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/activity_state_machine.rs +911 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_external_state_machine.rs +298 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_workflow_state_machine.rs +171 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/child_workflow_state_machine.rs +860 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/complete_workflow_state_machine.rs +140 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/continue_as_new_workflow_state_machine.rs +161 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/fail_workflow_state_machine.rs +133 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/local_activity_state_machine.rs +1448 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/mod.rs +342 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/mutable_side_effect_state_machine.rs +127 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/patch_state_machine.rs +712 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/side_effect_state_machine.rs +71 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/signal_external_state_machine.rs +443 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/timer_state_machine.rs +439 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/transition_coverage.rs +169 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +246 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines/local_acts.rs +96 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines.rs +1184 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_task_state_machine.rs +277 -0
- data/bridge/sdk-core/core/src/worker/workflow/managed_run/managed_wf_test.rs +198 -0
- data/bridge/sdk-core/core/src/worker/workflow/managed_run.rs +647 -0
- data/bridge/sdk-core/core/src/worker/workflow/mod.rs +1143 -0
- data/bridge/sdk-core/core/src/worker/workflow/run_cache.rs +145 -0
- data/bridge/sdk-core/core/src/worker/workflow/wft_poller.rs +88 -0
- data/bridge/sdk-core/core/src/worker/workflow/workflow_stream.rs +940 -0
- data/bridge/sdk-core/core-api/Cargo.toml +31 -0
- data/bridge/sdk-core/core-api/LICENSE.txt +23 -0
- data/bridge/sdk-core/core-api/src/errors.rs +95 -0
- data/bridge/sdk-core/core-api/src/lib.rs +151 -0
- data/bridge/sdk-core/core-api/src/worker.rs +135 -0
- data/bridge/sdk-core/etc/deps.svg +187 -0
- data/bridge/sdk-core/etc/dynamic-config.yaml +2 -0
- data/bridge/sdk-core/etc/otel-collector-config.yaml +36 -0
- data/bridge/sdk-core/etc/prometheus.yaml +6 -0
- data/bridge/sdk-core/fsm/Cargo.toml +18 -0
- data/bridge/sdk-core/fsm/LICENSE.txt +23 -0
- data/bridge/sdk-core/fsm/README.md +3 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/Cargo.toml +27 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/LICENSE.txt +23 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/src/lib.rs +647 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/progress.rs +8 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dupe_transitions_fail.rs +18 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dupe_transitions_fail.stderr +12 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dynamic_dest_pass.rs +41 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/forgot_name_fail.rs +14 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/forgot_name_fail.stderr +11 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/handler_arg_pass.rs +32 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/handler_pass.rs +31 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/medium_complex_pass.rs +46 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.rs +29 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.stderr +12 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/simple_pass.rs +32 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/struct_event_variant_fail.rs +18 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/struct_event_variant_fail.stderr +5 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_more_item_event_variant_fail.rs +11 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_more_item_event_variant_fail.stderr +5 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_zero_item_event_variant_fail.rs +11 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_zero_item_event_variant_fail.stderr +5 -0
- data/bridge/sdk-core/fsm/rustfsm_trait/Cargo.toml +14 -0
- data/bridge/sdk-core/fsm/rustfsm_trait/LICENSE.txt +23 -0
- data/bridge/sdk-core/fsm/rustfsm_trait/src/lib.rs +249 -0
- data/bridge/sdk-core/fsm/src/lib.rs +2 -0
- data/bridge/sdk-core/histories/fail_wf_task.bin +0 -0
- data/bridge/sdk-core/histories/timer_workflow_history.bin +0 -0
- data/bridge/sdk-core/integ-with-otel.sh +7 -0
- data/bridge/sdk-core/protos/api_upstream/README.md +9 -0
- data/bridge/sdk-core/protos/api_upstream/api-linter.yaml +40 -0
- data/bridge/sdk-core/protos/api_upstream/buf.yaml +12 -0
- data/bridge/sdk-core/protos/api_upstream/dependencies/gogoproto/gogo.proto +141 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/batch/v1/message.proto +86 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/cluster/v1/message.proto +83 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/command/v1/message.proto +259 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/common/v1/message.proto +112 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/batch_operation.proto +46 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/cluster.proto +40 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/command_type.proto +57 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/common.proto +55 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/event_type.proto +168 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +97 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/namespace.proto +51 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/query.proto +50 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/reset.proto +41 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/schedule.proto +60 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/task_queue.proto +59 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/update.proto +51 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/workflow.proto +122 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/errordetails/v1/message.proto +108 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/failure/v1/message.proto +114 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/filter/v1/message.proto +56 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/history/v1/message.proto +751 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/namespace/v1/message.proto +97 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/request_response.proto +161 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/service.proto +99 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/query/v1/message.proto +61 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/replication/v1/message.proto +55 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/schedule/v1/message.proto +300 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +108 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/update/v1/message.proto +46 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/version/v1/message.proto +59 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/workflow/v1/message.proto +145 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +1124 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +401 -0
- data/bridge/sdk-core/protos/grpc/health/v1/health.proto +63 -0
- data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_result/activity_result.proto +78 -0
- data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_task/activity_task.proto +79 -0
- data/bridge/sdk-core/protos/local/temporal/sdk/core/bridge/bridge.proto +210 -0
- data/bridge/sdk-core/protos/local/temporal/sdk/core/child_workflow/child_workflow.proto +77 -0
- data/bridge/sdk-core/protos/local/temporal/sdk/core/common/common.proto +15 -0
- data/bridge/sdk-core/protos/local/temporal/sdk/core/core_interface.proto +30 -0
- data/bridge/sdk-core/protos/local/temporal/sdk/core/external_data/external_data.proto +30 -0
- data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +261 -0
- data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +297 -0
- data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_completion/workflow_completion.proto +29 -0
- data/bridge/sdk-core/protos/testsrv_upstream/api-linter.yaml +38 -0
- data/bridge/sdk-core/protos/testsrv_upstream/buf.yaml +13 -0
- data/bridge/sdk-core/protos/testsrv_upstream/dependencies/gogoproto/gogo.proto +141 -0
- data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/request_response.proto +63 -0
- data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/service.proto +90 -0
- data/bridge/sdk-core/rustfmt.toml +1 -0
- data/bridge/sdk-core/sdk/Cargo.toml +47 -0
- data/bridge/sdk-core/sdk/LICENSE.txt +23 -0
- data/bridge/sdk-core/sdk/src/activity_context.rs +230 -0
- data/bridge/sdk-core/sdk/src/app_data.rs +37 -0
- data/bridge/sdk-core/sdk/src/conversions.rs +8 -0
- data/bridge/sdk-core/sdk/src/interceptors.rs +17 -0
- data/bridge/sdk-core/sdk/src/lib.rs +792 -0
- data/bridge/sdk-core/sdk/src/payload_converter.rs +11 -0
- data/bridge/sdk-core/sdk/src/workflow_context/options.rs +295 -0
- data/bridge/sdk-core/sdk/src/workflow_context.rs +683 -0
- data/bridge/sdk-core/sdk/src/workflow_future.rs +503 -0
- data/bridge/sdk-core/sdk-core-protos/Cargo.toml +30 -0
- data/bridge/sdk-core/sdk-core-protos/LICENSE.txt +23 -0
- data/bridge/sdk-core/sdk-core-protos/build.rs +108 -0
- data/bridge/sdk-core/sdk-core-protos/src/constants.rs +7 -0
- data/bridge/sdk-core/sdk-core-protos/src/history_builder.rs +497 -0
- data/bridge/sdk-core/sdk-core-protos/src/history_info.rs +230 -0
- data/bridge/sdk-core/sdk-core-protos/src/lib.rs +1910 -0
- data/bridge/sdk-core/sdk-core-protos/src/task_token.rs +38 -0
- data/bridge/sdk-core/sdk-core-protos/src/utilities.rs +14 -0
- data/bridge/sdk-core/test-utils/Cargo.toml +35 -0
- data/bridge/sdk-core/test-utils/src/canned_histories.rs +1579 -0
- data/bridge/sdk-core/test-utils/src/histfetch.rs +28 -0
- data/bridge/sdk-core/test-utils/src/lib.rs +598 -0
- data/bridge/sdk-core/tests/integ_tests/client_tests.rs +36 -0
- data/bridge/sdk-core/tests/integ_tests/ephemeral_server_tests.rs +128 -0
- data/bridge/sdk-core/tests/integ_tests/heartbeat_tests.rs +218 -0
- data/bridge/sdk-core/tests/integ_tests/polling_tests.rs +146 -0
- data/bridge/sdk-core/tests/integ_tests/queries_tests.rs +437 -0
- data/bridge/sdk-core/tests/integ_tests/visibility_tests.rs +93 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/activities.rs +878 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/appdata_propagation.rs +61 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +59 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +58 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +50 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +60 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +54 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +634 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/patches.rs +113 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/replay.rs +137 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/resets.rs +93 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/signals.rs +167 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +99 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/timers.rs +131 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +75 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests.rs +587 -0
- data/bridge/sdk-core/tests/load_tests.rs +191 -0
- data/bridge/sdk-core/tests/main.rs +111 -0
- data/bridge/sdk-core/tests/runner.rs +93 -0
- data/bridge/src/connection.rs +167 -0
- data/bridge/src/lib.rs +180 -0
- data/bridge/src/runtime.rs +47 -0
- data/bridge/src/worker.rs +73 -0
- data/ext/Rakefile +9 -0
- data/lib/bridge.so +0 -0
- data/lib/gen/dependencies/gogoproto/gogo_pb.rb +14 -0
- data/lib/gen/temporal/api/batch/v1/message_pb.rb +48 -0
- data/lib/gen/temporal/api/cluster/v1/message_pb.rb +67 -0
- data/lib/gen/temporal/api/command/v1/message_pb.rb +166 -0
- data/lib/gen/temporal/api/common/v1/message_pb.rb +69 -0
- data/lib/gen/temporal/api/enums/v1/batch_operation_pb.rb +32 -0
- data/lib/gen/temporal/api/enums/v1/cluster_pb.rb +26 -0
- data/lib/gen/temporal/api/enums/v1/command_type_pb.rb +37 -0
- data/lib/gen/temporal/api/enums/v1/common_pb.rb +41 -0
- data/lib/gen/temporal/api/enums/v1/event_type_pb.rb +67 -0
- data/lib/gen/temporal/api/enums/v1/failed_cause_pb.rb +71 -0
- data/lib/gen/temporal/api/enums/v1/namespace_pb.rb +37 -0
- data/lib/gen/temporal/api/enums/v1/query_pb.rb +31 -0
- data/lib/gen/temporal/api/enums/v1/reset_pb.rb +24 -0
- data/lib/gen/temporal/api/enums/v1/schedule_pb.rb +28 -0
- data/lib/gen/temporal/api/enums/v1/task_queue_pb.rb +30 -0
- data/lib/gen/temporal/api/enums/v1/update_pb.rb +28 -0
- data/lib/gen/temporal/api/enums/v1/workflow_pb.rb +89 -0
- data/lib/gen/temporal/api/errordetails/v1/message_pb.rb +84 -0
- data/lib/gen/temporal/api/failure/v1/message_pb.rb +83 -0
- data/lib/gen/temporal/api/filter/v1/message_pb.rb +40 -0
- data/lib/gen/temporal/api/history/v1/message_pb.rb +489 -0
- data/lib/gen/temporal/api/namespace/v1/message_pb.rb +63 -0
- data/lib/gen/temporal/api/operatorservice/v1/request_response_pb.rb +125 -0
- data/lib/gen/temporal/api/operatorservice/v1/service_pb.rb +20 -0
- data/lib/gen/temporal/api/query/v1/message_pb.rb +38 -0
- data/lib/gen/temporal/api/replication/v1/message_pb.rb +37 -0
- data/lib/gen/temporal/api/schedule/v1/message_pb.rb +128 -0
- data/lib/gen/temporal/api/taskqueue/v1/message_pb.rb +73 -0
- data/lib/gen/temporal/api/update/v1/message_pb.rb +26 -0
- data/lib/gen/temporal/api/version/v1/message_pb.rb +41 -0
- data/lib/gen/temporal/api/workflow/v1/message_pb.rb +110 -0
- data/lib/gen/temporal/api/workflowservice/v1/request_response_pb.rb +771 -0
- data/lib/gen/temporal/api/workflowservice/v1/service_pb.rb +20 -0
- data/lib/gen/temporal/sdk/core/activity_result/activity_result_pb.rb +58 -0
- data/lib/gen/temporal/sdk/core/activity_task/activity_task_pb.rb +57 -0
- data/lib/gen/temporal/sdk/core/bridge/bridge_pb.rb +222 -0
- data/lib/gen/temporal/sdk/core/child_workflow/child_workflow_pb.rb +57 -0
- data/lib/gen/temporal/sdk/core/common/common_pb.rb +22 -0
- data/lib/gen/temporal/sdk/core/core_interface_pb.rb +34 -0
- data/lib/gen/temporal/sdk/core/external_data/external_data_pb.rb +27 -0
- data/lib/gen/temporal/sdk/core/workflow_activation/workflow_activation_pb.rb +164 -0
- data/lib/gen/temporal/sdk/core/workflow_commands/workflow_commands_pb.rb +192 -0
- data/lib/gen/temporal/sdk/core/workflow_completion/workflow_completion_pb.rb +34 -0
- data/lib/temporal/bridge.rb +14 -0
- data/lib/temporal/client/implementation.rb +339 -0
- data/lib/temporal/client/workflow_handle.rb +243 -0
- data/lib/temporal/client.rb +144 -0
- data/lib/temporal/connection.rb +736 -0
- data/lib/temporal/data_converter.rb +150 -0
- data/lib/temporal/error/failure.rb +194 -0
- data/lib/temporal/error/workflow_failure.rb +17 -0
- data/lib/temporal/errors.rb +22 -0
- data/lib/temporal/failure_converter/base.rb +26 -0
- data/lib/temporal/failure_converter/basic.rb +313 -0
- data/lib/temporal/failure_converter.rb +8 -0
- data/lib/temporal/interceptor/chain.rb +27 -0
- data/lib/temporal/interceptor/client.rb +102 -0
- data/lib/temporal/payload_codec/base.rb +32 -0
- data/lib/temporal/payload_converter/base.rb +24 -0
- data/lib/temporal/payload_converter/bytes.rb +26 -0
- data/lib/temporal/payload_converter/composite.rb +47 -0
- data/lib/temporal/payload_converter/encoding_base.rb +35 -0
- data/lib/temporal/payload_converter/json.rb +25 -0
- data/lib/temporal/payload_converter/nil.rb +25 -0
- data/lib/temporal/payload_converter.rb +14 -0
- data/lib/temporal/retry_policy.rb +82 -0
- data/lib/temporal/retry_state.rb +35 -0
- data/lib/temporal/runtime.rb +22 -0
- data/lib/temporal/timeout_type.rb +29 -0
- data/lib/temporal/version.rb +3 -0
- data/lib/temporal/workflow/execution_info.rb +54 -0
- data/lib/temporal/workflow/execution_status.rb +36 -0
- data/lib/temporal/workflow/id_reuse_policy.rb +36 -0
- data/lib/temporal/workflow/query_reject_condition.rb +33 -0
- data/lib/temporal.rb +8 -0
- data/lib/temporalio.rb +3 -0
- data/lib/thermite_patch.rb +23 -0
- data/temporalio.gemspec +41 -0
- metadata +583 -0
data/bridge/sdk-core/core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs
ADDED
@@ -0,0 +1,246 @@
|
|
1
|
+
use super::{
|
2
|
+
workflow_machines::{MachineResponse, WFMachinesError},
|
3
|
+
NewMachineWithCommand,
|
4
|
+
};
|
5
|
+
use crate::worker::workflow::machines::{Cancellable, EventInfo, MachineKind, WFMachinesAdapter};
|
6
|
+
use rustfsm::{fsm, TransitionResult};
|
7
|
+
use temporal_sdk_core_protos::{
|
8
|
+
coresdk::workflow_commands::UpsertWorkflowSearchAttributes,
|
9
|
+
temporal::api::{
|
10
|
+
command::v1::Command,
|
11
|
+
enums::v1::{CommandType, EventType},
|
12
|
+
history::v1::HistoryEvent,
|
13
|
+
},
|
14
|
+
};
|
15
|
+
|
16
|
+
fsm! {
|
17
|
+
pub(super) name UpsertSearchAttributesMachine;
|
18
|
+
command UpsertSearchAttributesMachineCommand;
|
19
|
+
error WFMachinesError;
|
20
|
+
shared_state SharedState;
|
21
|
+
|
22
|
+
// Machine is instantiated into the Created state and then transitions into the CommandIssued
|
23
|
+
// state when it receives the CommandScheduled event that is a result of looping back the
|
24
|
+
// Command initially packaged with NewMachineWithCommand (see upsert_search_attrs)
|
25
|
+
Created --(CommandScheduled) --> CommandIssued;
|
26
|
+
|
27
|
+
// Having sent the command to the server, the machine transitions into a terminal state (Done)
|
28
|
+
// upon observing a history event indicating that the command has been recorded. Note that this
|
29
|
+
// does not imply that the command has been _executed_, only that it _will be_ executed at some
|
30
|
+
// point in the future.
|
31
|
+
CommandIssued --(CommandRecorded) --> Done;
|
32
|
+
}
|
33
|
+
|
34
|
+
/// Instantiates an UpsertSearchAttributesMachine and packs it together with an initial command
|
35
|
+
/// to apply the provided search attribute update.
|
36
|
+
pub(super) fn upsert_search_attrs(
|
37
|
+
attribs: UpsertWorkflowSearchAttributes,
|
38
|
+
) -> NewMachineWithCommand {
|
39
|
+
let sm = UpsertSearchAttributesMachine::new();
|
40
|
+
let cmd = Command {
|
41
|
+
command_type: CommandType::UpsertWorkflowSearchAttributes as i32,
|
42
|
+
attributes: Some(attribs.into()),
|
43
|
+
};
|
44
|
+
NewMachineWithCommand {
|
45
|
+
command: cmd,
|
46
|
+
machine: sm.into(),
|
47
|
+
}
|
48
|
+
}
|
49
|
+
|
50
|
+
/// Unused but must exist
|
51
|
+
type SharedState = ();
|
52
|
+
|
53
|
+
/// The state-machine-specific set of commands that are the results of state transition in the
|
54
|
+
/// UpsertSearchAttributesMachine. There are none of these because this state machine emits the
|
55
|
+
/// UpsertSearchAttributes API command during construction and then does not emit any subsequent
|
56
|
+
/// state-machine specific commands.
|
57
|
+
#[derive(Debug, derive_more::Display)]
|
58
|
+
pub(super) enum UpsertSearchAttributesMachineCommand {}
|
59
|
+
|
60
|
+
/// The state of the UpsertSearchAttributesMachine at time zero (i.e. at instantiation)
|
61
|
+
#[derive(Debug, Default, Clone, derive_more::Display)]
|
62
|
+
pub(super) struct Created {}
|
63
|
+
|
64
|
+
/// Once the UpsertSearchAttributesMachine has been known to have issued the upsert command to
|
65
|
+
/// higher-level machinery, it transitions into this state.
|
66
|
+
#[derive(Debug, Default, Clone, derive_more::Display)]
|
67
|
+
pub(super) struct CommandIssued {}
|
68
|
+
|
69
|
+
/// Once the server has recorded its receipt of the search attribute update, the
|
70
|
+
/// UpsertSearchAttributesMachine transitions into this terminal state.
|
71
|
+
#[derive(Debug, Default, Clone, derive_more::Display)]
|
72
|
+
pub(super) struct Done {}
|
73
|
+
|
74
|
+
impl UpsertSearchAttributesMachine {
|
75
|
+
fn new() -> Self {
|
76
|
+
Self {
|
77
|
+
state: Created {}.into(),
|
78
|
+
shared_state: (),
|
79
|
+
}
|
80
|
+
}
|
81
|
+
}
|
82
|
+
|
83
|
+
impl WFMachinesAdapter for UpsertSearchAttributesMachine {
|
84
|
+
/// Transforms an UpsertSearchAttributesMachine-specific command (i.e. an instance of the type
|
85
|
+
/// UpsertSearchAttributesMachineCommand) to a more generic form supported by the abstract
|
86
|
+
/// StateMachine type.
|
87
|
+
fn adapt_response(
|
88
|
+
&self,
|
89
|
+
_my_command: Self::Command,
|
90
|
+
_event_info: Option<EventInfo>,
|
91
|
+
) -> Result<Vec<MachineResponse>, Self::Error> {
|
92
|
+
// No implementation needed until this state machine emits state machine commands
|
93
|
+
Err(Self::Error::Nondeterminism(
|
94
|
+
"UpsertWorkflowSearchAttributesMachine does not use commands".to_string(),
|
95
|
+
))
|
96
|
+
}
|
97
|
+
|
98
|
+
/// Filters for EventType::UpsertWorkflowSearchAttributes
|
99
|
+
fn matches_event(&self, event: &HistoryEvent) -> bool {
|
100
|
+
matches!(
|
101
|
+
event.event_type(),
|
102
|
+
EventType::UpsertWorkflowSearchAttributes
|
103
|
+
)
|
104
|
+
}
|
105
|
+
|
106
|
+
fn kind(&self) -> MachineKind {
|
107
|
+
MachineKind::UpsertSearchAttributes
|
108
|
+
}
|
109
|
+
}
|
110
|
+
|
111
|
+
impl Cancellable for UpsertSearchAttributesMachine {}
|
112
|
+
|
113
|
+
// Converts the generic history event with type EventType::UpsertWorkflowSearchAttributes into the
|
114
|
+
// UpsertSearchAttributesMachine-specific event type
|
115
|
+
// UpsertSearchAttributesMachineEvents::CommandRecorded.
|
116
|
+
impl TryFrom<HistoryEvent> for UpsertSearchAttributesMachineEvents {
|
117
|
+
type Error = WFMachinesError;
|
118
|
+
|
119
|
+
fn try_from(e: HistoryEvent) -> Result<Self, Self::Error> {
|
120
|
+
match e.event_type() {
|
121
|
+
EventType::UpsertWorkflowSearchAttributes => {
|
122
|
+
Ok(UpsertSearchAttributesMachineEvents::CommandRecorded)
|
123
|
+
}
|
124
|
+
_ => Err(Self::Error::Nondeterminism(format!(
|
125
|
+
"UpsertWorkflowSearchAttributesMachine does not handle {e}"
|
126
|
+
))),
|
127
|
+
}
|
128
|
+
}
|
129
|
+
}
|
130
|
+
|
131
|
+
// Converts generic state machine command type CommandType::UpsertWorkflowSearchAttributes into
|
132
|
+
// the UpsertSearchAttributesMachine-specific event
|
133
|
+
impl TryFrom<CommandType> for UpsertSearchAttributesMachineEvents {
|
134
|
+
type Error = WFMachinesError;
|
135
|
+
|
136
|
+
fn try_from(c: CommandType) -> Result<Self, Self::Error> {
|
137
|
+
match c {
|
138
|
+
CommandType::UpsertWorkflowSearchAttributes => {
|
139
|
+
Ok(UpsertSearchAttributesMachineEvents::CommandScheduled)
|
140
|
+
}
|
141
|
+
_ => Err(Self::Error::Nondeterminism(format!(
|
142
|
+
"UpsertWorkflowSearchAttributesMachine does not handle command type {c:?}"
|
143
|
+
))),
|
144
|
+
}
|
145
|
+
}
|
146
|
+
}
|
147
|
+
|
148
|
+
// There is no Command/Response associated with this transition
|
149
|
+
impl From<CommandIssued> for Done {
|
150
|
+
fn from(_: CommandIssued) -> Self {
|
151
|
+
Self {}
|
152
|
+
}
|
153
|
+
}
|
154
|
+
|
155
|
+
// There is no Command/Response associated with this transition
|
156
|
+
impl From<Created> for CommandIssued {
|
157
|
+
fn from(_: Created) -> Self {
|
158
|
+
Self {}
|
159
|
+
}
|
160
|
+
}
|
161
|
+
|
162
|
+
#[cfg(test)]
|
163
|
+
mod tests {
|
164
|
+
use super::{super::OnEventWrapper, *};
|
165
|
+
use crate::{replay::TestHistoryBuilder, worker::workflow::ManagedWFFunc};
|
166
|
+
use rustfsm::StateMachine;
|
167
|
+
use temporal_sdk::{WfContext, WorkflowFunction};
|
168
|
+
use temporal_sdk_core_protos::temporal::api::{
|
169
|
+
command::v1::command::Attributes, common::v1::Payload,
|
170
|
+
};
|
171
|
+
|
172
|
+
#[tokio::test]
|
173
|
+
async fn upsert_search_attrs_from_workflow() {
|
174
|
+
let mut t = TestHistoryBuilder::default();
|
175
|
+
t.add_by_type(EventType::WorkflowExecutionStarted);
|
176
|
+
t.add_full_wf_task();
|
177
|
+
t.add_workflow_execution_completed();
|
178
|
+
|
179
|
+
let (k1, k2) = ("foo", "bar");
|
180
|
+
|
181
|
+
let wff = WorkflowFunction::new(move |ctx: WfContext| async move {
|
182
|
+
ctx.upsert_search_attributes([
|
183
|
+
(
|
184
|
+
String::from(k1),
|
185
|
+
Payload {
|
186
|
+
data: vec![0x01],
|
187
|
+
..Default::default()
|
188
|
+
},
|
189
|
+
),
|
190
|
+
(
|
191
|
+
String::from(k2),
|
192
|
+
Payload {
|
193
|
+
data: vec![0x02],
|
194
|
+
..Default::default()
|
195
|
+
},
|
196
|
+
),
|
197
|
+
]);
|
198
|
+
Ok(().into())
|
199
|
+
});
|
200
|
+
let mut wfm = ManagedWFFunc::new(t, wff, vec![]);
|
201
|
+
|
202
|
+
wfm.get_next_activation().await.unwrap();
|
203
|
+
let commands = wfm.get_server_commands().commands;
|
204
|
+
assert!(!commands.is_empty());
|
205
|
+
let cmd = commands[0].clone();
|
206
|
+
assert_eq!(
|
207
|
+
cmd.command_type,
|
208
|
+
CommandType::UpsertWorkflowSearchAttributes as i32
|
209
|
+
);
|
210
|
+
assert_matches!(
|
211
|
+
cmd.attributes.unwrap(),
|
212
|
+
Attributes::UpsertWorkflowSearchAttributesCommandAttributes(msg) => {
|
213
|
+
let fields = &msg.search_attributes.unwrap().indexed_fields;
|
214
|
+
let payload1 = fields.get(k1).unwrap();
|
215
|
+
let payload2 = fields.get(k2).unwrap();
|
216
|
+
assert_eq!(payload1.data[0], 0x01);
|
217
|
+
assert_eq!(payload2.data[0], 0x02);
|
218
|
+
assert_eq!(fields.len(), 2);
|
219
|
+
});
|
220
|
+
wfm.shutdown().await.unwrap();
|
221
|
+
}
|
222
|
+
|
223
|
+
#[tokio::test]
|
224
|
+
async fn upsert_search_attrs_sm() {
|
225
|
+
let mut sm = UpsertSearchAttributesMachine::new();
|
226
|
+
assert_eq!(Created {}.to_string(), sm.state().to_string());
|
227
|
+
|
228
|
+
let cmd_scheduled_sm_event = CommandType::UpsertWorkflowSearchAttributes
|
229
|
+
.try_into()
|
230
|
+
.unwrap();
|
231
|
+
let recorded_history_event = HistoryEvent {
|
232
|
+
event_type: EventType::UpsertWorkflowSearchAttributes as i32,
|
233
|
+
..Default::default()
|
234
|
+
};
|
235
|
+
assert!(sm.matches_event(&recorded_history_event));
|
236
|
+
let cmd_recorded_sm_event = recorded_history_event.try_into().unwrap();
|
237
|
+
|
238
|
+
OnEventWrapper::on_event_mut(&mut sm, cmd_scheduled_sm_event)
|
239
|
+
.expect("CommandScheduled should transition Created -> CommandIssued");
|
240
|
+
assert_eq!(CommandIssued {}.to_string(), sm.state().to_string());
|
241
|
+
|
242
|
+
OnEventWrapper::on_event_mut(&mut sm, cmd_recorded_sm_event)
|
243
|
+
.expect("CommandRecorded should transition CommandIssued -> Done");
|
244
|
+
assert_eq!(Done {}.to_string(), sm.state().to_string());
|
245
|
+
}
|
246
|
+
}
|
@@ -0,0 +1,96 @@
|
|
1
|
+
use super::super::{local_activity_state_machine::ResolveDat, WFMachinesError};
|
2
|
+
use crate::{
|
3
|
+
protosext::{HistoryEventExt, ValidScheduleLA},
|
4
|
+
worker::{ExecutingLAId, LocalActRequest, NewLocalAct},
|
5
|
+
};
|
6
|
+
use std::{
|
7
|
+
collections::{HashMap, HashSet},
|
8
|
+
time::SystemTime,
|
9
|
+
};
|
10
|
+
use temporal_sdk_core_protos::temporal::api::{
|
11
|
+
common::v1::WorkflowExecution, history::v1::HistoryEvent,
|
12
|
+
};
|
13
|
+
|
14
|
+
#[derive(Default)]
|
15
|
+
pub(super) struct LocalActivityData {
|
16
|
+
/// Queued local activity requests which need to be executed
|
17
|
+
new_requests: Vec<ValidScheduleLA>,
|
18
|
+
/// Queued cancels that need to be dispatched
|
19
|
+
cancel_requests: Vec<ExecutingLAId>,
|
20
|
+
/// Seq #s of local activities which we have sent to be executed but have not yet resolved
|
21
|
+
executing: HashSet<u32>,
|
22
|
+
/// Maps local activity sequence numbers to their resolutions as found when looking ahead at
|
23
|
+
/// next WFT
|
24
|
+
preresolutions: HashMap<u32, ResolveDat>,
|
25
|
+
}
|
26
|
+
|
27
|
+
impl LocalActivityData {
|
28
|
+
pub(super) fn enqueue(&mut self, act: ValidScheduleLA) {
|
29
|
+
self.new_requests.push(act);
|
30
|
+
}
|
31
|
+
|
32
|
+
pub(super) fn enqueue_cancel(&mut self, cancel: ExecutingLAId) {
|
33
|
+
self.cancel_requests.push(cancel);
|
34
|
+
}
|
35
|
+
|
36
|
+
pub(super) fn done_executing(&mut self, seq: u32) {
|
37
|
+
// This seems nonsense, but can happen during abandonment
|
38
|
+
self.new_requests.retain(|req| req.seq != seq);
|
39
|
+
self.executing.remove(&seq);
|
40
|
+
}
|
41
|
+
|
42
|
+
/// Drain all requests to execute or cancel LAs. Additional info is passed in to be able to
|
43
|
+
/// augment the data this struct has to form complete request data.
|
44
|
+
pub(super) fn take_all_reqs(
|
45
|
+
&mut self,
|
46
|
+
wf_type: &str,
|
47
|
+
wf_id: &str,
|
48
|
+
run_id: &str,
|
49
|
+
) -> Vec<LocalActRequest> {
|
50
|
+
self.cancel_requests
|
51
|
+
.drain(..)
|
52
|
+
.map(LocalActRequest::Cancel)
|
53
|
+
.chain(self.new_requests.drain(..).map(|sa| {
|
54
|
+
self.executing.insert(sa.seq);
|
55
|
+
LocalActRequest::New(NewLocalAct {
|
56
|
+
schedule_time: sa.original_schedule_time.unwrap_or_else(SystemTime::now),
|
57
|
+
schedule_cmd: sa,
|
58
|
+
workflow_type: wf_type.to_string(),
|
59
|
+
workflow_exec_info: WorkflowExecution {
|
60
|
+
workflow_id: wf_id.to_string(),
|
61
|
+
run_id: run_id.to_string(),
|
62
|
+
},
|
63
|
+
})
|
64
|
+
}))
|
65
|
+
.collect()
|
66
|
+
}
|
67
|
+
|
68
|
+
/// Returns all outstanding local activities, whether executing or requested and in the queue
|
69
|
+
pub(super) fn outstanding_la_count(&self) -> usize {
|
70
|
+
self.executing.len() + self.new_requests.len()
|
71
|
+
}
|
72
|
+
|
73
|
+
pub(super) fn process_peekahead_marker(&mut self, e: &HistoryEvent) -> super::Result<()> {
|
74
|
+
if let Some(la_dat) = e.clone().into_local_activity_marker_details() {
|
75
|
+
self.preresolutions
|
76
|
+
.insert(la_dat.marker_dat.seq, la_dat.into());
|
77
|
+
} else {
|
78
|
+
return Err(WFMachinesError::Fatal(format!(
|
79
|
+
"Local activity marker was unparsable: {:?}",
|
80
|
+
e
|
81
|
+
)));
|
82
|
+
}
|
83
|
+
Ok(())
|
84
|
+
}
|
85
|
+
|
86
|
+
pub(super) fn take_preresolution(&mut self, seq: u32) -> Option<ResolveDat> {
|
87
|
+
self.preresolutions.remove(&seq)
|
88
|
+
}
|
89
|
+
|
90
|
+
pub(super) fn remove_from_queue(&mut self, seq: u32) -> Option<ValidScheduleLA> {
|
91
|
+
self.new_requests
|
92
|
+
.iter()
|
93
|
+
.position(|req| req.seq == seq)
|
94
|
+
.map(|i| self.new_requests.remove(i))
|
95
|
+
}
|
96
|
+
}
|