temporalio 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (119) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +2 -0
  3. data/Cargo.lock +659 -370
  4. data/Cargo.toml +2 -2
  5. data/Gemfile +3 -3
  6. data/README.md +589 -47
  7. data/Rakefile +10 -296
  8. data/ext/Cargo.toml +1 -0
  9. data/lib/temporalio/activity/complete_async_error.rb +1 -1
  10. data/lib/temporalio/activity/context.rb +5 -2
  11. data/lib/temporalio/activity/definition.rb +163 -65
  12. data/lib/temporalio/activity/info.rb +22 -21
  13. data/lib/temporalio/activity.rb +2 -59
  14. data/lib/temporalio/api/activity/v1/message.rb +25 -0
  15. data/lib/temporalio/api/cloud/account/v1/message.rb +28 -0
  16. data/lib/temporalio/api/cloud/cloudservice/v1/request_response.rb +34 -1
  17. data/lib/temporalio/api/cloud/cloudservice/v1/service.rb +1 -1
  18. data/lib/temporalio/api/cloud/identity/v1/message.rb +6 -1
  19. data/lib/temporalio/api/cloud/namespace/v1/message.rb +8 -1
  20. data/lib/temporalio/api/cloud/nexus/v1/message.rb +31 -0
  21. data/lib/temporalio/api/cloud/operation/v1/message.rb +2 -1
  22. data/lib/temporalio/api/cloud/region/v1/message.rb +2 -1
  23. data/lib/temporalio/api/cloud/resource/v1/message.rb +23 -0
  24. data/lib/temporalio/api/cloud/sink/v1/message.rb +24 -0
  25. data/lib/temporalio/api/cloud/usage/v1/message.rb +31 -0
  26. data/lib/temporalio/api/common/v1/message.rb +7 -1
  27. data/lib/temporalio/api/enums/v1/event_type.rb +1 -1
  28. data/lib/temporalio/api/enums/v1/failed_cause.rb +1 -1
  29. data/lib/temporalio/api/enums/v1/reset.rb +1 -1
  30. data/lib/temporalio/api/history/v1/message.rb +1 -1
  31. data/lib/temporalio/api/nexus/v1/message.rb +2 -2
  32. data/lib/temporalio/api/operatorservice/v1/service.rb +1 -1
  33. data/lib/temporalio/api/payload_visitor.rb +1513 -0
  34. data/lib/temporalio/api/schedule/v1/message.rb +2 -1
  35. data/lib/temporalio/api/testservice/v1/request_response.rb +31 -0
  36. data/lib/temporalio/api/testservice/v1/service.rb +23 -0
  37. data/lib/temporalio/api/workflow/v1/message.rb +1 -1
  38. data/lib/temporalio/api/workflowservice/v1/request_response.rb +17 -2
  39. data/lib/temporalio/api/workflowservice/v1/service.rb +1 -1
  40. data/lib/temporalio/api.rb +1 -0
  41. data/lib/temporalio/cancellation.rb +34 -14
  42. data/lib/temporalio/client/async_activity_handle.rb +12 -37
  43. data/lib/temporalio/client/connection/cloud_service.rb +309 -231
  44. data/lib/temporalio/client/connection/operator_service.rb +36 -84
  45. data/lib/temporalio/client/connection/service.rb +6 -5
  46. data/lib/temporalio/client/connection/test_service.rb +111 -0
  47. data/lib/temporalio/client/connection/workflow_service.rb +264 -441
  48. data/lib/temporalio/client/connection.rb +90 -44
  49. data/lib/temporalio/client/interceptor.rb +160 -60
  50. data/lib/temporalio/client/schedule.rb +967 -0
  51. data/lib/temporalio/client/schedule_handle.rb +126 -0
  52. data/lib/temporalio/client/workflow_execution.rb +7 -10
  53. data/lib/temporalio/client/workflow_handle.rb +38 -95
  54. data/lib/temporalio/client/workflow_update_handle.rb +3 -5
  55. data/lib/temporalio/client.rb +122 -42
  56. data/lib/temporalio/common_enums.rb +17 -0
  57. data/lib/temporalio/converters/data_converter.rb +4 -7
  58. data/lib/temporalio/converters/failure_converter.rb +5 -3
  59. data/lib/temporalio/converters/payload_converter/composite.rb +4 -0
  60. data/lib/temporalio/converters/payload_converter.rb +6 -8
  61. data/lib/temporalio/converters/raw_value.rb +20 -0
  62. data/lib/temporalio/error/failure.rb +1 -1
  63. data/lib/temporalio/error.rb +10 -2
  64. data/lib/temporalio/internal/bridge/api/core_interface.rb +5 -1
  65. data/lib/temporalio/internal/bridge/api/nexus/nexus.rb +33 -0
  66. data/lib/temporalio/internal/bridge/api/workflow_activation/workflow_activation.rb +5 -1
  67. data/lib/temporalio/internal/bridge/api/workflow_commands/workflow_commands.rb +4 -1
  68. data/lib/temporalio/internal/bridge/client.rb +11 -6
  69. data/lib/temporalio/internal/bridge/testing.rb +20 -0
  70. data/lib/temporalio/internal/bridge/worker.rb +2 -0
  71. data/lib/temporalio/internal/bridge.rb +1 -1
  72. data/lib/temporalio/internal/client/implementation.rb +245 -70
  73. data/lib/temporalio/internal/metric.rb +122 -0
  74. data/lib/temporalio/internal/proto_utils.rb +86 -7
  75. data/lib/temporalio/internal/worker/activity_worker.rb +52 -24
  76. data/lib/temporalio/internal/worker/multi_runner.rb +51 -7
  77. data/lib/temporalio/internal/worker/workflow_instance/child_workflow_handle.rb +54 -0
  78. data/lib/temporalio/internal/worker/workflow_instance/context.rb +329 -0
  79. data/lib/temporalio/internal/worker/workflow_instance/details.rb +44 -0
  80. data/lib/temporalio/internal/worker/workflow_instance/external_workflow_handle.rb +32 -0
  81. data/lib/temporalio/internal/worker/workflow_instance/externally_immutable_hash.rb +22 -0
  82. data/lib/temporalio/internal/worker/workflow_instance/handler_execution.rb +25 -0
  83. data/lib/temporalio/internal/worker/workflow_instance/handler_hash.rb +41 -0
  84. data/lib/temporalio/internal/worker/workflow_instance/illegal_call_tracer.rb +97 -0
  85. data/lib/temporalio/internal/worker/workflow_instance/inbound_implementation.rb +62 -0
  86. data/lib/temporalio/internal/worker/workflow_instance/outbound_implementation.rb +415 -0
  87. data/lib/temporalio/internal/worker/workflow_instance/replay_safe_logger.rb +37 -0
  88. data/lib/temporalio/internal/worker/workflow_instance/replay_safe_metric.rb +40 -0
  89. data/lib/temporalio/internal/worker/workflow_instance/scheduler.rb +163 -0
  90. data/lib/temporalio/internal/worker/workflow_instance.rb +730 -0
  91. data/lib/temporalio/internal/worker/workflow_worker.rb +196 -0
  92. data/lib/temporalio/metric.rb +109 -0
  93. data/lib/temporalio/retry_policy.rb +37 -14
  94. data/lib/temporalio/runtime.rb +118 -75
  95. data/lib/temporalio/search_attributes.rb +80 -37
  96. data/lib/temporalio/testing/activity_environment.rb +2 -2
  97. data/lib/temporalio/testing/workflow_environment.rb +251 -5
  98. data/lib/temporalio/version.rb +1 -1
  99. data/lib/temporalio/worker/activity_executor/thread_pool.rb +9 -217
  100. data/lib/temporalio/worker/activity_executor.rb +3 -3
  101. data/lib/temporalio/worker/interceptor.rb +340 -66
  102. data/lib/temporalio/worker/thread_pool.rb +237 -0
  103. data/lib/temporalio/worker/workflow_executor/thread_pool.rb +230 -0
  104. data/lib/temporalio/worker/workflow_executor.rb +26 -0
  105. data/lib/temporalio/worker.rb +201 -30
  106. data/lib/temporalio/workflow/activity_cancellation_type.rb +20 -0
  107. data/lib/temporalio/workflow/child_workflow_cancellation_type.rb +21 -0
  108. data/lib/temporalio/workflow/child_workflow_handle.rb +43 -0
  109. data/lib/temporalio/workflow/definition.rb +566 -0
  110. data/lib/temporalio/workflow/external_workflow_handle.rb +41 -0
  111. data/lib/temporalio/workflow/future.rb +151 -0
  112. data/lib/temporalio/workflow/handler_unfinished_policy.rb +13 -0
  113. data/lib/temporalio/workflow/info.rb +82 -0
  114. data/lib/temporalio/workflow/parent_close_policy.rb +19 -0
  115. data/lib/temporalio/workflow/update_info.rb +20 -0
  116. data/lib/temporalio/workflow.rb +523 -0
  117. data/lib/temporalio.rb +4 -0
  118. data/temporalio.gemspec +2 -2
  119. metadata +50 -8
