temporalio 0.1.1 → 0.3.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/.yardopts +2 -0
- data/Cargo.lock +4324 -0
- data/Cargo.toml +25 -0
- data/Gemfile +20 -0
- data/LICENSE +16 -15
- data/README.md +985 -183
- data/Rakefile +101 -0
- data/ext/Cargo.toml +26 -0
- data/lib/temporalio/activity/complete_async_error.rb +11 -0
- data/lib/temporalio/activity/context.rb +86 -78
- data/lib/temporalio/activity/definition.rb +175 -0
- data/lib/temporalio/activity/info.rb +44 -47
- data/lib/temporalio/activity.rb +8 -81
- data/lib/temporalio/api/activity/v1/message.rb +25 -0
- data/lib/temporalio/api/batch/v1/message.rb +31 -0
- data/lib/temporalio/api/cloud/account/v1/message.rb +28 -0
- data/lib/temporalio/api/cloud/cloudservice/v1/request_response.rb +126 -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 +41 -0
- data/lib/temporalio/api/cloud/namespace/v1/message.rb +42 -0
- data/lib/temporalio/api/cloud/nexus/v1/message.rb +31 -0
- data/lib/temporalio/api/cloud/operation/v1/message.rb +28 -0
- data/lib/temporalio/api/cloud/region/v1/message.rb +24 -0
- data/lib/temporalio/api/cloud/resource/v1/message.rb +23 -0
- data/lib/temporalio/api/cloud/sink/v1/message.rb +24 -0
- data/lib/temporalio/api/cloud/usage/v1/message.rb +31 -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 +47 -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/payload_visitor.rb +1513 -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 +43 -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/{gen/temporal/api/testservice/v1/request_response_pb.rb → temporalio/api/testservice/v1/request_response.rb} +6 -24
- data/lib/temporalio/api/testservice/v1/service.rb +23 -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 +204 -0
- data/lib/temporalio/api/workflowservice/v1/service.rb +23 -0
- data/lib/temporalio/api/workflowservice.rb +3 -0
- data/lib/temporalio/api.rb +14 -0
- data/lib/temporalio/cancellation.rb +170 -0
- data/lib/temporalio/client/activity_id_reference.rb +32 -0
- data/lib/temporalio/client/async_activity_handle.rb +85 -0
- data/lib/temporalio/client/connection/cloud_service.rb +726 -0
- data/lib/temporalio/client/connection/operator_service.rb +201 -0
- data/lib/temporalio/client/connection/service.rb +42 -0
- data/lib/temporalio/client/connection/test_service.rb +111 -0
- data/lib/temporalio/client/connection/workflow_service.rb +1041 -0
- data/lib/temporalio/client/connection.rb +316 -0
- data/lib/temporalio/client/interceptor.rb +416 -0
- data/lib/temporalio/client/schedule.rb +967 -0
- data/lib/temporalio/client/schedule_handle.rb +126 -0
- data/lib/temporalio/client/workflow_execution.rb +100 -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 +326 -180
- data/lib/temporalio/client/workflow_query_reject_condition.rb +14 -0
- data/lib/temporalio/client/workflow_update_handle.rb +65 -0
- data/lib/temporalio/client/workflow_update_wait_stage.rb +17 -0
- data/lib/temporalio/client.rb +447 -94
- data/lib/temporalio/common_enums.rb +41 -0
- data/lib/temporalio/converters/data_converter.rb +99 -0
- data/lib/temporalio/converters/failure_converter.rb +202 -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 +66 -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 +71 -0
- data/lib/temporalio/converters/raw_value.rb +20 -0
- data/lib/temporalio/converters.rb +9 -0
- data/lib/temporalio/error/failure.rb +119 -94
- data/lib/temporalio/error.rb +155 -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 +40 -0
- data/lib/temporalio/internal/bridge/api/external_data/external_data.rb +27 -0
- data/lib/temporalio/internal/bridge/api/nexus/nexus.rb +33 -0
- data/lib/temporalio/internal/bridge/api/workflow_activation/workflow_activation.rb +56 -0
- data/lib/temporalio/internal/bridge/api/workflow_commands/workflow_commands.rb +57 -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 +95 -0
- data/lib/temporalio/internal/bridge/runtime.rb +53 -0
- data/lib/temporalio/internal/bridge/testing.rb +66 -0
- data/lib/temporalio/internal/bridge/worker.rb +85 -0
- data/lib/temporalio/internal/bridge.rb +36 -0
- data/lib/temporalio/internal/client/implementation.rb +700 -0
- data/lib/temporalio/internal/metric.rb +122 -0
- data/lib/temporalio/internal/proto_utils.rb +133 -0
- data/lib/temporalio/internal/worker/activity_worker.rb +373 -0
- data/lib/temporalio/internal/worker/multi_runner.rb +213 -0
- data/lib/temporalio/internal/worker/workflow_instance/child_workflow_handle.rb +54 -0
- data/lib/temporalio/internal/worker/workflow_instance/context.rb +329 -0
- data/lib/temporalio/internal/worker/workflow_instance/details.rb +44 -0
- data/lib/temporalio/internal/worker/workflow_instance/external_workflow_handle.rb +32 -0
- data/lib/temporalio/internal/worker/workflow_instance/externally_immutable_hash.rb +22 -0
- data/lib/temporalio/internal/worker/workflow_instance/handler_execution.rb +25 -0
- data/lib/temporalio/internal/worker/workflow_instance/handler_hash.rb +41 -0
- data/lib/temporalio/internal/worker/workflow_instance/illegal_call_tracer.rb +97 -0
- data/lib/temporalio/internal/worker/workflow_instance/inbound_implementation.rb +62 -0
- data/lib/temporalio/internal/worker/workflow_instance/outbound_implementation.rb +415 -0
- data/lib/temporalio/internal/worker/workflow_instance/replay_safe_logger.rb +37 -0
- data/lib/temporalio/internal/worker/workflow_instance/replay_safe_metric.rb +40 -0
- data/lib/temporalio/internal/worker/workflow_instance/scheduler.rb +163 -0
- data/lib/temporalio/internal/worker/workflow_instance.rb +730 -0
- data/lib/temporalio/internal/worker/workflow_worker.rb +196 -0
- data/lib/temporalio/internal.rb +7 -0
- data/lib/temporalio/metric.rb +109 -0
- data/lib/temporalio/retry_policy.rb +55 -73
- data/lib/temporalio/runtime.rb +302 -13
- data/lib/temporalio/scoped_logger.rb +96 -0
- data/lib/temporalio/search_attributes.rb +343 -0
- data/lib/temporalio/testing/activity_environment.rb +132 -0
- data/lib/temporalio/testing/workflow_environment.rb +345 -74
- 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 +46 -0
- data/lib/temporalio/worker/activity_executor.rb +55 -0
- data/lib/temporalio/worker/interceptor.rb +362 -0
- data/lib/temporalio/worker/thread_pool.rb +237 -0
- data/lib/temporalio/worker/tuner.rb +151 -0
- data/lib/temporalio/worker/workflow_executor/thread_pool.rb +230 -0
- data/lib/temporalio/worker/workflow_executor.rb +26 -0
- data/lib/temporalio/worker.rb +554 -161
- data/lib/temporalio/workflow/activity_cancellation_type.rb +20 -0
- data/lib/temporalio/workflow/child_workflow_cancellation_type.rb +21 -0
- data/lib/temporalio/workflow/child_workflow_handle.rb +43 -0
- data/lib/temporalio/workflow/definition.rb +566 -0
- data/lib/temporalio/workflow/external_workflow_handle.rb +41 -0
- data/lib/temporalio/workflow/future.rb +117 -104
- data/lib/temporalio/workflow/handler_unfinished_policy.rb +13 -0
- data/lib/temporalio/workflow/info.rb +63 -57
- data/lib/temporalio/workflow/parent_close_policy.rb +19 -0
- data/lib/temporalio/workflow/update_info.rb +20 -0
- data/lib/temporalio/workflow.rb +523 -0
- data/lib/temporalio/workflow_history.rb +22 -0
- data/lib/temporalio.rb +6 -7
- data/temporalio.gemspec +20 -39
- metadata +171 -710
- 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/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/id_reuse_policy.rb +0 -36
- 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
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Much of this logic taken from
|
|
4
|
+
# https://github.com/ruby-concurrency/concurrent-ruby/blob/044020f44b36930b863b930f3ee8fa1e9f750469/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb,
|
|
5
|
+
# see MIT license at
|
|
6
|
+
# https://github.com/ruby-concurrency/concurrent-ruby/blob/044020f44b36930b863b930f3ee8fa1e9f750469/LICENSE.txt
|
|
7
|
+
|
|
8
|
+
module Temporalio
|
|
9
|
+
class Worker
|
|
10
|
+
# Implementation of a thread pool. This implementation is a stripped down form of Concurrent Ruby's
|
|
11
|
+
# `CachedThreadPool`.
|
|
12
|
+
class ThreadPool
|
|
13
|
+
# @return [ThreadPool] Default/shared thread pool instance with unlimited max threads.
|
|
14
|
+
def self.default
|
|
15
|
+
@default ||= new
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# @!visibility private
|
|
19
|
+
def self._monotonic_time
|
|
20
|
+
Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Create a new thread pool that creates threads as needed.
|
|
24
|
+
#
|
|
25
|
+
# @param max_threads [Integer, nil] Maximum number of thread workers to create, or nil for unlimited max.
|
|
26
|
+
# @param idle_timeout [Float] Number of seconds before a thread worker with no work should be stopped. Note,
|
|
27
|
+
# the check of whether a thread worker is idle is only done on each new {execute} call.
|
|
28
|
+
def initialize(max_threads: nil, idle_timeout: 20)
|
|
29
|
+
@max_threads = max_threads
|
|
30
|
+
@idle_timeout = idle_timeout
|
|
31
|
+
|
|
32
|
+
@mutex = Mutex.new
|
|
33
|
+
@pool = []
|
|
34
|
+
@ready = []
|
|
35
|
+
@queue = []
|
|
36
|
+
@scheduled_task_count = 0
|
|
37
|
+
@completed_task_count = 0
|
|
38
|
+
@largest_length = 0
|
|
39
|
+
@workers_counter = 0
|
|
40
|
+
@prune_interval = @idle_timeout / 2
|
|
41
|
+
@next_prune_time = ThreadPool._monotonic_time + @prune_interval
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Execute the given block in a thread. The block should be built to never raise and need no arguments.
|
|
45
|
+
#
|
|
46
|
+
# @yield Block to execute.
|
|
47
|
+
def execute(&block)
|
|
48
|
+
@mutex.synchronize do
|
|
49
|
+
locked_assign_worker(&block) || locked_enqueue(&block)
|
|
50
|
+
@scheduled_task_count += 1
|
|
51
|
+
locked_prune_pool if @next_prune_time < ThreadPool._monotonic_time
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# @return [Integer] The largest number of threads that have been created in the pool since construction.
|
|
56
|
+
def largest_length
|
|
57
|
+
@mutex.synchronize { @largest_length }
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# @return [Integer] The number of tasks that have been scheduled for execution on the pool since construction.
|
|
61
|
+
def scheduled_task_count
|
|
62
|
+
@mutex.synchronize { @scheduled_task_count }
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# @return [Integer] The number of tasks that have been completed by the pool since construction.
|
|
66
|
+
def completed_task_count
|
|
67
|
+
@mutex.synchronize { @completed_task_count }
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# @return [Integer] The number of threads that are actively executing tasks.
|
|
71
|
+
def active_count
|
|
72
|
+
@mutex.synchronize { @pool.length - @ready.length }
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# @return [Integer] The number of threads currently in the pool.
|
|
76
|
+
def length
|
|
77
|
+
@mutex.synchronize { @pool.length }
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# @return [Integer] The number of tasks in the queue awaiting execution.
|
|
81
|
+
def queue_length
|
|
82
|
+
@mutex.synchronize { @queue.length }
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Gracefully shutdown each thread when it is done with its current task. This should not be called until all
|
|
86
|
+
# workers using this executor are complete. This does not need to be called at all on program exit (e.g. for the
|
|
87
|
+
# global default).
|
|
88
|
+
def shutdown
|
|
89
|
+
@mutex.synchronize do
|
|
90
|
+
# Stop all workers
|
|
91
|
+
@pool.each(&:stop)
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# Kill each thread. This should not be called until all workers using this executor are complete. This does not
|
|
96
|
+
# need to be called at all on program exit (e.g. for the global default).
|
|
97
|
+
def kill
|
|
98
|
+
@mutex.synchronize do
|
|
99
|
+
# Kill all workers
|
|
100
|
+
@pool.each(&:kill)
|
|
101
|
+
@pool.clear
|
|
102
|
+
@ready.clear
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# @!visibility private
|
|
107
|
+
def _remove_busy_worker(worker)
|
|
108
|
+
@mutex.synchronize { locked_remove_busy_worker(worker) }
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# @!visibility private
|
|
112
|
+
def _ready_worker(worker, last_message)
|
|
113
|
+
@mutex.synchronize { locked_ready_worker(worker, last_message) }
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# @!visibility private
|
|
117
|
+
def _worker_died(worker)
|
|
118
|
+
@mutex.synchronize { locked_worker_died(worker) }
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
# @!visibility private
|
|
122
|
+
def _worker_task_completed
|
|
123
|
+
@mutex.synchronize { @completed_task_count += 1 }
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
private
|
|
127
|
+
|
|
128
|
+
def locked_assign_worker(&block)
|
|
129
|
+
# keep growing if the pool is not at the minimum yet
|
|
130
|
+
worker, = @ready.pop || locked_add_busy_worker
|
|
131
|
+
if worker
|
|
132
|
+
worker << block
|
|
133
|
+
true
|
|
134
|
+
else
|
|
135
|
+
false
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def locked_enqueue(&block)
|
|
140
|
+
@queue << block
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def locked_add_busy_worker
|
|
144
|
+
return if @max_threads && @pool.size >= @max_threads
|
|
145
|
+
|
|
146
|
+
@workers_counter += 1
|
|
147
|
+
@pool << (worker = Worker.new(self, @workers_counter))
|
|
148
|
+
@largest_length = @pool.length if @pool.length > @largest_length
|
|
149
|
+
worker
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def locked_prune_pool
|
|
153
|
+
now = ThreadPool._monotonic_time
|
|
154
|
+
stopped_workers = 0
|
|
155
|
+
while !@ready.empty? && (@pool.size - stopped_workers).positive?
|
|
156
|
+
worker, last_message = @ready.first
|
|
157
|
+
break unless now - last_message > @idle_timeout
|
|
158
|
+
|
|
159
|
+
stopped_workers += 1
|
|
160
|
+
@ready.shift
|
|
161
|
+
worker << :stop
|
|
162
|
+
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
@next_prune_time = ThreadPool._monotonic_time + @prune_interval
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def locked_remove_busy_worker(worker)
|
|
169
|
+
@pool.delete(worker)
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
def locked_ready_worker(worker, last_message)
|
|
173
|
+
block = @queue.shift
|
|
174
|
+
if block
|
|
175
|
+
worker << block
|
|
176
|
+
else
|
|
177
|
+
@ready.push([worker, last_message])
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
def locked_worker_died(worker)
|
|
182
|
+
locked_remove_busy_worker(worker)
|
|
183
|
+
replacement_worker = locked_add_busy_worker
|
|
184
|
+
locked_ready_worker(replacement_worker, ThreadPool._monotonic_time) if replacement_worker
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
# @!visibility private
|
|
188
|
+
class Worker
|
|
189
|
+
def initialize(pool, id)
|
|
190
|
+
@queue = Queue.new
|
|
191
|
+
@thread = Thread.new(@queue, pool) do |my_queue, my_pool|
|
|
192
|
+
catch(:stop) do
|
|
193
|
+
loop do
|
|
194
|
+
case block = my_queue.pop
|
|
195
|
+
when :stop
|
|
196
|
+
pool._remove_busy_worker(self)
|
|
197
|
+
throw :stop
|
|
198
|
+
else
|
|
199
|
+
begin
|
|
200
|
+
block.call
|
|
201
|
+
my_pool._worker_task_completed
|
|
202
|
+
my_pool._ready_worker(self, ThreadPool._monotonic_time)
|
|
203
|
+
rescue StandardError => e
|
|
204
|
+
# Ignore
|
|
205
|
+
warn("Unexpected execute block error: #{e.full_message}")
|
|
206
|
+
rescue Exception => e # rubocop:disable Lint/RescueException
|
|
207
|
+
warn("Unexpected execute block exception: #{e.full_message}")
|
|
208
|
+
my_pool._worker_died(self)
|
|
209
|
+
throw :stop
|
|
210
|
+
end
|
|
211
|
+
end
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
@thread.name = "temporal-thread-#{id}"
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
# @!visibility private
|
|
219
|
+
def <<(block)
|
|
220
|
+
@queue << block
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
# @!visibility private
|
|
224
|
+
def stop
|
|
225
|
+
@queue << :stop
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
# @!visibility private
|
|
229
|
+
def kill
|
|
230
|
+
@thread.kill
|
|
231
|
+
end
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
private_constant :Worker
|
|
235
|
+
end
|
|
236
|
+
end
|
|
237
|
+
end
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Temporalio
|
|
4
|
+
class Worker
|
|
5
|
+
# Worker tuner that allows for dynamic customization of some aspects of worker configuration.
|
|
6
|
+
class Tuner
|
|
7
|
+
# Slot supplier used for reserving slots for execution. Currently the only implementations allowed are {Fixed} and
|
|
8
|
+
# {ResourceBased}.
|
|
9
|
+
class SlotSupplier
|
|
10
|
+
# A fixed-size slot supplier that will never issue more than a fixed number of slots.
|
|
11
|
+
class Fixed < SlotSupplier
|
|
12
|
+
# @return [Integer] The maximum number of slots that can be issued.
|
|
13
|
+
attr_reader :slots
|
|
14
|
+
|
|
15
|
+
# Create fixed-size slot supplier.
|
|
16
|
+
#
|
|
17
|
+
# @param slots [Integer] The maximum number of slots that can be issued.
|
|
18
|
+
def initialize(slots) # rubocop:disable Lint/MissingSuper
|
|
19
|
+
@slots = slots
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# A slot supplier that will dynamically adjust the number of slots based on resource usage.
|
|
24
|
+
#
|
|
25
|
+
# @note WARNING: This API is experimental.
|
|
26
|
+
class ResourceBased < SlotSupplier
|
|
27
|
+
attr_reader :tuner_options, :slot_options
|
|
28
|
+
|
|
29
|
+
# Create a reosurce-based slot supplier.
|
|
30
|
+
#
|
|
31
|
+
# @param tuner_options [ResourceBasedTunerOptions] General tuner options.
|
|
32
|
+
# @param slot_options [ResourceBasedSlotOptions] Slot-supplier-specific tuner options.
|
|
33
|
+
def initialize(tuner_options:, slot_options:) # rubocop:disable Lint/MissingSuper
|
|
34
|
+
@tuner_options = tuner_options
|
|
35
|
+
@slot_options = slot_options
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Options for {create_resource_based} or {SlotSupplier::ResourceBased}.
|
|
41
|
+
#
|
|
42
|
+
# @!attribute target_memory_usage
|
|
43
|
+
# @return [Float] A value between 0 and 1 that represents the target (system) memory usage. It's not recommended
|
|
44
|
+
# to set this higher than 0.8, since how much memory a workflow may use is not predictable, and you don't want
|
|
45
|
+
# to encounter OOM errors.
|
|
46
|
+
# @!attribute target_cpu_usage
|
|
47
|
+
# @return [Float] A value between 0 and 1 that represents the target (system) CPU usage. This can be set to 1.0
|
|
48
|
+
# if desired, but it's recommended to leave some headroom for other processes.
|
|
49
|
+
ResourceBasedTunerOptions = Struct.new(
|
|
50
|
+
:target_memory_usage,
|
|
51
|
+
:target_cpu_usage,
|
|
52
|
+
keyword_init: true
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
# Options for a specific slot type being used with {SlotSupplier::ResourceBased}.
|
|
56
|
+
#
|
|
57
|
+
# @!attribute min_slots
|
|
58
|
+
# @return [Integer, nil] Amount of slots that will be issued regardless of any other checks. Defaults to 5 for
|
|
59
|
+
# workflows and 1 for activities.
|
|
60
|
+
# @!attribute max_slots
|
|
61
|
+
# @return [Integer, nil] Maximum amount of slots permitted. Defaults to 500.
|
|
62
|
+
# @!attribute ramp_throttle
|
|
63
|
+
# @return [Float, nil] Minimum time we will wait (after passing the minimum slots number) between handing out
|
|
64
|
+
# new slots in seconds. Defaults to 0 for workflows and 0.05 for activities.
|
|
65
|
+
#
|
|
66
|
+
# This value matters because how many resources a task will use cannot be determined ahead of time, and thus
|
|
67
|
+
# the system should wait to see how much resources are used before issuing more slots.
|
|
68
|
+
ResourceBasedSlotOptions = Struct.new(
|
|
69
|
+
:min_slots,
|
|
70
|
+
:max_slots,
|
|
71
|
+
:ramp_throttle,
|
|
72
|
+
keyword_init: true
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
# Create a fixed-size tuner with the provided number of slots.
|
|
76
|
+
#
|
|
77
|
+
# @param workflow_slots [Integer] Maximum number of workflow task slots.
|
|
78
|
+
# @param activity_slots [Integer] Maximum number of activity slots.
|
|
79
|
+
# @param local_activity_slots [Integer] Maximum number of local activity slots.
|
|
80
|
+
# @return [Tuner] Created tuner.
|
|
81
|
+
def self.create_fixed(
|
|
82
|
+
workflow_slots: 100,
|
|
83
|
+
activity_slots: 100,
|
|
84
|
+
local_activity_slots: 100
|
|
85
|
+
)
|
|
86
|
+
new(
|
|
87
|
+
workflow_slot_supplier: SlotSupplier::Fixed.new(workflow_slots),
|
|
88
|
+
activity_slot_supplier: SlotSupplier::Fixed.new(activity_slots),
|
|
89
|
+
local_activity_slot_supplier: SlotSupplier::Fixed.new(local_activity_slots)
|
|
90
|
+
)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# Create a resource-based tuner with the provided options.
|
|
94
|
+
#
|
|
95
|
+
# @param target_memory_usage [Float] A value between 0 and 1 that represents the target (system) memory usage.
|
|
96
|
+
# It's not recommended to set this higher than 0.8, since how much memory a workflow may use is not predictable,
|
|
97
|
+
# and you don't want to encounter OOM errors.
|
|
98
|
+
# @param target_cpu_usage [Float] A value between 0 and 1 that represents the target (system) CPU usage. This can
|
|
99
|
+
# be set to 1.0 if desired, but it's recommended to leave some headroom for other processes.
|
|
100
|
+
# @param workflow_options [ResourceBasedSlotOptions] Resource-based options for workflow slot supplier.
|
|
101
|
+
# @param activity_options [ResourceBasedSlotOptions] Resource-based options for activity slot supplier.
|
|
102
|
+
# @param local_activity_options [ResourceBasedSlotOptions] Resource-based options for local activity slot
|
|
103
|
+
# supplier.
|
|
104
|
+
# @return [Tuner] Created tuner.
|
|
105
|
+
def self.create_resource_based(
|
|
106
|
+
target_memory_usage:,
|
|
107
|
+
target_cpu_usage:,
|
|
108
|
+
workflow_options: ResourceBasedSlotOptions.new(min_slots: 5, max_slots: 500, ramp_throttle: 0.0),
|
|
109
|
+
activity_options: ResourceBasedSlotOptions.new(min_slots: 1, max_slots: 500, ramp_throttle: 0.05),
|
|
110
|
+
local_activity_options: ResourceBasedSlotOptions.new(min_slots: 1, max_slots: 500, ramp_throttle: 0.05)
|
|
111
|
+
)
|
|
112
|
+
tuner_options = ResourceBasedTunerOptions.new(target_memory_usage:, target_cpu_usage:)
|
|
113
|
+
new(
|
|
114
|
+
workflow_slot_supplier: SlotSupplier::ResourceBased.new(
|
|
115
|
+
tuner_options:, slot_options: workflow_options
|
|
116
|
+
),
|
|
117
|
+
activity_slot_supplier: SlotSupplier::ResourceBased.new(
|
|
118
|
+
tuner_options:, slot_options: activity_options
|
|
119
|
+
),
|
|
120
|
+
local_activity_slot_supplier: SlotSupplier::ResourceBased.new(
|
|
121
|
+
tuner_options:, slot_options: local_activity_options
|
|
122
|
+
)
|
|
123
|
+
)
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
# @return [SlotSupplier] Slot supplier for workflows.
|
|
127
|
+
attr_reader :workflow_slot_supplier
|
|
128
|
+
|
|
129
|
+
# @return [SlotSupplier] Slot supplier for activities.
|
|
130
|
+
attr_reader :activity_slot_supplier
|
|
131
|
+
|
|
132
|
+
# @return [SlotSupplier] Slot supplier for local activities.
|
|
133
|
+
attr_reader :local_activity_slot_supplier
|
|
134
|
+
|
|
135
|
+
# Create a tuner from 3 slot suppliers.
|
|
136
|
+
#
|
|
137
|
+
# @param workflow_slot_supplier [SlotSupplier] Slot supplier for workflows.
|
|
138
|
+
# @param activity_slot_supplier [SlotSupplier] Slot supplier for activities.
|
|
139
|
+
# @param local_activity_slot_supplier [SlotSupplier] Slot supplier for local activities.
|
|
140
|
+
def initialize(
|
|
141
|
+
workflow_slot_supplier:,
|
|
142
|
+
activity_slot_supplier:,
|
|
143
|
+
local_activity_slot_supplier:
|
|
144
|
+
)
|
|
145
|
+
@workflow_slot_supplier = workflow_slot_supplier
|
|
146
|
+
@activity_slot_supplier = activity_slot_supplier
|
|
147
|
+
@local_activity_slot_supplier = local_activity_slot_supplier
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'etc'
|
|
4
|
+
require 'temporalio/internal/bridge/api'
|
|
5
|
+
require 'temporalio/internal/proto_utils'
|
|
6
|
+
require 'temporalio/internal/worker/workflow_instance'
|
|
7
|
+
require 'temporalio/scoped_logger'
|
|
8
|
+
require 'temporalio/worker/thread_pool'
|
|
9
|
+
require 'temporalio/worker/workflow_executor'
|
|
10
|
+
require 'temporalio/workflow'
|
|
11
|
+
require 'temporalio/workflow/definition'
|
|
12
|
+
require 'timeout'
|
|
13
|
+
|
|
14
|
+
module Temporalio
|
|
15
|
+
class Worker
|
|
16
|
+
class WorkflowExecutor
|
|
17
|
+
# Thread pool implementation of {WorkflowExecutor}.
|
|
18
|
+
#
|
|
19
|
+
# Users should use {default} unless they have specific needs to change the thread pool or max threads.
|
|
20
|
+
class ThreadPool < WorkflowExecutor
|
|
21
|
+
# @return [ThreadPool] Default executor that lazily constructs an instance with default values.
|
|
22
|
+
def self.default
|
|
23
|
+
@default ||= ThreadPool.new
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Create a thread pool executor. Most users may prefer {default}.
|
|
27
|
+
#
|
|
28
|
+
# @param max_threads [Integer] Maximum number of threads to use concurrently.
|
|
29
|
+
# @param thread_pool [Worker::ThreadPool] Thread pool to use.
|
|
30
|
+
def initialize(max_threads: [4, Etc.nprocessors].max, thread_pool: Temporalio::Worker::ThreadPool.default) # rubocop:disable Lint/MissingSuper
|
|
31
|
+
@max_threads = max_threads
|
|
32
|
+
@thread_pool = thread_pool
|
|
33
|
+
@workers_mutex = Mutex.new
|
|
34
|
+
@workers = []
|
|
35
|
+
@workers_by_worker_state_and_run_id = {}
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# @!visibility private
|
|
39
|
+
def _validate_worker(worker, worker_state)
|
|
40
|
+
# Do nothing
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# @!visibility private
|
|
44
|
+
def _activate(activation, worker_state, &)
|
|
45
|
+
# Get applicable worker
|
|
46
|
+
worker = @workers_mutex.synchronize do
|
|
47
|
+
run_key = [worker_state, activation.run_id]
|
|
48
|
+
@workers_by_worker_state_and_run_id.fetch(run_key) do
|
|
49
|
+
# If not found, get a new one either by creating if not enough or find the one with the fewest.
|
|
50
|
+
new_worker = if @workers.size < @max_threads
|
|
51
|
+
created_worker = Worker.new(self)
|
|
52
|
+
@workers << Worker.new(self)
|
|
53
|
+
created_worker
|
|
54
|
+
else
|
|
55
|
+
@workers.min_by(&:workflow_count)
|
|
56
|
+
end
|
|
57
|
+
@workers_by_worker_state_and_run_id[run_key] = new_worker
|
|
58
|
+
new_worker.workflow_count += 1
|
|
59
|
+
new_worker
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
raise "No worker for run ID #{activation.run_id}" unless worker
|
|
63
|
+
|
|
64
|
+
# Enqueue activation
|
|
65
|
+
worker.enqueue_activation(activation, worker_state, &)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# @!visibility private
|
|
69
|
+
def _thread_pool
|
|
70
|
+
@thread_pool
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# @!visibility private
|
|
74
|
+
def _remove_workflow(worker_state, run_id)
|
|
75
|
+
@workers_mutex.synchronize do
|
|
76
|
+
worker = @workers_by_worker_state_and_run_id.delete([worker_state, run_id])
|
|
77
|
+
if worker
|
|
78
|
+
worker.workflow_count -= 1
|
|
79
|
+
# Remove worker from array if done. The array should be small enough that the delete being O(N) is not
|
|
80
|
+
# worth using a set or a map.
|
|
81
|
+
if worker.workflow_count.zero?
|
|
82
|
+
@workers.delete(worker)
|
|
83
|
+
worker.shutdown
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# @!visibility private
|
|
90
|
+
class Worker
|
|
91
|
+
LOG_ACTIVATIONS = false
|
|
92
|
+
|
|
93
|
+
attr_accessor :workflow_count
|
|
94
|
+
|
|
95
|
+
def initialize(executor)
|
|
96
|
+
@executor = executor
|
|
97
|
+
@workflow_count = 0
|
|
98
|
+
@queue = Queue.new
|
|
99
|
+
executor._thread_pool.execute { run }
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# @!visibility private
|
|
103
|
+
def enqueue_activation(activation, worker_state, &completion_block)
|
|
104
|
+
@queue << [:activate, activation, worker_state, completion_block]
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# @!visibility private
|
|
108
|
+
def shutdown
|
|
109
|
+
@queue << [:shutdown]
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
private
|
|
113
|
+
|
|
114
|
+
def run
|
|
115
|
+
loop do
|
|
116
|
+
work = @queue.pop
|
|
117
|
+
if work.is_a?(Exception)
|
|
118
|
+
Warning.warn("Failed activation: #{work}")
|
|
119
|
+
elsif work.is_a?(Array)
|
|
120
|
+
case work.first
|
|
121
|
+
when :shutdown
|
|
122
|
+
return
|
|
123
|
+
when :activate
|
|
124
|
+
activate(work[1], work[2], &work[3])
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
rescue Exception => e # rubocop:disable Lint/RescueException
|
|
128
|
+
Warning.warn("Unexpected failure during run: #{e.full_message}")
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def activate(activation, worker_state, &)
|
|
133
|
+
worker_state.logger.debug("Received workflow activation: #{activation}") if LOG_ACTIVATIONS
|
|
134
|
+
|
|
135
|
+
# Check whether it has eviction
|
|
136
|
+
cache_remove_job = activation.jobs.find { |j| !j.remove_from_cache.nil? }&.remove_from_cache
|
|
137
|
+
|
|
138
|
+
# If it's eviction only, just evict inline and do nothing else
|
|
139
|
+
if cache_remove_job && activation.jobs.size == 1
|
|
140
|
+
evict(worker_state, activation.run_id)
|
|
141
|
+
worker_state.logger.debug('Sending empty workflow completion') if LOG_ACTIVATIONS
|
|
142
|
+
yield Internal::Bridge::Api::WorkflowCompletion::WorkflowActivationCompletion.new(
|
|
143
|
+
run_id: activation.run_id,
|
|
144
|
+
successful: Internal::Bridge::Api::WorkflowCompletion::Success.new
|
|
145
|
+
)
|
|
146
|
+
return
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
completion = Timeout.timeout(
|
|
150
|
+
worker_state.deadlock_timeout,
|
|
151
|
+
DeadlockError,
|
|
152
|
+
# TODO(cretz): Document that this affects all running workflows on this worker
|
|
153
|
+
# and maybe test to see how that is mitigated
|
|
154
|
+
"[TMPRL1101] Potential deadlock detected: workflow didn't yield " \
|
|
155
|
+
"within #{worker_state.deadlock_timeout} second(s)."
|
|
156
|
+
) do
|
|
157
|
+
# Get or create workflow
|
|
158
|
+
instance = worker_state.get_or_create_running_workflow(activation.run_id) do
|
|
159
|
+
create_instance(activation, worker_state)
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
# Activate. We expect most errors in here to have been captured inside.
|
|
163
|
+
instance.activate(activation)
|
|
164
|
+
rescue Exception => e # rubocop:disable Lint/RescueException
|
|
165
|
+
worker_state.logger.error("Failed activation on workflow run ID: #{activation.run_id}")
|
|
166
|
+
worker_state.logger.error(e)
|
|
167
|
+
Internal::Worker::WorkflowInstance.new_completion_with_failure(
|
|
168
|
+
run_id: activation.run_id,
|
|
169
|
+
error: e,
|
|
170
|
+
failure_converter: worker_state.data_converter.failure_converter,
|
|
171
|
+
payload_converter: worker_state.data_converter.payload_converter
|
|
172
|
+
)
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
# Go ahead and evict if there is an eviction job
|
|
176
|
+
evict(worker_state, activation.run_id) if cache_remove_job
|
|
177
|
+
|
|
178
|
+
# Complete the activation
|
|
179
|
+
worker_state.logger.debug("Sending workflow completion: #{completion}") if LOG_ACTIVATIONS
|
|
180
|
+
yield completion
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
def create_instance(initial_activation, worker_state)
|
|
184
|
+
# Extract start job
|
|
185
|
+
init_job = initial_activation.jobs.find { |j| !j.initialize_workflow.nil? }&.initialize_workflow
|
|
186
|
+
raise 'Missing initialize job in initial activation' unless init_job
|
|
187
|
+
|
|
188
|
+
# Obtain definition
|
|
189
|
+
definition = worker_state.workflow_definitions[init_job.workflow_type] ||
|
|
190
|
+
worker_state.workflow_definitions[nil]
|
|
191
|
+
unless definition
|
|
192
|
+
raise Error::ApplicationError.new(
|
|
193
|
+
"Workflow type #{init_job.workflow_type} is not registered on this worker, available workflows: " +
|
|
194
|
+
worker_state.workflow_definitions.keys.compact.sort.join(', '),
|
|
195
|
+
type: 'NotFoundError'
|
|
196
|
+
)
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
Internal::Worker::WorkflowInstance.new(
|
|
200
|
+
Internal::Worker::WorkflowInstance::Details.new(
|
|
201
|
+
namespace: worker_state.namespace,
|
|
202
|
+
task_queue: worker_state.task_queue,
|
|
203
|
+
definition:,
|
|
204
|
+
initial_activation:,
|
|
205
|
+
logger: worker_state.logger,
|
|
206
|
+
metric_meter: worker_state.metric_meter,
|
|
207
|
+
payload_converter: worker_state.data_converter.payload_converter,
|
|
208
|
+
failure_converter: worker_state.data_converter.failure_converter,
|
|
209
|
+
interceptors: worker_state.workflow_interceptors,
|
|
210
|
+
disable_eager_activity_execution: worker_state.disable_eager_activity_execution,
|
|
211
|
+
illegal_calls: worker_state.illegal_calls,
|
|
212
|
+
workflow_failure_exception_types: worker_state.workflow_failure_exception_types
|
|
213
|
+
)
|
|
214
|
+
)
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
def evict(worker_state, run_id)
|
|
218
|
+
worker_state.evict_running_workflow(run_id)
|
|
219
|
+
@executor._remove_workflow(worker_state, run_id)
|
|
220
|
+
end
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
private_constant :Worker
|
|
224
|
+
|
|
225
|
+
# Error raised when a processing a workflow task takes more than the expected amount of time.
|
|
226
|
+
class DeadlockError < Exception; end # rubocop:disable Lint/InheritException
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
end
|
|
230
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'temporalio/worker/workflow_executor/thread_pool'
|
|
4
|
+
|
|
5
|
+
module Temporalio
|
|
6
|
+
class Worker
|
|
7
|
+
# Workflow executor that executes workflow tasks. Unlike {ActivityExecutor}, this class is not meant for user
|
|
8
|
+
# implementation. The only implementation that is currently accepted is {WorkflowExecutor::ThreadPool}.
|
|
9
|
+
class WorkflowExecutor
|
|
10
|
+
# @!visibility private
|
|
11
|
+
def initialize
|
|
12
|
+
raise 'Cannot create custom executors'
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# @!visibility private
|
|
16
|
+
def _validate_worker(worker, worker_state)
|
|
17
|
+
raise NotImplementedError
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# @!visibility private
|
|
21
|
+
def _activate(activation, worker_state, &)
|
|
22
|
+
raise NotImplementedError
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|