amit-temporalio 0.3.1-x86_64-linux-musl
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 +7 -0
- data/.yardopts +2 -0
- data/Gemfile +23 -0
- data/Rakefile +101 -0
- data/lib/temporalio/activity/complete_async_error.rb +11 -0
- data/lib/temporalio/activity/context.rb +116 -0
- data/lib/temporalio/activity/definition.rb +189 -0
- data/lib/temporalio/activity/info.rb +64 -0
- data/lib/temporalio/activity.rb +12 -0
- data/lib/temporalio/api/activity/v1/message.rb +25 -0
- data/lib/temporalio/api/batch/v1/message.rb +31 -0
- data/lib/temporalio/api/cloud/account/v1/message.rb +28 -0
- data/lib/temporalio/api/cloud/cloudservice/v1/request_response.rb +126 -0
- data/lib/temporalio/api/cloud/cloudservice/v1/service.rb +25 -0
- data/lib/temporalio/api/cloud/cloudservice.rb +3 -0
- data/lib/temporalio/api/cloud/identity/v1/message.rb +41 -0
- data/lib/temporalio/api/cloud/namespace/v1/message.rb +42 -0
- data/lib/temporalio/api/cloud/nexus/v1/message.rb +31 -0
- data/lib/temporalio/api/cloud/operation/v1/message.rb +28 -0
- data/lib/temporalio/api/cloud/region/v1/message.rb +24 -0
- data/lib/temporalio/api/cloud/resource/v1/message.rb +23 -0
- data/lib/temporalio/api/cloud/sink/v1/message.rb +24 -0
- data/lib/temporalio/api/cloud/usage/v1/message.rb +31 -0
- data/lib/temporalio/api/command/v1/message.rb +46 -0
- data/lib/temporalio/api/common/v1/grpc_status.rb +23 -0
- data/lib/temporalio/api/common/v1/message.rb +47 -0
- data/lib/temporalio/api/enums/v1/batch_operation.rb +22 -0
- data/lib/temporalio/api/enums/v1/command_type.rb +21 -0
- data/lib/temporalio/api/enums/v1/common.rb +26 -0
- data/lib/temporalio/api/enums/v1/event_type.rb +21 -0
- data/lib/temporalio/api/enums/v1/failed_cause.rb +26 -0
- data/lib/temporalio/api/enums/v1/namespace.rb +23 -0
- data/lib/temporalio/api/enums/v1/query.rb +22 -0
- data/lib/temporalio/api/enums/v1/reset.rb +23 -0
- data/lib/temporalio/api/enums/v1/schedule.rb +21 -0
- data/lib/temporalio/api/enums/v1/task_queue.rb +25 -0
- data/lib/temporalio/api/enums/v1/update.rb +22 -0
- data/lib/temporalio/api/enums/v1/workflow.rb +30 -0
- data/lib/temporalio/api/errordetails/v1/message.rb +42 -0
- data/lib/temporalio/api/export/v1/message.rb +24 -0
- data/lib/temporalio/api/failure/v1/message.rb +35 -0
- data/lib/temporalio/api/filter/v1/message.rb +27 -0
- data/lib/temporalio/api/history/v1/message.rb +90 -0
- data/lib/temporalio/api/namespace/v1/message.rb +31 -0
- data/lib/temporalio/api/nexus/v1/message.rb +40 -0
- data/lib/temporalio/api/operatorservice/v1/request_response.rb +49 -0
- data/lib/temporalio/api/operatorservice/v1/service.rb +23 -0
- data/lib/temporalio/api/operatorservice.rb +3 -0
- data/lib/temporalio/api/payload_visitor.rb +1513 -0
- data/lib/temporalio/api/protocol/v1/message.rb +23 -0
- data/lib/temporalio/api/query/v1/message.rb +27 -0
- data/lib/temporalio/api/replication/v1/message.rb +26 -0
- data/lib/temporalio/api/schedule/v1/message.rb +43 -0
- data/lib/temporalio/api/sdk/v1/enhanced_stack_trace.rb +25 -0
- data/lib/temporalio/api/sdk/v1/task_complete_metadata.rb +21 -0
- data/lib/temporalio/api/sdk/v1/user_metadata.rb +23 -0
- data/lib/temporalio/api/sdk/v1/workflow_metadata.rb +23 -0
- data/lib/temporalio/api/taskqueue/v1/message.rb +45 -0
- data/lib/temporalio/api/testservice/v1/request_response.rb +31 -0
- data/lib/temporalio/api/testservice/v1/service.rb +23 -0
- data/lib/temporalio/api/update/v1/message.rb +33 -0
- data/lib/temporalio/api/version/v1/message.rb +26 -0
- data/lib/temporalio/api/workflow/v1/message.rb +43 -0
- data/lib/temporalio/api/workflowservice/v1/request_response.rb +204 -0
- data/lib/temporalio/api/workflowservice/v1/service.rb +23 -0
- data/lib/temporalio/api/workflowservice.rb +3 -0
- data/lib/temporalio/api.rb +14 -0
- data/lib/temporalio/cancellation.rb +170 -0
- data/lib/temporalio/client/activity_id_reference.rb +32 -0
- data/lib/temporalio/client/async_activity_handle.rb +85 -0
- data/lib/temporalio/client/connection/cloud_service.rb +726 -0
- data/lib/temporalio/client/connection/operator_service.rb +201 -0
- data/lib/temporalio/client/connection/service.rb +42 -0
- data/lib/temporalio/client/connection/test_service.rb +111 -0
- data/lib/temporalio/client/connection/workflow_service.rb +1041 -0
- data/lib/temporalio/client/connection.rb +316 -0
- data/lib/temporalio/client/interceptor.rb +416 -0
- data/lib/temporalio/client/schedule.rb +967 -0
- data/lib/temporalio/client/schedule_handle.rb +126 -0
- data/lib/temporalio/client/workflow_execution.rb +100 -0
- data/lib/temporalio/client/workflow_execution_count.rb +36 -0
- data/lib/temporalio/client/workflow_execution_status.rb +18 -0
- data/lib/temporalio/client/workflow_handle.rb +389 -0
- data/lib/temporalio/client/workflow_query_reject_condition.rb +14 -0
- data/lib/temporalio/client/workflow_update_handle.rb +65 -0
- data/lib/temporalio/client/workflow_update_wait_stage.rb +17 -0
- data/lib/temporalio/client.rb +484 -0
- data/lib/temporalio/common_enums.rb +41 -0
- data/lib/temporalio/converters/data_converter.rb +99 -0
- data/lib/temporalio/converters/failure_converter.rb +202 -0
- data/lib/temporalio/converters/payload_codec.rb +26 -0
- data/lib/temporalio/converters/payload_converter/binary_null.rb +34 -0
- data/lib/temporalio/converters/payload_converter/binary_plain.rb +35 -0
- data/lib/temporalio/converters/payload_converter/binary_protobuf.rb +42 -0
- data/lib/temporalio/converters/payload_converter/composite.rb +66 -0
- data/lib/temporalio/converters/payload_converter/encoding.rb +35 -0
- data/lib/temporalio/converters/payload_converter/json_plain.rb +44 -0
- data/lib/temporalio/converters/payload_converter/json_protobuf.rb +41 -0
- data/lib/temporalio/converters/payload_converter.rb +71 -0
- data/lib/temporalio/converters/raw_value.rb +20 -0
- data/lib/temporalio/converters.rb +9 -0
- data/lib/temporalio/error/failure.rb +219 -0
- data/lib/temporalio/error.rb +155 -0
- data/lib/temporalio/internal/bridge/3.2/temporalio_bridge.so +0 -0
- data/lib/temporalio/internal/bridge/3.3/temporalio_bridge.so +0 -0
- data/lib/temporalio/internal/bridge/3.4/temporalio_bridge.so +0 -0
- data/lib/temporalio/internal/bridge/api/activity_result/activity_result.rb +34 -0
- data/lib/temporalio/internal/bridge/api/activity_task/activity_task.rb +31 -0
- data/lib/temporalio/internal/bridge/api/child_workflow/child_workflow.rb +33 -0
- data/lib/temporalio/internal/bridge/api/common/common.rb +26 -0
- data/lib/temporalio/internal/bridge/api/core_interface.rb +40 -0
- data/lib/temporalio/internal/bridge/api/external_data/external_data.rb +27 -0
- data/lib/temporalio/internal/bridge/api/nexus/nexus.rb +33 -0
- data/lib/temporalio/internal/bridge/api/workflow_activation/workflow_activation.rb +56 -0
- data/lib/temporalio/internal/bridge/api/workflow_commands/workflow_commands.rb +57 -0
- data/lib/temporalio/internal/bridge/api/workflow_completion/workflow_completion.rb +30 -0
- data/lib/temporalio/internal/bridge/api.rb +3 -0
- data/lib/temporalio/internal/bridge/client.rb +95 -0
- data/lib/temporalio/internal/bridge/runtime.rb +53 -0
- data/lib/temporalio/internal/bridge/testing.rb +66 -0
- data/lib/temporalio/internal/bridge/worker.rb +85 -0
- data/lib/temporalio/internal/bridge.rb +36 -0
- data/lib/temporalio/internal/client/implementation.rb +700 -0
- data/lib/temporalio/internal/metric.rb +122 -0
- data/lib/temporalio/internal/proto_utils.rb +133 -0
- data/lib/temporalio/internal/worker/activity_worker.rb +376 -0
- data/lib/temporalio/internal/worker/multi_runner.rb +213 -0
- data/lib/temporalio/internal/worker/workflow_instance/child_workflow_handle.rb +54 -0
- data/lib/temporalio/internal/worker/workflow_instance/context.rb +333 -0
- data/lib/temporalio/internal/worker/workflow_instance/details.rb +44 -0
- data/lib/temporalio/internal/worker/workflow_instance/external_workflow_handle.rb +32 -0
- data/lib/temporalio/internal/worker/workflow_instance/externally_immutable_hash.rb +22 -0
- data/lib/temporalio/internal/worker/workflow_instance/handler_execution.rb +25 -0
- data/lib/temporalio/internal/worker/workflow_instance/handler_hash.rb +41 -0
- data/lib/temporalio/internal/worker/workflow_instance/illegal_call_tracer.rb +97 -0
- data/lib/temporalio/internal/worker/workflow_instance/inbound_implementation.rb +62 -0
- data/lib/temporalio/internal/worker/workflow_instance/outbound_implementation.rb +415 -0
- data/lib/temporalio/internal/worker/workflow_instance/replay_safe_logger.rb +37 -0
- data/lib/temporalio/internal/worker/workflow_instance/replay_safe_metric.rb +40 -0
- data/lib/temporalio/internal/worker/workflow_instance/scheduler.rb +163 -0
- data/lib/temporalio/internal/worker/workflow_instance.rb +730 -0
- data/lib/temporalio/internal/worker/workflow_worker.rb +236 -0
- data/lib/temporalio/internal.rb +7 -0
- data/lib/temporalio/metric.rb +109 -0
- data/lib/temporalio/retry_policy.rb +74 -0
- data/lib/temporalio/runtime.rb +314 -0
- data/lib/temporalio/scoped_logger.rb +96 -0
- data/lib/temporalio/search_attributes.rb +343 -0
- data/lib/temporalio/testing/activity_environment.rb +136 -0
- data/lib/temporalio/testing/workflow_environment.rb +383 -0
- data/lib/temporalio/testing.rb +10 -0
- data/lib/temporalio/version.rb +5 -0
- data/lib/temporalio/worker/activity_executor/fiber.rb +49 -0
- data/lib/temporalio/worker/activity_executor/thread_pool.rb +46 -0
- data/lib/temporalio/worker/activity_executor.rb +55 -0
- data/lib/temporalio/worker/interceptor.rb +362 -0
- data/lib/temporalio/worker/thread_pool.rb +237 -0
- data/lib/temporalio/worker/tuner.rb +189 -0
- data/lib/temporalio/worker/workflow_executor/thread_pool.rb +230 -0
- data/lib/temporalio/worker/workflow_executor.rb +26 -0
- data/lib/temporalio/worker/workflow_replayer.rb +343 -0
- data/lib/temporalio/worker.rb +569 -0
- data/lib/temporalio/workflow/activity_cancellation_type.rb +20 -0
- data/lib/temporalio/workflow/child_workflow_cancellation_type.rb +21 -0
- data/lib/temporalio/workflow/child_workflow_handle.rb +43 -0
- data/lib/temporalio/workflow/definition.rb +566 -0
- data/lib/temporalio/workflow/external_workflow_handle.rb +41 -0
- data/lib/temporalio/workflow/future.rb +151 -0
- data/lib/temporalio/workflow/handler_unfinished_policy.rb +13 -0
- data/lib/temporalio/workflow/info.rb +82 -0
- data/lib/temporalio/workflow/parent_close_policy.rb +19 -0
- data/lib/temporalio/workflow/update_info.rb +20 -0
- data/lib/temporalio/workflow.rb +529 -0
- data/lib/temporalio/workflow_history.rb +47 -0
- data/lib/temporalio.rb +11 -0
- data/temporalio.gemspec +28 -0
- metadata +238 -0
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'temporalio/scoped_logger'
|
4
|
+
|
5
|
+
module Temporalio
|
6
|
+
module Internal
|
7
|
+
module Worker
|
8
|
+
class WorkflowInstance
|
9
|
+
# Wrapper for a metric that does not log on replay.
|
10
|
+
class ReplaySafeMetric < SimpleDelegator
|
11
|
+
def record(value, additional_attributes: nil)
|
12
|
+
return if Temporalio::Workflow.in_workflow? && Temporalio::Workflow::Unsafe.replaying?
|
13
|
+
|
14
|
+
super
|
15
|
+
end
|
16
|
+
|
17
|
+
def with_additional_attributes(additional_attributes)
|
18
|
+
ReplaySafeMetric.new(super)
|
19
|
+
end
|
20
|
+
|
21
|
+
class Meter < SimpleDelegator
|
22
|
+
def create_metric(
|
23
|
+
metric_type,
|
24
|
+
name,
|
25
|
+
description: nil,
|
26
|
+
unit: nil,
|
27
|
+
value_type: :integer
|
28
|
+
)
|
29
|
+
ReplaySafeMetric.new(super)
|
30
|
+
end
|
31
|
+
|
32
|
+
def with_additional_attributes(additional_attributes)
|
33
|
+
Meter.new(super)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,163 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'temporalio'
|
4
|
+
require 'temporalio/cancellation'
|
5
|
+
require 'temporalio/error'
|
6
|
+
require 'temporalio/internal/worker/workflow_instance'
|
7
|
+
require 'temporalio/workflow'
|
8
|
+
require 'timeout'
|
9
|
+
|
10
|
+
module Temporalio
|
11
|
+
module Internal
|
12
|
+
module Worker
|
13
|
+
class WorkflowInstance
|
14
|
+
# Deterministic {::Fiber::Scheduler} implementation.
|
15
|
+
class Scheduler
|
16
|
+
def initialize(instance)
|
17
|
+
@instance = instance
|
18
|
+
@fibers = []
|
19
|
+
@ready = []
|
20
|
+
@wait_conditions = {}
|
21
|
+
@wait_condition_counter = 0
|
22
|
+
end
|
23
|
+
|
24
|
+
def context
|
25
|
+
@instance.context
|
26
|
+
end
|
27
|
+
|
28
|
+
def run_until_all_yielded
|
29
|
+
loop do
|
30
|
+
# Run all fibers until all yielded
|
31
|
+
while (fiber = @ready.shift)
|
32
|
+
fiber.resume
|
33
|
+
end
|
34
|
+
|
35
|
+
# Find the _first_ resolvable wait condition and if there, resolve it, and loop again, otherwise return.
|
36
|
+
# It is important that we both let fibers get all settled _before_ this and only allow a _single_ wait
|
37
|
+
# condition to be satisfied before looping. This allows wait condition users to trust that the line of
|
38
|
+
# code after the wait condition still has the condition satisfied.
|
39
|
+
# @type var cond_fiber: Fiber?
|
40
|
+
cond_fiber = nil
|
41
|
+
cond_result = nil
|
42
|
+
@wait_conditions.each do |seq, cond|
|
43
|
+
next unless (cond_result = cond.first.call)
|
44
|
+
|
45
|
+
cond_fiber = cond[1]
|
46
|
+
@wait_conditions.delete(seq)
|
47
|
+
break
|
48
|
+
end
|
49
|
+
return unless cond_fiber
|
50
|
+
|
51
|
+
cond_fiber.resume(cond_result)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def wait_condition(cancellation:, &block)
|
56
|
+
raise Workflow::InvalidWorkflowStateError, 'Cannot wait in this context' if @instance.context_frozen
|
57
|
+
|
58
|
+
if cancellation&.canceled?
|
59
|
+
raise Error::CanceledError,
|
60
|
+
cancellation.canceled_reason || 'Wait condition canceled before started'
|
61
|
+
end
|
62
|
+
|
63
|
+
seq = (@wait_condition_counter += 1)
|
64
|
+
@wait_conditions[seq] = [block, Fiber.current]
|
65
|
+
|
66
|
+
# Add a cancellation callback
|
67
|
+
cancel_callback_key = cancellation&.add_cancel_callback do
|
68
|
+
# Only if the condition is still present
|
69
|
+
cond = @wait_conditions.delete(seq)
|
70
|
+
if cond&.last&.alive?
|
71
|
+
cond&.last&.raise(Error::CanceledError.new(cancellation&.canceled_reason || 'Wait condition canceled'))
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
# This blocks until a resume is called on this fiber
|
76
|
+
result = Fiber.yield
|
77
|
+
|
78
|
+
# Remove cancellation callback (only needed on success)
|
79
|
+
cancellation&.remove_cancel_callback(cancel_callback_key) if cancel_callback_key
|
80
|
+
|
81
|
+
result
|
82
|
+
end
|
83
|
+
|
84
|
+
def stack_trace
|
85
|
+
# Collect backtraces of known fibers, separating with a blank line. We make sure to remove any lines that
|
86
|
+
# reference Temporal paths, and we remove any empty backtraces.
|
87
|
+
dir_path = @instance.illegal_call_tracing_disabled { File.dirname(Temporalio._root_file_path) }
|
88
|
+
@fibers.map do |fiber|
|
89
|
+
fiber.backtrace.reject { |s| s.start_with?(dir_path) }.join("\n")
|
90
|
+
end.reject(&:empty?).join("\n\n")
|
91
|
+
end
|
92
|
+
|
93
|
+
###
|
94
|
+
# Fiber::Scheduler methods
|
95
|
+
#
|
96
|
+
# Note, we do not implement many methods here such as io_read and
|
97
|
+
# such. While it might seem to make sense to implement them and
|
98
|
+
# raise, we actually want to default to the blocking behavior of them
|
99
|
+
# not being present. This is so advanced things like logging still
|
100
|
+
# work inside of workflows. So we only implement the bare minimum.
|
101
|
+
###
|
102
|
+
|
103
|
+
def block(_blocker, timeout = nil)
|
104
|
+
# TODO(cretz): Make the blocker visible in the stack trace?
|
105
|
+
|
106
|
+
# We just yield because unblock will resume this. We will just wrap in timeout if needed.
|
107
|
+
if timeout
|
108
|
+
begin
|
109
|
+
Timeout.timeout(timeout) { Fiber.yield }
|
110
|
+
true
|
111
|
+
rescue Timeout::Error
|
112
|
+
false
|
113
|
+
end
|
114
|
+
else
|
115
|
+
Fiber.yield
|
116
|
+
true
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
def close
|
121
|
+
# Nothing to do here, lifetime of scheduler is controlled by the instance
|
122
|
+
end
|
123
|
+
|
124
|
+
def fiber(&block)
|
125
|
+
if @instance.context_frozen
|
126
|
+
raise Workflow::InvalidWorkflowStateError, 'Cannot schedule fibers in this context'
|
127
|
+
end
|
128
|
+
|
129
|
+
fiber = Fiber.new do
|
130
|
+
block.call # steep:ignore
|
131
|
+
ensure
|
132
|
+
@fibers.delete(Fiber.current)
|
133
|
+
end
|
134
|
+
@fibers << fiber
|
135
|
+
@ready << fiber
|
136
|
+
fiber
|
137
|
+
end
|
138
|
+
|
139
|
+
def io_wait(io, events, timeout)
|
140
|
+
# TODO(cretz): This in a blocking fashion?
|
141
|
+
raise NotImplementedError, 'TODO'
|
142
|
+
end
|
143
|
+
|
144
|
+
def kernel_sleep(duration = nil)
|
145
|
+
Workflow.sleep(duration)
|
146
|
+
end
|
147
|
+
|
148
|
+
def process_wait(pid, flags)
|
149
|
+
raise NotImplementedError, 'Cannot wait on other processes in workflows'
|
150
|
+
end
|
151
|
+
|
152
|
+
def timeout_after(duration, exception_class, *exception_arguments, &)
|
153
|
+
context.timeout(duration, exception_class, *exception_arguments, summary: 'Timeout timer', &)
|
154
|
+
end
|
155
|
+
|
156
|
+
def unblock(_blocker, fiber)
|
157
|
+
@ready << fiber
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|