@@ -0,0 +1,126 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'temporalio/client/interceptor'
4
+ require 'temporalio/client/schedule'
5
+
6
+ module Temporalio
7
+ class Client
8
+ # Handle for interacting with a schedule. This is usually created via {Client.create_schedule} or
9
+ # {Client.schedule_handle}.
10
+ class ScheduleHandle
11
+ # @return [String] ID of the schedule.
12
+ attr_reader :id
13
+
14
+ # @!visibility private
15
+ def initialize(client:, id:)
16
+ @client = client
17
+ @id = id
18
+ end
19
+
20
+ # Backfill the schedule by going through the specified time periods as if they passed right now.
21
+ #
22
+ # @param backfills [Array<Schedule::Backfill>] Backfill periods.
23
+ # @param rpc_options [RPCOptions, nil] Advanced RPC options.
24
+ #
25
+ # @raise [Error::RPCError] RPC error from call.
26
+ def backfill(
27
+ *backfills,
28
+ rpc_options: nil
29
+ )
30
+ raise ArgumentError, 'At least one backfill required' if backfills.empty?
31
+
32
+ @client._impl.backfill_schedule(Interceptor::BackfillScheduleInput.new(
33
+ id:,
34
+ backfills:,
35
+ rpc_options:
36
+ ))
37
+ end
38
+
39
+ # Delete this schedule.
40
+ #
41
+ # @param rpc_options [RPCOptions, nil] Advanced RPC options.
42
+ #
43
+ # @raise [Error::RPCError] RPC error from call.
44
+ def delete(rpc_options: nil)
45
+ @client._impl.delete_schedule(Interceptor::DeleteScheduleInput.new(
46
+ id:,
47
+ rpc_options:
48
+ ))
49
+ end
50
+
51
+ # Fetch this schedule's description.
52
+ #
53
+ # @param rpc_options [RPCOptions, nil] Advanced RPC options.
54
+ #
55
+ # @return [Schedule::Description] Schedule description.
56
+ # @raise [Error::RPCError] RPC error from call.
57
+ def describe(rpc_options: nil)
58
+ @client._impl.describe_schedule(Interceptor::DescribeScheduleInput.new(
59
+ id:,
60
+ rpc_options:
61
+ ))
62
+ end
63
+
64
+ # Pause the schedule and set a note.
65
+ #
66
+ # @param note [String] Note to set on the schedule.
67
+ # @param rpc_options [RPCOptions, nil] Advanced RPC options.
68
+ #
69
+ # @raise [Error::RPCError] RPC error from call.
70
+ def pause(note: 'Paused via Ruby SDK', rpc_options: nil)
71
+ @client._impl.pause_schedule(Interceptor::PauseScheduleInput.new(
72
+ id:,
73
+ note:,
74
+ rpc_options:
75
+ ))
76
+ end
77
+
78
+ # Trigger an action on this schedule to happen immediately.
79
+ #
80
+ # @param overlap [Schedule::OverlapPolicy, nil] If set, overrides the schedule's overlap policy.
81
+ # @param rpc_options [RPCOptions, nil] Advanced RPC options.
82
+ #
83
+ # @raise [Error::RPCError] RPC error from call.
84
+ def trigger(overlap: nil, rpc_options: nil)
85
+ @client._impl.trigger_schedule(Interceptor::TriggerScheduleInput.new(
86
+ id:,
87
+ overlap:,
88
+ rpc_options:
89
+ ))
90
+ end
91
+
92
+ # Unpause the schedule and set a note.
93
+ #
94
+ # @param note [String] Note to set on the schedule.
95
+ # @param rpc_options [RPCOptions, nil] Advanced RPC options.
96
+ #
97
+ # @raise [Error::RPCError] RPC error from call.
98
+ def unpause(note: 'Unpaused via Ruby SDK', rpc_options: nil)
99
+ @client._impl.unpause_schedule(Interceptor::UnpauseScheduleInput.new(
100
+ id:,
101
+ note:,
102
+ rpc_options:
103
+ ))
104
+ end
105
+
106
+ # Update a schedule using a callback to build the update from the description.
107
+ #
108
+ # NOTE: In future versions, the callback may be invoked multiple times in a conflict-resolution loop.
109
+ #
110
+ # @param rpc_options [RPCOptions, nil] Advanced RPC options.
111
+ # @yield Block called to obtain the update.
112
+ # @yieldparam [Schedule::Update::Input] Parameter to the block that contains a description with the schedule to be
113
+ # updated.
114
+ # @yieldreturn [Schedule::Update, nil] The update to apply, or `nil` to not perform an update.
115
+ #
116
+ # @raise [Error::RPCError] RPC error from call.
117
+ def update(rpc_options: nil, &updater)
118
+ @client._impl.update_schedule(Interceptor::UpdateScheduleInput.new(
119
+ id:,
120
+ updater:,
121
+ rpc_options:
122
+ ))
123
+ end
124
+ end
125
+ end
126
+ end
@@ -15,17 +15,18 @@ module Temporalio
15
15
  # @!visibility private
