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
|
@@ -0,0 +1,254 @@
|
|
|
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
|
+
class ActivityExecutor
|
|
11
|
+
# Activity executor for scheduling activities in their own thread. This implementation is a stripped down form of
|
|
12
|
+
# Concurrent Ruby's `CachedThreadPool`.
|
|
13
|
+
class ThreadPool < ActivityExecutor
|
|
14
|
+
# @return [ThreadPool] Default/shared thread pool executor instance with unlimited max threads.
|
|
15
|
+
def self.default
|
|
16
|
+
@default ||= new
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# @!visibility private
|
|
20
|
+
def self._monotonic_time
|
|
21
|
+
Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Create a new thread pool executor that creates threads as needed.
|
|
25
|
+
#
|
|
26
|
+
# @param max_threads [Integer, nil] Maximum number of thread workers to create, or nil for unlimited max.
|
|
27
|
+
# @param idle_timeout [Float] Number of seconds before a thread worker with no work should be stopped. Note,
|
|
28
|
+
# the check of whether a thread worker is idle is only done on each new activity.
|
|
29
|
+
def initialize(max_threads: nil, idle_timeout: 20) # rubocop:disable Lint/MissingSuper
|
|
30
|
+
@max_threads = max_threads
|
|
31
|
+
@idle_timeout = idle_timeout
|
|
32
|
+
|
|
33
|
+
@mutex = Mutex.new
|
|
34
|
+
@pool = []
|
|
35
|
+
@ready = []
|
|
36
|
+
@queue = []
|
|
37
|
+
@scheduled_task_count = 0
|
|
38
|
+
@completed_task_count = 0
|
|
39
|
+
@largest_length = 0
|
|
40
|
+
@workers_counter = 0
|
|
41
|
+
@prune_interval = @idle_timeout / 2
|
|
42
|
+
@next_prune_time = ThreadPool._monotonic_time + @prune_interval
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# @see ActivityExecutor.execute_activity
|
|
46
|
+
def execute_activity(_defn, &block)
|
|
47
|
+
@mutex.synchronize do
|
|
48
|
+
locked_assign_worker(&block) || locked_enqueue(&block)
|
|
49
|
+
@scheduled_task_count += 1
|
|
50
|
+
locked_prune_pool if @next_prune_time < ThreadPool._monotonic_time
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# @see ActivityExecutor.activity_context
|
|
55
|
+
def activity_context
|
|
56
|
+
Thread.current[:temporal_activity_context]
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# @see ActivityExecutor.set_activity_context
|
|
60
|
+
def set_activity_context(defn, context)
|
|
61
|
+
Thread.current[:temporal_activity_context] = context
|
|
62
|
+
# If they have opted in to raising on cancel, wire that up
|
|
63
|
+
return unless defn.cancel_raise
|
|
64
|
+
|
|
65
|
+
thread = Thread.current
|
|
66
|
+
context&.cancellation&.add_cancel_callback do
|
|
67
|
+
thread.raise(Error::CanceledError.new('Activity canceled')) if thread[:temporal_activity_context] == context
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# @return [Integer] The largest number of threads that have been created in the pool since construction.
|
|
72
|
+
def largest_length
|
|
73
|
+
@mutex.synchronize { @largest_length }
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# @return [Integer] The number of tasks that have been scheduled for execution on the pool since construction.
|
|
77
|
+
def scheduled_task_count
|
|
78
|
+
@mutex.synchronize { @scheduled_task_count }
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# @return [Integer] The number of tasks that have been completed by the pool since construction.
|
|
82
|
+
def completed_task_count
|
|
83
|
+
@mutex.synchronize { @completed_task_count }
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# @return [Integer] The number of threads that are actively executing tasks.
|
|
87
|
+
def active_count
|
|
88
|
+
@mutex.synchronize { @pool.length - @ready.length }
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
# @return [Integer] The number of threads currently in the pool.
|
|
92
|
+
def length
|
|
93
|
+
@mutex.synchronize { @pool.length }
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# @return [Integer] The number of tasks in the queue awaiting execution.
|
|
97
|
+
def queue_length
|
|
98
|
+
@mutex.synchronize { @queue.length }
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# Gracefully shutdown each thread when it is done with its current task. This should not be called until all
|
|
102
|
+
# workers using this executor are complete. This does not need to be called at all on program exit (e.g. for the
|
|
103
|
+
# global default).
|
|
104
|
+
def shutdown
|
|
105
|
+
@mutex.synchronize do
|
|
106
|
+
# Stop all workers
|
|
107
|
+
@pool.each(&:stop)
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# Kill each thread. This should not be called until all workers using this executor are complete. This does not
|
|
112
|
+
# need to be called at all on program exit (e.g. for the global default).
|
|
113
|
+
def kill
|
|
114
|
+
@mutex.synchronize do
|
|
115
|
+
# Kill all workers
|
|
116
|
+
@pool.each(&:kill)
|
|
117
|
+
@pool.clear
|
|
118
|
+
@ready.clear
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
# @!visibility private
|
|
123
|
+
def _remove_busy_worker(worker)
|
|
124
|
+
@mutex.synchronize { locked_remove_busy_worker(worker) }
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
# @!visibility private
|
|
128
|
+
def _ready_worker(worker, last_message)
|
|
129
|
+
@mutex.synchronize { locked_ready_worker(worker, last_message) }
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
# @!visibility private
|
|
133
|
+
def _worker_died(worker)
|
|
134
|
+
@mutex.synchronize { locked_worker_died(worker) }
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
# @!visibility private
|
|
138
|
+
def _worker_task_completed
|
|
139
|
+
@mutex.synchronize { @completed_task_count += 1 }
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
private
|
|
143
|
+
|
|
144
|
+
def locked_assign_worker(&block)
|
|
145
|
+
# keep growing if the pool is not at the minimum yet
|
|
146
|
+
worker, = @ready.pop || locked_add_busy_worker
|
|
147
|
+
if worker
|
|
148
|
+
worker << block
|
|
149
|
+
true
|
|
150
|
+
else
|
|
151
|
+
false
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def locked_enqueue(&block)
|
|
156
|
+
@queue << block
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def locked_add_busy_worker
|
|
160
|
+
return if @max_threads && @pool.size >= @max_threads
|
|
161
|
+
|
|
162
|
+
@workers_counter += 1
|
|
163
|
+
@pool << (worker = Worker.new(self, @workers_counter))
|
|
164
|
+
@largest_length = @pool.length if @pool.length > @largest_length
|
|
165
|
+
worker
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def locked_prune_pool
|
|
169
|
+
now = ThreadPool._monotonic_time
|
|
170
|
+
stopped_workers = 0
|
|
171
|
+
while !@ready.empty? && (@pool.size - stopped_workers).positive?
|
|
172
|
+
worker, last_message = @ready.first
|
|
173
|
+
break unless now - last_message > @idle_timeout
|
|
174
|
+
|
|
175
|
+
stopped_workers += 1
|
|
176
|
+
@ready.shift
|
|
177
|
+
worker << :stop
|
|
178
|
+
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
@next_prune_time = ThreadPool._monotonic_time + @prune_interval
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
def locked_remove_busy_worker(worker)
|
|
185
|
+
@pool.delete(worker)
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
def locked_ready_worker(worker, last_message)
|
|
189
|
+
block = @queue.shift
|
|
190
|
+
if block
|
|
191
|
+
worker << block
|
|
192
|
+
else
|
|
193
|
+
@ready.push([worker, last_message])
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
def locked_worker_died(worker)
|
|
198
|
+
locked_remove_busy_worker(worker)
|
|
199
|
+
replacement_worker = locked_add_busy_worker
|
|
200
|
+
locked_ready_worker(replacement_worker, ThreadPool._monotonic_time) if replacement_worker
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
# @!visibility private
|
|
204
|
+
class Worker
|
|
205
|
+
def initialize(pool, id)
|
|
206
|
+
@queue = Queue.new
|
|
207
|
+
@thread = Thread.new(@queue, pool) do |my_queue, my_pool|
|
|
208
|
+
catch(:stop) do
|
|
209
|
+
loop do
|
|
210
|
+
case block = my_queue.pop
|
|
211
|
+
when :stop
|
|
212
|
+
pool._remove_busy_worker(self)
|
|
213
|
+
throw :stop
|
|
214
|
+
else
|
|
215
|
+
begin
|
|
216
|
+
block.call
|
|
217
|
+
my_pool._worker_task_completed
|
|
218
|
+
my_pool._ready_worker(self, ThreadPool._monotonic_time)
|
|
219
|
+
rescue StandardError => e
|
|
220
|
+
# Ignore
|
|
221
|
+
warn("Unexpected activity block error: #{e}")
|
|
222
|
+
rescue Exception => e # rubocop:disable Lint/RescueException
|
|
223
|
+
warn("Unexpected activity block exception: #{e}")
|
|
224
|
+
my_pool._worker_died(self)
|
|
225
|
+
throw :stop
|
|
226
|
+
end
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
end
|
|
230
|
+
end
|
|
231
|
+
@thread.name = "activity-thread-#{id}"
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
# @!visibility private
|
|
235
|
+
def <<(block)
|
|
236
|
+
@queue << block
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
# @!visibility private
|
|
240
|
+
def stop
|
|
241
|
+
@queue << :stop
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
# @!visibility private
|
|
245
|
+
def kill
|
|
246
|
+
@thread.kill
|
|
247
|
+
end
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
private_constant :Worker
|
|
251
|
+
end
|
|
252
|
+
end
|
|
253
|
+
end
|
|
254
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'temporalio/worker/activity_executor/fiber'
|
|
4
|
+
require 'temporalio/worker/activity_executor/thread_pool'
|
|
5
|
+
|
|
6
|
+
module Temporalio
|
|
7
|
+
class Worker
|
|
8
|
+
# Base class to be extended by activity executor implementations. Most users will not use this, but rather keep with
|
|
9
|
+
# the two defaults of thread pool and fiber executors.
|
|
10
|
+
class ActivityExecutor
|
|
11
|
+
# @return [Hash<Symbol, ActivityExecutor>] Default set of executors (immutable).
|
|
12
|
+
def self.defaults
|
|
13
|
+
@defaults ||= {
|
|
14
|
+
default: ThreadPool.default,
|
|
15
|
+
thread_pool: ThreadPool.default,
|
|
16
|
+
fiber: Fiber.default
|
|
17
|
+
}.freeze
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Initialize an activity. This is called on worker initialize for every activity that will use this executor. This
|
|
21
|
+
# allows executor implementations to do eager validation based on the definition. This does not have to be
|
|
22
|
+
# implemented and the default is a no-op.
|
|
23
|
+
#
|
|
24
|
+
# @param defn [Activity::Definition] Activity definition.
|
|
25
|
+
def initialize_activity(defn)
|
|
26
|
+
# Default no-op
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Execute the given block in the executor. The block is built to never raise and need no arguments. Implementers
|
|
30
|
+
# must implement this.
|
|
31
|
+
#
|
|
32
|
+
# @param defn [Activity::Definition] Activity definition.
|
|
33
|
+
# @yield Block to execute.
|
|
34
|
+
def execute_activity(defn, &)
|
|
35
|
+
raise NotImplementedError
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# @return [Activity::Context, nil] Get the current activity context. This is called by users from inside the
|
|
39
|
+
# activity. Implementers must implement this.
|
|
40
|
+
def activity_context
|
|
41
|
+
raise NotImplementedError
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Set the current activity context (or unset if nil). This is called by the system from within the block given to
|
|
45
|
+
# {execute_activity} with a context before user code is executed and with nil after user code is complete.
|
|
46
|
+
# Implementers must implement this.
|
|
47
|
+
#
|
|
48
|
+
# @param defn [Activity::Definition] Activity definition.
|
|
49
|
+
# @param context [Activity::Context, nil] The value to set.
|
|
50
|
+
def set_activity_context(defn, context)
|
|
51
|
+
raise NotImplementedError
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Temporalio
|
|
4
|
+
class Worker
|
|
5
|
+
# Mixin for intercepting worker work. Clases that `include` may implement their own {intercept_activity} that
|
|
6
|
+
# returns their own instance of {ActivityInbound}.
|
|
7
|
+
#
|
|
8
|
+
# @note Input classes herein may get new required fields added and therefore the constructors of the Input classes
|
|
9
|
+
# may change in backwards incompatible ways. Users should not try to construct Input classes themselves.
|
|
10
|
+
module Interceptor
|
|
11
|
+
# Method called when intercepting an activity. This is called when starting an activity attempt.
|
|
12
|
+
#
|
|
13
|
+
# @param next_interceptor [ActivityInbound] Next interceptor in the chain that should be called. This is usually
|
|
14
|
+
# passed to {ActivityInbound} constructor.
|
|
15
|
+
# @return [ActivityInbound] Interceptor to be called for activity calls.
|
|
16
|
+
def intercept_activity(next_interceptor)
|
|
17
|
+
next_interceptor
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Input for {ActivityInbound.execute}.
|
|
21
|
+
ExecuteActivityInput = Struct.new(
|
|
22
|
+
:proc,
|
|
23
|
+
:args,
|
|
24
|
+
:headers,
|
|
25
|
+
keyword_init: true
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
# Input for {ActivityOutbound.heartbeat}.
|
|
29
|
+
HeartbeatActivityInput = Struct.new(
|
|
30
|
+
:details,
|
|
31
|
+
keyword_init: true
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
# Inbound interceptor for intercepting inbound activity calls. This should be extended by users needing to
|
|
35
|
+
# intercept activities.
|
|
36
|
+
class ActivityInbound
|
|
37
|
+
# @return [ActivityInbound] Next interceptor in the chain.
|
|
38
|
+
attr_reader :next_interceptor
|
|
39
|
+
|
|
40
|
+
# Initialize inbound with the next interceptor in the chain.
|
|
41
|
+
#
|
|
42
|
+
# @param next_interceptor [ActivityInbound] Next interceptor in the chain.
|
|
43
|
+
def initialize(next_interceptor)
|
|
44
|
+
@next_interceptor = next_interceptor
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Initialize the outbound interceptor. This should be extended by users to return their own {ActivityOutbound}
|
|
48
|
+
# implementation that wraps the parameter here.
|
|
49
|
+
#
|
|
50
|
+
# @param outbound [ActivityOutbound] Next outbound interceptor in the chain.
|
|
51
|
+
# @return [ActivityOutbound] Outbound activity interceptor.
|
|
52
|
+
def init(outbound)
|
|
53
|
+
@next_interceptor.init(outbound)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Execute an activity and return result or raise exception. Next interceptor in chain (i.e. `super`) will
|
|
57
|
+
# perform the execution.
|
|
58
|
+
#
|
|
59
|
+
# @param input [ExecuteActivityInput] Input information.
|
|
60
|
+
# @return [Object] Activity result.
|
|
61
|
+
def execute(input)
|
|
62
|
+
@next_interceptor.execute(input)
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Outbound interceptor for intercepting outbound activity calls. This should be extended by users needing to
|
|
67
|
+
# intercept activity calls.
|
|
68
|
+
class ActivityOutbound
|
|
69
|
+
# @return [ActivityInbound] Next interceptor in the chain.
|
|
70
|
+
attr_reader :next_interceptor
|
|
71
|
+
|
|
72
|
+
# Initialize outbound with the next interceptor in the chain.
|
|
73
|
+
#
|
|
74
|
+
# @param next_interceptor [ActivityOutbound] Next interceptor in the chain.
|
|
75
|
+
def initialize(next_interceptor)
|
|
76
|
+
@next_interceptor = next_interceptor
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# Issue a heartbeat.
|
|
80
|
+
#
|
|
81
|
+
# @param input [HeartbeatActivityInput] Input information.
|
|
82
|
+
def heartbeat(input)
|
|
83
|
+
@next_interceptor.heartbeat(input)
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
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
|