temporalio 0.0.1 → 0.1.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.
- checksums.yaml +4 -4
- data/README.md +180 -7
- data/bridge/Cargo.lock +208 -76
- data/bridge/Cargo.toml +5 -2
- data/bridge/sdk-core/Cargo.toml +1 -1
- data/bridge/sdk-core/README.md +20 -10
- data/bridge/sdk-core/client/Cargo.toml +1 -1
- data/bridge/sdk-core/client/src/lib.rs +227 -59
- data/bridge/sdk-core/client/src/metrics.rs +17 -8
- data/bridge/sdk-core/client/src/raw.rs +13 -12
- data/bridge/sdk-core/client/src/retry.rs +132 -43
- data/bridge/sdk-core/core/Cargo.toml +28 -15
- data/bridge/sdk-core/core/benches/workflow_replay.rs +13 -10
- data/bridge/sdk-core/core/src/abstractions.rs +225 -36
- data/bridge/sdk-core/core/src/core_tests/activity_tasks.rs +217 -79
- data/bridge/sdk-core/core/src/core_tests/determinism.rs +165 -2
- data/bridge/sdk-core/core/src/core_tests/local_activities.rs +565 -34
- data/bridge/sdk-core/core/src/core_tests/queries.rs +247 -90
- data/bridge/sdk-core/core/src/core_tests/workers.rs +3 -5
- data/bridge/sdk-core/core/src/core_tests/workflow_cancels.rs +1 -1
- data/bridge/sdk-core/core/src/core_tests/workflow_tasks.rs +430 -67
- data/bridge/sdk-core/core/src/ephemeral_server/mod.rs +106 -12
- data/bridge/sdk-core/core/src/internal_flags.rs +136 -0
- data/bridge/sdk-core/core/src/lib.rs +148 -34
- data/bridge/sdk-core/core/src/protosext/mod.rs +1 -1
- data/bridge/sdk-core/core/src/replay/mod.rs +185 -41
- data/bridge/sdk-core/core/src/telemetry/log_export.rs +190 -0
- data/bridge/sdk-core/core/src/telemetry/metrics.rs +219 -140
- data/bridge/sdk-core/core/src/telemetry/mod.rs +326 -315
- data/bridge/sdk-core/core/src/telemetry/prometheus_server.rs +20 -14
- data/bridge/sdk-core/core/src/test_help/mod.rs +85 -21
- data/bridge/sdk-core/core/src/worker/activities/activity_heartbeat_manager.rs +112 -156
- data/bridge/sdk-core/core/src/worker/activities/activity_task_poller_stream.rs +89 -0
- data/bridge/sdk-core/core/src/worker/activities/local_activities.rs +364 -128
- data/bridge/sdk-core/core/src/worker/activities.rs +263 -170
- data/bridge/sdk-core/core/src/worker/client/mocks.rs +23 -3
- data/bridge/sdk-core/core/src/worker/client.rs +48 -6
- data/bridge/sdk-core/core/src/worker/mod.rs +186 -75
- data/bridge/sdk-core/core/src/worker/workflow/bridge.rs +1 -3
- data/bridge/sdk-core/core/src/worker/workflow/driven_workflow.rs +13 -24
- data/bridge/sdk-core/core/src/worker/workflow/history_update.rs +879 -226
- data/bridge/sdk-core/core/src/worker/workflow/machines/activity_state_machine.rs +101 -48
- data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_external_state_machine.rs +8 -12
- data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_workflow_state_machine.rs +6 -9
- data/bridge/sdk-core/core/src/worker/workflow/machines/child_workflow_state_machine.rs +90 -32
- data/bridge/sdk-core/core/src/worker/workflow/machines/complete_workflow_state_machine.rs +6 -9
- data/bridge/sdk-core/core/src/worker/workflow/machines/continue_as_new_workflow_state_machine.rs +7 -10
- data/bridge/sdk-core/core/src/worker/workflow/machines/fail_workflow_state_machine.rs +6 -9
- data/bridge/sdk-core/core/src/worker/workflow/machines/local_activity_state_machine.rs +160 -83
- data/bridge/sdk-core/core/src/worker/workflow/machines/mod.rs +36 -54
- data/bridge/sdk-core/core/src/worker/workflow/machines/modify_workflow_properties_state_machine.rs +179 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/patch_state_machine.rs +104 -157
- data/bridge/sdk-core/core/src/worker/workflow/machines/signal_external_state_machine.rs +8 -12
- data/bridge/sdk-core/core/src/worker/workflow/machines/timer_state_machine.rs +9 -13
- data/bridge/sdk-core/core/src/worker/workflow/machines/transition_coverage.rs +10 -4
- data/bridge/sdk-core/core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +14 -11
- data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines/local_acts.rs +6 -17
- data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines.rs +395 -299
- data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_task_state_machine.rs +12 -20
- data/bridge/sdk-core/core/src/worker/workflow/managed_run/managed_wf_test.rs +33 -18
- data/bridge/sdk-core/core/src/worker/workflow/managed_run.rs +1032 -374
- data/bridge/sdk-core/core/src/worker/workflow/mod.rs +525 -392
- data/bridge/sdk-core/core/src/worker/workflow/run_cache.rs +40 -57
- data/bridge/sdk-core/core/src/worker/workflow/wft_extraction.rs +125 -0
- data/bridge/sdk-core/core/src/worker/workflow/wft_poller.rs +3 -6
- data/bridge/sdk-core/core/src/worker/workflow/workflow_stream/saved_wf_inputs.rs +117 -0
- data/bridge/sdk-core/core/src/worker/workflow/workflow_stream/tonic_status_serde.rs +24 -0
- data/bridge/sdk-core/core/src/worker/workflow/workflow_stream.rs +456 -681
- data/bridge/sdk-core/core-api/Cargo.toml +6 -4
- data/bridge/sdk-core/core-api/src/errors.rs +1 -34
- data/bridge/sdk-core/core-api/src/lib.rs +7 -45
- data/bridge/sdk-core/core-api/src/telemetry.rs +141 -0
- data/bridge/sdk-core/core-api/src/worker.rs +27 -1
- data/bridge/sdk-core/etc/deps.svg +115 -140
- data/bridge/sdk-core/etc/regen-depgraph.sh +5 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/src/lib.rs +18 -15
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.stderr +1 -1
- data/bridge/sdk-core/fsm/rustfsm_trait/src/lib.rs +8 -3
- data/bridge/sdk-core/histories/evict_while_la_running_no_interference-16_history.bin +0 -0
- data/bridge/sdk-core/histories/evict_while_la_running_no_interference-23_history.bin +0 -0
- data/bridge/sdk-core/histories/evict_while_la_running_no_interference-85_history.bin +0 -0
- data/bridge/sdk-core/protos/api_upstream/buf.yaml +0 -3
- data/bridge/sdk-core/protos/api_upstream/build/go.mod +7 -0
- data/bridge/sdk-core/protos/api_upstream/build/go.sum +5 -0
- data/bridge/sdk-core/protos/api_upstream/{temporal/api/enums/v1/cluster.proto → build/tools.go} +7 -18
- data/bridge/sdk-core/protos/api_upstream/go.mod +6 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/batch/v1/message.proto +12 -9
- data/bridge/sdk-core/protos/api_upstream/temporal/api/command/v1/message.proto +15 -26
- data/bridge/sdk-core/protos/api_upstream/temporal/api/common/v1/message.proto +13 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/batch_operation.proto +3 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/command_type.proto +4 -9
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/common.proto +3 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/event_type.proto +10 -8
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +28 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/namespace.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/query.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/reset.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/schedule.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/task_queue.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/update.proto +24 -19
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/workflow.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/errordetails/v1/message.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/failure/v1/message.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/filter/v1/message.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/history/v1/message.proto +62 -26
- data/bridge/sdk-core/protos/api_upstream/temporal/api/namespace/v1/message.proto +4 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/request_response.proto +24 -61
- data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/service.proto +2 -21
- data/bridge/sdk-core/protos/api_upstream/temporal/api/protocol/v1/message.proto +57 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/query/v1/message.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/replication/v1/message.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/schedule/v1/message.proto +110 -31
- data/bridge/sdk-core/protos/api_upstream/temporal/api/sdk/v1/task_complete_metadata.proto +63 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +4 -4
- data/bridge/sdk-core/protos/api_upstream/temporal/api/update/v1/message.proto +71 -6
- data/bridge/sdk-core/protos/api_upstream/temporal/api/version/v1/message.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/workflow/v1/message.proto +3 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +111 -36
- data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +19 -5
- data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_result/activity_result.proto +1 -0
- data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_task/activity_task.proto +1 -0
- data/bridge/sdk-core/protos/local/temporal/sdk/core/child_workflow/child_workflow.proto +1 -0
- data/bridge/sdk-core/protos/local/temporal/sdk/core/common/common.proto +1 -0
- data/bridge/sdk-core/protos/local/temporal/sdk/core/core_interface.proto +1 -0
- data/bridge/sdk-core/protos/local/temporal/sdk/core/external_data/external_data.proto +1 -0
- data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +9 -0
- data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +9 -1
- data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_completion/workflow_completion.proto +6 -0
- data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/request_response.proto +2 -2
- data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/service.proto +2 -2
- data/bridge/sdk-core/sdk/Cargo.toml +4 -3
- data/bridge/sdk-core/sdk/src/interceptors.rs +36 -3
- data/bridge/sdk-core/sdk/src/lib.rs +94 -25
- data/bridge/sdk-core/sdk/src/workflow_context.rs +13 -2
- data/bridge/sdk-core/sdk/src/workflow_future.rs +10 -13
- data/bridge/sdk-core/sdk-core-protos/Cargo.toml +5 -2
- data/bridge/sdk-core/sdk-core-protos/build.rs +36 -2
- data/bridge/sdk-core/sdk-core-protos/src/history_builder.rs +164 -104
- data/bridge/sdk-core/sdk-core-protos/src/history_info.rs +27 -23
- data/bridge/sdk-core/sdk-core-protos/src/lib.rs +252 -74
- data/bridge/sdk-core/sdk-core-protos/src/task_token.rs +12 -2
- data/bridge/sdk-core/test-utils/Cargo.toml +4 -1
- data/bridge/sdk-core/test-utils/src/canned_histories.rs +106 -296
- data/bridge/sdk-core/test-utils/src/histfetch.rs +1 -1
- data/bridge/sdk-core/test-utils/src/lib.rs +161 -50
- data/bridge/sdk-core/test-utils/src/wf_input_saver.rs +50 -0
- data/bridge/sdk-core/test-utils/src/workflows.rs +29 -0
- data/bridge/sdk-core/tests/fuzzy_workflow.rs +130 -0
- data/bridge/sdk-core/tests/{load_tests.rs → heavy_tests.rs} +125 -51
- data/bridge/sdk-core/tests/integ_tests/ephemeral_server_tests.rs +25 -3
- data/bridge/sdk-core/tests/integ_tests/heartbeat_tests.rs +10 -5
- data/bridge/sdk-core/tests/integ_tests/metrics_tests.rs +239 -0
- data/bridge/sdk-core/tests/integ_tests/polling_tests.rs +4 -60
- data/bridge/sdk-core/tests/integ_tests/queries_tests.rs +5 -128
- data/bridge/sdk-core/tests/integ_tests/visibility_tests.rs +83 -25
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/activities.rs +93 -69
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +1 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +6 -13
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +1 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +6 -2
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +3 -10
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +151 -116
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/modify_wf_properties.rs +54 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/patches.rs +7 -28
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/replay.rs +115 -24
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/resets.rs +1 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/signals.rs +18 -14
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +6 -20
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/timers.rs +10 -21
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +6 -4
- data/bridge/sdk-core/tests/integ_tests/workflow_tests.rs +27 -18
- data/bridge/sdk-core/tests/main.rs +8 -16
- data/bridge/sdk-core/tests/runner.rs +75 -36
- data/bridge/sdk-core/tests/wf_input_replay.rs +32 -0
- data/bridge/src/connection.rs +117 -82
- data/bridge/src/lib.rs +356 -42
- data/bridge/src/runtime.rs +10 -3
- data/bridge/src/test_server.rs +153 -0
- data/bridge/src/worker.rs +133 -9
- data/lib/gen/temporal/api/batch/v1/message_pb.rb +8 -6
- data/lib/gen/temporal/api/command/v1/message_pb.rb +10 -16
- data/lib/gen/temporal/api/common/v1/message_pb.rb +5 -1
- data/lib/gen/temporal/api/enums/v1/batch_operation_pb.rb +2 -1
- data/lib/gen/temporal/api/enums/v1/command_type_pb.rb +3 -3
- data/lib/gen/temporal/api/enums/v1/common_pb.rb +2 -1
- data/lib/gen/temporal/api/enums/v1/event_type_pb.rb +5 -4
- data/lib/gen/temporal/api/enums/v1/failed_cause_pb.rb +9 -1
- data/lib/gen/temporal/api/enums/v1/namespace_pb.rb +1 -1
- data/lib/gen/temporal/api/enums/v1/query_pb.rb +1 -1
- data/lib/gen/temporal/api/enums/v1/reset_pb.rb +1 -1
- data/lib/gen/temporal/api/enums/v1/schedule_pb.rb +1 -1
- data/lib/gen/temporal/api/enums/v1/task_queue_pb.rb +1 -1
- data/lib/gen/temporal/api/enums/v1/update_pb.rb +7 -10
- data/lib/gen/temporal/api/enums/v1/workflow_pb.rb +1 -1
- data/lib/gen/temporal/api/errordetails/v1/message_pb.rb +1 -1
- data/lib/gen/temporal/api/failure/v1/message_pb.rb +1 -1
- data/lib/gen/temporal/api/filter/v1/message_pb.rb +1 -1
- data/lib/gen/temporal/api/history/v1/message_pb.rb +34 -25
- data/lib/gen/temporal/api/namespace/v1/message_pb.rb +2 -1
- data/lib/gen/temporal/api/operatorservice/v1/request_response_pb.rb +14 -51
- data/lib/gen/temporal/api/operatorservice/v1/service_pb.rb +1 -1
- data/lib/gen/temporal/api/protocol/v1/message_pb.rb +30 -0
- data/lib/gen/temporal/api/query/v1/message_pb.rb +1 -1
- data/lib/gen/temporal/api/replication/v1/message_pb.rb +1 -1
- data/lib/gen/temporal/api/schedule/v1/message_pb.rb +22 -1
- data/lib/gen/temporal/api/sdk/v1/task_complete_metadata_pb.rb +23 -0
- data/lib/gen/temporal/api/taskqueue/v1/message_pb.rb +2 -2
- data/lib/gen/temporal/api/testservice/v1/request_response_pb.rb +49 -0
- data/lib/gen/temporal/api/testservice/v1/service_pb.rb +21 -0
- data/lib/gen/temporal/api/update/v1/message_pb.rb +49 -3
- data/lib/gen/temporal/api/version/v1/message_pb.rb +1 -1
- data/lib/gen/temporal/api/workflow/v1/message_pb.rb +2 -1
- data/lib/gen/temporal/api/workflowservice/v1/request_response_pb.rb +47 -20
- data/lib/gen/temporal/api/workflowservice/v1/service_pb.rb +1 -1
- data/lib/gen/temporal/sdk/core/activity_result/activity_result_pb.rb +13 -9
- data/lib/gen/temporal/sdk/core/activity_task/activity_task_pb.rb +10 -6
- data/lib/gen/temporal/sdk/core/child_workflow/child_workflow_pb.rb +13 -9
- data/lib/gen/temporal/sdk/core/common/common_pb.rb +7 -3
- data/lib/gen/temporal/sdk/core/core_interface_pb.rb +9 -3
- data/lib/gen/temporal/sdk/core/external_data/external_data_pb.rb +7 -3
- data/lib/gen/temporal/sdk/core/workflow_activation/workflow_activation_pb.rb +28 -21
- data/lib/gen/temporal/sdk/core/workflow_commands/workflow_commands_pb.rb +32 -24
- data/lib/gen/temporal/sdk/core/workflow_completion/workflow_completion_pb.rb +12 -5
- data/lib/temporalio/activity/context.rb +102 -0
- data/lib/temporalio/activity/info.rb +67 -0
- data/lib/temporalio/activity.rb +85 -0
- data/lib/temporalio/bridge/connect_options.rb +15 -0
- data/lib/temporalio/bridge/error.rb +8 -0
- data/lib/temporalio/bridge/retry_config.rb +24 -0
- data/lib/temporalio/bridge/tls_options.rb +19 -0
- data/lib/temporalio/bridge.rb +14 -0
- data/lib/{temporal → temporalio}/client/implementation.rb +57 -56
- data/lib/{temporal → temporalio}/client/workflow_handle.rb +35 -35
- data/lib/{temporal → temporalio}/client.rb +19 -32
- data/lib/temporalio/connection/retry_config.rb +44 -0
- data/lib/temporalio/connection/service.rb +20 -0
- data/lib/temporalio/connection/test_service.rb +92 -0
- data/lib/temporalio/connection/tls_options.rb +51 -0
- data/lib/temporalio/connection/workflow_service.rb +731 -0
- data/lib/temporalio/connection.rb +86 -0
- data/lib/{temporal → temporalio}/data_converter.rb +76 -35
- data/lib/{temporal → temporalio}/error/failure.rb +6 -6
- data/lib/{temporal → temporalio}/error/workflow_failure.rb +4 -2
- data/lib/{temporal → temporalio}/errors.rb +19 -1
- data/lib/{temporal → temporalio}/failure_converter/base.rb +5 -5
- data/lib/{temporal → temporalio}/failure_converter/basic.rb +58 -52
- data/lib/temporalio/failure_converter.rb +7 -0
- data/lib/temporalio/interceptor/activity_inbound.rb +22 -0
- data/lib/temporalio/interceptor/activity_outbound.rb +24 -0
- data/lib/{temporal → temporalio}/interceptor/chain.rb +7 -6
- data/lib/{temporal → temporalio}/interceptor/client.rb +27 -2
- data/lib/temporalio/interceptor.rb +22 -0
- data/lib/{temporal → temporalio}/payload_codec/base.rb +5 -5
- data/lib/{temporal → temporalio}/payload_converter/base.rb +3 -3
- data/lib/{temporal → temporalio}/payload_converter/bytes.rb +4 -3
- data/lib/{temporal → temporalio}/payload_converter/composite.rb +7 -5
- data/lib/{temporal → temporalio}/payload_converter/encoding_base.rb +4 -4
- data/lib/{temporal → temporalio}/payload_converter/json.rb +4 -3
- data/lib/{temporal → temporalio}/payload_converter/nil.rb +4 -3
- data/lib/temporalio/payload_converter.rb +14 -0
- data/lib/{temporal → temporalio}/retry_policy.rb +17 -7
- data/lib/{temporal → temporalio}/retry_state.rb +1 -1
- data/lib/temporalio/runtime.rb +25 -0
- data/lib/temporalio/testing/time_skipping_handle.rb +32 -0
- data/lib/temporalio/testing/time_skipping_interceptor.rb +23 -0
- data/lib/temporalio/testing/workflow_environment.rb +112 -0
- data/lib/temporalio/testing.rb +175 -0
- data/lib/{temporal → temporalio}/timeout_type.rb +2 -2
- data/lib/temporalio/version.rb +3 -0
- data/lib/temporalio/worker/activity_runner.rb +114 -0
- data/lib/temporalio/worker/activity_worker.rb +164 -0
- data/lib/temporalio/worker/reactor.rb +46 -0
- data/lib/temporalio/worker/runner.rb +63 -0
- data/lib/temporalio/worker/sync_worker.rb +124 -0
- data/lib/temporalio/worker/thread_pool_executor.rb +51 -0
- data/lib/temporalio/worker.rb +204 -0
- data/lib/temporalio/workflow/async.rb +46 -0
- data/lib/{temporal → temporalio}/workflow/execution_info.rb +4 -4
- data/lib/{temporal → temporalio}/workflow/execution_status.rb +1 -1
- data/lib/temporalio/workflow/future.rb +138 -0
- data/lib/{temporal → temporalio}/workflow/id_reuse_policy.rb +6 -6
- data/lib/temporalio/workflow/info.rb +76 -0
- data/lib/{temporal → temporalio}/workflow/query_reject_condition.rb +5 -5
- data/lib/temporalio.rb +12 -3
- data/temporalio.gemspec +11 -6
- metadata +137 -64
- data/bridge/sdk-core/Cargo.lock +0 -2606
- data/bridge/sdk-core/bridge-ffi/Cargo.toml +0 -24
- data/bridge/sdk-core/bridge-ffi/LICENSE.txt +0 -23
- data/bridge/sdk-core/bridge-ffi/build.rs +0 -25
- data/bridge/sdk-core/bridge-ffi/include/sdk-core-bridge.h +0 -249
- data/bridge/sdk-core/bridge-ffi/src/lib.rs +0 -825
- data/bridge/sdk-core/bridge-ffi/src/wrappers.rs +0 -211
- data/bridge/sdk-core/core/src/log_export.rs +0 -62
- data/bridge/sdk-core/core/src/worker/workflow/machines/mutable_side_effect_state_machine.rs +0 -127
- data/bridge/sdk-core/core/src/worker/workflow/machines/side_effect_state_machine.rs +0 -71
- data/bridge/sdk-core/protos/api_upstream/temporal/api/cluster/v1/message.proto +0 -83
- data/bridge/sdk-core/protos/local/temporal/sdk/core/bridge/bridge.proto +0 -210
- data/bridge/sdk-core/sdk/src/conversions.rs +0 -8
- data/lib/bridge.so +0 -0
- data/lib/gen/temporal/api/cluster/v1/message_pb.rb +0 -67
- data/lib/gen/temporal/api/enums/v1/cluster_pb.rb +0 -26
- data/lib/gen/temporal/sdk/core/bridge/bridge_pb.rb +0 -222
- data/lib/temporal/bridge.rb +0 -14
- data/lib/temporal/connection.rb +0 -736
- data/lib/temporal/failure_converter.rb +0 -8
- data/lib/temporal/payload_converter.rb +0 -14
- data/lib/temporal/runtime.rb +0 -22
- data/lib/temporal/version.rb +0 -3
- data/lib/temporal.rb +0 -8
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
require 'temporalio/error/failure'
|
|
2
|
+
require 'temporalio/errors'
|
|
3
|
+
|
|
4
|
+
module Temporalio
|
|
5
|
+
class Activity
|
|
6
|
+
# This class provides methods that can be called from activity classes.
|
|
7
|
+
class Context
|
|
8
|
+
# @api private
|
|
9
|
+
def initialize(info, heartbeat_proc, interceptors, shielded: false)
|
|
10
|
+
@thread = Thread.current
|
|
11
|
+
@info = info
|
|
12
|
+
@heartbeat_proc = heartbeat_proc
|
|
13
|
+
@interceptors = interceptors
|
|
14
|
+
@pending_cancellation = nil
|
|
15
|
+
@shielded = shielded
|
|
16
|
+
@mutex = Mutex.new
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Information about the running activity.
|
|
20
|
+
#
|
|
21
|
+
# @return [Temporalio::Activity::Info]
|
|
22
|
+
def info
|
|
23
|
+
interceptors.invoke(:activity_info) { @info }
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Send a heartbeat for the current activity.
|
|
27
|
+
#
|
|
28
|
+
# @param details [Array<any>] Data to store with the heartbeat.
|
|
29
|
+
def heartbeat(*details)
|
|
30
|
+
interceptors.invoke(:heartbeat, *details) do |*d|
|
|
31
|
+
@heartbeat_proc.call(*d)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Protect a part of activity's implementation from cancellations.
|
|
36
|
+
#
|
|
37
|
+
# Activity cancellations are implemented using the `Thread#raise`, which can unsafely
|
|
38
|
+
# terminate your implementation. To disable this behaviour make sure to wrap critical parts of
|
|
39
|
+
# your business logic in this method.
|
|
40
|
+
#
|
|
41
|
+
# For shielding a whole activity consider using {Temporalio::Activity.shielded!}.
|
|
42
|
+
#
|
|
43
|
+
# A cancellation that got requested while in a shielded block will not interrupt the execution
|
|
44
|
+
# and will raise a {Temporalio::Error::CancelledError} right after the block has finished.
|
|
45
|
+
#
|
|
46
|
+
# @yield Block to be protected from cancellations.
|
|
47
|
+
def shield(&block)
|
|
48
|
+
# The whole activity is shielded, called from a nested shield
|
|
49
|
+
# or while handling a CancelledError (in a rescue or ensure blocks)
|
|
50
|
+
return block.call if @shielded || cancelled?
|
|
51
|
+
|
|
52
|
+
if Thread.current != thread
|
|
53
|
+
# TODO: Use logger instead when implemented
|
|
54
|
+
warn "Activity shielding is not intended to be used outside of activity's thread."
|
|
55
|
+
return block.call
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
mutex.synchronize do
|
|
59
|
+
@shielded = true
|
|
60
|
+
result = block.call
|
|
61
|
+
# RBS: StandardError fallback is only needed to satisfy steep - https://github.com/soutaro/steep/issues/477
|
|
62
|
+
raise @pending_cancellation || StandardError if cancelled?
|
|
63
|
+
|
|
64
|
+
result
|
|
65
|
+
ensure # runs while still holding the lock
|
|
66
|
+
@shielded = false
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Whether a cancellation was ever requested on this activity.
|
|
71
|
+
#
|
|
72
|
+
# @return [Boolean] true if the activity has had a cancellation request, false otherwise.
|
|
73
|
+
def cancelled?
|
|
74
|
+
!!@pending_cancellation
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# Cancel the running activity by raising a provided error.
|
|
78
|
+
#
|
|
79
|
+
# @param reason [String] Reason for cancellation.
|
|
80
|
+
# @param by_request [Boolean] Cancellation requested by the server or not.
|
|
81
|
+
#
|
|
82
|
+
# @api private
|
|
83
|
+
def cancel(reason, by_request: false)
|
|
84
|
+
error = Temporalio::Error::ActivityCancelled.new(reason, by_request)
|
|
85
|
+
@pending_cancellation = error
|
|
86
|
+
|
|
87
|
+
locked = mutex.try_lock
|
|
88
|
+
# @shielded inside the lock means the whole activity is shielded
|
|
89
|
+
if locked && !@shielded
|
|
90
|
+
thread.raise(error)
|
|
91
|
+
end
|
|
92
|
+
ensure
|
|
93
|
+
# only release the lock if we locked it
|
|
94
|
+
mutex.unlock if locked
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
private
|
|
98
|
+
|
|
99
|
+
attr_reader :thread, :interceptors, :mutex
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
module Temporalio
|
|
2
|
+
class Activity
|
|
3
|
+
# Class containing information about an activity.
|
|
4
|
+
class Info < Struct.new(
|
|
5
|
+
:activity_id,
|
|
6
|
+
:activity_type,
|
|
7
|
+
:attempt,
|
|
8
|
+
:current_attempt_scheduled_time,
|
|
9
|
+
:heartbeat_details,
|
|
10
|
+
:heartbeat_timeout,
|
|
11
|
+
:local,
|
|
12
|
+
:schedule_to_close_timeout,
|
|
13
|
+
:scheduled_time,
|
|
14
|
+
:start_to_close_timeout,
|
|
15
|
+
:started_time,
|
|
16
|
+
:task_queue,
|
|
17
|
+
:task_token,
|
|
18
|
+
:workflow_id,
|
|
19
|
+
:workflow_namespace,
|
|
20
|
+
:workflow_run_id,
|
|
21
|
+
:workflow_type,
|
|
22
|
+
keyword_init: true,
|
|
23
|
+
)
|
|
24
|
+
# @!attribute [r] activity_id
|
|
25
|
+
# @return [String] Activity ID.
|
|
26
|
+
# @!attribute [r] activity_type
|
|
27
|
+
# @return [String] Name of the activity.
|
|
28
|
+
# @!attribute [r] attempt
|
|
29
|
+
# @return [Integer] Activity's execution attempt.
|
|
30
|
+
# @!attribute [r] current_attempt_scheduled_time
|
|
31
|
+
# @return [Time] Scheduled time of the current attempt.
|
|
32
|
+
# @!attribute [r] heartbeat_details
|
|
33
|
+
# @return [Array<any>] Details submitted with the last heartbeat.
|
|
34
|
+
# @!attribute [r] heartbeat_timeout
|
|
35
|
+
# @return [Float] Max time between heartbeats (in seconds).
|
|
36
|
+
# @!attribute [r] local
|
|
37
|
+
# @return [Boolean] Whether activity is local or not.
|
|
38
|
+
# @!attribute [r] schedule_to_close_timeout
|
|
39
|
+
# @return [Float] Max overall activity execution time (in seconds).
|
|
40
|
+
# @!attribute [r] scheduled_time
|
|
41
|
+
# @return [Time] Time when activity was first scheduled.
|
|
42
|
+
# @!attribute [r] start_to_close_timeout
|
|
43
|
+
# @return [Float] Max time of a single invocation (in seconds).
|
|
44
|
+
# @!attribute [r] started_time
|
|
45
|
+
# @return [Time] Time when activity was started.
|
|
46
|
+
# @!attribute [r] task_queue
|
|
47
|
+
# @return [String] Task queue on which the activity got scheduled.
|
|
48
|
+
# @!attribute [r] task_token
|
|
49
|
+
# @return [String] A token for completing the activity.
|
|
50
|
+
# @!attribute [r] workflow_id
|
|
51
|
+
# @return [String] Workflow ID.
|
|
52
|
+
# @!attribute [r] workflow_namespace
|
|
53
|
+
# @return [String] Workflow namespace.
|
|
54
|
+
# @!attribute [r] workflow_run_id
|
|
55
|
+
# @return [String] Workflow run ID.
|
|
56
|
+
# @!attribute [r] workflow_type
|
|
57
|
+
# @return [String] Name of the workflow.
|
|
58
|
+
|
|
59
|
+
# Whether activity is local or not
|
|
60
|
+
#
|
|
61
|
+
# @return [Boolean] True for local activities, falst otherwise.
|
|
62
|
+
def local?
|
|
63
|
+
local
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
module Temporalio
|
|
2
|
+
# This is an abstract superclass for implementing activities.
|
|
3
|
+
#
|
|
4
|
+
# Temporal SDK users are expected to subclass it and implement the {#execute} method by adding
|
|
5
|
+
# their desired business logic.
|
|
6
|
+
#
|
|
7
|
+
# @abstract
|
|
8
|
+
#
|
|
9
|
+
# @example "Hello World" Activity
|
|
10
|
+
# class HelloWorld < Temporalio::Activity
|
|
11
|
+
# def execute(name)
|
|
12
|
+
# "Hello, #{name}!"
|
|
13
|
+
# end
|
|
14
|
+
# end
|
|
15
|
+
class Activity
|
|
16
|
+
# Specify a custom name to be used for this activity.
|
|
17
|
+
#
|
|
18
|
+
# By default a full class (with any namespace modules/classes) name will be used.
|
|
19
|
+
#
|
|
20
|
+
# @param new_name [String] Name to be used for this activity
|
|
21
|
+
#
|
|
22
|
+
# @example
|
|
23
|
+
# class Test < Temporalio::Activity
|
|
24
|
+
# activity_name 'custom-activity-name'
|
|
25
|
+
#
|
|
26
|
+
# def execute
|
|
27
|
+
# ...
|
|
28
|
+
# end
|
|
29
|
+
# end
|
|
30
|
+
def self.activity_name(new_name)
|
|
31
|
+
@activity_name = new_name
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Mark the activity as shielded from cancellations.
|
|
35
|
+
#
|
|
36
|
+
# Activity cancellations are implemented using the `Thread#raise`, which can unsafely terminate
|
|
37
|
+
# your implementation. To disable this behaviour make sure to mark critical activities as
|
|
38
|
+
# `shielded!`. For shielding a part of your activity consider using
|
|
39
|
+
# {Temporalio::Activity::Context#shield}.
|
|
40
|
+
#
|
|
41
|
+
# @example
|
|
42
|
+
# class Test < Temporalio::Activity
|
|
43
|
+
# shielded!
|
|
44
|
+
#
|
|
45
|
+
# def execute
|
|
46
|
+
# ...
|
|
47
|
+
# end
|
|
48
|
+
# end
|
|
49
|
+
def self.shielded!
|
|
50
|
+
@shielded = true
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# @api private
|
|
54
|
+
def self._name
|
|
55
|
+
@activity_name || name || ''
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# @api private
|
|
59
|
+
def self._shielded
|
|
60
|
+
@shielded || false
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# @api private
|
|
64
|
+
def initialize(context)
|
|
65
|
+
@context = context
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# This is the main body of your activity's implementation.
|
|
69
|
+
#
|
|
70
|
+
# When implementing this method, you can use as many positional arguments as needed, which will
|
|
71
|
+
# get converted based on the activity invocation in your workflow.
|
|
72
|
+
#
|
|
73
|
+
# Inside of this method you have access to activity's context using the `activity` method. Check
|
|
74
|
+
# out {Temporalio::Activity::Context} for more information on how to use it.
|
|
75
|
+
def execute(*_args)
|
|
76
|
+
raise NoMethodError, 'must implement #execute'
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
private
|
|
80
|
+
|
|
81
|
+
def activity
|
|
82
|
+
@context
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Temporalio
|
|
2
|
+
module Bridge
|
|
3
|
+
class ConnectOptions
|
|
4
|
+
attr_reader :url, :tls, :client_version, :metadata, :retry_config
|
|
5
|
+
|
|
6
|
+
def initialize(url:, tls:, client_version:, metadata:, retry_config:)
|
|
7
|
+
@url = url
|
|
8
|
+
@tls = tls
|
|
9
|
+
@metadata = metadata
|
|
10
|
+
@retry_config = retry_config
|
|
11
|
+
@client_version = client_version
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module Temporalio
|
|
2
|
+
module Bridge
|
|
3
|
+
class RetryConfig
|
|
4
|
+
attr_reader :initial_interval_millis, :randomization_factor, :multiplier,
|
|
5
|
+
:max_interval_millis, :max_elapsed_time_millis, :max_retries
|
|
6
|
+
|
|
7
|
+
def initialize(
|
|
8
|
+
initial_interval_millis:,
|
|
9
|
+
randomization_factor:,
|
|
10
|
+
multiplier:,
|
|
11
|
+
max_interval_millis:,
|
|
12
|
+
max_retries:,
|
|
13
|
+
max_elapsed_time_millis:
|
|
14
|
+
)
|
|
15
|
+
@initial_interval_millis = initial_interval_millis
|
|
16
|
+
@randomization_factor = randomization_factor
|
|
17
|
+
@multiplier = multiplier
|
|
18
|
+
@max_interval_millis = max_interval_millis
|
|
19
|
+
@max_retries = max_retries
|
|
20
|
+
@max_elapsed_time_millis = max_elapsed_time_millis
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Temporalio
|
|
2
|
+
module Bridge
|
|
3
|
+
class TlsOptions
|
|
4
|
+
attr_reader :server_root_ca_cert, :client_cert, :client_private_key, :server_name_override
|
|
5
|
+
|
|
6
|
+
def initialize(
|
|
7
|
+
server_root_ca_cert:,
|
|
8
|
+
client_cert:,
|
|
9
|
+
client_private_key:,
|
|
10
|
+
server_name_override:
|
|
11
|
+
)
|
|
12
|
+
@server_root_ca_cert = server_root_ca_cert
|
|
13
|
+
@client_cert = client_cert
|
|
14
|
+
@client_private_key = client_private_key
|
|
15
|
+
@server_name_override = server_name_override
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
require 'rutie'
|
|
2
|
+
require 'temporalio/bridge/error'
|
|
3
|
+
|
|
4
|
+
# RBS: for some reason __dir__ has a type of (String | nil)
|
|
5
|
+
BRIDGE_DIR = File.expand_path('..', __dir__ || '.')
|
|
6
|
+
|
|
7
|
+
module Temporalio
|
|
8
|
+
# @api private
|
|
9
|
+
module Bridge
|
|
10
|
+
Rutie
|
|
11
|
+
.new(:bridge, lib_path: '', lib_suffix: 'so', lib_prefix: '')
|
|
12
|
+
.init('init_bridge', BRIDGE_DIR)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
require 'socket'
|
|
2
2
|
require 'temporal/api/workflowservice/v1/request_response_pb'
|
|
3
|
-
require '
|
|
4
|
-
require '
|
|
5
|
-
require '
|
|
6
|
-
require '
|
|
7
|
-
require '
|
|
8
|
-
require '
|
|
9
|
-
require '
|
|
10
|
-
require '
|
|
11
|
-
require '
|
|
12
|
-
|
|
13
|
-
module
|
|
3
|
+
require 'temporalio/client/workflow_handle'
|
|
4
|
+
require 'temporalio/error/failure'
|
|
5
|
+
require 'temporalio/error/workflow_failure'
|
|
6
|
+
require 'temporalio/interceptor/chain'
|
|
7
|
+
require 'temporalio/timeout_type'
|
|
8
|
+
require 'temporalio/version'
|
|
9
|
+
require 'temporalio/workflow/execution_info'
|
|
10
|
+
require 'temporalio/workflow/id_reuse_policy'
|
|
11
|
+
require 'temporalio/workflow/query_reject_condition'
|
|
12
|
+
|
|
13
|
+
module Temporalio
|
|
14
14
|
class Client
|
|
15
|
+
# @api private
|
|
15
16
|
class Implementation
|
|
16
17
|
def initialize(connection, namespace, converter, interceptors)
|
|
17
18
|
@connection = connection
|
|
@@ -59,20 +60,20 @@ module Temporal
|
|
|
59
60
|
|
|
60
61
|
def await_workflow_result(id, run_id, follow_runs, rpc_metadata, rpc_timeout)
|
|
61
62
|
rpc_params = { metadata: rpc_metadata, timeout: rpc_timeout }
|
|
62
|
-
request =
|
|
63
|
+
request = Temporalio::Api::WorkflowService::V1::GetWorkflowExecutionHistoryRequest.new(
|
|
63
64
|
namespace: namespace.to_s,
|
|
64
|
-
execution:
|
|
65
|
+
execution: Temporalio::Api::Common::V1::WorkflowExecution.new(
|
|
65
66
|
workflow_id: id,
|
|
66
67
|
run_id: run_id || '',
|
|
67
68
|
),
|
|
68
69
|
history_event_filter_type:
|
|
69
|
-
|
|
70
|
+
Temporalio::Api::Enums::V1::HistoryEventFilterType::HISTORY_EVENT_FILTER_TYPE_CLOSE_EVENT,
|
|
70
71
|
wait_new_event: true,
|
|
71
72
|
skip_archival: true,
|
|
72
73
|
)
|
|
73
74
|
|
|
74
75
|
loop do
|
|
75
|
-
response = connection.get_workflow_execution_history(request, **rpc_params)
|
|
76
|
+
response = connection.workflow_service.get_workflow_execution_history(request, **rpc_params)
|
|
76
77
|
next_run_id = catch(:next) do
|
|
77
78
|
# this will return out of the loop only if :next wasn't thrown
|
|
78
79
|
return process_workflow_result_from(response, follow_runs)
|
|
@@ -88,7 +89,7 @@ module Temporal
|
|
|
88
89
|
def convert_headers(headers)
|
|
89
90
|
return if headers.empty?
|
|
90
91
|
|
|
91
|
-
|
|
92
|
+
Temporalio::Api::Common::V1::Header.new(
|
|
92
93
|
fields: converter.to_payload_map(headers),
|
|
93
94
|
)
|
|
94
95
|
end
|
|
@@ -97,11 +98,11 @@ module Temporal
|
|
|
97
98
|
input.retry_policy&.validate!
|
|
98
99
|
|
|
99
100
|
if input.memo
|
|
100
|
-
memo =
|
|
101
|
+
memo = Temporalio::Api::Common::V1::Memo.new(fields: converter.to_payload_map(input.memo))
|
|
101
102
|
end
|
|
102
103
|
|
|
103
104
|
if input.search_attributes
|
|
104
|
-
search_attributes =
|
|
105
|
+
search_attributes = Temporalio::Api::Common::V1::SearchAttributes.new(
|
|
105
106
|
indexed_fields: converter.to_payload_map(input.search_attributes),
|
|
106
107
|
)
|
|
107
108
|
end
|
|
@@ -111,9 +112,9 @@ module Temporal
|
|
|
111
112
|
identity: identity,
|
|
112
113
|
request_id: SecureRandom.uuid,
|
|
113
114
|
namespace: namespace,
|
|
114
|
-
workflow_type:
|
|
115
|
+
workflow_type: Temporalio::Api::Common::V1::WorkflowType.new(name: input.workflow.to_s),
|
|
115
116
|
workflow_id: input.id,
|
|
116
|
-
task_queue:
|
|
117
|
+
task_queue: Temporalio::Api::TaskQueue::V1::TaskQueue.new(name: input.task_queue.to_s),
|
|
117
118
|
input: converter.to_payloads(input.args),
|
|
118
119
|
workflow_execution_timeout: input.execution_timeout,
|
|
119
120
|
workflow_run_timeout: input.run_timeout,
|
|
@@ -133,15 +134,15 @@ module Temporal
|
|
|
133
134
|
signal_input: converter.to_payloads(input.start_signal_args),
|
|
134
135
|
)
|
|
135
136
|
|
|
136
|
-
klass =
|
|
137
|
+
klass = Temporalio::Api::WorkflowService::V1::SignalWithStartWorkflowExecutionRequest
|
|
137
138
|
request = klass.new(**params)
|
|
138
139
|
|
|
139
|
-
response = connection.signal_with_start_workflow_execution(request, **rpc_params)
|
|
140
|
+
response = connection.workflow_service.signal_with_start_workflow_execution(request, **rpc_params)
|
|
140
141
|
else
|
|
141
|
-
klass =
|
|
142
|
+
klass = Temporalio::Api::WorkflowService::V1::StartWorkflowExecutionRequest
|
|
142
143
|
request = klass.new(**params)
|
|
143
144
|
|
|
144
|
-
response = connection.start_workflow_execution(request, **rpc_params)
|
|
145
|
+
response = connection.workflow_service.start_workflow_execution(request, **rpc_params)
|
|
145
146
|
first_execution_run_id = response.run_id
|
|
146
147
|
end
|
|
147
148
|
|
|
@@ -151,10 +152,10 @@ module Temporal
|
|
|
151
152
|
result_run_id: response.run_id,
|
|
152
153
|
first_execution_run_id: first_execution_run_id,
|
|
153
154
|
)
|
|
154
|
-
rescue
|
|
155
|
+
rescue Temporalio::Bridge::Error => e
|
|
155
156
|
# TODO: Raise a better error from the bridge
|
|
156
157
|
if e.message.include?('AlreadyExists')
|
|
157
|
-
raise
|
|
158
|
+
raise Temporalio::Error::WorkflowExecutionAlreadyStarted, 'Workflow execution already started'
|
|
158
159
|
else
|
|
159
160
|
raise # re-raise
|
|
160
161
|
end
|
|
@@ -162,28 +163,28 @@ module Temporal
|
|
|
162
163
|
|
|
163
164
|
def handle_describe_workflow(input)
|
|
164
165
|
rpc_params = { metadata: input.rpc_metadata, timeout: input.rpc_timeout }
|
|
165
|
-
request =
|
|
166
|
+
request = Temporalio::Api::WorkflowService::V1::DescribeWorkflowExecutionRequest.new(
|
|
166
167
|
namespace: namespace.to_s,
|
|
167
|
-
execution:
|
|
168
|
+
execution: Temporalio::Api::Common::V1::WorkflowExecution.new(
|
|
168
169
|
workflow_id: input.id,
|
|
169
170
|
run_id: input.run_id || '',
|
|
170
171
|
),
|
|
171
172
|
)
|
|
172
173
|
|
|
173
|
-
response = connection.describe_workflow_execution(request, **rpc_params)
|
|
174
|
+
response = connection.workflow_service.describe_workflow_execution(request, **rpc_params)
|
|
174
175
|
|
|
175
176
|
Workflow::ExecutionInfo.from_raw(response, converter)
|
|
176
177
|
end
|
|
177
178
|
|
|
178
179
|
def handle_query_workflow(input)
|
|
179
180
|
rpc_params = { metadata: input.rpc_metadata, timeout: input.rpc_timeout }
|
|
180
|
-
request =
|
|
181
|
+
request = Temporalio::Api::WorkflowService::V1::QueryWorkflowRequest.new(
|
|
181
182
|
namespace: namespace.to_s,
|
|
182
|
-
execution:
|
|
183
|
+
execution: Temporalio::Api::Common::V1::WorkflowExecution.new(
|
|
183
184
|
workflow_id: input.id,
|
|
184
185
|
run_id: input.run_id,
|
|
185
186
|
),
|
|
186
|
-
query:
|
|
187
|
+
query: Temporalio::Api::Query::V1::WorkflowQuery.new(
|
|
187
188
|
query_type: input.query.to_s,
|
|
188
189
|
query_args: converter.to_payloads(input.args),
|
|
189
190
|
header: convert_headers(input.headers),
|
|
@@ -191,26 +192,26 @@ module Temporal
|
|
|
191
192
|
query_reject_condition: Workflow::QueryRejectCondition.to_raw(input.reject_condition),
|
|
192
193
|
)
|
|
193
194
|
|
|
194
|
-
response = connection.query_workflow(request, **rpc_params)
|
|
195
|
+
response = connection.workflow_service.query_workflow(request, **rpc_params)
|
|
195
196
|
|
|
196
197
|
if response.query_rejected
|
|
197
198
|
status = Workflow::ExecutionStatus.from_raw(response.query_rejected.status)
|
|
198
|
-
raise
|
|
199
|
+
raise Temporalio::Error::QueryRejected, status
|
|
199
200
|
end
|
|
200
201
|
|
|
201
202
|
converter.from_payloads(response.query_result)&.first
|
|
202
|
-
rescue
|
|
203
|
+
rescue Temporalio::Bridge::Error => e
|
|
203
204
|
# TODO: Raise a better error from the bridge
|
|
204
|
-
raise
|
|
205
|
+
raise Temporalio::Error::QueryFailed, e.message
|
|
205
206
|
end
|
|
206
207
|
|
|
207
208
|
def handle_signal_workflow(input)
|
|
208
209
|
rpc_params = { metadata: input.rpc_metadata, timeout: input.rpc_timeout }
|
|
209
|
-
request =
|
|
210
|
+
request = Temporalio::Api::WorkflowService::V1::SignalWorkflowExecutionRequest.new(
|
|
210
211
|
identity: identity,
|
|
211
212
|
request_id: SecureRandom.uuid,
|
|
212
213
|
namespace: namespace.to_s,
|
|
213
|
-
workflow_execution:
|
|
214
|
+
workflow_execution: Temporalio::Api::Common::V1::WorkflowExecution.new(
|
|
214
215
|
workflow_id: input.id,
|
|
215
216
|
run_id: input.run_id || '',
|
|
216
217
|
),
|
|
@@ -219,18 +220,18 @@ module Temporal
|
|
|
219
220
|
header: convert_headers(input.headers),
|
|
220
221
|
)
|
|
221
222
|
|
|
222
|
-
connection.signal_workflow_execution(request, **rpc_params)
|
|
223
|
+
connection.workflow_service.signal_workflow_execution(request, **rpc_params)
|
|
223
224
|
|
|
224
225
|
return
|
|
225
226
|
end
|
|
226
227
|
|
|
227
228
|
def handle_cancel_workflow(input)
|
|
228
229
|
rpc_params = { metadata: input.rpc_metadata, timeout: input.rpc_timeout }
|
|
229
|
-
request =
|
|
230
|
+
request = Temporalio::Api::WorkflowService::V1::RequestCancelWorkflowExecutionRequest.new(
|
|
230
231
|
identity: identity,
|
|
231
232
|
request_id: SecureRandom.uuid,
|
|
232
233
|
namespace: namespace.to_s,
|
|
233
|
-
workflow_execution:
|
|
234
|
+
workflow_execution: Temporalio::Api::Common::V1::WorkflowExecution.new(
|
|
234
235
|
workflow_id: input.id,
|
|
235
236
|
run_id: input.run_id || '',
|
|
236
237
|
),
|
|
@@ -238,17 +239,17 @@ module Temporal
|
|
|
238
239
|
reason: input.reason,
|
|
239
240
|
)
|
|
240
241
|
|
|
241
|
-
connection.request_cancel_workflow_execution(request, **rpc_params)
|
|
242
|
+
connection.workflow_service.request_cancel_workflow_execution(request, **rpc_params)
|
|
242
243
|
|
|
243
244
|
return
|
|
244
245
|
end
|
|
245
246
|
|
|
246
247
|
def handle_terminate_workflow(input)
|
|
247
248
|
rpc_params = { metadata: input.rpc_metadata, timeout: input.rpc_timeout }
|
|
248
|
-
request =
|
|
249
|
+
request = Temporalio::Api::WorkflowService::V1::TerminateWorkflowExecutionRequest.new(
|
|
249
250
|
identity: identity,
|
|
250
251
|
namespace: namespace.to_s,
|
|
251
|
-
workflow_execution:
|
|
252
|
+
workflow_execution: Temporalio::Api::Common::V1::WorkflowExecution.new(
|
|
252
253
|
workflow_id: input.id,
|
|
253
254
|
run_id: input.run_id || '',
|
|
254
255
|
),
|
|
@@ -257,7 +258,7 @@ module Temporal
|
|
|
257
258
|
details: converter.to_payloads(input.args),
|
|
258
259
|
)
|
|
259
260
|
|
|
260
|
-
connection.terminate_workflow_execution(request, **rpc_params)
|
|
261
|
+
connection.workflow_service.terminate_workflow_execution(request, **rpc_params)
|
|
261
262
|
|
|
262
263
|
return
|
|
263
264
|
end
|
|
@@ -268,11 +269,11 @@ module Temporal
|
|
|
268
269
|
if !events || events.empty?
|
|
269
270
|
throw(:next, nil) # next loop, same run_id
|
|
270
271
|
elsif events.length != 1
|
|
271
|
-
raise
|
|
272
|
+
raise Temporalio::Error, "Expected single close event, got #{events.length}"
|
|
272
273
|
end
|
|
273
274
|
|
|
274
275
|
event = events.first
|
|
275
|
-
raise
|
|
276
|
+
raise Temporalio::Error::UnexpectedResponse, 'Missing final history event' unless event
|
|
276
277
|
|
|
277
278
|
case event.event_type
|
|
278
279
|
when :EVENT_TYPE_WORKFLOW_EXECUTION_COMPLETED
|
|
@@ -286,15 +287,15 @@ module Temporal
|
|
|
286
287
|
attributes = event.workflow_execution_failed_event_attributes
|
|
287
288
|
follow(attributes&.new_execution_run_id) if follow_runs
|
|
288
289
|
|
|
289
|
-
raise
|
|
290
|
+
raise Temporalio::Error::WorkflowFailure.new(
|
|
290
291
|
cause: converter.from_failure(attributes&.failure),
|
|
291
292
|
)
|
|
292
293
|
|
|
293
294
|
when :EVENT_TYPE_WORKFLOW_EXECUTION_CANCELED
|
|
294
295
|
attributes = event.workflow_execution_canceled_event_attributes
|
|
295
296
|
|
|
296
|
-
raise
|
|
297
|
-
cause:
|
|
297
|
+
raise Temporalio::Error::WorkflowFailure.new(
|
|
298
|
+
cause: Temporalio::Error::CancelledError.new(
|
|
298
299
|
'Workflow execution cancelled',
|
|
299
300
|
details: converter.from_payloads(attributes&.details),
|
|
300
301
|
),
|
|
@@ -303,8 +304,8 @@ module Temporal
|
|
|
303
304
|
when :EVENT_TYPE_WORKFLOW_EXECUTION_TERMINATED
|
|
304
305
|
attributes = event.workflow_execution_terminated_event_attributes
|
|
305
306
|
|
|
306
|
-
raise
|
|
307
|
-
cause:
|
|
307
|
+
raise Temporalio::Error::WorkflowFailure.new(
|
|
308
|
+
cause: Temporalio::Error::TerminatedError.new(
|
|
308
309
|
attributes&.reason || 'Workflow execution terminated',
|
|
309
310
|
),
|
|
310
311
|
)
|
|
@@ -313,10 +314,10 @@ module Temporal
|
|
|
313
314
|
attributes = event.workflow_execution_timed_out_event_attributes
|
|
314
315
|
follow(attributes&.new_execution_run_id) if follow_runs
|
|
315
316
|
|
|
316
|
-
raise
|
|
317
|
-
cause:
|
|
317
|
+
raise Temporalio::Error::WorkflowFailure.new(
|
|
318
|
+
cause: Temporalio::Error::TimeoutError.new(
|
|
318
319
|
'Workflow execution timed out',
|
|
319
|
-
type:
|
|
320
|
+
type: Temporalio::TimeoutType::START_TO_CLOSE,
|
|
320
321
|
),
|
|
321
322
|
)
|
|
322
323
|
|
|
@@ -325,7 +326,7 @@ module Temporal
|
|
|
325
326
|
follow(attributes&.new_execution_run_id) if follow_runs
|
|
326
327
|
|
|
327
328
|
# TODO: Use more specific error and decode failure
|
|
328
|
-
raise
|
|
329
|
+
raise Temporalio::Error, 'Workflow execution continued as new'
|
|
329
330
|
end
|
|
330
331
|
end
|
|
331
332
|
|