16
16
  def initialize(raw_info, data_converter)
17
17
  @raw_info = raw_info
18
- @data_converter = data_converter
18
+ @memo = Internal::ProtoUtils::LazyMemo.new(raw_info.memo, data_converter)
19
+ @search_attributes = Internal::ProtoUtils::LazySearchAttributes.new(raw_info.search_attributes)
19
20
  end
20
21
 
21
22
  # @return [Time, nil] When the workflow was closed if closed.
22
23
  def close_time
23
- @raw_info.close_time&.to_time
24
+ Internal::ProtoUtils.timestamp_to_time(@raw_info.close_time)
24
25
  end
25
26
 
26
27
  # @return [Time, nil] When this workflow run started or should start.
27
28
  def execution_time
28
- @raw_info.execution_time&.to_time
29
+ Internal::ProtoUtils.timestamp_to_time(@raw_info.execution_time)
29
30
  end
30
31
 
31
32
  # @return [Integer] Number of events in the history.
@@ -40,8 +41,7 @@ module Temporalio
40
41
 
41
42
  # @return [Hash<String, Object>, nil] Memo for the workflow.
42
43
  def memo
43
- @memo = Internal::ProtoUtils.memo_from_proto(@raw_info.memo, @data_converter) unless defined?(@memo)
44
- @memo
44
+ @memo.get
45
45
  end
