temporalio 0.1.1 → 0.2.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/Cargo.lock +4035 -0
- data/Cargo.toml +25 -0
- data/Gemfile +20 -0
- data/LICENSE +16 -15
- data/README.md +455 -195
- data/Rakefile +387 -0
- data/ext/Cargo.toml +25 -0
- data/lib/temporalio/activity/complete_async_error.rb +11 -0
- data/lib/temporalio/activity/context.rb +82 -77
- data/lib/temporalio/activity/definition.rb +77 -0
- data/lib/temporalio/activity/info.rb +42 -46
- data/lib/temporalio/activity.rb +49 -65
- data/lib/temporalio/api/batch/v1/message.rb +31 -0
- data/lib/temporalio/api/cloud/cloudservice/v1/request_response.rb +93 -0
- data/lib/temporalio/api/cloud/cloudservice/v1/service.rb +25 -0
- data/lib/temporalio/api/cloud/cloudservice.rb +3 -0
- data/lib/temporalio/api/cloud/identity/v1/message.rb +36 -0
- data/lib/temporalio/api/cloud/namespace/v1/message.rb +35 -0
- data/lib/temporalio/api/cloud/operation/v1/message.rb +27 -0
- data/lib/temporalio/api/cloud/region/v1/message.rb +23 -0
- data/lib/temporalio/api/command/v1/message.rb +46 -0
- data/lib/temporalio/api/common/v1/grpc_status.rb +23 -0
- data/lib/temporalio/api/common/v1/message.rb +41 -0
- data/lib/temporalio/api/enums/v1/batch_operation.rb +22 -0
- data/lib/temporalio/api/enums/v1/command_type.rb +21 -0
- data/lib/temporalio/api/enums/v1/common.rb +26 -0
- data/lib/temporalio/api/enums/v1/event_type.rb +21 -0
- data/lib/temporalio/api/enums/v1/failed_cause.rb +26 -0
- data/lib/temporalio/api/enums/v1/namespace.rb +23 -0
- data/lib/temporalio/api/enums/v1/query.rb +22 -0
- data/lib/temporalio/api/enums/v1/reset.rb +23 -0
- data/lib/temporalio/api/enums/v1/schedule.rb +21 -0
- data/lib/temporalio/api/enums/v1/task_queue.rb +25 -0
- data/lib/temporalio/api/enums/v1/update.rb +22 -0
- data/lib/temporalio/api/enums/v1/workflow.rb +30 -0
- data/lib/temporalio/api/errordetails/v1/message.rb +42 -0
- data/lib/temporalio/api/export/v1/message.rb +24 -0
- data/lib/temporalio/api/failure/v1/message.rb +35 -0
- data/lib/temporalio/api/filter/v1/message.rb +27 -0
- data/lib/temporalio/api/history/v1/message.rb +90 -0
- data/lib/temporalio/api/namespace/v1/message.rb +31 -0
- data/lib/temporalio/api/nexus/v1/message.rb +40 -0
- data/lib/temporalio/api/operatorservice/v1/request_response.rb +49 -0
- data/lib/temporalio/api/operatorservice/v1/service.rb +23 -0
- data/lib/temporalio/api/operatorservice.rb +3 -0
- data/lib/temporalio/api/protocol/v1/message.rb +23 -0
- data/lib/temporalio/api/query/v1/message.rb +27 -0
- data/lib/temporalio/api/replication/v1/message.rb +26 -0
- data/lib/temporalio/api/schedule/v1/message.rb +42 -0
- data/lib/temporalio/api/sdk/v1/enhanced_stack_trace.rb +25 -0
- data/lib/temporalio/api/sdk/v1/task_complete_metadata.rb +21 -0
- data/lib/temporalio/api/sdk/v1/user_metadata.rb +23 -0
- data/lib/temporalio/api/sdk/v1/workflow_metadata.rb +23 -0
- data/lib/temporalio/api/taskqueue/v1/message.rb +45 -0
- data/lib/temporalio/api/update/v1/message.rb +33 -0
- data/lib/temporalio/api/version/v1/message.rb +26 -0
- data/lib/temporalio/api/workflow/v1/message.rb +43 -0
- data/lib/temporalio/api/workflowservice/v1/request_response.rb +189 -0
- data/lib/temporalio/api/workflowservice/v1/service.rb +23 -0
- data/lib/temporalio/api/workflowservice.rb +3 -0
- data/lib/temporalio/api.rb +13 -0
- data/lib/temporalio/cancellation.rb +150 -0
- data/lib/temporalio/client/activity_id_reference.rb +32 -0
- data/lib/temporalio/client/async_activity_handle.rb +110 -0
- data/lib/temporalio/client/connection/cloud_service.rb +648 -0
- data/lib/temporalio/client/connection/operator_service.rb +249 -0
- data/lib/temporalio/client/connection/service.rb +41 -0
- data/lib/temporalio/client/connection/workflow_service.rb +1218 -0
- data/lib/temporalio/client/connection.rb +270 -0
- data/lib/temporalio/client/interceptor.rb +316 -0
- data/lib/temporalio/client/workflow_execution.rb +103 -0
- data/lib/temporalio/client/workflow_execution_count.rb +36 -0
- data/lib/temporalio/client/workflow_execution_status.rb +18 -0
- data/lib/temporalio/client/workflow_handle.rb +380 -177
- data/lib/temporalio/client/workflow_query_reject_condition.rb +14 -0
- data/lib/temporalio/client/workflow_update_handle.rb +67 -0
- data/lib/temporalio/client/workflow_update_wait_stage.rb +17 -0
- data/lib/temporalio/client.rb +366 -93
- data/lib/temporalio/common_enums.rb +24 -0
- data/lib/temporalio/converters/data_converter.rb +102 -0
- data/lib/temporalio/converters/failure_converter.rb +200 -0
- data/lib/temporalio/converters/payload_codec.rb +26 -0
- data/lib/temporalio/converters/payload_converter/binary_null.rb +34 -0
- data/lib/temporalio/converters/payload_converter/binary_plain.rb +35 -0
- data/lib/temporalio/converters/payload_converter/binary_protobuf.rb +42 -0
- data/lib/temporalio/converters/payload_converter/composite.rb +62 -0
- data/lib/temporalio/converters/payload_converter/encoding.rb +35 -0
- data/lib/temporalio/converters/payload_converter/json_plain.rb +44 -0
- data/lib/temporalio/converters/payload_converter/json_protobuf.rb +41 -0
- data/lib/temporalio/converters/payload_converter.rb +73 -0
- data/lib/temporalio/converters.rb +9 -0
- data/lib/temporalio/error/failure.rb +119 -94
- data/lib/temporalio/error.rb +147 -0
- data/lib/temporalio/internal/bridge/api/activity_result/activity_result.rb +34 -0
- data/lib/temporalio/internal/bridge/api/activity_task/activity_task.rb +31 -0
- data/lib/temporalio/internal/bridge/api/child_workflow/child_workflow.rb +33 -0
- data/lib/temporalio/internal/bridge/api/common/common.rb +26 -0
- data/lib/temporalio/internal/bridge/api/core_interface.rb +36 -0
- data/lib/temporalio/internal/bridge/api/external_data/external_data.rb +27 -0
- data/lib/temporalio/internal/bridge/api/workflow_activation/workflow_activation.rb +52 -0
- data/lib/temporalio/internal/bridge/api/workflow_commands/workflow_commands.rb +54 -0
- data/lib/temporalio/internal/bridge/api/workflow_completion/workflow_completion.rb +30 -0
- data/lib/temporalio/internal/bridge/api.rb +3 -0
- data/lib/temporalio/internal/bridge/client.rb +90 -0
- data/lib/temporalio/internal/bridge/runtime.rb +53 -0
- data/lib/temporalio/internal/bridge/testing.rb +46 -0
- data/lib/temporalio/internal/bridge/worker.rb +83 -0
- data/lib/temporalio/internal/bridge.rb +36 -0
- data/lib/temporalio/internal/client/implementation.rb +525 -0
- data/lib/temporalio/internal/proto_utils.rb +54 -0
- data/lib/temporalio/internal/worker/activity_worker.rb +345 -0
- data/lib/temporalio/internal/worker/multi_runner.rb +169 -0
- data/lib/temporalio/internal.rb +7 -0
- data/lib/temporalio/retry_policy.rb +39 -80
- data/lib/temporalio/runtime.rb +259 -13
- data/lib/temporalio/scoped_logger.rb +96 -0
- data/lib/temporalio/search_attributes.rb +300 -0
- data/lib/temporalio/testing/activity_environment.rb +132 -0
- data/lib/temporalio/testing/workflow_environment.rb +113 -88
- data/lib/temporalio/testing.rb +4 -169
- data/lib/temporalio/version.rb +3 -1
- data/lib/temporalio/worker/activity_executor/fiber.rb +49 -0
- data/lib/temporalio/worker/activity_executor/thread_pool.rb +254 -0
- data/lib/temporalio/worker/activity_executor.rb +55 -0
- data/lib/temporalio/worker/interceptor.rb +88 -0
- data/lib/temporalio/worker/tuner.rb +151 -0
- data/lib/temporalio/worker.rb +385 -163
- data/lib/temporalio/workflow_history.rb +22 -0
- data/lib/temporalio.rb +2 -7
- data/temporalio.gemspec +20 -39
- metadata +131 -712
- data/bridge/Cargo.lock +0 -2997
- data/bridge/Cargo.toml +0 -29
- data/bridge/sdk-core/ARCHITECTURE.md +0 -76
- data/bridge/sdk-core/Cargo.toml +0 -2
- data/bridge/sdk-core/LICENSE.txt +0 -23
- data/bridge/sdk-core/README.md +0 -117
- data/bridge/sdk-core/arch_docs/diagrams/README.md +0 -10
- data/bridge/sdk-core/arch_docs/diagrams/sticky_queues.puml +0 -40
- data/bridge/sdk-core/arch_docs/diagrams/workflow_internals.svg +0 -1
- data/bridge/sdk-core/arch_docs/sticky_queues.md +0 -51
- data/bridge/sdk-core/client/Cargo.toml +0 -40
- data/bridge/sdk-core/client/LICENSE.txt +0 -23
- data/bridge/sdk-core/client/src/lib.rs +0 -1462
- data/bridge/sdk-core/client/src/metrics.rs +0 -174
- data/bridge/sdk-core/client/src/raw.rs +0 -932
- data/bridge/sdk-core/client/src/retry.rs +0 -763
- data/bridge/sdk-core/client/src/workflow_handle/mod.rs +0 -185
- data/bridge/sdk-core/core/Cargo.toml +0 -129
- data/bridge/sdk-core/core/LICENSE.txt +0 -23
- data/bridge/sdk-core/core/benches/workflow_replay.rs +0 -76
- data/bridge/sdk-core/core/src/abstractions.rs +0 -355
- data/bridge/sdk-core/core/src/core_tests/activity_tasks.rs +0 -1049
- data/bridge/sdk-core/core/src/core_tests/child_workflows.rs +0 -221
- data/bridge/sdk-core/core/src/core_tests/determinism.rs +0 -270
- data/bridge/sdk-core/core/src/core_tests/local_activities.rs +0 -1046
- data/bridge/sdk-core/core/src/core_tests/mod.rs +0 -100
- data/bridge/sdk-core/core/src/core_tests/queries.rs +0 -893
- data/bridge/sdk-core/core/src/core_tests/replay_flag.rs +0 -65
- data/bridge/sdk-core/core/src/core_tests/workers.rs +0 -257
- data/bridge/sdk-core/core/src/core_tests/workflow_cancels.rs +0 -124
- data/bridge/sdk-core/core/src/core_tests/workflow_tasks.rs +0 -2433
- data/bridge/sdk-core/core/src/ephemeral_server/mod.rs +0 -609
- data/bridge/sdk-core/core/src/internal_flags.rs +0 -136
- data/bridge/sdk-core/core/src/lib.rs +0 -289
- data/bridge/sdk-core/core/src/pollers/mod.rs +0 -54
- data/bridge/sdk-core/core/src/pollers/poll_buffer.rs +0 -297
- data/bridge/sdk-core/core/src/protosext/mod.rs +0 -428
- data/bridge/sdk-core/core/src/replay/mod.rs +0 -215
- data/bridge/sdk-core/core/src/retry_logic.rs +0 -202
- data/bridge/sdk-core/core/src/telemetry/log_export.rs +0 -190
- data/bridge/sdk-core/core/src/telemetry/metrics.rs +0 -462
- data/bridge/sdk-core/core/src/telemetry/mod.rs +0 -423
- data/bridge/sdk-core/core/src/telemetry/prometheus_server.rs +0 -83
- data/bridge/sdk-core/core/src/test_help/mod.rs +0 -939
- data/bridge/sdk-core/core/src/worker/activities/activity_heartbeat_manager.rs +0 -536
- data/bridge/sdk-core/core/src/worker/activities/activity_task_poller_stream.rs +0 -89
- data/bridge/sdk-core/core/src/worker/activities/local_activities.rs +0 -1278
- data/bridge/sdk-core/core/src/worker/activities.rs +0 -557
- data/bridge/sdk-core/core/src/worker/client/mocks.rs +0 -107
- data/bridge/sdk-core/core/src/worker/client.rs +0 -389
- data/bridge/sdk-core/core/src/worker/mod.rs +0 -677
- data/bridge/sdk-core/core/src/worker/workflow/bridge.rs +0 -35
- data/bridge/sdk-core/core/src/worker/workflow/driven_workflow.rs +0 -99
- data/bridge/sdk-core/core/src/worker/workflow/history_update.rs +0 -1111
- data/bridge/sdk-core/core/src/worker/workflow/machines/activity_state_machine.rs +0 -964
- data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_external_state_machine.rs +0 -294
- data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_workflow_state_machine.rs +0 -168
- data/bridge/sdk-core/core/src/worker/workflow/machines/child_workflow_state_machine.rs +0 -918
- data/bridge/sdk-core/core/src/worker/workflow/machines/complete_workflow_state_machine.rs +0 -137
- data/bridge/sdk-core/core/src/worker/workflow/machines/continue_as_new_workflow_state_machine.rs +0 -158
- data/bridge/sdk-core/core/src/worker/workflow/machines/fail_workflow_state_machine.rs +0 -130
- data/bridge/sdk-core/core/src/worker/workflow/machines/local_activity_state_machine.rs +0 -1525
- data/bridge/sdk-core/core/src/worker/workflow/machines/mod.rs +0 -324
- data/bridge/sdk-core/core/src/worker/workflow/machines/modify_workflow_properties_state_machine.rs +0 -179
- data/bridge/sdk-core/core/src/worker/workflow/machines/patch_state_machine.rs +0 -659
- data/bridge/sdk-core/core/src/worker/workflow/machines/signal_external_state_machine.rs +0 -439
- data/bridge/sdk-core/core/src/worker/workflow/machines/timer_state_machine.rs +0 -435
- data/bridge/sdk-core/core/src/worker/workflow/machines/transition_coverage.rs +0 -175
- data/bridge/sdk-core/core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +0 -249
- data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines/local_acts.rs +0 -85
- data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines.rs +0 -1280
- data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_task_state_machine.rs +0 -269
- data/bridge/sdk-core/core/src/worker/workflow/managed_run/managed_wf_test.rs +0 -213
- data/bridge/sdk-core/core/src/worker/workflow/managed_run.rs +0 -1305
- data/bridge/sdk-core/core/src/worker/workflow/mod.rs +0 -1276
- data/bridge/sdk-core/core/src/worker/workflow/run_cache.rs +0 -128
- data/bridge/sdk-core/core/src/worker/workflow/wft_extraction.rs +0 -125
- data/bridge/sdk-core/core/src/worker/workflow/wft_poller.rs +0 -85
- data/bridge/sdk-core/core/src/worker/workflow/workflow_stream/saved_wf_inputs.rs +0 -117
- data/bridge/sdk-core/core/src/worker/workflow/workflow_stream/tonic_status_serde.rs +0 -24
- data/bridge/sdk-core/core/src/worker/workflow/workflow_stream.rs +0 -715
- data/bridge/sdk-core/core-api/Cargo.toml +0 -33
- data/bridge/sdk-core/core-api/LICENSE.txt +0 -23
- data/bridge/sdk-core/core-api/src/errors.rs +0 -62
- data/bridge/sdk-core/core-api/src/lib.rs +0 -113
- data/bridge/sdk-core/core-api/src/telemetry.rs +0 -141
- data/bridge/sdk-core/core-api/src/worker.rs +0 -161
- data/bridge/sdk-core/etc/deps.svg +0 -162
- data/bridge/sdk-core/etc/dynamic-config.yaml +0 -2
- data/bridge/sdk-core/etc/otel-collector-config.yaml +0 -36
- data/bridge/sdk-core/etc/prometheus.yaml +0 -6
- data/bridge/sdk-core/etc/regen-depgraph.sh +0 -5
- data/bridge/sdk-core/fsm/Cargo.toml +0 -18
- data/bridge/sdk-core/fsm/LICENSE.txt +0 -23
- data/bridge/sdk-core/fsm/README.md +0 -3
- data/bridge/sdk-core/fsm/rustfsm_procmacro/Cargo.toml +0 -27
- data/bridge/sdk-core/fsm/rustfsm_procmacro/LICENSE.txt +0 -23
- data/bridge/sdk-core/fsm/rustfsm_procmacro/src/lib.rs +0 -650
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/progress.rs +0 -8
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dupe_transitions_fail.rs +0 -18
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dupe_transitions_fail.stderr +0 -12
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dynamic_dest_pass.rs +0 -41
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/forgot_name_fail.rs +0 -14
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/forgot_name_fail.stderr +0 -11
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/handler_arg_pass.rs +0 -32
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/handler_pass.rs +0 -31
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/medium_complex_pass.rs +0 -46
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.rs +0 -29
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.stderr +0 -12
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/simple_pass.rs +0 -32
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/struct_event_variant_fail.rs +0 -18
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/struct_event_variant_fail.stderr +0 -5
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_more_item_event_variant_fail.rs +0 -11
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_more_item_event_variant_fail.stderr +0 -5
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_zero_item_event_variant_fail.rs +0 -11
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_zero_item_event_variant_fail.stderr +0 -5
- data/bridge/sdk-core/fsm/rustfsm_trait/Cargo.toml +0 -14
- data/bridge/sdk-core/fsm/rustfsm_trait/LICENSE.txt +0 -23
- data/bridge/sdk-core/fsm/rustfsm_trait/src/lib.rs +0 -254
- data/bridge/sdk-core/fsm/src/lib.rs +0 -2
- 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/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 +0 -7
- data/bridge/sdk-core/protos/api_upstream/README.md +0 -9
- data/bridge/sdk-core/protos/api_upstream/api-linter.yaml +0 -40
- data/bridge/sdk-core/protos/api_upstream/buf.yaml +0 -9
- data/bridge/sdk-core/protos/api_upstream/build/go.mod +0 -7
- data/bridge/sdk-core/protos/api_upstream/build/go.sum +0 -5
- data/bridge/sdk-core/protos/api_upstream/build/tools.go +0 -29
- data/bridge/sdk-core/protos/api_upstream/dependencies/gogoproto/gogo.proto +0 -141
- data/bridge/sdk-core/protos/api_upstream/go.mod +0 -6
- data/bridge/sdk-core/protos/api_upstream/temporal/api/batch/v1/message.proto +0 -89
- data/bridge/sdk-core/protos/api_upstream/temporal/api/command/v1/message.proto +0 -248
- data/bridge/sdk-core/protos/api_upstream/temporal/api/common/v1/message.proto +0 -123
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/batch_operation.proto +0 -47
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/command_type.proto +0 -52
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/common.proto +0 -56
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/event_type.proto +0 -170
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +0 -123
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/namespace.proto +0 -51
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/query.proto +0 -50
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/reset.proto +0 -41
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/schedule.proto +0 -60
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/task_queue.proto +0 -59
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/update.proto +0 -56
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/workflow.proto +0 -122
- data/bridge/sdk-core/protos/api_upstream/temporal/api/errordetails/v1/message.proto +0 -108
- data/bridge/sdk-core/protos/api_upstream/temporal/api/failure/v1/message.proto +0 -114
- data/bridge/sdk-core/protos/api_upstream/temporal/api/filter/v1/message.proto +0 -56
- data/bridge/sdk-core/protos/api_upstream/temporal/api/history/v1/message.proto +0 -787
- data/bridge/sdk-core/protos/api_upstream/temporal/api/namespace/v1/message.proto +0 -99
- data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/request_response.proto +0 -124
- data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/service.proto +0 -80
- data/bridge/sdk-core/protos/api_upstream/temporal/api/protocol/v1/message.proto +0 -57
- data/bridge/sdk-core/protos/api_upstream/temporal/api/query/v1/message.proto +0 -61
- data/bridge/sdk-core/protos/api_upstream/temporal/api/replication/v1/message.proto +0 -55
- data/bridge/sdk-core/protos/api_upstream/temporal/api/schedule/v1/message.proto +0 -379
- data/bridge/sdk-core/protos/api_upstream/temporal/api/sdk/v1/task_complete_metadata.proto +0 -63
- data/bridge/sdk-core/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +0 -108
- data/bridge/sdk-core/protos/api_upstream/temporal/api/update/v1/message.proto +0 -111
- data/bridge/sdk-core/protos/api_upstream/temporal/api/version/v1/message.proto +0 -59
- data/bridge/sdk-core/protos/api_upstream/temporal/api/workflow/v1/message.proto +0 -146
- data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +0 -1199
- data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +0 -415
- data/bridge/sdk-core/protos/grpc/health/v1/health.proto +0 -63
- data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_result/activity_result.proto +0 -79
- data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_task/activity_task.proto +0 -80
- data/bridge/sdk-core/protos/local/temporal/sdk/core/child_workflow/child_workflow.proto +0 -78
- data/bridge/sdk-core/protos/local/temporal/sdk/core/common/common.proto +0 -16
- data/bridge/sdk-core/protos/local/temporal/sdk/core/core_interface.proto +0 -31
- data/bridge/sdk-core/protos/local/temporal/sdk/core/external_data/external_data.proto +0 -31
- data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +0 -270
- data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +0 -305
- data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_completion/workflow_completion.proto +0 -35
- data/bridge/sdk-core/protos/testsrv_upstream/api-linter.yaml +0 -38
- data/bridge/sdk-core/protos/testsrv_upstream/buf.yaml +0 -13
- data/bridge/sdk-core/protos/testsrv_upstream/dependencies/gogoproto/gogo.proto +0 -141
- data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/request_response.proto +0 -63
- data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/service.proto +0 -90
- data/bridge/sdk-core/rustfmt.toml +0 -1
- data/bridge/sdk-core/sdk/Cargo.toml +0 -48
- data/bridge/sdk-core/sdk/LICENSE.txt +0 -23
- data/bridge/sdk-core/sdk/src/activity_context.rs +0 -230
- data/bridge/sdk-core/sdk/src/app_data.rs +0 -37
- data/bridge/sdk-core/sdk/src/interceptors.rs +0 -50
- data/bridge/sdk-core/sdk/src/lib.rs +0 -861
- data/bridge/sdk-core/sdk/src/payload_converter.rs +0 -11
- data/bridge/sdk-core/sdk/src/workflow_context/options.rs +0 -295
- data/bridge/sdk-core/sdk/src/workflow_context.rs +0 -694
- data/bridge/sdk-core/sdk/src/workflow_future.rs +0 -500
- data/bridge/sdk-core/sdk-core-protos/Cargo.toml +0 -33
- data/bridge/sdk-core/sdk-core-protos/LICENSE.txt +0 -23
- data/bridge/sdk-core/sdk-core-protos/build.rs +0 -142
- data/bridge/sdk-core/sdk-core-protos/src/constants.rs +0 -7
- data/bridge/sdk-core/sdk-core-protos/src/history_builder.rs +0 -557
- data/bridge/sdk-core/sdk-core-protos/src/history_info.rs +0 -234
- data/bridge/sdk-core/sdk-core-protos/src/lib.rs +0 -2088
- data/bridge/sdk-core/sdk-core-protos/src/task_token.rs +0 -48
- data/bridge/sdk-core/sdk-core-protos/src/utilities.rs +0 -14
- data/bridge/sdk-core/test-utils/Cargo.toml +0 -38
- data/bridge/sdk-core/test-utils/src/canned_histories.rs +0 -1389
- data/bridge/sdk-core/test-utils/src/histfetch.rs +0 -28
- data/bridge/sdk-core/test-utils/src/lib.rs +0 -709
- data/bridge/sdk-core/test-utils/src/wf_input_saver.rs +0 -50
- data/bridge/sdk-core/test-utils/src/workflows.rs +0 -29
- data/bridge/sdk-core/tests/fuzzy_workflow.rs +0 -130
- data/bridge/sdk-core/tests/heavy_tests.rs +0 -265
- data/bridge/sdk-core/tests/integ_tests/client_tests.rs +0 -36
- data/bridge/sdk-core/tests/integ_tests/ephemeral_server_tests.rs +0 -150
- data/bridge/sdk-core/tests/integ_tests/heartbeat_tests.rs +0 -223
- data/bridge/sdk-core/tests/integ_tests/metrics_tests.rs +0 -239
- data/bridge/sdk-core/tests/integ_tests/polling_tests.rs +0 -90
- data/bridge/sdk-core/tests/integ_tests/queries_tests.rs +0 -314
- data/bridge/sdk-core/tests/integ_tests/visibility_tests.rs +0 -151
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/activities.rs +0 -902
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/appdata_propagation.rs +0 -61
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +0 -60
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +0 -51
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +0 -51
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +0 -64
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +0 -47
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +0 -669
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/modify_wf_properties.rs +0 -54
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/patches.rs +0 -92
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/replay.rs +0 -228
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/resets.rs +0 -94
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/signals.rs +0 -171
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +0 -85
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/timers.rs +0 -120
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +0 -77
- data/bridge/sdk-core/tests/integ_tests/workflow_tests.rs +0 -596
- data/bridge/sdk-core/tests/main.rs +0 -103
- data/bridge/sdk-core/tests/runner.rs +0 -132
- data/bridge/sdk-core/tests/wf_input_replay.rs +0 -32
- data/bridge/src/connection.rs +0 -202
- data/bridge/src/lib.rs +0 -494
- data/bridge/src/runtime.rs +0 -54
- data/bridge/src/test_server.rs +0 -153
- data/bridge/src/worker.rs +0 -197
- data/ext/Rakefile +0 -9
- data/lib/gen/dependencies/gogoproto/gogo_pb.rb +0 -14
- data/lib/gen/temporal/api/batch/v1/message_pb.rb +0 -50
- data/lib/gen/temporal/api/command/v1/message_pb.rb +0 -160
- data/lib/gen/temporal/api/common/v1/message_pb.rb +0 -73
- data/lib/gen/temporal/api/enums/v1/batch_operation_pb.rb +0 -33
- data/lib/gen/temporal/api/enums/v1/command_type_pb.rb +0 -37
- data/lib/gen/temporal/api/enums/v1/common_pb.rb +0 -42
- data/lib/gen/temporal/api/enums/v1/event_type_pb.rb +0 -68
- data/lib/gen/temporal/api/enums/v1/failed_cause_pb.rb +0 -79
- data/lib/gen/temporal/api/enums/v1/namespace_pb.rb +0 -37
- data/lib/gen/temporal/api/enums/v1/query_pb.rb +0 -31
- data/lib/gen/temporal/api/enums/v1/reset_pb.rb +0 -24
- data/lib/gen/temporal/api/enums/v1/schedule_pb.rb +0 -28
- data/lib/gen/temporal/api/enums/v1/task_queue_pb.rb +0 -30
- data/lib/gen/temporal/api/enums/v1/update_pb.rb +0 -25
- data/lib/gen/temporal/api/enums/v1/workflow_pb.rb +0 -89
- data/lib/gen/temporal/api/errordetails/v1/message_pb.rb +0 -84
- data/lib/gen/temporal/api/failure/v1/message_pb.rb +0 -83
- data/lib/gen/temporal/api/filter/v1/message_pb.rb +0 -40
- data/lib/gen/temporal/api/history/v1/message_pb.rb +0 -498
- data/lib/gen/temporal/api/namespace/v1/message_pb.rb +0 -64
- data/lib/gen/temporal/api/operatorservice/v1/request_response_pb.rb +0 -88
- data/lib/gen/temporal/api/operatorservice/v1/service_pb.rb +0 -20
- data/lib/gen/temporal/api/protocol/v1/message_pb.rb +0 -30
- data/lib/gen/temporal/api/query/v1/message_pb.rb +0 -38
- data/lib/gen/temporal/api/replication/v1/message_pb.rb +0 -37
- data/lib/gen/temporal/api/schedule/v1/message_pb.rb +0 -149
- data/lib/gen/temporal/api/sdk/v1/task_complete_metadata_pb.rb +0 -23
- data/lib/gen/temporal/api/taskqueue/v1/message_pb.rb +0 -73
- data/lib/gen/temporal/api/testservice/v1/request_response_pb.rb +0 -49
- data/lib/gen/temporal/api/testservice/v1/service_pb.rb +0 -21
- data/lib/gen/temporal/api/update/v1/message_pb.rb +0 -72
- data/lib/gen/temporal/api/version/v1/message_pb.rb +0 -41
- data/lib/gen/temporal/api/workflow/v1/message_pb.rb +0 -111
- data/lib/gen/temporal/api/workflowservice/v1/request_response_pb.rb +0 -798
- data/lib/gen/temporal/api/workflowservice/v1/service_pb.rb +0 -20
- data/lib/gen/temporal/sdk/core/activity_result/activity_result_pb.rb +0 -62
- data/lib/gen/temporal/sdk/core/activity_task/activity_task_pb.rb +0 -61
- data/lib/gen/temporal/sdk/core/child_workflow/child_workflow_pb.rb +0 -61
- data/lib/gen/temporal/sdk/core/common/common_pb.rb +0 -26
- data/lib/gen/temporal/sdk/core/core_interface_pb.rb +0 -40
- data/lib/gen/temporal/sdk/core/external_data/external_data_pb.rb +0 -31
- data/lib/gen/temporal/sdk/core/workflow_activation/workflow_activation_pb.rb +0 -171
- data/lib/gen/temporal/sdk/core/workflow_commands/workflow_commands_pb.rb +0 -200
- data/lib/gen/temporal/sdk/core/workflow_completion/workflow_completion_pb.rb +0 -41
- data/lib/temporalio/bridge/connect_options.rb +0 -15
- data/lib/temporalio/bridge/error.rb +0 -8
- data/lib/temporalio/bridge/retry_config.rb +0 -24
- data/lib/temporalio/bridge/tls_options.rb +0 -19
- data/lib/temporalio/bridge.rb +0 -14
- data/lib/temporalio/client/implementation.rb +0 -340
- data/lib/temporalio/connection/retry_config.rb +0 -44
- data/lib/temporalio/connection/service.rb +0 -20
- data/lib/temporalio/connection/test_service.rb +0 -92
- data/lib/temporalio/connection/tls_options.rb +0 -51
- data/lib/temporalio/connection/workflow_service.rb +0 -731
- data/lib/temporalio/connection.rb +0 -86
- data/lib/temporalio/data_converter.rb +0 -191
- data/lib/temporalio/error/workflow_failure.rb +0 -19
- data/lib/temporalio/errors.rb +0 -40
- data/lib/temporalio/failure_converter/base.rb +0 -26
- data/lib/temporalio/failure_converter/basic.rb +0 -319
- data/lib/temporalio/failure_converter.rb +0 -7
- data/lib/temporalio/interceptor/activity_inbound.rb +0 -22
- data/lib/temporalio/interceptor/activity_outbound.rb +0 -24
- data/lib/temporalio/interceptor/chain.rb +0 -28
- data/lib/temporalio/interceptor/client.rb +0 -127
- data/lib/temporalio/interceptor.rb +0 -22
- data/lib/temporalio/payload_codec/base.rb +0 -32
- data/lib/temporalio/payload_converter/base.rb +0 -24
- data/lib/temporalio/payload_converter/bytes.rb +0 -27
- data/lib/temporalio/payload_converter/composite.rb +0 -49
- data/lib/temporalio/payload_converter/encoding_base.rb +0 -35
- data/lib/temporalio/payload_converter/json.rb +0 -26
- data/lib/temporalio/payload_converter/nil.rb +0 -26
- data/lib/temporalio/payload_converter.rb +0 -14
- data/lib/temporalio/retry_state.rb +0 -35
- data/lib/temporalio/testing/time_skipping_handle.rb +0 -32
- data/lib/temporalio/testing/time_skipping_interceptor.rb +0 -23
- data/lib/temporalio/timeout_type.rb +0 -29
- data/lib/temporalio/worker/activity_runner.rb +0 -114
- data/lib/temporalio/worker/activity_worker.rb +0 -164
- data/lib/temporalio/worker/reactor.rb +0 -46
- data/lib/temporalio/worker/runner.rb +0 -63
- data/lib/temporalio/worker/sync_worker.rb +0 -124
- data/lib/temporalio/worker/thread_pool_executor.rb +0 -51
- data/lib/temporalio/workflow/async.rb +0 -46
- data/lib/temporalio/workflow/execution_info.rb +0 -54
- data/lib/temporalio/workflow/execution_status.rb +0 -36
- data/lib/temporalio/workflow/future.rb +0 -138
- data/lib/temporalio/workflow/id_reuse_policy.rb +0 -36
- data/lib/temporalio/workflow/info.rb +0 -76
- data/lib/temporalio/workflow/query_reject_condition.rb +0 -33
- data/lib/thermite_patch.rb +0 -33
- data/sig/async.rbs +0 -17
- data/sig/protobuf.rbs +0 -16
- data/sig/protos/dependencies/gogoproto/gogo.rbs +0 -914
- data/sig/protos/google/protobuf/any.rbs +0 -157
- data/sig/protos/google/protobuf/descriptor.rbs +0 -2825
- data/sig/protos/google/protobuf/duration.rbs +0 -114
- data/sig/protos/google/protobuf/empty.rbs +0 -36
- data/sig/protos/google/protobuf/timestamp.rbs +0 -145
- data/sig/protos/google/protobuf/wrappers.rbs +0 -358
- data/sig/protos/temporal/api/batch/v1/message.rbs +0 -300
- data/sig/protos/temporal/api/command/v1/message.rbs +0 -1399
- data/sig/protos/temporal/api/common/v1/message.rbs +0 -528
- data/sig/protos/temporal/api/enums/v1/batch_operation.rbs +0 -79
- data/sig/protos/temporal/api/enums/v1/command_type.rbs +0 -68
- data/sig/protos/temporal/api/enums/v1/common.rbs +0 -118
- data/sig/protos/temporal/api/enums/v1/event_type.rbs +0 -264
- data/sig/protos/temporal/api/enums/v1/failed_cause.rbs +0 -277
- data/sig/protos/temporal/api/enums/v1/namespace.rbs +0 -108
- data/sig/protos/temporal/api/enums/v1/query.rbs +0 -81
- data/sig/protos/temporal/api/enums/v1/reset.rbs +0 -44
- data/sig/protos/temporal/api/enums/v1/schedule.rbs +0 -72
- data/sig/protos/temporal/api/enums/v1/task_queue.rbs +0 -92
- data/sig/protos/temporal/api/enums/v1/update.rbs +0 -64
- data/sig/protos/temporal/api/enums/v1/workflow.rbs +0 -371
- data/sig/protos/temporal/api/errordetails/v1/message.rbs +0 -551
- data/sig/protos/temporal/api/failure/v1/message.rbs +0 -581
- data/sig/protos/temporal/api/filter/v1/message.rbs +0 -171
- data/sig/protos/temporal/api/history/v1/message.rbs +0 -4609
- data/sig/protos/temporal/api/namespace/v1/message.rbs +0 -410
- data/sig/protos/temporal/api/operatorservice/v1/request_response.rbs +0 -643
- data/sig/protos/temporal/api/operatorservice/v1/service.rbs +0 -17
- data/sig/protos/temporal/api/protocol/v1/message.rbs +0 -84
- data/sig/protos/temporal/api/query/v1/message.rbs +0 -182
- data/sig/protos/temporal/api/replication/v1/message.rbs +0 -148
- data/sig/protos/temporal/api/schedule/v1/message.rbs +0 -1488
- data/sig/protos/temporal/api/sdk/v1/task_complete_metadata.rbs +0 -110
- data/sig/protos/temporal/api/taskqueue/v1/message.rbs +0 -486
- data/sig/protos/temporal/api/testservice/v1/request_response.rbs +0 -249
- data/sig/protos/temporal/api/testservice/v1/service.rbs +0 -15
- data/sig/protos/temporal/api/update/v1/message.rbs +0 -489
- data/sig/protos/temporal/api/version/v1/message.rbs +0 -184
- data/sig/protos/temporal/api/workflow/v1/message.rbs +0 -824
- data/sig/protos/temporal/api/workflowservice/v1/request_response.rbs +0 -7250
- data/sig/protos/temporal/api/workflowservice/v1/service.rbs +0 -22
- data/sig/protos/temporal/sdk/core/activity_result/activity_result.rbs +0 -380
- data/sig/protos/temporal/sdk/core/activity_task/activity_task.rbs +0 -386
- data/sig/protos/temporal/sdk/core/child_workflow/child_workflow.rbs +0 -323
- data/sig/protos/temporal/sdk/core/common/common.rbs +0 -62
- data/sig/protos/temporal/sdk/core/core_interface.rbs +0 -101
- data/sig/protos/temporal/sdk/core/external_data/external_data.rbs +0 -119
- data/sig/protos/temporal/sdk/core/workflow_activation/workflow_activation.rbs +0 -1473
- data/sig/protos/temporal/sdk/core/workflow_commands/workflow_commands.rbs +0 -1784
- data/sig/protos/temporal/sdk/core/workflow_completion/workflow_completion.rbs +0 -180
- data/sig/ruby.rbs +0 -12
- data/sig/temporalio/activity/context.rbs +0 -29
- data/sig/temporalio/activity/info.rbs +0 -43
- data/sig/temporalio/activity.rbs +0 -19
- data/sig/temporalio/bridge/connect_options.rbs +0 -19
- data/sig/temporalio/bridge/error.rbs +0 -8
- data/sig/temporalio/bridge/retry_config.rbs +0 -21
- data/sig/temporalio/bridge/tls_options.rbs +0 -17
- data/sig/temporalio/bridge.rbs +0 -71
- data/sig/temporalio/client/implementation.rbs +0 -38
- data/sig/temporalio/client/workflow_handle.rbs +0 -41
- data/sig/temporalio/client.rbs +0 -35
- data/sig/temporalio/connection/retry_config.rbs +0 -37
- data/sig/temporalio/connection/service.rbs +0 -14
- data/sig/temporalio/connection/test_service.rbs +0 -13
- data/sig/temporalio/connection/tls_options.rbs +0 -43
- data/sig/temporalio/connection/workflow_service.rbs +0 -48
- data/sig/temporalio/connection.rbs +0 -30
- data/sig/temporalio/data_converter.rbs +0 -35
- data/sig/temporalio/error/failure.rbs +0 -121
- data/sig/temporalio/error/workflow_failure.rbs +0 -9
- data/sig/temporalio/errors.rbs +0 -36
- data/sig/temporalio/failure_converter/base.rbs +0 -12
- data/sig/temporalio/failure_converter/basic.rbs +0 -86
- data/sig/temporalio/failure_converter.rbs +0 -5
- data/sig/temporalio/interceptor/activity_inbound.rbs +0 -21
- data/sig/temporalio/interceptor/activity_outbound.rbs +0 -10
- data/sig/temporalio/interceptor/chain.rbs +0 -24
- data/sig/temporalio/interceptor/client.rbs +0 -148
- data/sig/temporalio/interceptor.rbs +0 -6
- data/sig/temporalio/payload_codec/base.rbs +0 -12
- data/sig/temporalio/payload_converter/base.rbs +0 -12
- data/sig/temporalio/payload_converter/bytes.rbs +0 -9
- data/sig/temporalio/payload_converter/composite.rbs +0 -19
- data/sig/temporalio/payload_converter/encoding_base.rbs +0 -14
- data/sig/temporalio/payload_converter/json.rbs +0 -9
- data/sig/temporalio/payload_converter/nil.rbs +0 -9
- data/sig/temporalio/payload_converter.rbs +0 -5
- data/sig/temporalio/retry_policy.rbs +0 -25
- data/sig/temporalio/retry_state.rbs +0 -20
- data/sig/temporalio/runtime.rbs +0 -12
- data/sig/temporalio/testing/time_skipping_handle.rbs +0 -15
- data/sig/temporalio/testing/time_skipping_interceptor.rbs +0 -13
- data/sig/temporalio/testing/workflow_environment.rbs +0 -22
- data/sig/temporalio/testing.rbs +0 -35
- data/sig/temporalio/timeout_type.rbs +0 -15
- data/sig/temporalio/version.rbs +0 -3
- data/sig/temporalio/worker/activity_runner.rbs +0 -35
- data/sig/temporalio/worker/activity_worker.rbs +0 -44
- data/sig/temporalio/worker/reactor.rbs +0 -22
- data/sig/temporalio/worker/runner.rbs +0 -21
- data/sig/temporalio/worker/sync_worker.rbs +0 -23
- data/sig/temporalio/worker/thread_pool_executor.rbs +0 -23
- data/sig/temporalio/worker.rbs +0 -46
- data/sig/temporalio/workflow/async.rbs +0 -9
- data/sig/temporalio/workflow/execution_info.rbs +0 -55
- data/sig/temporalio/workflow/execution_status.rbs +0 -21
- data/sig/temporalio/workflow/future.rbs +0 -40
- data/sig/temporalio/workflow/id_reuse_policy.rbs +0 -15
- data/sig/temporalio/workflow/info.rbs +0 -55
- data/sig/temporalio/workflow/query_reject_condition.rbs +0 -14
- data/sig/temporalio.rbs +0 -2
- data/sig/thermite_patch.rbs +0 -15
data/lib/temporalio/worker.rb
CHANGED
|
@@ -1,204 +1,426 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
require 'temporalio/
|
|
4
|
-
require 'temporalio/
|
|
5
|
-
require 'temporalio/
|
|
6
|
-
require 'temporalio/
|
|
7
|
-
require 'temporalio/
|
|
8
|
-
require 'temporalio/worker
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'temporalio/activity'
|
|
4
|
+
require 'temporalio/cancellation'
|
|
5
|
+
require 'temporalio/client'
|
|
6
|
+
require 'temporalio/error'
|
|
7
|
+
require 'temporalio/internal/bridge'
|
|
8
|
+
require 'temporalio/internal/bridge/worker'
|
|
9
|
+
require 'temporalio/internal/worker/activity_worker'
|
|
10
|
+
require 'temporalio/internal/worker/multi_runner'
|
|
11
|
+
require 'temporalio/worker/activity_executor'
|
|
12
|
+
require 'temporalio/worker/interceptor'
|
|
13
|
+
require 'temporalio/worker/tuner'
|
|
9
14
|
|
|
10
15
|
module Temporalio
|
|
11
|
-
# Worker
|
|
16
|
+
# Worker for processing activities and workflows on a task queue.
|
|
12
17
|
#
|
|
13
|
-
#
|
|
18
|
+
# Workers are created for a task queue and the items they can run. Then {run} is used for running a single worker, or
|
|
19
|
+
# {run_all} is used for a collection of workers. These can wait until a block is complete or a {Cancellation} is
|
|
20
|
+
# canceled.
|
|
14
21
|
class Worker
|
|
15
|
-
#
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
# Options as returned from {options} for `**to_h`` splat use in {initialize}. See {initialize} for details.
|
|
23
|
+
Options = Struct.new(
|
|
24
|
+
:client,
|
|
25
|
+
:task_queue,
|
|
26
|
+
:activities,
|
|
27
|
+
:activity_executors,
|
|
28
|
+
:tuner,
|
|
29
|
+
:interceptors,
|
|
30
|
+
:build_id,
|
|
31
|
+
:identity,
|
|
32
|
+
:logger,
|
|
33
|
+
:max_cached_workflows,
|
|
34
|
+
:max_concurrent_workflow_task_polls,
|
|
35
|
+
:nonsticky_to_sticky_poll_ratio,
|
|
36
|
+
:max_concurrent_activity_task_polls,
|
|
37
|
+
:no_remote_activities,
|
|
38
|
+
:sticky_queue_schedule_to_start_timeout,
|
|
39
|
+
:max_heartbeat_throttle_interval,
|
|
40
|
+
:default_heartbeat_throttle_interval,
|
|
41
|
+
:max_activities_per_second,
|
|
42
|
+
:max_task_queue_activities_per_second,
|
|
43
|
+
:graceful_shutdown_period,
|
|
44
|
+
:use_worker_versioning,
|
|
45
|
+
keyword_init: true
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
# @return [String] Memoized default build ID. This default value is built as a checksum of all of the loaded Ruby
|
|
49
|
+
# source files in `$LOADED_FEATURES`. Users may prefer to set the build ID to a better representation of the
|
|
50
|
+
# source.
|
|
51
|
+
def self.default_build_id
|
|
52
|
+
@default_build_id ||= _load_default_build_id
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# @!visibility private
|
|
56
|
+
def self._load_default_build_id
|
|
57
|
+
# The goal is to get a hash of runtime code, both Temporal's and the
|
|
58
|
+
# user's. After all options were explored, we have decided to default to
|
|
59
|
+
# hashing all bytecode of required files. This means later/dynamic require
|
|
60
|
+
# won't be accounted for because this is memoized. It also means the
|
|
61
|
+
# tiniest code change will affect this, which is what we want since this
|
|
62
|
+
# is meant to be a "binary checksum". We have chosen to use MD5 for speed,
|
|
63
|
+
# similarity with other SDKs, and because security is not a factor.
|
|
64
|
+
require 'digest'
|
|
65
|
+
|
|
66
|
+
saw_bridge = false
|
|
67
|
+
build_id = $LOADED_FEATURES.each_with_object(Digest::MD5.new) do |file, digest|
|
|
68
|
+
saw_bridge = true if file.include?('temporalio_bridge.')
|
|
69
|
+
digest.update(File.read(file)) if File.file?(file)
|
|
70
|
+
end.hexdigest
|
|
71
|
+
raise 'Temporal bridge library not in $LOADED_FEATURES, unable to calculate default build ID' unless saw_bridge
|
|
72
|
+
|
|
73
|
+
build_id
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# Run all workers until cancellation or optional block completes. When the cancellation or block is complete, the
|
|
77
|
+
# workers are shut down. This will return the block result if everything successful or raise an error if not. See
|
|
78
|
+
# {run} for details on how worker shutdown works.
|
|
23
79
|
#
|
|
24
|
-
# @
|
|
25
|
-
#
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
80
|
+
# @param workers [Array<Worker>] Workers to run.
|
|
81
|
+
# @param cancellation [Cancellation] Cancellation that can be canceled to shut down all workers.
|
|
82
|
+
# @param shutdown_signals [Array] Signals to trap and cause worker shutdown.
|
|
83
|
+
# @param raise_in_block_on_shutdown [Exception, nil] Exception to {::Thread.raise} or {::Fiber.raise} if a block is
|
|
84
|
+
# present and still running on shutdown. If nil, `raise` is not used.
|
|
85
|
+
# @param wait_block_complete [Boolean] If block given and shutdown caused by something else (e.g. cancellation
|
|
86
|
+
# canceled), whether to wait on the block to complete before returning.
|
|
87
|
+
# @yield Optional block. This will be run in a new background thread or fiber. Workers will shut down upon
|
|
88
|
+
# completion of this and, assuming no other failures, return/bubble success/exception of the block.
|
|
89
|
+
# @return [Object] Return value of the block or nil of no block given.
|
|
90
|
+
def self.run_all(
|
|
91
|
+
*workers,
|
|
92
|
+
cancellation: Cancellation.new,
|
|
93
|
+
shutdown_signals: [],
|
|
94
|
+
raise_in_block_on_shutdown: Error::CanceledError.new('Workers finished'),
|
|
95
|
+
wait_block_complete: true,
|
|
96
|
+
&block
|
|
97
|
+
)
|
|
98
|
+
# Confirm there is at least one and they are all workers
|
|
99
|
+
raise ArgumentError, 'At least one worker required' if workers.empty?
|
|
100
|
+
raise ArgumentError, 'Not all parameters are workers' unless workers.all? { |w| w.is_a?(Worker) }
|
|
101
|
+
|
|
102
|
+
Internal::Bridge.assert_fiber_compatibility!
|
|
103
|
+
|
|
104
|
+
# Start the multi runner
|
|
105
|
+
runner = Internal::Worker::MultiRunner.new(workers:, shutdown_signals:)
|
|
31
106
|
|
|
32
|
-
|
|
107
|
+
# Apply block
|
|
108
|
+
runner.apply_thread_or_fiber_block(&block)
|
|
33
109
|
|
|
34
|
-
|
|
35
|
-
|
|
110
|
+
# Reuse first worker logger
|
|
111
|
+
logger = workers.first&.options&.logger or raise # Help steep
|
|
112
|
+
|
|
113
|
+
# On cancel, initiate shutdown
|
|
114
|
+
cancellation.add_cancel_callback do
|
|
115
|
+
logger.info('Cancel invoked, beginning worker shutdown')
|
|
116
|
+
runner.initiate_shutdown
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
# Poller loop, run until all pollers shut down
|
|
120
|
+
first_error = nil
|
|
121
|
+
block_result = nil
|
|
122
|
+
loop do
|
|
123
|
+
event = runner.next_event
|
|
124
|
+
case event
|
|
125
|
+
when Internal::Worker::MultiRunner::Event::PollSuccess
|
|
126
|
+
# Successful poll
|
|
127
|
+
event.worker._on_poll_bytes(event.worker_type, event.bytes)
|
|
128
|
+
when Internal::Worker::MultiRunner::Event::PollFailure
|
|
129
|
+
# Poll failure, this causes shutdown of all workers
|
|
130
|
+
logger.error('Poll failure (beginning worker shutdown if not alaredy occurring)')
|
|
131
|
+
logger.error(event.error)
|
|
132
|
+
first_error ||= event.error
|
|
133
|
+
runner.initiate_shutdown
|
|
134
|
+
when Internal::Worker::MultiRunner::Event::PollerShutDown
|
|
135
|
+
# Individual poller shut down. Nothing to do here until we support
|
|
136
|
+
# worker status or something.
|
|
137
|
+
when Internal::Worker::MultiRunner::Event::AllPollersShutDown
|
|
138
|
+
# This is where we break the loop, no more polling can happen
|
|
139
|
+
break
|
|
140
|
+
when Internal::Worker::MultiRunner::Event::BlockSuccess
|
|
141
|
+
logger.info('Block completed, beginning worker shutdown')
|
|
142
|
+
block_result = event
|
|
143
|
+
runner.initiate_shutdown
|
|
144
|
+
when Internal::Worker::MultiRunner::Event::BlockFailure
|
|
145
|
+
logger.error('Block failure (beginning worker shutdown)')
|
|
146
|
+
logger.error(event.error)
|
|
147
|
+
block_result = event
|
|
148
|
+
first_error ||= event.error
|
|
149
|
+
runner.initiate_shutdown
|
|
150
|
+
when Internal::Worker::MultiRunner::Event::ShutdownSignalReceived
|
|
151
|
+
logger.info('Signal received, beginning worker shutdown')
|
|
152
|
+
runner.initiate_shutdown
|
|
153
|
+
else
|
|
154
|
+
raise "Unexpected event: #{event}"
|
|
36
155
|
end
|
|
156
|
+
end
|
|
37
157
|
|
|
38
|
-
|
|
158
|
+
# Now that all pollers have stopped, let's wait for all to complete
|
|
159
|
+
begin
|
|
160
|
+
runner.wait_complete_and_finalize_shutdown
|
|
161
|
+
rescue StandardError => e
|
|
162
|
+
logger.warn('Failed waiting and finalizing')
|
|
163
|
+
logger.warn(e)
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
# If there was a block but not a result yet, we want to raise if that is
|
|
167
|
+
# wanted, and wait if that is wanted
|
|
168
|
+
if block_given? && block_result.nil?
|
|
169
|
+
runner.raise_in_thread_or_fiber_block(raise_in_block_on_shutdown) unless raise_in_block_on_shutdown.nil?
|
|
170
|
+
if wait_block_complete
|
|
171
|
+
event = runner.next_event
|
|
172
|
+
case event
|
|
173
|
+
when Internal::Worker::MultiRunner::Event::BlockSuccess
|
|
174
|
+
logger.info('Block completed (after worker shutdown)')
|
|
175
|
+
block_result = event
|
|
176
|
+
when Internal::Worker::MultiRunner::Event::BlockFailure
|
|
177
|
+
logger.error('Block failure (after worker shutdown)')
|
|
178
|
+
logger.error(event.error)
|
|
179
|
+
block_result = event
|
|
180
|
+
first_error ||= event.error
|
|
181
|
+
when Internal::Worker::MultiRunner::Event::ShutdownSignalReceived
|
|
182
|
+
# Do nothing, waiting for block
|
|
183
|
+
else
|
|
184
|
+
raise "Unexpected event: #{event}"
|
|
185
|
+
end
|
|
186
|
+
end
|
|
39
187
|
end
|
|
40
188
|
|
|
41
|
-
|
|
189
|
+
# If there was an shutdown-causing error, we raise that
|
|
190
|
+
if !first_error.nil?
|
|
191
|
+
raise first_error
|
|
192
|
+
elsif block_result.is_a?(Internal::Worker::MultiRunner::Event::BlockSuccess)
|
|
193
|
+
block_result.result
|
|
194
|
+
end
|
|
42
195
|
end
|
|
43
196
|
|
|
44
|
-
#
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
#
|
|
48
|
-
# @param task_queue [String] A task queue.
|
|
49
|
-
# @param activities [Array<Class>] A list of activities (subclasses of {Temporalio::Activity}).
|
|
50
|
-
# @param data_converter [Temporalio::DataConverter] Data converter to use for all data conversions
|
|
51
|
-
# to/from payloads.
|
|
52
|
-
# @param activity_executor [ThreadPoolExecutor] Concurrent executor for all activities. Defaults
|
|
53
|
-
# to a {ThreadPoolExecutor} with `:max_concurrent_activities` available threads.
|
|
54
|
-
# @param interceptors [Array<Temporalio::Interceptor::ActivityInbound, Temporalio::Interceptor::ActivityOutbound>]
|
|
55
|
-
# Collection of interceptors for this worker.
|
|
56
|
-
# @param max_concurrent_activities [Integer] Number of concurrently running activities.
|
|
57
|
-
# @param graceful_shutdown_timeout [Integer] Amount of time (in seconds) activities are given
|
|
58
|
-
# after a shutdown to complete before they are cancelled. A default value of `nil` means that
|
|
59
|
-
# activities are never cancelled when handling a shutdown.
|
|
197
|
+
# @return [Options] Frozen options for this client which has the same attributes as {initialize}.
|
|
198
|
+
attr_reader :options
|
|
199
|
+
|
|
200
|
+
# Create a new worker. At least one activity or workflow must be present.
|
|
60
201
|
#
|
|
61
|
-
# @
|
|
202
|
+
# @param client [Client] Client for this worker.
|
|
203
|
+
# @param task_queue [String] Task queue for this worker.
|
|
204
|
+
# @param activities [Array<Activity, Class<Activity>, Activity::Definition>] Activities for this worker.
|
|
205
|
+
# @param activity_executors [Hash<Symbol, Worker::ActivityExecutor>] Executors that activities can run within.
|
|
206
|
+
# @param tuner [Tuner] Tuner that controls the amount of concurrent activities/workflows that run at a time.
|
|
207
|
+
# @param interceptors [Array<Interceptor>] Interceptors specific to this worker. Note, interceptors set on the
|
|
208
|
+
# client that include the {Interceptor} module are automatically included here, so no need to specify them again.
|
|
209
|
+
# @param build_id [String] Unique identifier for the current runtime. This is best set as a unique value
|
|
210
|
+
# representing all code and should change only when code does. This can be something like a git commit hash. If
|
|
211
|
+
# unset, default is hash of known Ruby code.
|
|
212
|
+
# @param identity [String, nil] Override the identity for this worker. If unset, client identity is used.
|
|
213
|
+
# @param max_cached_workflows [Integer] Number of workflows held in cache for use by sticky task queue. If set to 0,
|
|
214
|
+
# workflow caching and sticky queuing are disabled.
|
|
215
|
+
# @param max_concurrent_workflow_task_polls [Integer] Maximum number of concurrent poll workflow task requests we
|
|
216
|
+
# will perform at a time on this worker's task queue.
|
|
217
|
+
# @param nonsticky_to_sticky_poll_ratio [Float] `max_concurrent_workflow_task_polls`` * this number = the number of
|
|
218
|
+
# max pollers that will be allowed for the nonsticky queue when sticky tasks are enabled. If both defaults are
|
|
219
|
+
# used, the sticky queue will allow 4 max pollers while the nonsticky queue will allow one. The minimum for either
|
|
220
|
+
# poller is 1, so if `max_concurrent_workflow_task_polls` is 1 and sticky queues are enabled, there will be 2
|
|
221
|
+
# concurrent polls.
|
|
222
|
+
# @param max_concurrent_activity_task_polls [Integer] Maximum number of concurrent poll activity task requests we
|
|
223
|
+
# will perform at a time on this worker's task queue.
|
|
224
|
+
# @param no_remote_activities [Boolean] If true, this worker will only handle workflow tasks and local activities,
|
|
225
|
+
# it will not poll for activity tasks.
|
|
226
|
+
# @param sticky_queue_schedule_to_start_timeout [Float] How long a workflow task is allowed to sit on the sticky
|
|
227
|
+
# queue before it is timed out and moved to the non-sticky queue where it may be picked up by any worker.
|
|
228
|
+
# @param max_heartbeat_throttle_interval [Float] Longest interval for throttling activity heartbeats.
|
|
229
|
+
# @param default_heartbeat_throttle_interval [Float] Default interval for throttling activity heartbeats in case
|
|
230
|
+
# per-activity heartbeat timeout is unset. Otherwise, it's the per-activity heartbeat timeout * 0.8.
|
|
231
|
+
# @param max_activities_per_second [Float, nil] Limits the number of activities per second that this worker will
|
|
232
|
+
# process. The worker will not poll for new activities if by doing so it might receive and execute an activity
|
|
233
|
+
# which would cause it to exceed this limit.
|
|
234
|
+
# @param max_task_queue_activities_per_second [Float, nil] Sets the maximum number of activities per second the task
|
|
235
|
+
# queue will dispatch, controlled server-side. Note that this only takes effect upon an activity poll request. If
|
|
236
|
+
# multiple workers on the same queue have different values set, they will thrash with the last poller winning.
|
|
237
|
+
# @param graceful_shutdown_period [Float] Amount of time after shutdown is called that activities are given to
|
|
238
|
+
# complete before their tasks are canceled.
|
|
239
|
+
# @param use_worker_versioning [Boolean] If true, the `build_id` argument must be specified, and this worker opts
|
|
240
|
+
# into the worker versioning feature. This ensures it only receives workflow tasks for workflows which it claims
|
|
241
|
+
# to be compatible with. For more information, see https://docs.temporal.io/workers#worker-versioning.
|
|
62
242
|
def initialize(
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
task_queue,
|
|
243
|
+
client:,
|
|
244
|
+
task_queue:,
|
|
66
245
|
activities: [],
|
|
67
|
-
|
|
68
|
-
|
|
246
|
+
activity_executors: ActivityExecutor.defaults,
|
|
247
|
+
tuner: Tuner.create_fixed,
|
|
69
248
|
interceptors: [],
|
|
70
|
-
|
|
71
|
-
|
|
249
|
+
build_id: Worker.default_build_id,
|
|
250
|
+
identity: nil,
|
|
251
|
+
logger: client.options.logger,
|
|
252
|
+
max_cached_workflows: 1000,
|
|
253
|
+
max_concurrent_workflow_task_polls: 5,
|
|
254
|
+
nonsticky_to_sticky_poll_ratio: 0.2,
|
|
255
|
+
max_concurrent_activity_task_polls: 5,
|
|
256
|
+
no_remote_activities: false,
|
|
257
|
+
sticky_queue_schedule_to_start_timeout: 10,
|
|
258
|
+
max_heartbeat_throttle_interval: 60,
|
|
259
|
+
default_heartbeat_throttle_interval: 30,
|
|
260
|
+
max_activities_per_second: nil,
|
|
261
|
+
max_task_queue_activities_per_second: nil,
|
|
262
|
+
graceful_shutdown_period: 0,
|
|
263
|
+
use_worker_versioning: false
|
|
72
264
|
)
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
@
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
265
|
+
# TODO(cretz): Remove when workflows come about
|
|
266
|
+
raise ArgumentError, 'Must have at least one activity' if activities.empty?
|
|
267
|
+
|
|
268
|
+
@options = Options.new(
|
|
269
|
+
client:,
|
|
270
|
+
task_queue:,
|
|
271
|
+
activities:,
|
|
272
|
+
activity_executors:,
|
|
273
|
+
tuner:,
|
|
274
|
+
interceptors:,
|
|
275
|
+
build_id:,
|
|
276
|
+
identity:,
|
|
277
|
+
logger:,
|
|
278
|
+
max_cached_workflows:,
|
|
279
|
+
max_concurrent_workflow_task_polls:,
|
|
280
|
+
nonsticky_to_sticky_poll_ratio:,
|
|
281
|
+
max_concurrent_activity_task_polls:,
|
|
282
|
+
no_remote_activities:,
|
|
283
|
+
sticky_queue_schedule_to_start_timeout:,
|
|
284
|
+
max_heartbeat_throttle_interval:,
|
|
285
|
+
default_heartbeat_throttle_interval:,
|
|
286
|
+
max_activities_per_second:,
|
|
287
|
+
max_task_queue_activities_per_second:,
|
|
288
|
+
graceful_shutdown_period:,
|
|
289
|
+
use_worker_versioning:
|
|
290
|
+
).freeze
|
|
291
|
+
|
|
292
|
+
# Create the bridge worker
|
|
293
|
+
@bridge_worker = Internal::Bridge::Worker.new(
|
|
294
|
+
client.connection._core_client,
|
|
295
|
+
Internal::Bridge::Worker::Options.new(
|
|
296
|
+
activity: !activities.empty?,
|
|
297
|
+
workflow: false,
|
|
298
|
+
namespace: client.namespace,
|
|
299
|
+
task_queue:,
|
|
300
|
+
tuner: Internal::Bridge::Worker::TunerOptions.new(
|
|
301
|
+
workflow_slot_supplier: to_bridge_slot_supplier_options(tuner.workflow_slot_supplier),
|
|
302
|
+
activity_slot_supplier: to_bridge_slot_supplier_options(tuner.activity_slot_supplier),
|
|
303
|
+
local_activity_slot_supplier: to_bridge_slot_supplier_options(tuner.local_activity_slot_supplier)
|
|
304
|
+
),
|
|
305
|
+
build_id:,
|
|
306
|
+
identity_override: identity,
|
|
307
|
+
max_cached_workflows:,
|
|
308
|
+
max_concurrent_workflow_task_polls:,
|
|
309
|
+
nonsticky_to_sticky_poll_ratio:,
|
|
310
|
+
max_concurrent_activity_task_polls:,
|
|
311
|
+
no_remote_activities:,
|
|
312
|
+
sticky_queue_schedule_to_start_timeout:,
|
|
313
|
+
max_heartbeat_throttle_interval:,
|
|
314
|
+
default_heartbeat_throttle_interval:,
|
|
315
|
+
max_worker_activities_per_second: max_activities_per_second,
|
|
316
|
+
max_task_queue_activities_per_second:,
|
|
317
|
+
graceful_shutdown_period:,
|
|
318
|
+
use_worker_versioning:
|
|
319
|
+
)
|
|
86
320
|
)
|
|
87
|
-
sync_worker = Worker::SyncWorker.new(@core_worker)
|
|
88
|
-
@activity_worker =
|
|
89
|
-
unless activities.empty?
|
|
90
|
-
Worker::ActivityWorker.new(
|
|
91
|
-
task_queue,
|
|
92
|
-
sync_worker,
|
|
93
|
-
activities,
|
|
94
|
-
data_converter,
|
|
95
|
-
interceptors,
|
|
96
|
-
@activity_executor,
|
|
97
|
-
graceful_shutdown_timeout,
|
|
98
|
-
)
|
|
99
|
-
end
|
|
100
321
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
322
|
+
# Collect interceptors from client and params
|
|
323
|
+
@all_interceptors = client.options.interceptors.select { |i| i.is_a?(Interceptor) } + interceptors
|
|
324
|
+
|
|
325
|
+
# Cancellation for the whole worker
|
|
326
|
+
@worker_shutdown_cancellation = Cancellation.new
|
|
327
|
+
|
|
328
|
+
# Create workers
|
|
329
|
+
# TODO(cretz): Make conditional when workflows appear
|
|
330
|
+
@activity_worker = Internal::Worker::ActivityWorker.new(self, @bridge_worker)
|
|
331
|
+
|
|
332
|
+
# Validate worker
|
|
333
|
+
@bridge_worker.validate
|
|
104
334
|
end
|
|
105
335
|
|
|
106
|
-
#
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
# raise if there is a worker fatal error. To run multiple workers use the class method {.run}.
|
|
110
|
-
#
|
|
111
|
-
# @note A worker is only intended to be started once. Initialize a new worker should you need to
|
|
112
|
-
# run it again.
|
|
113
|
-
#
|
|
114
|
-
# @yield Optionally you can provide a block by the end of which the worker will shut itself
|
|
115
|
-
# down. You can use this to stop a worker after some time has passed or any other arbitrary
|
|
116
|
-
# implementation has completed. Any errors raised from this block will be re-raised by this
|
|
117
|
-
# method.
|
|
118
|
-
def run(&block)
|
|
119
|
-
Runner.new(self).run(&block)
|
|
336
|
+
# @return [String] Task queue set on the worker options.
|
|
337
|
+
def task_queue
|
|
338
|
+
@options.task_queue
|
|
120
339
|
end
|
|
121
340
|
|
|
122
|
-
#
|
|
123
|
-
#
|
|
124
|
-
# This is an internal method for advanced use-cases for those intended to implement their own
|
|
125
|
-
# worker runner.
|
|
341
|
+
# Run this worker until cancellation or optional block completes. When the cancellation or block is complete, the
|
|
342
|
+
# worker is shut down. This will return the block result if everything successful or raise an error if not.
|
|
126
343
|
#
|
|
127
|
-
#
|
|
128
|
-
#
|
|
344
|
+
# Upon shutdown (either via cancellation, block completion, or worker fatal error), the worker immediately stops
|
|
345
|
+
# accepting new work. Then, after an optional grace period, all activities are canceled. This call then waits for
|
|
346
|
+
# every activity and workflow task to complete before returning.
|
|
129
347
|
#
|
|
130
|
-
# @
|
|
131
|
-
#
|
|
132
|
-
# @param
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
348
|
+
# @param cancellation [Cancellation] Cancellation that can be canceled to shut down this worker.
|
|
349
|
+
# @param shutdown_signals [Array] Signals to trap and cause worker shutdown.
|
|
350
|
+
# @param raise_in_block_on_shutdown [Exception, nil] Exception to {::Thread.raise} or {::Fiber.raise} if a block is
|
|
351
|
+
# present and still running on shutdown. If nil, `raise` is not used.
|
|
352
|
+
# @param wait_block_complete [Boolean] If block given and shutdown caused by something else (e.g. cancellation
|
|
353
|
+
# canceled), whether to wait on the block to complete before returning.
|
|
354
|
+
# @yield Optional block. This will be run in a new background thread or fiber. Worker will shut down upon completion
|
|
355
|
+
# of this and, assuming no other failures, return/bubble success/exception of the block.
|
|
356
|
+
# @return [Object] Return value of the block or nil of no block given.
|
|
357
|
+
def run(
|
|
358
|
+
cancellation: Cancellation.new,
|
|
359
|
+
shutdown_signals: [],
|
|
360
|
+
raise_in_block_on_shutdown: Error::CanceledError.new('Workers finished'),
|
|
361
|
+
wait_block_complete: true,
|
|
362
|
+
&block
|
|
363
|
+
)
|
|
364
|
+
Worker.run_all(self, cancellation:, shutdown_signals:, raise_in_block_on_shutdown:, wait_block_complete:, &block)
|
|
365
|
+
end
|
|
136
366
|
|
|
137
|
-
|
|
138
|
-
|
|
367
|
+
# @!visibility private
|
|
368
|
+
def _worker_shutdown_cancellation
|
|
369
|
+
@worker_shutdown_cancellation
|
|
370
|
+
end
|
|
139
371
|
|
|
140
|
-
|
|
141
|
-
|
|
372
|
+
# @!visibility private
|
|
373
|
+
def _initiate_shutdown
|
|
374
|
+
_bridge_worker.initiate_shutdown
|
|
375
|
+
_, cancel_proc = _worker_shutdown_cancellation
|
|
376
|
+
cancel_proc.call
|
|
377
|
+
end
|
|
142
378
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
activity_worker.run(task)
|
|
147
|
-
rescue StandardError => e
|
|
148
|
-
shutdown(e) # initiate shutdown because of a fatal error
|
|
149
|
-
end
|
|
150
|
-
end
|
|
151
|
-
end
|
|
379
|
+
# @!visibility private
|
|
380
|
+
def _wait_all_complete
|
|
381
|
+
@activity_worker&.wait_all_complete
|
|
152
382
|
end
|
|
153
383
|
|
|
154
|
-
#
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
# This method will not return until the worker has completed shutting down.
|
|
158
|
-
#
|
|
159
|
-
# @param exception [Exception] An exception to be raised from {#run} or {.run} methods after a
|
|
160
|
-
# shutdown procedure has completed.
|
|
161
|
-
def shutdown(exception = Temporalio::Error::WorkerShutdown.new('Manual shutdown'))
|
|
162
|
-
mutex.synchronize do
|
|
163
|
-
return unless running?
|
|
164
|
-
|
|
165
|
-
# Let the runner know we're shutting down, so it can stop other workers.
|
|
166
|
-
# This will cause a reentrant call to this method, but the mutex above will block that call.
|
|
167
|
-
runner&.shutdown(exception)
|
|
168
|
-
|
|
169
|
-
# Initiate Core shutdown, which will start dropping poll requests
|
|
170
|
-
core_worker.initiate_shutdown
|
|
171
|
-
# Start the graceful activity shutdown timer, which will cancel activities after the timeout
|
|
172
|
-
activity_worker&.setup_graceful_shutdown_timer(runtime.reactor)
|
|
173
|
-
# Wait for workers to drain any outstanding tasks
|
|
174
|
-
activity_worker&.drain
|
|
175
|
-
activity_executor.shutdown
|
|
176
|
-
# Finalize the shutdown by stopping the Core
|
|
177
|
-
core_worker.finalize_shutdown
|
|
178
|
-
|
|
179
|
-
@shutdown = true
|
|
180
|
-
end
|
|
384
|
+
# @!visibility private
|
|
385
|
+
def _bridge_worker
|
|
386
|
+
@bridge_worker
|
|
181
387
|
end
|
|
182
388
|
|
|
183
|
-
#
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
def started?
|
|
187
|
-
@started
|
|
389
|
+
# @!visibility private
|
|
390
|
+
def _all_interceptors
|
|
391
|
+
@all_interceptors
|
|
188
392
|
end
|
|
189
393
|
|
|
190
|
-
#
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
@started && !@shutdown
|
|
394
|
+
# @!visibility private
|
|
395
|
+
def _on_poll_bytes(worker_type, bytes)
|
|
396
|
+
# TODO(cretz): Workflow workers
|
|
397
|
+
raise "Unrecognized worker type #{worker_type}" unless worker_type == :activity
|
|
398
|
+
|
|
399
|
+
@activity_worker.handle_task(Internal::Bridge::Api::ActivityTask::ActivityTask.decode(bytes))
|
|
197
400
|
end
|
|
198
401
|
|
|
199
402
|
private
|
|
200
403
|
|
|
201
|
-
|
|
202
|
-
|
|
404
|
+
def to_bridge_slot_supplier_options(slot_supplier)
|
|
405
|
+
if slot_supplier.is_a?(Tuner::SlotSupplier::Fixed)
|
|
406
|
+
Internal::Bridge::Worker::TunerSlotSupplierOptions.new(
|
|
407
|
+
fixed_size: slot_supplier.slots,
|
|
408
|
+
resource_based: nil
|
|
409
|
+
)
|
|
410
|
+
elsif slot_supplier.is_a?(Tuner::SlotSupplier::ResourceBased)
|
|
411
|
+
Internal::Bridge::Worker::TunerSlotSupplierOptions.new(
|
|
412
|
+
fixed_size: nil,
|
|
413
|
+
resource_based: Internal::Bridge::Worker::TunerResourceBasedSlotSupplierOptions.new(
|
|
414
|
+
target_mem_usage: slot_supplier.tuner_options.target_memory_usage,
|
|
415
|
+
target_cpu_usage: slot_supplier.tuner_options.target_cpu_usage,
|
|
416
|
+
min_slots: slot_supplier.slot_options.min_slots,
|
|
417
|
+
max_slots: slot_supplier.slot_options.max_slots,
|
|
418
|
+
ramp_throttle: slot_supplier.slot_options.ramp_throttle
|
|
419
|
+
)
|
|
420
|
+
)
|
|
421
|
+
else
|
|
422
|
+
raise ArgumentError, 'Tuner slot suppliers must be instances of Fixed or ResourceBased'
|
|
423
|
+
end
|
|
424
|
+
end
|
|
203
425
|
end
|
|
204
426
|
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Temporalio
|
|
4
|
+
# Representation of a workflow's history.
|
|
5
|
+
class WorkflowHistory
|
|
6
|
+
# History events for the workflow.
|
|
7
|
+
attr_reader :events
|
|
8
|
+
|
|
9
|
+
# @!visibility private
|
|
10
|
+
def initialize(events)
|
|
11
|
+
@events = events
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# @return [String] ID of the workflow, extracted from the first event.
|
|
15
|
+
def workflow_id
|
|
16
|
+
start = events.first&.workflow_execution_started_event_attributes
|
|
17
|
+
raise 'First event not a start event' if start.nil?
|
|
18
|
+
|
|
19
|
+
start.workflow_id
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
data/lib/temporalio.rb
CHANGED
|
@@ -1,12 +1,7 @@
|
|
|
1
|
-
#
|
|
2
|
-
$LOAD_PATH << File.expand_path('./gen', File.dirname(__FILE__))
|
|
1
|
+
# frozen_string_literal: true
|
|
3
2
|
|
|
4
|
-
require 'temporalio/activity'
|
|
5
|
-
require 'temporalio/bridge'
|
|
6
|
-
require 'temporalio/client'
|
|
7
|
-
require 'temporalio/connection'
|
|
8
3
|
require 'temporalio/version'
|
|
9
|
-
require 'temporalio/worker'
|
|
10
4
|
|
|
5
|
+
# Temporal Ruby SDK. See the README at https://github.com/temporalio/sdk-ruby.
|
|
11
6
|
module Temporalio
|
|
12
7
|
end
|