temporalio 0.0.0 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +301 -0
- data/bridge/Cargo.lock +2888 -0
- data/bridge/Cargo.toml +27 -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 +104 -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/client/Cargo.toml +40 -0
- data/bridge/sdk-core/client/LICENSE.txt +23 -0
- data/bridge/sdk-core/client/src/lib.rs +1286 -0
- data/bridge/sdk-core/client/src/metrics.rs +165 -0
- data/bridge/sdk-core/client/src/raw.rs +932 -0
- data/bridge/sdk-core/client/src/retry.rs +751 -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 +76 -0
- data/bridge/sdk-core/core/src/abstractions.rs +166 -0
- data/bridge/sdk-core/core/src/core_tests/activity_tasks.rs +1014 -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 +925 -0
- data/bridge/sdk-core/core/src/core_tests/mod.rs +100 -0
- data/bridge/sdk-core/core/src/core_tests/queries.rs +894 -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 +2090 -0
- data/bridge/sdk-core/core/src/ephemeral_server/mod.rs +515 -0
- data/bridge/sdk-core/core/src/lib.rs +282 -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 +215 -0
- data/bridge/sdk-core/core/src/retry_logic.rs +202 -0
- data/bridge/sdk-core/core/src/telemetry/log_export.rs +190 -0
- data/bridge/sdk-core/core/src/telemetry/metrics.rs +428 -0
- data/bridge/sdk-core/core/src/telemetry/mod.rs +407 -0
- data/bridge/sdk-core/core/src/telemetry/prometheus_server.rs +78 -0
- data/bridge/sdk-core/core/src/test_help/mod.rs +889 -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 +1048 -0
- data/bridge/sdk-core/core/src/worker/activities.rs +481 -0
- data/bridge/sdk-core/core/src/worker/client/mocks.rs +87 -0
- data/bridge/sdk-core/core/src/worker/client.rs +373 -0
- data/bridge/sdk-core/core/src/worker/mod.rs +570 -0
- data/bridge/sdk-core/core/src/worker/workflow/bridge.rs +37 -0
- data/bridge/sdk-core/core/src/worker/workflow/driven_workflow.rs +101 -0
- data/bridge/sdk-core/core/src/worker/workflow/history_update.rs +532 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/activity_state_machine.rs +907 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_external_state_machine.rs +294 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_workflow_state_machine.rs +167 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/child_workflow_state_machine.rs +858 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/complete_workflow_state_machine.rs +136 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/continue_as_new_workflow_state_machine.rs +157 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/fail_workflow_state_machine.rs +129 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/local_activity_state_machine.rs +1450 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/mod.rs +316 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/modify_workflow_properties_state_machine.rs +178 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/patch_state_machine.rs +708 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/signal_external_state_machine.rs +439 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/timer_state_machine.rs +435 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/transition_coverage.rs +175 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +242 -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 +1200 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_task_state_machine.rs +272 -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 +655 -0
- data/bridge/sdk-core/core/src/worker/workflow/mod.rs +1200 -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 +985 -0
- data/bridge/sdk-core/core-api/Cargo.toml +32 -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 +109 -0
- data/bridge/sdk-core/core-api/src/telemetry.rs +147 -0
- data/bridge/sdk-core/core-api/src/worker.rs +148 -0
- data/bridge/sdk-core/etc/deps.svg +162 -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/etc/regen-depgraph.sh +5 -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/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/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 +9 -0
- 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/build/tools.go +29 -0
- data/bridge/sdk-core/protos/api_upstream/dependencies/gogoproto/gogo.proto +141 -0
- data/bridge/sdk-core/protos/api_upstream/go.mod +6 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/batch/v1/message.proto +89 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/command/v1/message.proto +260 -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 +47 -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 +56 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/event_type.proto +170 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +118 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/interaction_type.proto +39 -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 +40 -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 +758 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/interaction/v1/message.proto +87 -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 +121 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/service.proto +80 -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 +379 -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/version/v1/message.proto +59 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/workflow/v1/message.proto +146 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +1168 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +415 -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/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 +263 -0
- data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +304 -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/interceptors.rs +50 -0
- data/bridge/sdk-core/sdk/src/lib.rs +794 -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 +694 -0
- data/bridge/sdk-core/sdk/src/workflow_future.rs +499 -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 +107 -0
- data/bridge/sdk-core/sdk-core-protos/src/constants.rs +7 -0
- data/bridge/sdk-core/sdk-core-protos/src/history_builder.rs +544 -0
- data/bridge/sdk-core/sdk-core-protos/src/history_info.rs +230 -0
- data/bridge/sdk-core/sdk-core-protos/src/lib.rs +1970 -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 +36 -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 +650 -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 +221 -0
- data/bridge/sdk-core/tests/integ_tests/metrics_tests.rs +37 -0
- data/bridge/sdk-core/tests/integ_tests/polling_tests.rs +133 -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 +788 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/modify_wf_properties.rs +53 -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 +223 -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 +597 -0
- data/bridge/sdk-core/tests/load_tests.rs +191 -0
- data/bridge/sdk-core/tests/main.rs +113 -0
- data/bridge/sdk-core/tests/runner.rs +93 -0
- data/bridge/src/connection.rs +186 -0
- data/bridge/src/lib.rs +239 -0
- data/bridge/src/runtime.rs +54 -0
- data/bridge/src/worker.rs +124 -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 +50 -0
- data/lib/gen/temporal/api/command/v1/message_pb.rb +174 -0
- data/lib/gen/temporal/api/common/v1/message_pb.rb +69 -0
- data/lib/gen/temporal/api/enums/v1/batch_operation_pb.rb +33 -0
- data/lib/gen/temporal/api/enums/v1/command_type_pb.rb +39 -0
- data/lib/gen/temporal/api/enums/v1/common_pb.rb +42 -0
- data/lib/gen/temporal/api/enums/v1/event_type_pb.rb +68 -0
- data/lib/gen/temporal/api/enums/v1/failed_cause_pb.rb +77 -0
- data/lib/gen/temporal/api/enums/v1/interaction_type_pb.rb +25 -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 +23 -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 +490 -0
- data/lib/gen/temporal/api/interaction/v1/message_pb.rb +49 -0
- data/lib/gen/temporal/api/namespace/v1/message_pb.rb +63 -0
- data/lib/gen/temporal/api/operatorservice/v1/request_response_pb.rb +85 -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 +149 -0
- data/lib/gen/temporal/api/taskqueue/v1/message_pb.rb +73 -0
- data/lib/gen/temporal/api/version/v1/message_pb.rb +41 -0
- data/lib/gen/temporal/api/workflow/v1/message_pb.rb +111 -0
- data/lib/gen/temporal/api/workflowservice/v1/request_response_pb.rb +788 -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 +165 -0
- data/lib/gen/temporal/sdk/core/workflow_commands/workflow_commands_pb.rb +196 -0
- data/lib/gen/temporal/sdk/core/workflow_completion/workflow_completion_pb.rb +34 -0
- data/lib/temporalio/activity/context.rb +97 -0
- data/lib/temporalio/activity/info.rb +67 -0
- data/lib/temporalio/activity.rb +85 -0
- data/lib/temporalio/bridge/error.rb +8 -0
- data/lib/temporalio/bridge.rb +14 -0
- data/lib/temporalio/client/implementation.rb +340 -0
- data/lib/temporalio/client/workflow_handle.rb +243 -0
- data/lib/temporalio/client.rb +131 -0
- data/lib/temporalio/connection.rb +751 -0
- data/lib/temporalio/data_converter.rb +191 -0
- data/lib/temporalio/error/failure.rb +194 -0
- data/lib/temporalio/error/workflow_failure.rb +19 -0
- data/lib/temporalio/errors.rb +40 -0
- data/lib/temporalio/failure_converter/base.rb +26 -0
- data/lib/temporalio/failure_converter/basic.rb +319 -0
- data/lib/temporalio/failure_converter.rb +7 -0
- data/lib/temporalio/interceptor/chain.rb +28 -0
- data/lib/temporalio/interceptor/client.rb +123 -0
- data/lib/temporalio/payload_codec/base.rb +32 -0
- data/lib/temporalio/payload_converter/base.rb +24 -0
- data/lib/temporalio/payload_converter/bytes.rb +27 -0
- data/lib/temporalio/payload_converter/composite.rb +49 -0
- data/lib/temporalio/payload_converter/encoding_base.rb +35 -0
- data/lib/temporalio/payload_converter/json.rb +26 -0
- data/lib/temporalio/payload_converter/nil.rb +26 -0
- data/lib/temporalio/payload_converter.rb +14 -0
- data/lib/temporalio/retry_policy.rb +82 -0
- data/lib/temporalio/retry_state.rb +35 -0
- data/lib/temporalio/runtime.rb +25 -0
- data/lib/temporalio/timeout_type.rb +29 -0
- data/lib/temporalio/version.rb +3 -0
- data/lib/temporalio/worker/activity_runner.rb +92 -0
- data/lib/temporalio/worker/activity_worker.rb +138 -0
- data/lib/temporalio/worker/reactor.rb +46 -0
- data/lib/temporalio/worker/runner.rb +63 -0
- data/lib/temporalio/worker/sync_worker.rb +88 -0
- data/lib/temporalio/worker/thread_pool_executor.rb +51 -0
- data/lib/temporalio/worker.rb +198 -0
- data/lib/temporalio/workflow/execution_info.rb +54 -0
- data/lib/temporalio/workflow/execution_status.rb +36 -0
- data/lib/temporalio/workflow/id_reuse_policy.rb +36 -0
- data/lib/temporalio/workflow/query_reject_condition.rb +33 -0
- data/lib/temporalio.rb +12 -1
- data/lib/thermite_patch.rb +23 -0
- data/temporalio.gemspec +45 -0
- metadata +566 -9
- data/lib/temporal/version.rb +0 -3
- data/lib/temporal.rb +0 -4
- data/temporal.gemspec +0 -20
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 657f0a3bde04af32d78ce4f6b58103ba1eb5e16b6b023aea02fdd8889fe7594c
|
|
4
|
+
data.tar.gz: 7b51a09196eb6dde92b54e31b1abad8cf7ce3a41f2c719de73d8341e83d5d95e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 768d7983132b8a4bc3bd359be90a621463f9abd0e3a6de51dbd13256c86e9f60f916142b3301d22082e7ffacba156b5a97666b4f189299e976bc890c224fe2bb
|
|
7
|
+
data.tar.gz: 7602428c63547f9de4da9dcbd4180d58617eae04fb5478a58fbfc16c2d7f27fda8894134ab1a7d37dfe3c79f0c67d97eabf5f2f7f50e0112f19dbcc12f32d1d3
|
data/README.md
ADDED
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
# Temporal Ruby SDK
|
|
2
|
+
|
|
3
|
+
[](https://github.com/temporalio/sdk-ruby/actions/workflows/ci.yml?query=branch%3Amain)
|
|
4
|
+
[](https://github.com/temporalio/sdk-ruby/actions/workflows/build-native-ext.yml?query=branch%3Amain+event%3Arelease)
|
|
5
|
+
[](https://rubygems.org/gems/temporalio)
|
|
6
|
+
|
|
7
|
+
[Temporal](https://temporal.io/) is a distributed, scalable, durable, and highly available
|
|
8
|
+
orchestration engine used to execute asynchronous long-running business logic in a scalable and
|
|
9
|
+
resilient way.
|
|
10
|
+
|
|
11
|
+
"Temporal Ruby SDK" is the framework for authoring workflows and activities using the Ruby
|
|
12
|
+
programming language.
|
|
13
|
+
|
|
14
|
+
⚠️ UNDER DEVELOPMENT
|
|
15
|
+
|
|
16
|
+
The Ruby SDK is under development. There are no compatibility guarantees at this time.
|
|
17
|
+
|
|
18
|
+
At this point the SDK only supports the **Temporal Client** capabilities:
|
|
19
|
+
|
|
20
|
+
- Starting a workflow (defined in any other SDK)
|
|
21
|
+
- Interacting with a workflow (cancelling, querying, signalling, etc)
|
|
22
|
+
- Interceptor and Data Conversion support
|
|
23
|
+
- gRPC access to Temporal Server
|
|
24
|
+
- Temporal Cloud is not yet supported due to the lack of TLS support, but it's coming soon
|
|
25
|
+
|
|
26
|
+
As well as **Activity Worker** capabilities:
|
|
27
|
+
|
|
28
|
+
- Definiting activities
|
|
29
|
+
- Activity heartbeats/cancellations
|
|
30
|
+
- Running activity workers
|
|
31
|
+
|
|
32
|
+
## Quick Start
|
|
33
|
+
|
|
34
|
+
### Installation
|
|
35
|
+
|
|
36
|
+
Add the [temporalio gem](https://rubygems.org/gems/temporalio) to your Gemfile:
|
|
37
|
+
|
|
38
|
+
```ruby
|
|
39
|
+
gem 'temporalio'
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
The SDK is now ready for use. To build from source, see [Dev Setup](#dev-setup).
|
|
43
|
+
|
|
44
|
+
**NOTE: This README is for the current branch and not necessarily what's released on RubyGems.**
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
## Usage
|
|
48
|
+
|
|
49
|
+
### Client
|
|
50
|
+
|
|
51
|
+
A client can be created and used to start a workflow like so:
|
|
52
|
+
|
|
53
|
+
```ruby
|
|
54
|
+
# Establish a gRPC connection to the server
|
|
55
|
+
connection = Temporalio::Connection.new('localhost:7233')
|
|
56
|
+
|
|
57
|
+
# Initialize a Client with a namespace
|
|
58
|
+
client = Temporalio::Client.new(connection, 'my-namespace')
|
|
59
|
+
|
|
60
|
+
# Start a workflow
|
|
61
|
+
handle = client.start_workflow('MyWorkflow', 'some input', id: 'my-id', task_queue: 'my-task-queue')
|
|
62
|
+
|
|
63
|
+
# Wait for the workflow to finish processing
|
|
64
|
+
result = handle.result
|
|
65
|
+
puts "Result: #{result}"
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Some things to note about the above code:
|
|
69
|
+
|
|
70
|
+
- A `Client` does not have an explicit "close"
|
|
71
|
+
- TLS is not yet supported
|
|
72
|
+
- All positional arguments after the workflow name are treated as workflow arguments
|
|
73
|
+
- The `handle` represents the workflow that was started and can be used for more than just getting
|
|
74
|
+
the result
|
|
75
|
+
- Clients can have many more options not shown here (e.g. data converters and interceptors)
|
|
76
|
+
|
|
77
|
+
### Data Conversion
|
|
78
|
+
|
|
79
|
+
Data converters are used to convert raw Temporal payloads to/from actual Ruby types. These consist
|
|
80
|
+
of 3 distinct types of converters:
|
|
81
|
+
|
|
82
|
+
- **Payload Converters** to convert Ruby values to/from serialized bytes
|
|
83
|
+
- **Payload Codecs** to convert bytes to bytes (e.g. for compression or encryption)
|
|
84
|
+
- **Failure Converters** to convert exceptions to/from serialized failures
|
|
85
|
+
|
|
86
|
+
The default data converter supports converting multiple types including:
|
|
87
|
+
|
|
88
|
+
- `nil`
|
|
89
|
+
- bytes (`String` with `Encoding::ASCII_8BIT`)
|
|
90
|
+
- Anything that [JSON.generate](https://ruby-doc.org/stdlib-3.0.0/libdoc/json/rdoc/JSON.html#method-i-generate)
|
|
91
|
+
supports
|
|
92
|
+
|
|
93
|
+
This notably doesn't include any `Date`, `Time`, or `DateTime` objects as they may not work across
|
|
94
|
+
different SDKs. A custom payload converter can be implemented to support these.
|
|
95
|
+
|
|
96
|
+
### Workers
|
|
97
|
+
|
|
98
|
+
Workers host workflows (coming soon) and/or activities. Here's how to run a worker:
|
|
99
|
+
|
|
100
|
+
```ruby
|
|
101
|
+
require 'temporal'
|
|
102
|
+
|
|
103
|
+
# Establish a gRPC connection to the server
|
|
104
|
+
connection = Temporal::Connection.new('localhost:7233')
|
|
105
|
+
|
|
106
|
+
# Initialize a new worker with your activities
|
|
107
|
+
worker = Temporal::Worker.new(connection, 'my-namespace', 'my-task-queue', activities: [MyActivity])
|
|
108
|
+
|
|
109
|
+
# Occupy the thread by running the worker
|
|
110
|
+
worker.run
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Some things to note about the above code:
|
|
114
|
+
|
|
115
|
+
- This creates/uses the same connection that is used for initializing a client
|
|
116
|
+
- Workers can have many more options not shown here (e.g. data converters and interceptors)
|
|
117
|
+
|
|
118
|
+
In order to have more control over running of a worker you can provide a block of code by the end of
|
|
119
|
+
which the worker will shut itself down:
|
|
120
|
+
|
|
121
|
+
```ruby
|
|
122
|
+
# Initialize worker_1, worker_2 and worker_3 as in the example above
|
|
123
|
+
|
|
124
|
+
# Run the worker for 5 seconds, then shut down
|
|
125
|
+
worker_1.run { sleep 5 }
|
|
126
|
+
|
|
127
|
+
# Or shut the worker down when a workflow completes (very useful for running specs):
|
|
128
|
+
client = Temporal::Client.new(connection, 'my-namespace')
|
|
129
|
+
handle = client.start_workflow('MyWorkflow', 'some input', id: 'my-id', task_queue: 'my-task-queue')
|
|
130
|
+
worker_2.run { handle.result }
|
|
131
|
+
|
|
132
|
+
# Or wait for some external signal to stop the worker
|
|
133
|
+
stop_queue = Queue.new
|
|
134
|
+
Signal.trap('USR1') { stop_queue.close }
|
|
135
|
+
worker_3.run { stop_queue.pop }
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
You can also shut down a running worker by calling `Temporal::Worker#shutdown` from a separate
|
|
139
|
+
thread at any time.
|
|
140
|
+
|
|
141
|
+
#### Running multiple workers
|
|
142
|
+
|
|
143
|
+
In order to run multiple workers in the same thread you can use the `Temporal::Worker.run` method:
|
|
144
|
+
|
|
145
|
+
```ruby
|
|
146
|
+
# Initialize workers
|
|
147
|
+
worker_1 = Temporal::Worker.new(connection, 'my-namespace-1', 'my-task-queue-1', activities: [MyActivity1, MyActivity2])
|
|
148
|
+
worker_2 = Temporal::Worker.new(connection, 'my-namespace-2', 'my-task-queue-1', activities: [MyActivity3])
|
|
149
|
+
worker_3 = Temporal::Worker.new(connection, 'my-namespace-1', 'my-task-queue-2', activities: [MyActivity4])
|
|
150
|
+
|
|
151
|
+
Temporal::Worker.run(worker_1, worker_2, worker_3)
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Please note that similar to `Temporal::Worker#run`, `Temporal::Worker.run` accepts a block that
|
|
155
|
+
behaves the same way — the workers will be shut down when the block finishes.
|
|
156
|
+
|
|
157
|
+
You can also configure your worker to listen on process signals to initiate a shutdown:
|
|
158
|
+
|
|
159
|
+
```ruby
|
|
160
|
+
Temporal::Worker.run(worker_1, worker_2, worker_3, shutdown_signals: %w[INT TERM])
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
#### Worker Shutdown
|
|
164
|
+
|
|
165
|
+
The `Temporal::Worker#run` (as well as `Temporal::Worker#shutdown`) invocation will wait on all
|
|
166
|
+
activities to complete, so if a long-running activity does not at least respect cancellation, the
|
|
167
|
+
shutdown may never complete.
|
|
168
|
+
|
|
169
|
+
If a worker was initialized with a `graceful_shutdown_timeout` option then a cancellation will be
|
|
170
|
+
issued for every running activity after the set timeout. The bahaviour is mostly identical to a
|
|
171
|
+
server requested cancellation and should be handled accordingly. More on this in [Heartbeating and
|
|
172
|
+
Cancellation](#heartbeating-and-cancellation).
|
|
173
|
+
|
|
174
|
+
### Activities
|
|
175
|
+
|
|
176
|
+
#### Definition
|
|
177
|
+
|
|
178
|
+
Activities are defined by subclassing `Temporal::Activity` class:
|
|
179
|
+
|
|
180
|
+
```ruby
|
|
181
|
+
class SayHelloActivity < Temporal::Activity
|
|
182
|
+
# Optionally specify a custom activity name:
|
|
183
|
+
# (The class name `SayHelloActivity` will be used by default)
|
|
184
|
+
activity_name 'say-hello'
|
|
185
|
+
|
|
186
|
+
def execute(name)
|
|
187
|
+
return "Hello, #{name}!"
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
Some things to note about activity definitions:
|
|
193
|
+
|
|
194
|
+
- Long running activities should regularly heartbeat and handle cancellation
|
|
195
|
+
- Activities can only have positional arguments. Best practice is to only take a single argument
|
|
196
|
+
that is an object/dataclass of fields that can be added to as needed.
|
|
197
|
+
|
|
198
|
+
#### Activity Context
|
|
199
|
+
|
|
200
|
+
Activity classes have access to `Temporal::Activity::Context` via the `activity` method. Which
|
|
201
|
+
itself provides access to useful methods, specifically:
|
|
202
|
+
|
|
203
|
+
- `info` - Returns the immutable info of the currently running activity
|
|
204
|
+
- `heartbeat(*details)` - Record a heartbeat
|
|
205
|
+
- `cancelled?` - Whether a cancellation has been requested on this activity
|
|
206
|
+
- `shield` - Prevent cancel exception from being thrown during the provided block of code
|
|
207
|
+
|
|
208
|
+
##### Heartbeating and Cancellation
|
|
209
|
+
|
|
210
|
+
In order for a non-local activity to be notified of cancellation requests, it must call
|
|
211
|
+
`activity.heartbeat`. It is strongly recommended that all but the fastest executing activities call
|
|
212
|
+
this method regularly.
|
|
213
|
+
|
|
214
|
+
In addition to obtaining cancellation information, heartbeats also support detail data that is
|
|
215
|
+
persisted on the server for retrieval during activity retry. If an activity calls
|
|
216
|
+
`activity.heartbeat(123, 456)` and then fails and is retried, `activity.info.heartbeat_details` will
|
|
217
|
+
return an array containing `123` and `456` on the next run.
|
|
218
|
+
|
|
219
|
+
A cancellation is implemented using the `Thread#raise` method, which will raise a
|
|
220
|
+
`Temporal::Error::ActivityCancelled` during the execution of an activity. This means that your code
|
|
221
|
+
might get interrupted at any point and never complete. In order to protect critical parts of your
|
|
222
|
+
activities wrap them in `activity.shield`:
|
|
223
|
+
|
|
224
|
+
```ruby
|
|
225
|
+
class ActivityWithCriticalLogic < Temporal::Activity
|
|
226
|
+
def execute
|
|
227
|
+
activity.shield do
|
|
228
|
+
run_business_critical_logic_1
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
run_non_critical_logic
|
|
232
|
+
|
|
233
|
+
activity.shield do
|
|
234
|
+
run_business_critical_logic_2
|
|
235
|
+
end
|
|
236
|
+
end
|
|
237
|
+
end
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
This will ensure that a cancellation request received while inside the `activity.shield` block will
|
|
241
|
+
not raise an exception until that block finishes.
|
|
242
|
+
|
|
243
|
+
In case the entire activity is considered critical, you can mark it as `shielded!` and ignore
|
|
244
|
+
cancellation requests altogether:
|
|
245
|
+
|
|
246
|
+
```ruby
|
|
247
|
+
class CriticalActivity < Temporal::Activity
|
|
248
|
+
shielded!
|
|
249
|
+
|
|
250
|
+
def execute
|
|
251
|
+
...
|
|
252
|
+
end
|
|
253
|
+
end
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
For any long-running activity using this approach it is recommended to periodically check
|
|
257
|
+
`activity.cancelled?` flag and respond accordingly.
|
|
258
|
+
|
|
259
|
+
Please note that your activities can also get cancelled during a worker shutdown process ([if
|
|
260
|
+
configured accordingly](#worker-shutdown)).
|
|
261
|
+
|
|
262
|
+
|
|
263
|
+
## Dev Setup
|
|
264
|
+
|
|
265
|
+
Once you've forked/cloned the repository you want to make sure all the submodules are fetched as
|
|
266
|
+
well. You can do that using:
|
|
267
|
+
|
|
268
|
+
```sh
|
|
269
|
+
> git submodule update --recursive
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
From there you should be able to install all the Ruby gems using:
|
|
273
|
+
|
|
274
|
+
```sh
|
|
275
|
+
> bundle install
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
In order to compile the Rust Bridge you need to have `rust`, `cargo` and `rustup` installed. You
|
|
279
|
+
will also need to install the `rustfmt` component:
|
|
280
|
+
|
|
281
|
+
```sh
|
|
282
|
+
> rustup component add rustfmt
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
Now you should be able to compile a dev build of the Bridge:
|
|
286
|
+
|
|
287
|
+
```sh
|
|
288
|
+
> bundle exec rake bridge:build
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
You can then run all the specs against a dev build using:
|
|
292
|
+
|
|
293
|
+
```sh
|
|
294
|
+
> bundle exec rspec
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
And open an IRB session using:
|
|
298
|
+
|
|
299
|
+
```sh
|
|
300
|
+
> bundle console
|
|
301
|
+
```
|