46
46
 
47
47
  # @return [String, nil] ID for the parent workflow if this was started as a child.
@@ -61,15 +61,12 @@ module Temporalio
61
61
 
62
62
  # @return [SearchAttributes, nil] Current set of search attributes if any.
63
63
  def search_attributes
64
- unless defined?(@search_attributes)
65
- @search_attributes = SearchAttributes.from_proto(@raw_info.search_attributes)
66
- end
67
- @search_attributes
64
+ @search_attributes.get
68
65
  end
69
66
 
70
67
  # @return [Time] When the workflow was created.
71
68
  def start_time
72
- @raw_info.start_time.to_time
69
+ Internal::ProtoUtils.timestamp_to_time(@raw_info.start_time) || raise # Never nil
73
70
  end
74
71
 
75
72
  # @return [WorkflowExecutionStatus] Status for the workflow.
@@ -64,19 +64,14 @@ module Temporalio
64
64
  #
65
65
  # @param follow_runs [Boolean] If +true+, workflow runs will be continually fetched across retries and continue as
66
66
  # new until the latest one is found. If +false+, the first result is used.
67
- # @param rpc_metadata [Hash<String, String>, nil] Headers to include on the RPC call.
68
- # @param rpc_timeout [Float, nil] Number of seconds before timeout.
67
+ # @param rpc_options [RPCOptions, nil] Advanced RPC options.
69
68
  #
70
69
  # @return [Object] Result of the workflow after being converted by the data converter.
71
70
  #
72
71
  # @raise [Error::WorkflowFailedError] Workflow failed with +cause+ as the cause.
73
72
  # @raise [Error::WorkflowContinuedAsNewError] Workflow continued as new and +follow_runs+ is +false+.
74
73
  # @raise [Error::RPCError] RPC error from call.
75
- def result(
76
- follow_runs: true,
77
- rpc_metadata: nil,
78
- rpc_timeout: nil
79
- )
74
+ def result(follow_runs: true, rpc_options: nil)
80
75
  # Wait on the close event, following as needed
81
76
  hist_run_id = result_run_id
82
77
  loop do
