temporalio 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +180 -7
- data/bridge/Cargo.lock +208 -76
- data/bridge/Cargo.toml +5 -2
- data/bridge/sdk-core/Cargo.toml +1 -1
- data/bridge/sdk-core/README.md +20 -10
- data/bridge/sdk-core/client/Cargo.toml +1 -1
- data/bridge/sdk-core/client/src/lib.rs +227 -59
- data/bridge/sdk-core/client/src/metrics.rs +17 -8
- data/bridge/sdk-core/client/src/raw.rs +13 -12
- data/bridge/sdk-core/client/src/retry.rs +132 -43
- data/bridge/sdk-core/core/Cargo.toml +28 -15
- data/bridge/sdk-core/core/benches/workflow_replay.rs +13 -10
- data/bridge/sdk-core/core/src/abstractions.rs +225 -36
- data/bridge/sdk-core/core/src/core_tests/activity_tasks.rs +217 -79
- data/bridge/sdk-core/core/src/core_tests/determinism.rs +165 -2
- data/bridge/sdk-core/core/src/core_tests/local_activities.rs +565 -34
- data/bridge/sdk-core/core/src/core_tests/queries.rs +247 -90
- data/bridge/sdk-core/core/src/core_tests/workers.rs +3 -5
- data/bridge/sdk-core/core/src/core_tests/workflow_cancels.rs +1 -1
- data/bridge/sdk-core/core/src/core_tests/workflow_tasks.rs +430 -67
- data/bridge/sdk-core/core/src/ephemeral_server/mod.rs +106 -12
- data/bridge/sdk-core/core/src/internal_flags.rs +136 -0
- data/bridge/sdk-core/core/src/lib.rs +148 -34
- data/bridge/sdk-core/core/src/protosext/mod.rs +1 -1
- data/bridge/sdk-core/core/src/replay/mod.rs +185 -41
- data/bridge/sdk-core/core/src/telemetry/log_export.rs +190 -0
- data/bridge/sdk-core/core/src/telemetry/metrics.rs +219 -140
- data/bridge/sdk-core/core/src/telemetry/mod.rs +326 -315
- data/bridge/sdk-core/core/src/telemetry/prometheus_server.rs +20 -14
- data/bridge/sdk-core/core/src/test_help/mod.rs +85 -21
- data/bridge/sdk-core/core/src/worker/activities/activity_heartbeat_manager.rs +112 -156
- data/bridge/sdk-core/core/src/worker/activities/activity_task_poller_stream.rs +89 -0
- data/bridge/sdk-core/core/src/worker/activities/local_activities.rs +364 -128
- data/bridge/sdk-core/core/src/worker/activities.rs +263 -170
- data/bridge/sdk-core/core/src/worker/client/mocks.rs +23 -3
- data/bridge/sdk-core/core/src/worker/client.rs +48 -6
- data/bridge/sdk-core/core/src/worker/mod.rs +186 -75
- data/bridge/sdk-core/core/src/worker/workflow/bridge.rs +1 -3
- data/bridge/sdk-core/core/src/worker/workflow/driven_workflow.rs +13 -24
- data/bridge/sdk-core/core/src/worker/workflow/history_update.rs +879 -226
- data/bridge/sdk-core/core/src/worker/workflow/machines/activity_state_machine.rs +101 -48
- data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_external_state_machine.rs +8 -12
- data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_workflow_state_machine.rs +6 -9
- data/bridge/sdk-core/core/src/worker/workflow/machines/child_workflow_state_machine.rs +90 -32
- data/bridge/sdk-core/core/src/worker/workflow/machines/complete_workflow_state_machine.rs +6 -9
- data/bridge/sdk-core/core/src/worker/workflow/machines/continue_as_new_workflow_state_machine.rs +7 -10
- data/bridge/sdk-core/core/src/worker/workflow/machines/fail_workflow_state_machine.rs +6 -9
- data/bridge/sdk-core/core/src/worker/workflow/machines/local_activity_state_machine.rs +160 -83
- data/bridge/sdk-core/core/src/worker/workflow/machines/mod.rs +36 -54
- data/bridge/sdk-core/core/src/worker/workflow/machines/modify_workflow_properties_state_machine.rs +179 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/patch_state_machine.rs +104 -157
- data/bridge/sdk-core/core/src/worker/workflow/machines/signal_external_state_machine.rs +8 -12
- data/bridge/sdk-core/core/src/worker/workflow/machines/timer_state_machine.rs +9 -13
- data/bridge/sdk-core/core/src/worker/workflow/machines/transition_coverage.rs +10 -4
- data/bridge/sdk-core/core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +14 -11
- data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines/local_acts.rs +6 -17
- data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines.rs +395 -299
- data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_task_state_machine.rs +12 -20
- data/bridge/sdk-core/core/src/worker/workflow/managed_run/managed_wf_test.rs +33 -18
- data/bridge/sdk-core/core/src/worker/workflow/managed_run.rs +1032 -374
- data/bridge/sdk-core/core/src/worker/workflow/mod.rs +525 -392
- data/bridge/sdk-core/core/src/worker/workflow/run_cache.rs +40 -57
- data/bridge/sdk-core/core/src/worker/workflow/wft_extraction.rs +125 -0
- data/bridge/sdk-core/core/src/worker/workflow/wft_poller.rs +3 -6
- data/bridge/sdk-core/core/src/worker/workflow/workflow_stream/saved_wf_inputs.rs +117 -0
- data/bridge/sdk-core/core/src/worker/workflow/workflow_stream/tonic_status_serde.rs +24 -0
- data/bridge/sdk-core/core/src/worker/workflow/workflow_stream.rs +456 -681
- data/bridge/sdk-core/core-api/Cargo.toml +6 -4
- data/bridge/sdk-core/core-api/src/errors.rs +1 -34
- data/bridge/sdk-core/core-api/src/lib.rs +7 -45
- data/bridge/sdk-core/core-api/src/telemetry.rs +141 -0
- data/bridge/sdk-core/core-api/src/worker.rs +27 -1
- data/bridge/sdk-core/etc/deps.svg +115 -140
- data/bridge/sdk-core/etc/regen-depgraph.sh +5 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/src/lib.rs +18 -15
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.stderr +1 -1
- data/bridge/sdk-core/fsm/rustfsm_trait/src/lib.rs +8 -3
- data/bridge/sdk-core/histories/evict_while_la_running_no_interference-16_history.bin +0 -0
- data/bridge/sdk-core/histories/evict_while_la_running_no_interference-23_history.bin +0 -0
- data/bridge/sdk-core/histories/evict_while_la_running_no_interference-85_history.bin +0 -0
- data/bridge/sdk-core/protos/api_upstream/buf.yaml +0 -3
- data/bridge/sdk-core/protos/api_upstream/build/go.mod +7 -0
- data/bridge/sdk-core/protos/api_upstream/build/go.sum +5 -0
- data/bridge/sdk-core/protos/api_upstream/{temporal/api/enums/v1/cluster.proto → build/tools.go} +7 -18
- data/bridge/sdk-core/protos/api_upstream/go.mod +6 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/batch/v1/message.proto +12 -9
- data/bridge/sdk-core/protos/api_upstream/temporal/api/command/v1/message.proto +15 -26
- data/bridge/sdk-core/protos/api_upstream/temporal/api/common/v1/message.proto +13 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/batch_operation.proto +3 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/command_type.proto +4 -9
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/common.proto +3 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/event_type.proto +10 -8
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +28 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/namespace.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/query.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/reset.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/schedule.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/task_queue.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/update.proto +24 -19
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/workflow.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/errordetails/v1/message.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/failure/v1/message.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/filter/v1/message.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/history/v1/message.proto +62 -26
- data/bridge/sdk-core/protos/api_upstream/temporal/api/namespace/v1/message.proto +4 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/request_response.proto +24 -61
- data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/service.proto +2 -21
- data/bridge/sdk-core/protos/api_upstream/temporal/api/protocol/v1/message.proto +57 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/query/v1/message.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/replication/v1/message.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/schedule/v1/message.proto +110 -31
- data/bridge/sdk-core/protos/api_upstream/temporal/api/sdk/v1/task_complete_metadata.proto +63 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +4 -4
- data/bridge/sdk-core/protos/api_upstream/temporal/api/update/v1/message.proto +71 -6
- data/bridge/sdk-core/protos/api_upstream/temporal/api/version/v1/message.proto +2 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/workflow/v1/message.proto +3 -2
- data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +111 -36
- data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +19 -5
- data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_result/activity_result.proto +1 -0
- data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_task/activity_task.proto +1 -0
- data/bridge/sdk-core/protos/local/temporal/sdk/core/child_workflow/child_workflow.proto +1 -0
- data/bridge/sdk-core/protos/local/temporal/sdk/core/common/common.proto +1 -0
- data/bridge/sdk-core/protos/local/temporal/sdk/core/core_interface.proto +1 -0
- data/bridge/sdk-core/protos/local/temporal/sdk/core/external_data/external_data.proto +1 -0
- data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +9 -0
- data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +9 -1
- data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_completion/workflow_completion.proto +6 -0
- data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/request_response.proto +2 -2
- data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/service.proto +2 -2
- data/bridge/sdk-core/sdk/Cargo.toml +4 -3
- data/bridge/sdk-core/sdk/src/interceptors.rs +36 -3
- data/bridge/sdk-core/sdk/src/lib.rs +94 -25
- data/bridge/sdk-core/sdk/src/workflow_context.rs +13 -2
- data/bridge/sdk-core/sdk/src/workflow_future.rs +10 -13
- data/bridge/sdk-core/sdk-core-protos/Cargo.toml +5 -2
- data/bridge/sdk-core/sdk-core-protos/build.rs +36 -2
- data/bridge/sdk-core/sdk-core-protos/src/history_builder.rs +164 -104
- data/bridge/sdk-core/sdk-core-protos/src/history_info.rs +27 -23
- data/bridge/sdk-core/sdk-core-protos/src/lib.rs +252 -74
- data/bridge/sdk-core/sdk-core-protos/src/task_token.rs +12 -2
- data/bridge/sdk-core/test-utils/Cargo.toml +4 -1
- data/bridge/sdk-core/test-utils/src/canned_histories.rs +106 -296
- data/bridge/sdk-core/test-utils/src/histfetch.rs +1 -1
- data/bridge/sdk-core/test-utils/src/lib.rs +161 -50
- data/bridge/sdk-core/test-utils/src/wf_input_saver.rs +50 -0
- data/bridge/sdk-core/test-utils/src/workflows.rs +29 -0
- data/bridge/sdk-core/tests/fuzzy_workflow.rs +130 -0
- data/bridge/sdk-core/tests/{load_tests.rs → heavy_tests.rs} +125 -51
- data/bridge/sdk-core/tests/integ_tests/ephemeral_server_tests.rs +25 -3
- data/bridge/sdk-core/tests/integ_tests/heartbeat_tests.rs +10 -5
- data/bridge/sdk-core/tests/integ_tests/metrics_tests.rs +239 -0
- data/bridge/sdk-core/tests/integ_tests/polling_tests.rs +4 -60
- data/bridge/sdk-core/tests/integ_tests/queries_tests.rs +5 -128
- data/bridge/sdk-core/tests/integ_tests/visibility_tests.rs +83 -25
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/activities.rs +93 -69
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +1 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +6 -13
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +1 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +6 -2
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +3 -10
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +151 -116
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/modify_wf_properties.rs +54 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/patches.rs +7 -28
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/replay.rs +115 -24
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/resets.rs +1 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/signals.rs +18 -14
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +6 -20
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/timers.rs +10 -21
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +6 -4
- data/bridge/sdk-core/tests/integ_tests/workflow_tests.rs +27 -18
- data/bridge/sdk-core/tests/main.rs +8 -16
- data/bridge/sdk-core/tests/runner.rs +75 -36
- data/bridge/sdk-core/tests/wf_input_replay.rs +32 -0
- data/bridge/src/connection.rs +117 -82
- data/bridge/src/lib.rs +356 -42
- data/bridge/src/runtime.rs +10 -3
- data/bridge/src/test_server.rs +153 -0
- data/bridge/src/worker.rs +133 -9
- data/lib/gen/temporal/api/batch/v1/message_pb.rb +8 -6
- data/lib/gen/temporal/api/command/v1/message_pb.rb +10 -16
- data/lib/gen/temporal/api/common/v1/message_pb.rb +5 -1
- data/lib/gen/temporal/api/enums/v1/batch_operation_pb.rb +2 -1
- data/lib/gen/temporal/api/enums/v1/command_type_pb.rb +3 -3
- data/lib/gen/temporal/api/enums/v1/common_pb.rb +2 -1
- data/lib/gen/temporal/api/enums/v1/event_type_pb.rb +5 -4
- data/lib/gen/temporal/api/enums/v1/failed_cause_pb.rb +9 -1
- data/lib/gen/temporal/api/enums/v1/namespace_pb.rb +1 -1
- data/lib/gen/temporal/api/enums/v1/query_pb.rb +1 -1
- data/lib/gen/temporal/api/enums/v1/reset_pb.rb +1 -1
- data/lib/gen/temporal/api/enums/v1/schedule_pb.rb +1 -1
- data/lib/gen/temporal/api/enums/v1/task_queue_pb.rb +1 -1
- data/lib/gen/temporal/api/enums/v1/update_pb.rb +7 -10
- data/lib/gen/temporal/api/enums/v1/workflow_pb.rb +1 -1
- data/lib/gen/temporal/api/errordetails/v1/message_pb.rb +1 -1
- data/lib/gen/temporal/api/failure/v1/message_pb.rb +1 -1
- data/lib/gen/temporal/api/filter/v1/message_pb.rb +1 -1
- data/lib/gen/temporal/api/history/v1/message_pb.rb +34 -25
- data/lib/gen/temporal/api/namespace/v1/message_pb.rb +2 -1
- data/lib/gen/temporal/api/operatorservice/v1/request_response_pb.rb +14 -51
- data/lib/gen/temporal/api/operatorservice/v1/service_pb.rb +1 -1
- data/lib/gen/temporal/api/protocol/v1/message_pb.rb +30 -0
- data/lib/gen/temporal/api/query/v1/message_pb.rb +1 -1
- data/lib/gen/temporal/api/replication/v1/message_pb.rb +1 -1
- data/lib/gen/temporal/api/schedule/v1/message_pb.rb +22 -1
- data/lib/gen/temporal/api/sdk/v1/task_complete_metadata_pb.rb +23 -0
- data/lib/gen/temporal/api/taskqueue/v1/message_pb.rb +2 -2
- data/lib/gen/temporal/api/testservice/v1/request_response_pb.rb +49 -0
- data/lib/gen/temporal/api/testservice/v1/service_pb.rb +21 -0
- data/lib/gen/temporal/api/update/v1/message_pb.rb +49 -3
- data/lib/gen/temporal/api/version/v1/message_pb.rb +1 -1
- data/lib/gen/temporal/api/workflow/v1/message_pb.rb +2 -1
- data/lib/gen/temporal/api/workflowservice/v1/request_response_pb.rb +47 -20
- data/lib/gen/temporal/api/workflowservice/v1/service_pb.rb +1 -1
- data/lib/gen/temporal/sdk/core/activity_result/activity_result_pb.rb +13 -9
- data/lib/gen/temporal/sdk/core/activity_task/activity_task_pb.rb +10 -6
- data/lib/gen/temporal/sdk/core/child_workflow/child_workflow_pb.rb +13 -9
- data/lib/gen/temporal/sdk/core/common/common_pb.rb +7 -3
- data/lib/gen/temporal/sdk/core/core_interface_pb.rb +9 -3
- data/lib/gen/temporal/sdk/core/external_data/external_data_pb.rb +7 -3
- data/lib/gen/temporal/sdk/core/workflow_activation/workflow_activation_pb.rb +28 -21
- data/lib/gen/temporal/sdk/core/workflow_commands/workflow_commands_pb.rb +32 -24
- data/lib/gen/temporal/sdk/core/workflow_completion/workflow_completion_pb.rb +12 -5
- data/lib/temporalio/activity/context.rb +102 -0
- data/lib/temporalio/activity/info.rb +67 -0
- data/lib/temporalio/activity.rb +85 -0
- data/lib/temporalio/bridge/connect_options.rb +15 -0
- data/lib/temporalio/bridge/error.rb +8 -0
- data/lib/temporalio/bridge/retry_config.rb +24 -0
- data/lib/temporalio/bridge/tls_options.rb +19 -0
- data/lib/temporalio/bridge.rb +14 -0
- data/lib/{temporal → temporalio}/client/implementation.rb +57 -56
- data/lib/{temporal → temporalio}/client/workflow_handle.rb +35 -35
- data/lib/{temporal → temporalio}/client.rb +19 -32
- data/lib/temporalio/connection/retry_config.rb +44 -0
- data/lib/temporalio/connection/service.rb +20 -0
- data/lib/temporalio/connection/test_service.rb +92 -0
- data/lib/temporalio/connection/tls_options.rb +51 -0
- data/lib/temporalio/connection/workflow_service.rb +731 -0
- data/lib/temporalio/connection.rb +86 -0
- data/lib/{temporal → temporalio}/data_converter.rb +76 -35
- data/lib/{temporal → temporalio}/error/failure.rb +6 -6
- data/lib/{temporal → temporalio}/error/workflow_failure.rb +4 -2
- data/lib/{temporal → temporalio}/errors.rb +19 -1
- data/lib/{temporal → temporalio}/failure_converter/base.rb +5 -5
- data/lib/{temporal → temporalio}/failure_converter/basic.rb +58 -52
- data/lib/temporalio/failure_converter.rb +7 -0
- data/lib/temporalio/interceptor/activity_inbound.rb +22 -0
- data/lib/temporalio/interceptor/activity_outbound.rb +24 -0
- data/lib/{temporal → temporalio}/interceptor/chain.rb +7 -6
- data/lib/{temporal → temporalio}/interceptor/client.rb +27 -2
- data/lib/temporalio/interceptor.rb +22 -0
- data/lib/{temporal → temporalio}/payload_codec/base.rb +5 -5
- data/lib/{temporal → temporalio}/payload_converter/base.rb +3 -3
- data/lib/{temporal → temporalio}/payload_converter/bytes.rb +4 -3
- data/lib/{temporal → temporalio}/payload_converter/composite.rb +7 -5
- data/lib/{temporal → temporalio}/payload_converter/encoding_base.rb +4 -4
- data/lib/{temporal → temporalio}/payload_converter/json.rb +4 -3
- data/lib/{temporal → temporalio}/payload_converter/nil.rb +4 -3
- data/lib/temporalio/payload_converter.rb +14 -0
- data/lib/{temporal → temporalio}/retry_policy.rb +17 -7
- data/lib/{temporal → temporalio}/retry_state.rb +1 -1
- data/lib/temporalio/runtime.rb +25 -0
- data/lib/temporalio/testing/time_skipping_handle.rb +32 -0
- data/lib/temporalio/testing/time_skipping_interceptor.rb +23 -0
- data/lib/temporalio/testing/workflow_environment.rb +112 -0
- data/lib/temporalio/testing.rb +175 -0
- data/lib/{temporal → temporalio}/timeout_type.rb +2 -2
- data/lib/temporalio/version.rb +3 -0
- data/lib/temporalio/worker/activity_runner.rb +114 -0
- data/lib/temporalio/worker/activity_worker.rb +164 -0
- data/lib/temporalio/worker/reactor.rb +46 -0
- data/lib/temporalio/worker/runner.rb +63 -0
- data/lib/temporalio/worker/sync_worker.rb +124 -0
- data/lib/temporalio/worker/thread_pool_executor.rb +51 -0
- data/lib/temporalio/worker.rb +204 -0
- data/lib/temporalio/workflow/async.rb +46 -0
- data/lib/{temporal → temporalio}/workflow/execution_info.rb +4 -4
- data/lib/{temporal → temporalio}/workflow/execution_status.rb +1 -1
- data/lib/temporalio/workflow/future.rb +138 -0
- data/lib/{temporal → temporalio}/workflow/id_reuse_policy.rb +6 -6
- data/lib/temporalio/workflow/info.rb +76 -0
- data/lib/{temporal → temporalio}/workflow/query_reject_condition.rb +5 -5
- data/lib/temporalio.rb +12 -3
- data/temporalio.gemspec +11 -6
- metadata +137 -64
- data/bridge/sdk-core/Cargo.lock +0 -2606
- data/bridge/sdk-core/bridge-ffi/Cargo.toml +0 -24
- data/bridge/sdk-core/bridge-ffi/LICENSE.txt +0 -23
- data/bridge/sdk-core/bridge-ffi/build.rs +0 -25
- data/bridge/sdk-core/bridge-ffi/include/sdk-core-bridge.h +0 -249
- data/bridge/sdk-core/bridge-ffi/src/lib.rs +0 -825
- data/bridge/sdk-core/bridge-ffi/src/wrappers.rs +0 -211
- data/bridge/sdk-core/core/src/log_export.rs +0 -62
- data/bridge/sdk-core/core/src/worker/workflow/machines/mutable_side_effect_state_machine.rs +0 -127
- data/bridge/sdk-core/core/src/worker/workflow/machines/side_effect_state_machine.rs +0 -71
- data/bridge/sdk-core/protos/api_upstream/temporal/api/cluster/v1/message.proto +0 -83
- data/bridge/sdk-core/protos/local/temporal/sdk/core/bridge/bridge.proto +0 -210
- data/bridge/sdk-core/sdk/src/conversions.rs +0 -8
- data/lib/bridge.so +0 -0
- data/lib/gen/temporal/api/cluster/v1/message_pb.rb +0 -67
- data/lib/gen/temporal/api/enums/v1/cluster_pb.rb +0 -26
- data/lib/gen/temporal/sdk/core/bridge/bridge_pb.rb +0 -222
- data/lib/temporal/bridge.rb +0 -14
- data/lib/temporal/connection.rb +0 -736
- data/lib/temporal/failure_converter.rb +0 -8
- data/lib/temporal/payload_converter.rb +0 -14
- data/lib/temporal/runtime.rb +0 -22
- data/lib/temporal/version.rb +0 -3
- data/lib/temporal.rb +0 -8
@@ -14,21 +14,22 @@ categories = ["development-tools"]
|
|
14
14
|
|
15
15
|
[dependencies]
|
16
16
|
async-trait = "0.1"
|
17
|
+
thiserror = "1.0"
|
17
18
|
anyhow = "1.0"
|
18
|
-
base64 = "0.
|
19
|
+
base64 = "0.21"
|
19
20
|
crossbeam = "0.8"
|
20
21
|
derive_more = "0.99"
|
21
22
|
futures = "0.3"
|
22
23
|
once_cell = "1.10"
|
23
24
|
parking_lot = { version = "0.12", features = ["send_guard"] }
|
24
|
-
prost-types = "0.
|
25
|
+
prost-types = { version = "0.4", package = "prost-wkt-types" }
|
25
26
|
sha2 = "0.10"
|
26
27
|
serde = "1.0"
|
27
28
|
tokio = { version = "1.1", features = ["rt", "rt-multi-thread", "parking_lot", "time", "fs"] }
|
28
29
|
tokio-util = { version = "0.7" }
|
29
30
|
tokio-stream = "0.1"
|
30
31
|
tonic = "0.8"
|
31
|
-
tracing =
|
32
|
+
tracing = "0.1"
|
32
33
|
|
33
34
|
[dependencies.temporal-sdk-core]
|
34
35
|
path = "../core"
|
@@ -1,7 +1,11 @@
|
|
1
1
|
//! User-definable interceptors are defined in this module
|
2
2
|
|
3
3
|
use crate::Worker;
|
4
|
-
use
|
4
|
+
use anyhow::bail;
|
5
|
+
use temporal_sdk_core_protos::coresdk::{
|
6
|
+
workflow_activation::{remove_from_cache::EvictionReason, WorkflowActivation},
|
7
|
+
workflow_completion::WorkflowActivationCompletion,
|
8
|
+
};
|
5
9
|
|
6
10
|
/// Implementors can intercept certain actions that happen within the Worker.
|
7
11
|
///
|
@@ -10,8 +14,37 @@ use temporal_sdk_core_protos::coresdk::workflow_completion::WorkflowActivationCo
|
|
10
14
|
pub trait WorkerInterceptor {
|
11
15
|
/// Called every time a workflow activation completes (just before sending the completion to
|
12
16
|
/// core).
|
13
|
-
async fn on_workflow_activation_completion(&self,
|
17
|
+
async fn on_workflow_activation_completion(&self, _completion: &WorkflowActivationCompletion) {}
|
14
18
|
/// Called after the worker has initiated shutdown and the workflow/activity polling loops
|
15
19
|
/// have exited, but just before waiting for the inner core worker shutdown
|
16
|
-
fn on_shutdown(&self,
|
20
|
+
fn on_shutdown(&self, _sdk_worker: &Worker) {}
|
21
|
+
/// Called every time a workflow is about to be activated
|
22
|
+
async fn on_workflow_activation(
|
23
|
+
&self,
|
24
|
+
_activation: &WorkflowActivation,
|
25
|
+
) -> Result<(), anyhow::Error> {
|
26
|
+
Ok(())
|
27
|
+
}
|
28
|
+
}
|
29
|
+
|
30
|
+
/// An interceptor which causes the worker's run function to exit early if nondeterminism errors are
|
31
|
+
/// encountered
|
32
|
+
pub struct FailOnNondeterminismInterceptor {}
|
33
|
+
#[async_trait::async_trait(?Send)]
|
34
|
+
impl WorkerInterceptor for FailOnNondeterminismInterceptor {
|
35
|
+
async fn on_workflow_activation(
|
36
|
+
&self,
|
37
|
+
activation: &WorkflowActivation,
|
38
|
+
) -> Result<(), anyhow::Error> {
|
39
|
+
if matches!(
|
40
|
+
activation.eviction_reason(),
|
41
|
+
Some(EvictionReason::Nondeterminism)
|
42
|
+
) {
|
43
|
+
bail!(
|
44
|
+
"Workflow is being evicted because of nondeterminism! {}",
|
45
|
+
activation
|
46
|
+
);
|
47
|
+
}
|
48
|
+
Ok(())
|
49
|
+
}
|
17
50
|
}
|
@@ -10,8 +10,8 @@
|
|
10
10
|
//! ```no_run
|
11
11
|
//! use std::{str::FromStr, sync::Arc};
|
12
12
|
//! use temporal_sdk::{sdk_client_options, ActContext, Worker};
|
13
|
-
//! use temporal_sdk_core::{init_worker,
|
14
|
-
//! use temporal_sdk_core_api::worker::WorkerConfigBuilder;
|
13
|
+
//! use temporal_sdk_core::{init_worker, Url, CoreRuntime};
|
14
|
+
//! use temporal_sdk_core_api::{worker::WorkerConfigBuilder, telemetry::TelemetryOptionsBuilder};
|
15
15
|
//!
|
16
16
|
//! #[tokio::main]
|
17
17
|
//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
@@ -20,14 +20,14 @@
|
|
20
20
|
//! let client = server_options.connect("default", None, None).await?;
|
21
21
|
//!
|
22
22
|
//! let telemetry_options = TelemetryOptionsBuilder::default().build()?;
|
23
|
-
//!
|
23
|
+
//! let runtime = CoreRuntime::new_assume_tokio(telemetry_options)?;
|
24
24
|
//!
|
25
25
|
//! let worker_config = WorkerConfigBuilder::default()
|
26
26
|
//! .namespace("default")
|
27
27
|
//! .task_queue("task_queue")
|
28
28
|
//! .build()?;
|
29
29
|
//!
|
30
|
-
//! let core_worker = init_worker(worker_config, client)
|
30
|
+
//! let core_worker = init_worker(&runtime, worker_config, client)?;
|
31
31
|
//!
|
32
32
|
//! let mut worker = Worker::new_from_core(Arc::new(core_worker), "task_queue");
|
33
33
|
//! worker.register_activity(
|
@@ -46,7 +46,6 @@ extern crate tracing;
|
|
46
46
|
|
47
47
|
mod activity_context;
|
48
48
|
mod app_data;
|
49
|
-
mod conversions;
|
50
49
|
pub mod interceptors;
|
51
50
|
mod payload_converter;
|
52
51
|
mod workflow_context;
|
@@ -67,10 +66,12 @@ use anyhow::{anyhow, bail, Context};
|
|
67
66
|
use app_data::AppData;
|
68
67
|
use futures::{future::BoxFuture, FutureExt, StreamExt, TryFutureExt, TryStreamExt};
|
69
68
|
use std::{
|
69
|
+
any::{Any, TypeId},
|
70
70
|
cell::RefCell,
|
71
71
|
collections::HashMap,
|
72
72
|
fmt::{Debug, Display, Formatter},
|
73
73
|
future::Future,
|
74
|
+
panic::AssertUnwindSafe,
|
74
75
|
sync::Arc,
|
75
76
|
};
|
76
77
|
use temporal_client::ClientOptionsBuilder;
|
@@ -279,6 +280,9 @@ impl Worker {
|
|
279
280
|
}
|
280
281
|
o => o?,
|
281
282
|
};
|
283
|
+
if let Some(ref i) = common.worker_interceptor {
|
284
|
+
i.on_workflow_activation(&activation).await?;
|
285
|
+
}
|
282
286
|
if let Some(wf_fut) = wf_half.workflow_activation_handler(
|
283
287
|
common,
|
284
288
|
shutdown_token.clone(),
|
@@ -304,22 +308,17 @@ impl Worker {
|
|
304
308
|
// makes tests which use mocks dramatically more manageable.
|
305
309
|
async {
|
306
310
|
if !act_half.activity_fns.is_empty() {
|
307
|
-
let shutdown_token = shutdown_token.clone();
|
308
311
|
loop {
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
break;
|
313
|
-
}
|
314
|
-
act_half.activity_task_handler(
|
315
|
-
common.worker.clone(),
|
316
|
-
safe_app_data.clone(),
|
317
|
-
common.task_queue.clone(),
|
318
|
-
activity?
|
319
|
-
)?;
|
320
|
-
},
|
321
|
-
_ = shutdown_token.cancelled() => { break }
|
312
|
+
let activity = common.worker.poll_activity_task().await;
|
313
|
+
if matches!(activity, Err(PollActivityError::ShutDown)) {
|
314
|
+
break;
|
322
315
|
}
|
316
|
+
act_half.activity_task_handler(
|
317
|
+
common.worker.clone(),
|
318
|
+
safe_app_data.clone(),
|
319
|
+
common.task_queue.clone(),
|
320
|
+
activity?,
|
321
|
+
)?;
|
323
322
|
}
|
324
323
|
};
|
325
324
|
Result::<_, anyhow::Error>::Ok(())
|
@@ -333,6 +332,7 @@ impl Worker {
|
|
333
332
|
i.on_shutdown(self);
|
334
333
|
}
|
335
334
|
self.common.worker.shutdown().await;
|
335
|
+
debug!("Worker shutdown complete");
|
336
336
|
self.app_data = Some(
|
337
337
|
Arc::try_unwrap(safe_app_data)
|
338
338
|
.map_err(|_| anyhow!("some references of AppData exist on worker shutdown"))?,
|
@@ -410,7 +410,7 @@ impl WorkflowHalf {
|
|
410
410
|
);
|
411
411
|
let jh = tokio::spawn(async move {
|
412
412
|
tokio::select! {
|
413
|
-
r = wff => r,
|
413
|
+
r = wff.fuse() => r,
|
414
414
|
// TODO: This probably shouldn't abort early, as it could cause an in-progress
|
415
415
|
// complete to abort. Send synthetic remove activation
|
416
416
|
_ = shutdown_token.cancelled() => {
|
@@ -483,15 +483,30 @@ impl ActivityHalf {
|
|
483
483
|
start,
|
484
484
|
);
|
485
485
|
tokio::spawn(async move {
|
486
|
-
let output = (act_fn.act_func)(ctx, arg)
|
486
|
+
let output = AssertUnwindSafe((act_fn.act_func)(ctx, arg))
|
487
|
+
.catch_unwind()
|
488
|
+
.await;
|
487
489
|
let result = match output {
|
488
|
-
|
489
|
-
|
490
|
+
Err(e) => ActivityExecutionResult::fail(Failure::application_failure(
|
491
|
+
format!("Activity function panicked: {}", panic_formatter(e)),
|
492
|
+
true,
|
493
|
+
)),
|
494
|
+
Ok(Ok(ActExitValue::Normal(p))) => ActivityExecutionResult::ok(p),
|
495
|
+
Ok(Ok(ActExitValue::WillCompleteAsync)) => {
|
490
496
|
ActivityExecutionResult::will_complete_async()
|
491
497
|
}
|
492
|
-
Err(err) => match err.downcast::<ActivityCancelledError>() {
|
498
|
+
Ok(Err(err)) => match err.downcast::<ActivityCancelledError>() {
|
493
499
|
Ok(ce) => ActivityExecutionResult::cancel_from_details(ce.details),
|
494
|
-
Err(other_err) =>
|
500
|
+
Err(other_err) => {
|
501
|
+
match other_err.downcast::<NonRetryableActivityError>() {
|
502
|
+
Ok(nre) => ActivityExecutionResult::fail(
|
503
|
+
Failure::application_failure_from_error(nre.into(), true),
|
504
|
+
),
|
505
|
+
Err(other_err) => ActivityExecutionResult::fail(
|
506
|
+
Failure::application_failure_from_error(other_err, false),
|
507
|
+
),
|
508
|
+
}
|
509
|
+
}
|
495
510
|
},
|
496
511
|
};
|
497
512
|
worker
|
@@ -746,6 +761,14 @@ pub struct ActivityFunction {
|
|
746
761
|
pub struct ActivityCancelledError {
|
747
762
|
details: Option<Payload>,
|
748
763
|
}
|
764
|
+
impl ActivityCancelledError {
|
765
|
+
/// Include some details as part of concluding the activity as cancelled
|
766
|
+
pub fn with_details(payload: Payload) -> Self {
|
767
|
+
Self {
|
768
|
+
details: Some(payload),
|
769
|
+
}
|
770
|
+
}
|
771
|
+
}
|
749
772
|
impl std::error::Error for ActivityCancelledError {}
|
750
773
|
impl Display for ActivityCancelledError {
|
751
774
|
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
|
@@ -753,6 +776,16 @@ impl Display for ActivityCancelledError {
|
|
753
776
|
}
|
754
777
|
}
|
755
778
|
|
779
|
+
/// Return this error to indicate that your activity non-retryable
|
780
|
+
/// this is a transparent wrapper around anyhow Error so essentially any type of error
|
781
|
+
/// could be used here.
|
782
|
+
///
|
783
|
+
/// In your activity function. Return something along the lines of:
|
784
|
+
/// `Err(NonRetryableActivityError(anyhow::anyhow!("This should *not* be retried")).into())`
|
785
|
+
#[derive(Debug, thiserror::Error)]
|
786
|
+
#[error(transparent)]
|
787
|
+
pub struct NonRetryableActivityError(pub anyhow::Error);
|
788
|
+
|
756
789
|
/// Closures / functions which can be turned into activity functions implement this trait
|
757
790
|
pub trait IntoActivityFunc<Args, Res, Out> {
|
758
791
|
/// Consume the closure or fn pointer and turned it into a boxed activity function
|
@@ -790,3 +823,39 @@ where
|
|
790
823
|
Arc::new(wrapper)
|
791
824
|
}
|
792
825
|
}
|
826
|
+
|
827
|
+
/// Attempts to turn caught panics into something printable
|
828
|
+
fn panic_formatter(panic: Box<dyn Any>) -> Box<dyn Display> {
|
829
|
+
_panic_formatter::<&str>(panic)
|
830
|
+
}
|
831
|
+
fn _panic_formatter<T: 'static + PrintablePanicType>(panic: Box<dyn Any>) -> Box<dyn Display> {
|
832
|
+
match panic.downcast::<T>() {
|
833
|
+
Ok(d) => d,
|
834
|
+
Err(orig) => {
|
835
|
+
if TypeId::of::<<T as PrintablePanicType>::NextType>()
|
836
|
+
== TypeId::of::<EndPrintingAttempts>()
|
837
|
+
{
|
838
|
+
return Box::new("Couldn't turn panic into a string");
|
839
|
+
}
|
840
|
+
_panic_formatter::<T::NextType>(orig)
|
841
|
+
}
|
842
|
+
}
|
843
|
+
}
|
844
|
+
trait PrintablePanicType: Display {
|
845
|
+
type NextType: PrintablePanicType;
|
846
|
+
}
|
847
|
+
impl PrintablePanicType for &str {
|
848
|
+
type NextType = String;
|
849
|
+
}
|
850
|
+
impl PrintablePanicType for String {
|
851
|
+
type NextType = EndPrintingAttempts;
|
852
|
+
}
|
853
|
+
struct EndPrintingAttempts {}
|
854
|
+
impl Display for EndPrintingAttempts {
|
855
|
+
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
|
856
|
+
write!(f, "Will never be printed")
|
857
|
+
}
|
858
|
+
}
|
859
|
+
impl PrintablePanicType for EndPrintingAttempts {
|
860
|
+
type NextType = EndPrintingAttempts;
|
861
|
+
}
|
@@ -34,11 +34,11 @@ use temporal_sdk_core_protos::{
|
|
34
34
|
workflow_commands::{
|
35
35
|
request_cancel_external_workflow_execution as cancel_we,
|
36
36
|
signal_external_workflow_execution as sig_we, workflow_command,
|
37
|
-
RequestCancelExternalWorkflowExecution, SetPatchMarker,
|
37
|
+
ModifyWorkflowProperties, RequestCancelExternalWorkflowExecution, SetPatchMarker,
|
38
38
|
SignalExternalWorkflowExecution, StartTimer, UpsertWorkflowSearchAttributes,
|
39
39
|
},
|
40
40
|
},
|
41
|
-
temporal::api::common::v1::Payload,
|
41
|
+
temporal::api::common::v1::{Memo, Payload},
|
42
42
|
};
|
43
43
|
use tokio::sync::{mpsc, oneshot, watch};
|
44
44
|
use tokio_stream::wrappers::UnboundedReceiverStream;
|
@@ -297,6 +297,17 @@ impl WfContext {
|
|
297
297
|
))
|
298
298
|
}
|
299
299
|
|
300
|
+
/// Add or create a set of search attributes
|
301
|
+
pub fn upsert_memo(&self, attr_iter: impl IntoIterator<Item = (String, Payload)>) {
|
302
|
+
self.send(RustWfCmd::NewNonblockingCmd(
|
303
|
+
workflow_command::Variant::ModifyWorkflowProperties(ModifyWorkflowProperties {
|
304
|
+
upserted_memo: Some(Memo {
|
305
|
+
fields: HashMap::from_iter(attr_iter.into_iter()),
|
306
|
+
}),
|
307
|
+
}),
|
308
|
+
))
|
309
|
+
}
|
310
|
+
|
300
311
|
/// Return a stream that produces values when the named signal is sent to this workflow
|
301
312
|
pub fn make_signal_channel(&self, signal_name: impl Into<String>) -> DrainableSignalStream {
|
302
313
|
let (tx, rx) = mpsc::unbounded_channel();
|
@@ -1,7 +1,6 @@
|
|
1
1
|
use crate::{
|
2
|
-
|
3
|
-
|
4
|
-
WorkflowResult,
|
2
|
+
panic_formatter, workflow_context::WfContextSharedData, CancellableID, RustWfCmd, SignalData,
|
3
|
+
TimerResult, UnblockEvent, WfContext, WfExitValue, WorkflowFunction, WorkflowResult,
|
5
4
|
};
|
6
5
|
use anyhow::{anyhow, bail, Context as AnyhowContext, Error};
|
7
6
|
use crossbeam::channel::Receiver;
|
@@ -63,7 +62,9 @@ impl WorkflowFunction {
|
|
63
62
|
// We need to mark the workflow future as unconstrained, otherwise Tokio will impose
|
64
63
|
// an artificial limit on how many commands we can unblock in one poll round.
|
65
64
|
// TODO: Now we *need* deadlock detection or we could hose the whole system
|
66
|
-
inner: tokio::task::unconstrained((self.wf_func)(wf_context))
|
65
|
+
inner: tokio::task::unconstrained((self.wf_func)(wf_context))
|
66
|
+
.fuse()
|
67
|
+
.boxed(),
|
67
68
|
incoming_commands: cmd_receiver,
|
68
69
|
outgoing_completions,
|
69
70
|
incoming_activations,
|
@@ -132,10 +133,7 @@ impl WorkflowFuture {
|
|
132
133
|
fn fail_wft(&self, run_id: String, fail: Error) {
|
133
134
|
warn!("Workflow task failed for {}: {}", run_id, fail);
|
134
135
|
self.outgoing_completions
|
135
|
-
.send(WorkflowActivationCompletion::fail(
|
136
|
-
run_id,
|
137
|
-
anyhow_to_fail(fail),
|
138
|
-
))
|
136
|
+
.send(WorkflowActivationCompletion::fail(run_id, fail.into()))
|
139
137
|
.expect("Completion channel intact");
|
140
138
|
}
|
141
139
|
|
@@ -218,6 +216,9 @@ impl WorkflowFuture {
|
|
218
216
|
}
|
219
217
|
|
220
218
|
Variant::RemoveFromCache(_) => {
|
219
|
+
// TODO: Need to abort any spawned tasks, etc. See also cancel WF.
|
220
|
+
// How best to do this in executor agnostic way? Is that possible?
|
221
|
+
// -- tokio JoinSet does this in a nice way.
|
221
222
|
return Ok(true);
|
222
223
|
}
|
223
224
|
}
|
@@ -283,11 +284,7 @@ impl Future for WorkflowFuture {
|
|
283
284
|
.poll_unpin(cx)
|
284
285
|
{
|
285
286
|
Poll::Ready(Err(e)) => {
|
286
|
-
let errmsg = format!(
|
287
|
-
"Workflow function panicked: {:?}",
|
288
|
-
// Panics are typically strings
|
289
|
-
e.downcast::<String>()
|
290
|
-
);
|
287
|
+
let errmsg = format!("Workflow function panicked: {}", panic_formatter(e));
|
291
288
|
warn!("{}", errmsg);
|
292
289
|
self.outgoing_completions
|
293
290
|
.send(WorkflowActivationCompletion::fail(
|
@@ -12,13 +12,15 @@ categories = ["development-tools"]
|
|
12
12
|
|
13
13
|
[features]
|
14
14
|
history_builders = ["uuid", "rand"]
|
15
|
+
serde_serialize = []
|
15
16
|
|
16
17
|
[dependencies]
|
17
18
|
anyhow = "1.0"
|
18
|
-
base64 = "0.
|
19
|
+
base64 = "0.21"
|
19
20
|
derive_more = "0.99"
|
20
21
|
prost = "0.11"
|
21
|
-
prost-
|
22
|
+
prost-wkt = "0.4"
|
23
|
+
prost-wkt-types = "0.4"
|
22
24
|
rand = { version = "0.8", optional = true }
|
23
25
|
serde = { version = "1.0", features = ["derive"] }
|
24
26
|
serde_json = "1.0"
|
@@ -28,3 +30,4 @@ uuid = { version = "1.1", features = ["v4"], optional = true }
|
|
28
30
|
|
29
31
|
[build-dependencies]
|
30
32
|
tonic-build = "0.8"
|
33
|
+
prost-wkt-build = "0.4"
|
@@ -1,5 +1,9 @@
|
|
1
|
+
use std::{env, path::PathBuf};
|
2
|
+
|
1
3
|
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
2
4
|
println!("cargo:rerun-if-changed=../protos");
|
5
|
+
let out = PathBuf::from(env::var("OUT_DIR").unwrap());
|
6
|
+
let descriptor_file = out.join("descriptors.bin");
|
3
7
|
tonic_build::configure()
|
4
8
|
// We don't actually want to build the grpc definitions - we don't need them (for now).
|
5
9
|
// Just build the message structs.
|
@@ -74,7 +78,11 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|
74
78
|
// All external data is useful to be able to JSON serialize, so it can render in web UI
|
75
79
|
.type_attribute(
|
76
80
|
".coresdk.external_data",
|
77
|
-
"#[derive(::serde::Serialize, ::serde::Deserialize)]",
|
81
|
+
"#[cfg_attr(not(feature = \"serde_serialize\"), derive(::serde::Serialize, ::serde::Deserialize))]",
|
82
|
+
)
|
83
|
+
.type_attribute(
|
84
|
+
".",
|
85
|
+
"#[cfg_attr(feature = \"serde_serialize\", derive(::serde::Serialize, ::serde::Deserialize))]",
|
78
86
|
)
|
79
87
|
.field_attribute(
|
80
88
|
"coresdk.external_data.LocalActivityMarkerData.complete_time",
|
@@ -88,10 +96,26 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|
88
96
|
"coresdk.external_data.LocalActivityMarkerData.backoff",
|
89
97
|
"#[serde(with = \"opt_duration\")]",
|
90
98
|
)
|
99
|
+
.extern_path(
|
100
|
+
".google.protobuf.Any",
|
101
|
+
"::prost_wkt_types::Any"
|
102
|
+
)
|
103
|
+
.extern_path(
|
104
|
+
".google.protobuf.Timestamp",
|
105
|
+
"::prost_wkt_types::Timestamp"
|
106
|
+
)
|
107
|
+
.extern_path(
|
108
|
+
".google.protobuf.Duration",
|
109
|
+
"::prost_wkt_types::Duration"
|
110
|
+
)
|
111
|
+
.extern_path(
|
112
|
+
".google.protobuf.Value",
|
113
|
+
"::prost_wkt_types::Value"
|
114
|
+
)
|
115
|
+
.file_descriptor_set_path(#[allow(clippy::needless_borrow)] &descriptor_file)
|
91
116
|
.compile(
|
92
117
|
&[
|
93
118
|
"../protos/local/temporal/sdk/core/core_interface.proto",
|
94
|
-
"../protos/local/temporal/sdk/core/bridge/bridge.proto",
|
95
119
|
"../protos/api_upstream/temporal/api/workflowservice/v1/service.proto",
|
96
120
|
"../protos/api_upstream/temporal/api/operatorservice/v1/service.proto",
|
97
121
|
"../protos/testsrv_upstream/temporal/api/testservice/v1/service.proto",
|
@@ -104,5 +128,15 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|
104
128
|
"../protos/grpc",
|
105
129
|
],
|
106
130
|
)?;
|
131
|
+
|
132
|
+
#[cfg(feature = "serde_serialize")]
|
133
|
+
{
|
134
|
+
use prost_wkt_build::{FileDescriptorSet, Message};
|
135
|
+
|
136
|
+
let descriptor_bytes = std::fs::read(descriptor_file)?;
|
137
|
+
let descriptor = FileDescriptorSet::decode(&descriptor_bytes[..])?;
|
138
|
+
prost_wkt_build::add_serde(out, descriptor);
|
139
|
+
}
|
140
|
+
|
107
141
|
Ok(())
|
108
142
|
}
|