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
@@ -0,0 +1,339 @@
|
|
1
|
+
require 'socket'
|
2
|
+
require 'temporal/api/workflowservice/v1/request_response_pb'
|
3
|
+
require 'temporal/client/workflow_handle'
|
4
|
+
require 'temporal/error/failure'
|
5
|
+
require 'temporal/error/workflow_failure'
|
6
|
+
require 'temporal/interceptor/chain'
|
7
|
+
require 'temporal/timeout_type'
|
8
|
+
require 'temporal/version'
|
9
|
+
require 'temporal/workflow/execution_info'
|
10
|
+
require 'temporal/workflow/id_reuse_policy'
|
11
|
+
require 'temporal/workflow/query_reject_condition'
|
12
|
+
|
13
|
+
module Temporal
|
14
|
+
class Client
|
15
|
+
class Implementation
|
16
|
+
def initialize(connection, namespace, converter, interceptors)
|
17
|
+
@connection = connection
|
18
|
+
@namespace = namespace
|
19
|
+
@converter = converter
|
20
|
+
@interceptor_chain = Interceptor::Chain.new(interceptors)
|
21
|
+
@identity = "#{Process.pid}@#{Socket.gethostname} (Ruby SDK v#{VERSION})"
|
22
|
+
end
|
23
|
+
|
24
|
+
def start_workflow(input)
|
25
|
+
interceptor_chain.invoke(:start_workflow, input) do |i|
|
26
|
+
handle_start_workflow(i)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def describe_workflow(input)
|
31
|
+
interceptor_chain.invoke(:describe_workflow, input) do |i|
|
32
|
+
handle_describe_workflow(i)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def query_workflow(input)
|
37
|
+
interceptor_chain.invoke(:query_workflow, input) do |i|
|
38
|
+
handle_query_workflow(i)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def signal_workflow(input)
|
43
|
+
interceptor_chain.invoke(:signal_workflow, input) do |i|
|
44
|
+
handle_signal_workflow(i)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def cancel_workflow(input)
|
49
|
+
interceptor_chain.invoke(:cancel_workflow, input) do |i|
|
50
|
+
handle_cancel_workflow(i)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def terminate_workflow(input)
|
55
|
+
interceptor_chain.invoke(:terminate_workflow, input) do |i|
|
56
|
+
handle_terminate_workflow(i)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def await_workflow_result(id, run_id, follow_runs, rpc_metadata, rpc_timeout)
|
61
|
+
rpc_params = { metadata: rpc_metadata, timeout: rpc_timeout }
|
62
|
+
request = Temporal::Api::WorkflowService::V1::GetWorkflowExecutionHistoryRequest.new(
|
63
|
+
namespace: namespace.to_s,
|
64
|
+
execution: Temporal::Api::Common::V1::WorkflowExecution.new(
|
65
|
+
workflow_id: id,
|
66
|
+
run_id: run_id || '',
|
67
|
+
),
|
68
|
+
history_event_filter_type:
|
69
|
+
Temporal::Api::Enums::V1::HistoryEventFilterType::HISTORY_EVENT_FILTER_TYPE_CLOSE_EVENT,
|
70
|
+
wait_new_event: true,
|
71
|
+
skip_archival: true,
|
72
|
+
)
|
73
|
+
|
74
|
+
loop do
|
75
|
+
response = connection.get_workflow_execution_history(request, **rpc_params)
|
76
|
+
next_run_id = catch(:next) do
|
77
|
+
# this will return out of the loop only if :next wasn't thrown
|
78
|
+
return process_workflow_result_from(response, follow_runs)
|
79
|
+
end
|
80
|
+
request.execution&.run_id = next_run_id if next_run_id
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
private
|
85
|
+
|
86
|
+
attr_reader :connection, :namespace, :converter, :interceptor_chain, :identity
|
87
|
+
|
88
|
+
def convert_headers(headers)
|
89
|
+
return if headers.empty?
|
90
|
+
|
91
|
+
Temporal::Api::Common::V1::Header.new(
|
92
|
+
fields: converter.to_payload_map(headers),
|
93
|
+
)
|
94
|
+
end
|
95
|
+
|
96
|
+
def handle_start_workflow(input)
|
97
|
+
input.retry_policy&.validate!
|
98
|
+
|
99
|
+
if input.memo
|
100
|
+
memo = Temporal::Api::Common::V1::Memo.new(fields: converter.to_payload_map(input.memo))
|
101
|
+
end
|
102
|
+
|
103
|
+
if input.search_attributes
|
104
|
+
search_attributes = Temporal::Api::Common::V1::SearchAttributes.new(
|
105
|
+
indexed_fields: converter.to_payload_map(input.search_attributes),
|
106
|
+
)
|
107
|
+
end
|
108
|
+
|
109
|
+
rpc_params = { metadata: input.rpc_metadata, timeout: input.rpc_timeout }
|
110
|
+
params = {
|
111
|
+
identity: identity,
|
112
|
+
request_id: SecureRandom.uuid,
|
113
|
+
namespace: namespace,
|
114
|
+
workflow_type: Temporal::Api::Common::V1::WorkflowType.new(name: input.workflow.to_s),
|
115
|
+
workflow_id: input.id,
|
116
|
+
task_queue: Temporal::Api::TaskQueue::V1::TaskQueue.new(name: input.task_queue.to_s),
|
117
|
+
input: converter.to_payloads(input.args),
|
118
|
+
workflow_execution_timeout: input.execution_timeout,
|
119
|
+
workflow_run_timeout: input.run_timeout,
|
120
|
+
workflow_task_timeout: input.task_timeout,
|
121
|
+
workflow_id_reuse_policy: Workflow::IDReusePolicy.to_raw(input.id_reuse_policy),
|
122
|
+
retry_policy: input.retry_policy&.to_proto,
|
123
|
+
cron_schedule: input.cron_schedule,
|
124
|
+
memo: memo,
|
125
|
+
search_attributes: search_attributes,
|
126
|
+
header: convert_headers(input.headers),
|
127
|
+
}
|
128
|
+
|
129
|
+
first_execution_run_id = nil
|
130
|
+
if input.start_signal
|
131
|
+
params.merge!(
|
132
|
+
signal_name: input.start_signal,
|
133
|
+
signal_input: converter.to_payloads(input.start_signal_args),
|
134
|
+
)
|
135
|
+
|
136
|
+
klass = Temporal::Api::WorkflowService::V1::SignalWithStartWorkflowExecutionRequest
|
137
|
+
request = klass.new(**params)
|
138
|
+
|
139
|
+
response = connection.signal_with_start_workflow_execution(request, **rpc_params)
|
140
|
+
else
|
141
|
+
klass = Temporal::Api::WorkflowService::V1::StartWorkflowExecutionRequest
|
142
|
+
request = klass.new(**params)
|
143
|
+
|
144
|
+
response = connection.start_workflow_execution(request, **rpc_params)
|
145
|
+
first_execution_run_id = response.run_id
|
146
|
+
end
|
147
|
+
|
148
|
+
Client::WorkflowHandle.new(
|
149
|
+
self,
|
150
|
+
input.id,
|
151
|
+
result_run_id: response.run_id,
|
152
|
+
first_execution_run_id: first_execution_run_id,
|
153
|
+
)
|
154
|
+
rescue Temporal::Bridge::Error => e
|
155
|
+
# TODO: Raise a better error from the bridge
|
156
|
+
if e.message.include?('AlreadyExists')
|
157
|
+
raise Temporal::Error::WorkflowExecutionAlreadyStarted, 'Workflow execution already started'
|
158
|
+
else
|
159
|
+
raise # re-raise
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
def handle_describe_workflow(input)
|
164
|
+
rpc_params = { metadata: input.rpc_metadata, timeout: input.rpc_timeout }
|
165
|
+
request = Temporal::Api::WorkflowService::V1::DescribeWorkflowExecutionRequest.new(
|
166
|
+
namespace: namespace.to_s,
|
167
|
+
execution: Temporal::Api::Common::V1::WorkflowExecution.new(
|
168
|
+
workflow_id: input.id,
|
169
|
+
run_id: input.run_id || '',
|
170
|
+
),
|
171
|
+
)
|
172
|
+
|
173
|
+
response = connection.describe_workflow_execution(request, **rpc_params)
|
174
|
+
|
175
|
+
Workflow::ExecutionInfo.from_raw(response, converter)
|
176
|
+
end
|
177
|
+
|
178
|
+
def handle_query_workflow(input)
|
179
|
+
rpc_params = { metadata: input.rpc_metadata, timeout: input.rpc_timeout }
|
180
|
+
request = Temporal::Api::WorkflowService::V1::QueryWorkflowRequest.new(
|
181
|
+
namespace: namespace.to_s,
|
182
|
+
execution: Temporal::Api::Common::V1::WorkflowExecution.new(
|
183
|
+
workflow_id: input.id,
|
184
|
+
run_id: input.run_id,
|
185
|
+
),
|
186
|
+
query: Temporal::Api::Query::V1::WorkflowQuery.new(
|
187
|
+
query_type: input.query.to_s,
|
188
|
+
query_args: converter.to_payloads(input.args),
|
189
|
+
header: convert_headers(input.headers),
|
190
|
+
),
|
191
|
+
query_reject_condition: Workflow::QueryRejectCondition.to_raw(input.reject_condition),
|
192
|
+
)
|
193
|
+
|
194
|
+
response = connection.query_workflow(request, **rpc_params)
|
195
|
+
|
196
|
+
if response.query_rejected
|
197
|
+
status = Workflow::ExecutionStatus.from_raw(response.query_rejected.status)
|
198
|
+
raise Temporal::Error::QueryRejected, status
|
199
|
+
end
|
200
|
+
|
201
|
+
converter.from_payloads(response.query_result)&.first
|
202
|
+
rescue Temporal::Bridge::Error => e
|
203
|
+
# TODO: Raise a better error from the bridge
|
204
|
+
raise Temporal::Error::QueryFailed, e.message
|
205
|
+
end
|
206
|
+
|
207
|
+
def handle_signal_workflow(input)
|
208
|
+
rpc_params = { metadata: input.rpc_metadata, timeout: input.rpc_timeout }
|
209
|
+
request = Temporal::Api::WorkflowService::V1::SignalWorkflowExecutionRequest.new(
|
210
|
+
identity: identity,
|
211
|
+
request_id: SecureRandom.uuid,
|
212
|
+
namespace: namespace.to_s,
|
213
|
+
workflow_execution: Temporal::Api::Common::V1::WorkflowExecution.new(
|
214
|
+
workflow_id: input.id,
|
215
|
+
run_id: input.run_id || '',
|
216
|
+
),
|
217
|
+
signal_name: input.signal.to_s,
|
218
|
+
input: converter.to_payloads(input.args),
|
219
|
+
header: convert_headers(input.headers),
|
220
|
+
)
|
221
|
+
|
222
|
+
connection.signal_workflow_execution(request, **rpc_params)
|
223
|
+
|
224
|
+
return
|
225
|
+
end
|
226
|
+
|
227
|
+
def handle_cancel_workflow(input)
|
228
|
+
rpc_params = { metadata: input.rpc_metadata, timeout: input.rpc_timeout }
|
229
|
+
request = Temporal::Api::WorkflowService::V1::RequestCancelWorkflowExecutionRequest.new(
|
230
|
+
identity: identity,
|
231
|
+
request_id: SecureRandom.uuid,
|
232
|
+
namespace: namespace.to_s,
|
233
|
+
workflow_execution: Temporal::Api::Common::V1::WorkflowExecution.new(
|
234
|
+
workflow_id: input.id,
|
235
|
+
run_id: input.run_id || '',
|
236
|
+
),
|
237
|
+
first_execution_run_id: input.first_execution_run_id || '',
|
238
|
+
reason: input.reason,
|
239
|
+
)
|
240
|
+
|
241
|
+
connection.request_cancel_workflow_execution(request, **rpc_params)
|
242
|
+
|
243
|
+
return
|
244
|
+
end
|
245
|
+
|
246
|
+
def handle_terminate_workflow(input)
|
247
|
+
rpc_params = { metadata: input.rpc_metadata, timeout: input.rpc_timeout }
|
248
|
+
request = Temporal::Api::WorkflowService::V1::TerminateWorkflowExecutionRequest.new(
|
249
|
+
identity: identity,
|
250
|
+
namespace: namespace.to_s,
|
251
|
+
workflow_execution: Temporal::Api::Common::V1::WorkflowExecution.new(
|
252
|
+
workflow_id: input.id,
|
253
|
+
run_id: input.run_id || '',
|
254
|
+
),
|
255
|
+
first_execution_run_id: input.first_execution_run_id || '',
|
256
|
+
reason: input.reason,
|
257
|
+
details: converter.to_payloads(input.args),
|
258
|
+
)
|
259
|
+
|
260
|
+
connection.terminate_workflow_execution(request, **rpc_params)
|
261
|
+
|
262
|
+
return
|
263
|
+
end
|
264
|
+
|
265
|
+
def process_workflow_result_from(response, follow_runs)
|
266
|
+
events = response.history&.events
|
267
|
+
|
268
|
+
if !events || events.empty?
|
269
|
+
throw(:next, nil) # next loop, same run_id
|
270
|
+
elsif events.length != 1
|
271
|
+
raise Temporal::Error, "Expected single close event, got #{events.length}"
|
272
|
+
end
|
273
|
+
|
274
|
+
event = events.first
|
275
|
+
raise Temporal::Error::UnexpectedResponse, 'Missing final history event' unless event
|
276
|
+
|
277
|
+
case event.event_type
|
278
|
+
when :EVENT_TYPE_WORKFLOW_EXECUTION_COMPLETED
|
279
|
+
attributes = event.workflow_execution_completed_event_attributes
|
280
|
+
follow(attributes&.new_execution_run_id) if follow_runs
|
281
|
+
|
282
|
+
# TODO: Handle incorrect payloads object
|
283
|
+
return converter.from_payloads(attributes&.result)&.first
|
284
|
+
|
285
|
+
when :EVENT_TYPE_WORKFLOW_EXECUTION_FAILED
|
286
|
+
attributes = event.workflow_execution_failed_event_attributes
|
287
|
+
follow(attributes&.new_execution_run_id) if follow_runs
|
288
|
+
|
289
|
+
raise Temporal::Error::WorkflowFailure.new(
|
290
|
+
cause: converter.from_failure(attributes&.failure),
|
291
|
+
)
|
292
|
+
|
293
|
+
when :EVENT_TYPE_WORKFLOW_EXECUTION_CANCELED
|
294
|
+
attributes = event.workflow_execution_canceled_event_attributes
|
295
|
+
|
296
|
+
raise Temporal::Error::WorkflowFailure.new(
|
297
|
+
cause: Temporal::Error::CancelledError.new(
|
298
|
+
'Workflow execution cancelled',
|
299
|
+
details: converter.from_payloads(attributes&.details),
|
300
|
+
),
|
301
|
+
)
|
302
|
+
|
303
|
+
when :EVENT_TYPE_WORKFLOW_EXECUTION_TERMINATED
|
304
|
+
attributes = event.workflow_execution_terminated_event_attributes
|
305
|
+
|
306
|
+
raise Temporal::Error::WorkflowFailure.new(
|
307
|
+
cause: Temporal::Error::TerminatedError.new(
|
308
|
+
attributes&.reason || 'Workflow execution terminated',
|
309
|
+
),
|
310
|
+
)
|
311
|
+
|
312
|
+
when :EVENT_TYPE_WORKFLOW_EXECUTION_TIMED_OUT
|
313
|
+
attributes = event.workflow_execution_timed_out_event_attributes
|
314
|
+
follow(attributes&.new_execution_run_id) if follow_runs
|
315
|
+
|
316
|
+
raise Temporal::Error::WorkflowFailure.new(
|
317
|
+
cause: Temporal::Error::TimeoutError.new(
|
318
|
+
'Workflow execution timed out',
|
319
|
+
type: Temporal::TimeoutType::START_TO_CLOSE,
|
320
|
+
),
|
321
|
+
)
|
322
|
+
|
323
|
+
when :EVENT_TYPE_WORKFLOW_EXECUTION_CONTINUED_AS_NEW
|
324
|
+
attributes = event.workflow_execution_continued_as_new_event_attributes
|
325
|
+
follow(attributes&.new_execution_run_id) if follow_runs
|
326
|
+
|
327
|
+
# TODO: Use more specific error and decode failure
|
328
|
+
raise Temporal::Error, 'Workflow execution continued as new'
|
329
|
+
end
|
330
|
+
end
|
331
|
+
|
332
|
+
def follow(new_run_id)
|
333
|
+
return if !new_run_id || new_run_id.empty?
|
334
|
+
|
335
|
+
throw(:next, new_run_id) # next loop with a new run_id
|
336
|
+
end
|
337
|
+
end
|
338
|
+
end
|
339
|
+
end
|
@@ -0,0 +1,243 @@
|
|
1
|
+
require 'temporal/interceptor/client'
|
2
|
+
require 'temporal/workflow/query_reject_condition'
|
3
|
+
|
4
|
+
module Temporal
|
5
|
+
class Client
|
6
|
+
# Handle for interacting with a workflow.
|
7
|
+
#
|
8
|
+
# This is usually created via {Temporal::Client#workflow_handle} or returned
|
9
|
+
# from {Temporal::Client#start_workflow}.
|
10
|
+
class WorkflowHandle
|
11
|
+
# @return [String] ID for the workflow.
|
12
|
+
attr_reader :id
|
13
|
+
|
14
|
+
# Run ID used for {#signal} and {#query} calls if present to ensure the query or signal happen
|
15
|
+
# on this exact run.
|
16
|
+
#
|
17
|
+
# This is only set on handles created via {Temporal::Client#workflow_handle} with a `run_id`
|
18
|
+
# parameter. {Temporal::Client#start_workflow} does not set this value.
|
19
|
+
#
|
20
|
+
# This cannot be mutated. If a different run ID is needed, {Temporal::Client#workflow_handle}
|
21
|
+
# must be used instead.
|
22
|
+
#
|
23
|
+
# @return [String]
|
24
|
+
attr_reader :run_id
|
25
|
+
|
26
|
+
# Run ID used for {#result} calls if present to ensure result is for a workflow starting from
|
27
|
+
# this run.
|
28
|
+
#
|
29
|
+
# When this handle is created via {Temporal::Client#workflow_handle}, this is the same as
|
30
|
+
# `:run_id`. When this handle is created via {Temporal::Client#start_workflow}, this value
|
31
|
+
# will be the resulting run ID.
|
32
|
+
#
|
33
|
+
# This cannot be mutated. If a different run ID is needed, {Temporal::Client#workflow_handle}
|
34
|
+
# must be used instead.
|
35
|
+
#
|
36
|
+
# @return [String]
|
37
|
+
attr_reader :result_run_id
|
38
|
+
|
39
|
+
# Run ID used for {#cancel} and {#terminate} calls if present to ensure the cancel and
|
40
|
+
# terminate happen for a workflow ID started with this run ID.
|
41
|
+
#
|
42
|
+
# This can be set when using {Temporal::Client#workflow_handle}. When
|
43
|
+
# {Temporal::Client#start_workflow} is called without a start signal, this is set to the
|
44
|
+
# resulting run.
|
45
|
+
#
|
46
|
+
# This cannot be mutated. If a different first execution run ID is needed,
|
47
|
+
# {Temporal::Client#workflow_handle} must be used instead.
|
48
|
+
#
|
49
|
+
# @return [String]
|
50
|
+
attr_reader :first_execution_run_id
|
51
|
+
|
52
|
+
def initialize(client_impl, id, run_id: nil, result_run_id: nil, first_execution_run_id: nil)
|
53
|
+
@client_impl = client_impl
|
54
|
+
@id = id
|
55
|
+
@run_id = run_id
|
56
|
+
@result_run_id = result_run_id
|
57
|
+
@first_execution_run_id = first_execution_run_id
|
58
|
+
end
|
59
|
+
|
60
|
+
# Wait for result of the workflow.
|
61
|
+
#
|
62
|
+
# This will use {#result_run_id} if present to base the result on. To use another run ID,
|
63
|
+
# a new handle must be created via {Temporal::Client#workflow_handle}.
|
64
|
+
#
|
65
|
+
# @param follow_runs [Bool] If true (default), workflow runs will be continually fetched,
|
66
|
+
# until the most recent one is found. If false, the first result is used.
|
67
|
+
# @param rpc_metadata [Hash<String, String>] Headers used on the RPC call.
|
68
|
+
# Keys here override client-level RPC metadata keys.
|
69
|
+
# @param rpc_timeout [Integer] Optional RPC deadline to set for each RPC call. Note, this is
|
70
|
+
# the timeout for each history RPC call not this overall function.
|
71
|
+
#
|
72
|
+
# @return [any] Result of the workflow after being converted by the data converter.
|
73
|
+
#
|
74
|
+
# @raise [Temporal::Error::WorkflowFailure] Workflow failed, was cancelled, was terminated, or
|
75
|
+
# timed out. Use the {Temporal::Error::WorkflowFailure#cause} to see the underlying reason.
|
76
|
+
# @raise [StandardError] Other possible failures during result fetching.
|
77
|
+
def result(follow_runs: true, rpc_metadata: {}, rpc_timeout: nil)
|
78
|
+
client_impl.await_workflow_result(id, result_run_id, follow_runs, rpc_metadata, rpc_timeout)
|
79
|
+
end
|
80
|
+
|
81
|
+
# Get workflow details.
|
82
|
+
#
|
83
|
+
# This will get details for {#run_id} if present. To use a different run ID, create a new
|
84
|
+
# handle with via {Temporal::Client#workflow_handle}.
|
85
|
+
#
|
86
|
+
# @note Handles created as a result of {Temporal::Client#start_workflow} will describe the
|
87
|
+
# latest workflow with the same workflow ID even if it is unrelated to the started workflow.
|
88
|
+
#
|
89
|
+
# @param rpc_metadata [Hash<String, String>] Headers used on the RPC call.
|
90
|
+
# Keys here override client-level RPC metadata keys.
|
91
|
+
# @param rpc_timeout [Integer] Optional RPC deadline to set for each RPC call. Note, this is
|
92
|
+
# the timeout for each history RPC call not this overall function.
|
93
|
+
#
|
94
|
+
# @return [Temporal::Workflow::ExecutionInfo] Workflow details.
|
95
|
+
#
|
96
|
+
# @raise [Temporal::Error::RPCError] Workflow details could not be fetched.
|
97
|
+
def describe(rpc_metadata: {}, rpc_timeout: nil)
|
98
|
+
input = Interceptor::Client::DescribeWorkflowInput.new(
|
99
|
+
id: id,
|
100
|
+
run_id: run_id,
|
101
|
+
rpc_metadata: rpc_metadata,
|
102
|
+
rpc_timeout: rpc_timeout,
|
103
|
+
)
|
104
|
+
|
105
|
+
client_impl.describe_workflow(input)
|
106
|
+
end
|
107
|
+
|
108
|
+
# Cancel the workflow.
|
109
|
+
#
|
110
|
+
# This will issue a cancellation for {#run_id} if present. This call will make sure to use the
|
111
|
+
# run chain starting from {#first_execution_run_id} if present. To create handles with these
|
112
|
+
# values, use {Temporal::Client#workflow_handle}.
|
113
|
+
#
|
114
|
+
# @note Handles created as a result of {Temporal::Client#start_workflow} with a start signal
|
115
|
+
# will cancel the latest workflow with the same workflow ID even if it is unrelated to the
|
116
|
+
# started workflow.
|
117
|
+
#
|
118
|
+
# @param reason [String] A reason for workflow cancellation.
|
119
|
+
# @param rpc_metadata [Hash<String, String>] Headers used on the RPC call.
|
120
|
+
# Keys here override client-level RPC metadata keys.
|
121
|
+
# @param rpc_timeout [Integer] Optional RPC deadline to set for each RPC call.
|
122
|
+
#
|
123
|
+
# @raise [Temporal::Error::RPCError] Workflow could not be cancelled.
|
124
|
+
def cancel(reason = nil, rpc_metadata: {}, rpc_timeout: nil)
|
125
|
+
input = Interceptor::Client::CancelWorkflowInput.new(
|
126
|
+
id: id,
|
127
|
+
run_id: run_id,
|
128
|
+
first_execution_run_id: first_execution_run_id,
|
129
|
+
reason: reason,
|
130
|
+
rpc_metadata: rpc_metadata,
|
131
|
+
rpc_timeout: rpc_timeout,
|
132
|
+
)
|
133
|
+
|
134
|
+
client_impl.cancel_workflow(input)
|
135
|
+
end
|
136
|
+
|
137
|
+
# Query the workflow.
|
138
|
+
#
|
139
|
+
# This will query for {#run_id} if present. To use a different run ID, create a new handle
|
140
|
+
# with via {Temporal::Client#workflow_handle}.
|
141
|
+
#
|
142
|
+
# @note Handles created as a result of {Temporal::Client#start_workflow} will query the latest
|
143
|
+
# workflow with the same workflow ID even if it is unrelated to the started workflow.
|
144
|
+
#
|
145
|
+
# @param query [String, Symbol] Query function or name on the workflow.
|
146
|
+
# @param args [any] Arguments to the query.
|
147
|
+
# @param reject_condition [Symbol] Condition for rejecting the query. Refer to
|
148
|
+
# {Temporal::Workflow::QueryRejectCondition} for the list of allowed values.
|
149
|
+
# @param rpc_metadata [Hash<String, String>] Headers used on the RPC call.
|
150
|
+
# Keys here override client-level RPC metadata keys.
|
151
|
+
# @param rpc_timeout [Integer] Optional RPC deadline to set for each RPC call.
|
152
|
+
#
|
153
|
+
# @return [any] Result of the query.
|
154
|
+
#
|
155
|
+
# @raise [Temporal::Error] A query reject condition was satisfied.
|
156
|
+
# @raise [Temporal::Error::RPCError] Workflow details could not be fetched.
|
157
|
+
def query(
|
158
|
+
query,
|
159
|
+
*args,
|
160
|
+
reject_condition: Workflow::QueryRejectCondition::NONE,
|
161
|
+
rpc_metadata: {},
|
162
|
+
rpc_timeout: nil
|
163
|
+
)
|
164
|
+
input = Interceptor::Client::QueryWorkflowInput.new(
|
165
|
+
id: id,
|
166
|
+
run_id: run_id,
|
167
|
+
query: query,
|
168
|
+
args: args,
|
169
|
+
reject_condition: reject_condition,
|
170
|
+
headers: {},
|
171
|
+
rpc_metadata: rpc_metadata,
|
172
|
+
rpc_timeout: rpc_timeout,
|
173
|
+
)
|
174
|
+
|
175
|
+
client_impl.query_workflow(input)
|
176
|
+
end
|
177
|
+
|
178
|
+
# Send a signal to the workflow.
|
179
|
+
#
|
180
|
+
# This will signal for {#run_id} if present. To use a different run ID, create a new handle
|
181
|
+
# with via {Temporal::Client#workflow_handle}.
|
182
|
+
#
|
183
|
+
# @note Handles created as a result of {Temporal::Client#start_workflow} will signal the
|
184
|
+
# latest workflow with the same workflow ID even if it is unrelated to the started workflow.
|
185
|
+
#
|
186
|
+
# @param signal [String, Symbol] Signal function or name on the workflow.
|
187
|
+
# @param args [any] Arguments to the signal.
|
188
|
+
# @param rpc_metadata [Hash<String, String>] Headers used on the RPC call.
|
189
|
+
# Keys here override client-level RPC metadata keys.
|
190
|
+
# @param rpc_timeout [Integer] Optional RPC deadline to set for each RPC call.
|
191
|
+
#
|
192
|
+
# @return [Temporal::Error::RPCError] Workflow could not be signalled.
|
193
|
+
def signal(signal, *args, rpc_metadata: {}, rpc_timeout: nil)
|
194
|
+
input = Interceptor::Client::SignalWorkflowInput.new(
|
195
|
+
id: id,
|
196
|
+
run_id: run_id,
|
197
|
+
signal: signal,
|
198
|
+
args: args,
|
199
|
+
headers: {},
|
200
|
+
rpc_metadata: rpc_metadata,
|
201
|
+
rpc_timeout: rpc_timeout,
|
202
|
+
)
|
203
|
+
|
204
|
+
client_impl.signal_workflow(input)
|
205
|
+
end
|
206
|
+
|
207
|
+
# Terminate the workflow.
|
208
|
+
#
|
209
|
+
# This will issue a termination for {#run_id} if present. This call will make sure to use the
|
210
|
+
# run chain starting from {#first_execution_run_id} if present. To create handles with these
|
211
|
+
# values, use {Temporal::Client#workflow_handle}.
|
212
|
+
|
213
|
+
# @note Handles created as a result of {Temporal::Client#start_workflow} with a start signal
|
214
|
+
# will terminate the latest workflow with the same workflow ID even if it is unrelated to
|
215
|
+
# the started workflow.
|
216
|
+
#
|
217
|
+
# @param reason [String] A reason for workflow termination.
|
218
|
+
# @param args [any] Details to store on the termination.
|
219
|
+
# @param rpc_metadata [Hash<String, String>] Headers used on the RPC call.
|
220
|
+
# Keys here override client-level RPC metadata keys.
|
221
|
+
# @param rpc_timeout [Integer] Optional RPC deadline to set for each RPC call.
|
222
|
+
#
|
223
|
+
# @raise [Temporal::Error::RPCError] Workflow could not be terminated.
|
224
|
+
def terminate(reason = nil, args = nil, rpc_metadata: {}, rpc_timeout: nil)
|
225
|
+
input = Interceptor::Client::TerminateWorkflowInput.new(
|
226
|
+
id: id,
|
227
|
+
run_id: run_id,
|
228
|
+
first_execution_run_id: first_execution_run_id,
|
229
|
+
reason: reason,
|
230
|
+
args: args,
|
231
|
+
rpc_metadata: rpc_metadata,
|
232
|
+
rpc_timeout: rpc_timeout,
|
233
|
+
)
|
234
|
+
|
235
|
+
client_impl.terminate_workflow(input)
|
236
|
+
end
|
237
|
+
|
238
|
+
private
|
239
|
+
|
240
|
+
attr_reader :client_impl
|
241
|
+
end
|
242
|
+
end
|
243
|
+
end
|