@@ -86,8 +81,7 @@ module Temporalio
86
81
  event_filter_type: Api::Enums::V1::HistoryEventFilterType::HISTORY_EVENT_FILTER_TYPE_CLOSE_EVENT,
87
82
  skip_archival: true,
88
83
  specific_run_id: hist_run_id,
89
- rpc_metadata:,
90
- rpc_timeout:
84
+ rpc_options:
91
85
  ).next
92
86
 
93
87
  # Check each close type'
@@ -106,13 +100,13 @@ module Temporalio
106
100
  raise Error::WorkflowFailedError.new, cause: @client.data_converter.from_failure(attrs.failure)
107
101
  when :EVENT_TYPE_WORKFLOW_EXECUTION_CANCELED
108
102
  attrs = event.workflow_execution_canceled_event_attributes
109
- raise Error::WorkflowFailedError.new, cause: Error::CanceledError.new(
103
+ raise Error::WorkflowFailedError.new, 'Workflow execution canceled', cause: Error::CanceledError.new(
110
104
  'Workflow execution canceled',
111
105
  details: @client.data_converter.from_payloads(attrs&.details)
112
106
  )
113
107
  when :EVENT_TYPE_WORKFLOW_EXECUTION_TERMINATED
114
108
  attrs = event.workflow_execution_terminated_event_attributes
115
- raise Error::WorkflowFailedError.new, cause: Error::TerminatedError.new(
109
+ raise Error::WorkflowFailedError.new, 'Workflow execution terminated', cause: Error::TerminatedError.new(
116
110
  Internal::ProtoUtils.string_or(attrs.reason, 'Workflow execution terminated'),
117
111
  details: @client.data_converter.from_payloads(attrs&.details)
118
112
  )
@@ -121,7 +115,7 @@ module Temporalio
121
115
  hist_run_id = attrs.new_execution_run_id
122
116
  next if follow_runs && hist_run_id && !hist_run_id.empty?
123
117
 
124
- raise Error::WorkflowFailedError.new, cause: Error::TimeoutError.new(
118
+ raise Error::WorkflowFailedError.new, 'Workflow execution timed out', cause: Error::TimeoutError.new(
125
119
  'Workflow execution timed out',
126
120
  type: Api::Enums::V1::TimeoutType::TIMEOUT_TYPE_START_TO_CLOSE,
127
121
  last_heartbeat_details: []
@@ -142,8 +136,7 @@ module Temporalio
142
136
  # Get workflow details. This will get details for the {run_id} if present. To use a different run ID, create a new
143
137
  # handle via {Client.workflow_handle}.
144
138
  #
145
- # @param rpc_metadata [Hash<String, String>, nil] Headers to include on the RPC call.
146
- # @param rpc_timeout [Float, nil] Number of seconds before timeout.
139
+ # @param rpc_options [RPCOptions, nil] Advanced RPC options.
147
140
  #
148
141
  # @return [WorkflowExecution::Description] Workflow description.
149
142
  #
@@ -151,15 +144,11 @@ module Temporalio
151
144
  #
152
145
  # @note Handles created as a result of {Client.start_workflow} will describe the latest workflow with the same
153
146
  # workflow ID even if it is unrelated to the started workflow.
154
- def describe(
155
- rpc_metadata: nil,
156
- rpc_timeout: nil
157
- )
147
+ def describe(rpc_options: nil)
158
148
  @client._impl.describe_workflow(Interceptor::DescribeWorkflowInput.new(
159
149
  workflow_id: id,
160
150
  run_id:,
161
- rpc_metadata:,
162
- rpc_timeout:
151
+ rpc_options:
163
152
  ))
164
153
  end
165
154
 
@@ -167,8 +156,7 @@ module Temporalio
167
156
  #
168
157
  # @param event_filter_type [Api::Enums::V1::HistoryEventFilterType] Types of events to fetch.
169
158
  # @param skip_archival [Boolean] Whether to skip archival.
170
- # @param rpc_metadata [Hash<String, String>, nil] Headers to include on the RPC call.
171
- # @param rpc_timeout [Float, nil] Number of seconds before timeout.
159
+ # @param rpc_options [RPCOptions, nil] Advanced RPC options.
172
160
  #
173
161
  # @return [WorkflowHistory] Workflow history.
174
162
  #
@@ -176,15 +164,13 @@ module Temporalio
176
164
  def fetch_history(
177
165
  event_filter_type: Api::Enums::V1::HistoryEventFilterType::HISTORY_EVENT_FILTER_TYPE_ALL_EVENT,
178
166
  skip_archival: false,
179
- rpc_metadata: nil,
180
- rpc_timeout: nil
167
+ rpc_options: nil
181
168
  )
182
169
  WorkflowHistory.new(
183
170
  fetch_history_events(
184
171
  event_filter_type:,
185
172
  skip_archival:,
186
- rpc_metadata:,
187
- rpc_timeout:
173
+ rpc_options:
188
174
  ).to_a
189
175
  )
190
176
  end
@@ -199,8 +185,7 @@ module Temporalio
199
185
  # @param skip_archival [Boolean] Whether to skip archival.
200
186
  # @param specific_run_id [String, nil] Run ID to fetch events for. Default is the {run_id}. Most users will not
201
187
  # need to set this and instead use the one on the class.
202
- # @param rpc_metadata [Hash<String, String>, nil] Headers to include on the RPC call.
203
- # @param rpc_timeout [Float, nil] Number of seconds before timeout.
188
+ # @param rpc_options [RPCOptions, nil] Advanced RPC options.
204
189
  #
205
190
  # @return [Enumerator<Api::History::V1::HistoryEvent>] Enumerable events.
206
191
  #
@@ -210,8 +195,7 @@ module Temporalio
210
195
  event_filter_type: Api::Enums::V1::HistoryEventFilterType::HISTORY_EVENT_FILTER_TYPE_ALL_EVENT,
211
196
  skip_archival: false,
212
197
  specific_run_id: run_id,
213
- rpc_metadata: nil,
214
- rpc_timeout: nil
198
+ rpc_options: nil
215
199
  )
216
200
  @client._impl.fetch_workflow_history_events(Interceptor::FetchWorkflowHistoryEventsInput.new(
217
201
  workflow_id: id,
@@ -219,48 +203,39 @@ module Temporalio
219
203
  wait_new_event:,
220
204
  event_filter_type:,
221
205
  skip_archival:,
222
- rpc_metadata:,
223
- rpc_timeout:
206
+ rpc_options:
224
207
  ))
225
208
  end
226
209
 
227
210
  # Send a signal to the workflow. This will signal for {run_id} if present. To use a different run ID, create a new
228
211
  # handle via {Client.workflow_handle}.
229
212
  #
230
- # @param signal [String] Signal name.
213
+ # @param signal [Workflow::Definition::Signal, Symbol, String] Signal definition or name.
231
214
  # @param args [Array<Object>] Signal arguments.
232
- # @param rpc_metadata [Hash<String, String>, nil] Headers to include on the RPC call.
233
- # @param rpc_timeout [Float, nil] Number of seconds before timeout.
215
+ # @param rpc_options [RPCOptions, nil] Advanced RPC options.
234
216
  #
235
217
  # @raise [Error::RPCError] RPC error from call.
236
218
  #
237
219
  # @note Handles created as a result of {Client.start_workflow} will signal the latest workflow with the same
238
220
  # workflow ID even if it is unrelated to the started workflow.
239
- def signal(
240
- signal,
241
- *args,
242
- rpc_metadata: nil,
243
- rpc_timeout: nil
244
- )
221
+ def signal(signal, *args, rpc_options: nil)
245
222
  @client._impl.signal_workflow(Interceptor::SignalWorkflowInput.new(
246
223
  workflow_id: id,
247
224
  run_id:,
248
225
  signal:,
249
226
  args:,
250
227
  headers: {},
251
- rpc_metadata:,
252
- rpc_timeout:
228
+ rpc_options:
253
229
  ))
254
230
  end
255
231
 
256
232
  # Query the workflow. This will query for {run_id} if present. To use a different run ID, create a new handle via
257
233
  # {Client.workflow_handle}.
258
234
  #
259
- # @param query [String] Query name.
235
+ # @param query [Workflow::Definition::Query, Symbol, String] Query definition or name.
260
236
  # @param args [Array<Object>] Query arguments.
261
237
  # @param reject_condition [WorkflowQueryRejectCondition, nil] Condition for rejecting the query.
262
- # @param rpc_metadata [Hash<String, String>, nil] Headers to include on the RPC call.
263
- # @param rpc_timeout [Float, nil] Number of seconds before timeout.
238
+ # @param rpc_options [RPCOptions, nil] Advanced RPC options.
264
239
  #
265
240
  # @return [Object, nil] Query result.
266
241
  #
@@ -274,8 +249,7 @@ module Temporalio
274
249
  query,
275
250
  *args,
276
251
  reject_condition: @client.options.default_workflow_query_reject_condition,
277
- rpc_metadata: nil,
278
- rpc_timeout: nil
252
+ rpc_options: nil
279
253
  )
280
254
  @client._impl.query_workflow(Interceptor::QueryWorkflowInput.new(
281
255
  workflow_id: id,
@@ -284,21 +258,19 @@ module Temporalio
284
258
  args:,
285
259
  reject_condition:,
286
260
  headers: {},
287
- rpc_metadata:,
288
- rpc_timeout:
261
+ rpc_options:
289
262
  ))
290
263
  end
291
264
 
292
265
  # Send an update request to the workflow and return a handle to it. This will target the workflow with {run_id} if
293
266
  # present. To use a different run ID, create a new handle via {Client.workflow_handle}.
294
267
  #
295
- # @param update [String] Update name.
268
+ # @param update [Workflow::Definition::Update, Symbol, String] Update definition or name.
296
269
  # @param args [Array<Object>] Update arguments.
297
270
  # @param wait_for_stage [WorkflowUpdateWaitStage] Required stage to wait until returning. ADMITTED is not
298
271
  # currently supported. See https://docs.temporal.io/workflows#update for more details.
299
272
  # @param id [String] ID of the update.
300
- # @param rpc_metadata [Hash<String, String>, nil] Headers to include on the RPC call.
301
- # @param rpc_timeout [Float, nil] Number of seconds before timeout.
273
+ # @param rpc_options [RPCOptions, nil] Advanced RPC options.
302
274
  #
303
275
  # @return [WorkflowUpdateHandle] The update handle.
304
276
  #
@@ -308,14 +280,12 @@ module Temporalio
308
280
  #
309
281
  # @note Handles created as a result of {Client.start_workflow} will send updates the latest workflow with the same
310
282
  # workflow ID even if it is unrelated to the started workflow.
311
- # @note WARNING: This API is experimental.
312
283
  def start_update(
313
284
  update,
314
285
  *args,
315
286
  wait_for_stage:,
316
287
  id: SecureRandom.uuid,
317
- rpc_metadata: nil,
318
- rpc_timeout: nil
288
+ rpc_options: nil
319
289
  )
320
290
  @client._impl.start_workflow_update(Interceptor::StartWorkflowUpdateInput.new(
321
291
  workflow_id: self.id,
@@ -325,19 +295,17 @@ module Temporalio
325
295
  args:,
326
296
  wait_for_stage:,
327
297
  headers: {},
328
- rpc_metadata:,
329
- rpc_timeout:
298
+ rpc_options:
330
299
  ))
331
300
  end
332
301
 
333
302
  # Send an update request to the workflow and wait for it to complete. This will target the workflow with {run_id}
334
303
  # if present. To use a different run ID, create a new handle via {Client.workflow_handle}.
335
304
  #
336
- # @param update [String] Update name.
305
+ # @param update [Workflow::Definition::Update, Symbol, String] Update definition or name.
337
306
  # @param args [Array<Object>] Update arguments.
338
307
  # @param id [String] ID of the update.
339
- # @param rpc_metadata [Hash<String, String>, nil] Headers to include on the RPC call.
340
- # @param rpc_timeout [Float, nil] Number of seconds before timeout.
308
+ # @param rpc_options [RPCOptions, nil] Advanced RPC options.
341
309
  #
342
310
  # @return [Object, nil] Update result.
343
311
  #
@@ -348,21 +316,13 @@ module Temporalio
348
316
  #
349
317
  # @note Handles created as a result of {Client.start_workflow} will send updates the latest workflow with the same
350
318
  # workflow ID even if it is unrelated to the started workflow.
351
- # @note WARNING: This API is experimental.
352
- def execute_update(
353
- update,
354
- *args,
355
- id: SecureRandom.uuid,
356
- rpc_metadata: nil,
357
- rpc_timeout: nil
358
- )
319
+ def execute_update(update, *args, id: SecureRandom.uuid, rpc_options: nil)
359
320
  start_update(
360
321
  update,
361
322
  *args,
362
323
  wait_for_stage: WorkflowUpdateWaitStage::COMPLETED,
363
324
  id:,
364
- rpc_metadata:,
365
- rpc_timeout:
325
+ rpc_options:
366
326
  ).result
367
327
  end
368
328
 
@@ -373,12 +333,7 @@ module Temporalio
373
333
  # users will not need to set this and instead use the one on the class.
374
334
  #
375
335
  # @return [WorkflowUpdateHandle] The update handle.
376
- #
377
- # @note WARNING: This API is experimental.
378
- def update_handle(
379
- id,
380
- specific_run_id: run_id
381
- )
336
+ def update_handle(id, specific_run_id: run_id)
382
337
  WorkflowUpdateHandle.new(
383
338
  client: @client,
384
339
  id:,
@@ -392,23 +347,18 @@ module Temporalio
392
347
  # run chain starting from {first_execution_run_id} if present. To create handles with these values, use
393
348
  # {Client.workflow_handle}.
394
349
  #
395
- # @param rpc_metadata [Hash<String, String>, nil] Headers to include on the RPC call.
396
- # @param rpc_timeout [Float, nil] Number of seconds before timeout.
350
+ # @param rpc_options [RPCOptions, nil] Advanced RPC options.
397
351
  #
398
352
  # @raise [Error::RPCError] RPC error from call.
399
353
  #
400
354
  # @note Handles created as a result of signal with start will cancel the latest workflow with the same workflow ID
401
355
  # even if it is unrelated to the started workflow.
402
- def cancel(
403
- rpc_metadata: nil,
404
- rpc_timeout: nil
405
- )
356
+ def cancel(rpc_options: nil)
406
357
  @client._impl.cancel_workflow(Interceptor::CancelWorkflowInput.new(
407
358
  workflow_id: id,
408
359
  run_id:,
409
360
  first_execution_run_id:,
410
- rpc_metadata:,
411
- rpc_timeout:
361
+ rpc_options:
412
362
  ))
413
363
  end
414
364
 
@@ -418,27 +368,20 @@ module Temporalio
418
368
  #
419
369
  # @param reason [String, nil] Reason for the termination.
420
370
  # @param details [Array<Object>] Details to store on the termination.
421
- # @param rpc_metadata [Hash<String, String>, nil] Headers to include on the RPC call.
422
- # @param rpc_timeout [Float, nil] Number of seconds before timeout.
371
+ # @param rpc_options [RPCOptions, nil] Advanced RPC options.
423
372
  #
424
373
  # @raise [Error::RPCError] RPC error from call.
425
374
  #
426
375
  # @note Handles created as a result of signal with start will terminate the latest workflow with the same workflow
427
376
  # ID even if it is unrelated to the started workflow.
428
- def terminate(
429
- reason = nil,
430
- details: [],
431
- rpc_metadata: nil,
432
- rpc_timeout: nil
433
- )
377
+ def terminate(reason = nil, details: [], rpc_options: nil)
434
378
  @client._impl.terminate_workflow(Interceptor::TerminateWorkflowInput.new(
435
379
  workflow_id: id,
436
380
  run_id:,
437
381
  first_execution_run_id:,
438
382
  reason:,
439
383
  details:,
440
- rpc_metadata:,
441
- rpc_timeout:
384
+ rpc_options:
442
385
  ))
443
386
  end
444
387
  end
@@ -36,8 +36,7 @@ module Temporalio
36
36
  # Wait for and return the result of the update. The result may already be known in which case no network call is
37
37
  # made. Otherwise the result will be polled for until it is returned.
38
38
  #
39
- # @param rpc_metadata [Hash<String, String>, nil] Headers to include on the RPC call.
40
- # @param rpc_timeout [Float, nil] Number of seconds before timeout.
39
+ # @param rpc_options [RPCOptions, nil] Advanced RPC options.
41
40
  #
42
41
  # @return [Object, nil] Update result.
43
42
  #
@@ -45,13 +44,12 @@ module Temporalio
45
44
  # @raise [Error::WorkflowUpdateRPCTimeoutOrCanceledError] This update call timed out or was canceled. This doesn't
46
45
  # mean the update itself was timed out or canceled.
47
46
  # @raise [Error::RPCError] RPC error from call.
48
- def result(rpc_metadata: nil, rpc_timeout: nil)
47
+ def result(rpc_options: nil)
49
48
  @known_outcome ||= @client._impl.poll_workflow_update(Interceptor::PollWorkflowUpdateInput.new(
50
49
  workflow_id:,
51
50
  run_id: workflow_run_id,
52
51
  update_id: id,
53
- rpc_metadata:,
54
- rpc_timeout:
52
+ rpc_options:
55
53
  ))
56
54
 
57
55
  if @known_outcome.failure