hatchet-sdk 0.7.0 → 0.8.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/CHANGELOG.md +8 -0
- data/README.md +45 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/worker_api.rb +3 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/workflow_runs_api.rb +3 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/feature_flag_id.rb +2 -1
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/worker.rb +24 -4
- data/lib/hatchet/concurrency.rb +82 -19
- data/lib/hatchet/contracts/v1/workflows_pb.rb +1 -1
- data/lib/hatchet/version.rb +1 -1
- data/sig/hatchet/concurrency.rbs +12 -2
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2e70af6a8a498aa205cbd60dfeda2777cbdcc66a1b7062605050e2ded013459c
|
|
4
|
+
data.tar.gz: fee0bf38bc650c7c92f1eae39f594732e2433d959a74264ab1f726a4ef9e6dea
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b0e09fdbad439ad82823517f8e568c71d326c93dca0b20ba14fdfbd7d7fadb43a00456db2b0a05b90b3b8d4f9f0d23dc80ec1489eaeeb70b9198ceb371cb5f46
|
|
7
|
+
data.tar.gz: 382c9b1dd855932d272ed724ab0cc04bb0a58e4251bc0a5f1170aad7ab2955b3c33f6d846cb0ff9d2d9e9f50fdc94b60ab845da950fc5c15f3fcd3e07497bd5d
|
data/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,14 @@ All notable changes to Hatchet's Ruby SDK will be documented in this changelog.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.8.0] - 2026-09-02
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- Added support for tenant-scoped shared concurrency strategies: declare a `ConcurrencyExpression` with `is_tenant_scoped: true` and a `name`, and every task declaring the same name (across workflows) consumes the same concurrency limit. Re-declaring a name updates the strategy in place, and tenant-scoped entries mix freely with workflow-scoped entries in one chain.
|
|
13
|
+
- `max_runs` on `ConcurrencyExpression` now accepts an `Integer` or a `String`: a string is a CEL expression over task input computing the max runs for each concurrency group, so different groups (e.g. pricing tiers) can have different limits.
|
|
14
|
+
|
|
15
|
+
|
|
8
16
|
## [0.7.0] - 2026-08-26
|
|
9
17
|
|
|
10
18
|
### Changed
|
data/README.md
CHANGED
|
@@ -10,6 +10,51 @@
|
|
|
10
10
|
|
|
11
11
|
This is the official Ruby SDK for [Hatchet](https://hatchet.run), a distributed, fault-tolerant task queue. The SDK allows you to easily integrate Hatchet's task scheduling and workflow orchestration capabilities into your Ruby applications.
|
|
12
12
|
|
|
13
|
+
<!-- hatchet-agent-docs:start -->
|
|
14
|
+
<!-- Generated by the SDK docs pipeline from frontend/docs/reference-map.json. Do not edit by hand. -->
|
|
15
|
+
|
|
16
|
+
## Documentation for agents
|
|
17
|
+
|
|
18
|
+
The linked pages serve plain markdown for tools and agents. Full docs index: https://docs.hatchet.run/llms.txt
|
|
19
|
+
|
|
20
|
+
Setup and local development:
|
|
21
|
+
|
|
22
|
+
- Quickstart: https://docs.hatchet.run/v1/quickstart.md
|
|
23
|
+
- Running Hatchet locally: https://docs.hatchet.run/v1/running-locally.md
|
|
24
|
+
|
|
25
|
+
Core concepts:
|
|
26
|
+
|
|
27
|
+
- Tasks: https://docs.hatchet.run/v1/tasks.md
|
|
28
|
+
- Workers: https://docs.hatchet.run/v1/workers.md
|
|
29
|
+
- Running tasks: https://docs.hatchet.run/v1/running-your-task.md
|
|
30
|
+
- DAGs: https://docs.hatchet.run/v1/directed-acyclic-graphs.md
|
|
31
|
+
- Durable execution: https://docs.hatchet.run/v1/durable-execution.md
|
|
32
|
+
|
|
33
|
+
Flow control:
|
|
34
|
+
|
|
35
|
+
- Concurrency: https://docs.hatchet.run/v1/concurrency.md
|
|
36
|
+
- Rate limits: https://docs.hatchet.run/v1/rate-limits.md
|
|
37
|
+
- Retries: https://docs.hatchet.run/v1/retry-policies.md
|
|
38
|
+
- Idempotency: https://docs.hatchet.run/v1/idempotency.md
|
|
39
|
+
- CEL expressions: https://docs.hatchet.run/v1/cel-expressions.md
|
|
40
|
+
|
|
41
|
+
Ruby SDK reference (overview: https://docs.hatchet.run/reference/ruby.md):
|
|
42
|
+
|
|
43
|
+
- CEL: https://docs.hatchet.run/reference/ruby/feature-clients/cel.md (guide: https://docs.hatchet.run/v1/cel-expressions.md)
|
|
44
|
+
- Crons: https://docs.hatchet.run/reference/ruby/feature-clients/cron.md (guide: https://docs.hatchet.run/v1/cron-runs.md)
|
|
45
|
+
- Events: https://docs.hatchet.run/reference/ruby/feature-clients/events.md (guide: https://docs.hatchet.run/v1/events.md)
|
|
46
|
+
- Filters: https://docs.hatchet.run/reference/ruby/feature-clients/filters.md (guide: https://docs.hatchet.run/v1/events.md)
|
|
47
|
+
- Logs: https://docs.hatchet.run/reference/ruby/feature-clients/logs.md (guide: https://docs.hatchet.run/v1/logging.md)
|
|
48
|
+
- Metrics: https://docs.hatchet.run/reference/ruby/feature-clients/metrics.md (guide: https://docs.hatchet.run/v1/prometheus-metrics.md)
|
|
49
|
+
- Rate Limits: https://docs.hatchet.run/reference/ruby/feature-clients/rate_limits.md (guide: https://docs.hatchet.run/v1/rate-limits.md)
|
|
50
|
+
- Runs: https://docs.hatchet.run/reference/ruby/feature-clients/runs.md (guide: https://docs.hatchet.run/v1/running-your-task.md)
|
|
51
|
+
- Scheduled Runs: https://docs.hatchet.run/reference/ruby/feature-clients/scheduled.md (guide: https://docs.hatchet.run/v1/scheduled-runs.md)
|
|
52
|
+
- Tenant: https://docs.hatchet.run/reference/ruby/feature-clients/tenant.md
|
|
53
|
+
- Workers: https://docs.hatchet.run/reference/ruby/feature-clients/workers.md (guide: https://docs.hatchet.run/v1/workers.md)
|
|
54
|
+
- Workflows: https://docs.hatchet.run/reference/ruby/feature-clients/workflows.md (guide: https://docs.hatchet.run/v1/tasks.md)
|
|
55
|
+
|
|
56
|
+
<!-- hatchet-agent-docs:end -->
|
|
57
|
+
|
|
13
58
|
## Installation
|
|
14
59
|
|
|
15
60
|
Add this line to your application's Gemfile:
|
|
@@ -98,6 +98,7 @@ module HatchetSdkRest
|
|
|
98
98
|
# @option opts [Integer] :limit The number to limit by
|
|
99
99
|
# @option opts [Array<WorkerStatus>] :statuses Filter by worker status
|
|
100
100
|
# @option opts [Array<String>] :labels Filter by worker labels
|
|
101
|
+
# @option opts [Boolean] :include_operators Whether to include engine-managed operator workers, which are hidden by default
|
|
101
102
|
# @return [WorkerList]
|
|
102
103
|
def worker_list(tenant, opts = {})
|
|
103
104
|
data, _status_code, _headers = worker_list_with_http_info(tenant, opts)
|
|
@@ -112,6 +113,7 @@ module HatchetSdkRest
|
|
|
112
113
|
# @option opts [Integer] :limit The number to limit by
|
|
113
114
|
# @option opts [Array<WorkerStatus>] :statuses Filter by worker status
|
|
114
115
|
# @option opts [Array<String>] :labels Filter by worker labels
|
|
116
|
+
# @option opts [Boolean] :include_operators Whether to include engine-managed operator workers, which are hidden by default
|
|
115
117
|
# @return [Array<(WorkerList, Integer, Hash)>] WorkerList data, response status code and response headers
|
|
116
118
|
def worker_list_with_http_info(tenant, opts = {})
|
|
117
119
|
if @api_client.config.debugging
|
|
@@ -138,6 +140,7 @@ module HatchetSdkRest
|
|
|
138
140
|
query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
|
|
139
141
|
query_params[:'statuses'] = @api_client.build_collection_param(opts[:'statuses'], :multi) if !opts[:'statuses'].nil?
|
|
140
142
|
query_params[:'labels'] = @api_client.build_collection_param(opts[:'labels'], :multi) if !opts[:'labels'].nil?
|
|
143
|
+
query_params[:'includeOperators'] = opts[:'include_operators'] if !opts[:'include_operators'].nil?
|
|
141
144
|
|
|
142
145
|
# header parameters
|
|
143
146
|
header_params = opts[:header_params] || {}
|
|
@@ -358,6 +358,7 @@ module HatchetSdkRest
|
|
|
358
358
|
# Get a workflow run and its metadata to display on the \"detail\" page
|
|
359
359
|
# @param v1_workflow_run [String] The workflow run id to get
|
|
360
360
|
# @param [Hash] opts the optional parameters
|
|
361
|
+
# @option opts [Boolean] :include_orchestrator_events Whether to include the DAG orchestrator's task events, which are hidden by default
|
|
361
362
|
# @return [V1WorkflowRunDetails]
|
|
362
363
|
def v1_workflow_run_get(v1_workflow_run, opts = {})
|
|
363
364
|
data, _status_code, _headers = v1_workflow_run_get_with_http_info(v1_workflow_run, opts)
|
|
@@ -368,6 +369,7 @@ module HatchetSdkRest
|
|
|
368
369
|
# Get a workflow run and its metadata to display on the \"detail\" page
|
|
369
370
|
# @param v1_workflow_run [String] The workflow run id to get
|
|
370
371
|
# @param [Hash] opts the optional parameters
|
|
372
|
+
# @option opts [Boolean] :include_orchestrator_events Whether to include the DAG orchestrator's task events, which are hidden by default
|
|
371
373
|
# @return [Array<(V1WorkflowRunDetails, Integer, Hash)>] V1WorkflowRunDetails data, response status code and response headers
|
|
372
374
|
def v1_workflow_run_get_with_http_info(v1_workflow_run, opts = {})
|
|
373
375
|
if @api_client.config.debugging
|
|
@@ -390,6 +392,7 @@ module HatchetSdkRest
|
|
|
390
392
|
|
|
391
393
|
# query parameters
|
|
392
394
|
query_params = opts[:query_params] || {}
|
|
395
|
+
query_params[:'includeOrchestratorEvents'] = opts[:'include_orchestrator_events'] if !opts[:'include_orchestrator_events'].nil?
|
|
393
396
|
|
|
394
397
|
# header parameters
|
|
395
398
|
header_params = opts[:header_params] || {}
|
|
@@ -18,9 +18,10 @@ module HatchetSdkRest
|
|
|
18
18
|
TENANT_LOG_WORKFLOW_FILTER_ENABLED = "tenant-log-workflow-filter-enabled".freeze
|
|
19
19
|
TRACE_MINIMAP_ENABLED = "trace-minimap-enabled".freeze
|
|
20
20
|
ORGANIZATION_SSO_ENABLED = "organization-sso-enabled".freeze
|
|
21
|
+
OPERATOR_DETAILS_ENABLED = "operator-details-enabled".freeze
|
|
21
22
|
|
|
22
23
|
def self.all_vars
|
|
23
|
-
@all_vars ||= [TENANT_LOG_WORKFLOW_FILTER_ENABLED, TRACE_MINIMAP_ENABLED, ORGANIZATION_SSO_ENABLED].freeze
|
|
24
|
+
@all_vars ||= [TENANT_LOG_WORKFLOW_FILTER_ENABLED, TRACE_MINIMAP_ENABLED, ORGANIZATION_SSO_ENABLED, OPERATOR_DETAILS_ENABLED].freeze
|
|
24
25
|
end
|
|
25
26
|
|
|
26
27
|
# Builds the enum from string
|
|
@@ -60,6 +60,12 @@ module HatchetSdkRest
|
|
|
60
60
|
|
|
61
61
|
attr_accessor :runtime_info
|
|
62
62
|
|
|
63
|
+
# The id of the operator that owns this worker, if it is an engine-managed operator worker.
|
|
64
|
+
attr_accessor :operator_id
|
|
65
|
+
|
|
66
|
+
# The number of durable task runs owned by this operator that are currently evicted while waiting on durable events. Evicted runs hold no slots. Only set for operator workers.
|
|
67
|
+
attr_accessor :evicted_durable_task_count
|
|
68
|
+
|
|
63
69
|
class EnumAttributeValidator
|
|
64
70
|
attr_reader :datatype
|
|
65
71
|
attr_reader :allowable_values
|
|
@@ -100,7 +106,9 @@ module HatchetSdkRest
|
|
|
100
106
|
:'labels' => :'labels',
|
|
101
107
|
:'webhook_url' => :'webhookUrl',
|
|
102
108
|
:'webhook_id' => :'webhookId',
|
|
103
|
-
:'runtime_info' => :'runtimeInfo'
|
|
109
|
+
:'runtime_info' => :'runtimeInfo',
|
|
110
|
+
:'operator_id' => :'operatorId',
|
|
111
|
+
:'evicted_durable_task_count' => :'evictedDurableTaskCount'
|
|
104
112
|
}
|
|
105
113
|
end
|
|
106
114
|
|
|
@@ -132,7 +140,9 @@ module HatchetSdkRest
|
|
|
132
140
|
:'labels' => :'Array<WorkerLabel>',
|
|
133
141
|
:'webhook_url' => :'String',
|
|
134
142
|
:'webhook_id' => :'String',
|
|
135
|
-
:'runtime_info' => :'WorkerRuntimeInfo'
|
|
143
|
+
:'runtime_info' => :'WorkerRuntimeInfo',
|
|
144
|
+
:'operator_id' => :'String',
|
|
145
|
+
:'evicted_durable_task_count' => :'Integer'
|
|
136
146
|
}
|
|
137
147
|
end
|
|
138
148
|
|
|
@@ -239,6 +249,14 @@ module HatchetSdkRest
|
|
|
239
249
|
if attributes.key?(:'runtime_info')
|
|
240
250
|
self.runtime_info = attributes[:'runtime_info']
|
|
241
251
|
end
|
|
252
|
+
|
|
253
|
+
if attributes.key?(:'operator_id')
|
|
254
|
+
self.operator_id = attributes[:'operator_id']
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
if attributes.key?(:'evicted_durable_task_count')
|
|
258
|
+
self.evicted_durable_task_count = attributes[:'evicted_durable_task_count']
|
|
259
|
+
end
|
|
242
260
|
end
|
|
243
261
|
|
|
244
262
|
# Show invalid properties with the reasons. Usually used together with valid?
|
|
@@ -349,7 +367,9 @@ module HatchetSdkRest
|
|
|
349
367
|
labels == o.labels &&
|
|
350
368
|
webhook_url == o.webhook_url &&
|
|
351
369
|
webhook_id == o.webhook_id &&
|
|
352
|
-
runtime_info == o.runtime_info
|
|
370
|
+
runtime_info == o.runtime_info &&
|
|
371
|
+
operator_id == o.operator_id &&
|
|
372
|
+
evicted_durable_task_count == o.evicted_durable_task_count
|
|
353
373
|
end
|
|
354
374
|
|
|
355
375
|
# @see the `==` method
|
|
@@ -361,7 +381,7 @@ module HatchetSdkRest
|
|
|
361
381
|
# Calculates hash code according to all attributes.
|
|
362
382
|
# @return [Integer] Hash code
|
|
363
383
|
def hash
|
|
364
|
-
[metadata, name, type, last_heartbeat_at, last_listener_established, actions, registered_workflows, slots, recent_step_runs, status, slot_config, dispatcher_id, labels, webhook_url, webhook_id, runtime_info].hash
|
|
384
|
+
[metadata, name, type, last_heartbeat_at, last_listener_established, actions, registered_workflows, slots, recent_step_runs, status, slot_config, dispatcher_id, labels, webhook_url, webhook_id, runtime_info, operator_id, evicted_durable_task_count].hash
|
|
365
385
|
end
|
|
366
386
|
|
|
367
387
|
# Builds the object from hash
|
data/lib/hatchet/concurrency.rb
CHANGED
|
@@ -11,6 +11,33 @@ module Hatchet
|
|
|
11
11
|
CANCEL_QUEUED_EXCEPT_OLDEST = :cancel_queued_except_oldest
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
+
# Shared serialization helpers for concurrency entries
|
|
15
|
+
# @api private
|
|
16
|
+
module ConcurrencyProto
|
|
17
|
+
# Map Ruby symbol to v1 proto enum symbol
|
|
18
|
+
LIMIT_STRATEGY_MAP = {
|
|
19
|
+
cancel_in_progress: :CANCEL_IN_PROGRESS,
|
|
20
|
+
cancel_newest: :CANCEL_NEWEST,
|
|
21
|
+
group_round_robin: :GROUP_ROUND_ROBIN,
|
|
22
|
+
queue: :QUEUE_NEWEST,
|
|
23
|
+
drop_newest: :DROP_NEWEST,
|
|
24
|
+
cancel_queued_except_newest: :CANCEL_QUEUED_EXCEPT_NEWEST,
|
|
25
|
+
cancel_queued_except_oldest: :CANCEL_QUEUED_EXCEPT_OLDEST,
|
|
26
|
+
}.freeze
|
|
27
|
+
|
|
28
|
+
# Split the max_runs union onto the proto's static/expression field pair. A String is
|
|
29
|
+
# a CEL expression over task input; the static field then carries the default of 1,
|
|
30
|
+
# which only governs slots created before the expression existed (each new task's
|
|
31
|
+
# slot carries its own evaluated value).
|
|
32
|
+
# @param max_runs [Integer, String]
|
|
33
|
+
# @return [Array(Integer, String, nil)]
|
|
34
|
+
def self.split_max_runs(max_runs)
|
|
35
|
+
return [1, max_runs] if max_runs.is_a?(String)
|
|
36
|
+
|
|
37
|
+
[max_runs, nil]
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
14
41
|
# Defines a concurrency expression for workflow or task-level concurrency control
|
|
15
42
|
#
|
|
16
43
|
# @example Workflow-level concurrency
|
|
@@ -20,6 +47,22 @@ module Hatchet
|
|
|
20
47
|
# limit_strategy: :cancel_in_progress
|
|
21
48
|
# )
|
|
22
49
|
#
|
|
50
|
+
# @example Dynamic per-group limits via a CEL expression
|
|
51
|
+
# Hatchet::ConcurrencyExpression.new(
|
|
52
|
+
# expression: "input.tier",
|
|
53
|
+
# max_runs: "input.tier == 'premium' ? 10 : 1",
|
|
54
|
+
# limit_strategy: :group_round_robin
|
|
55
|
+
# )
|
|
56
|
+
#
|
|
57
|
+
# @example Tenant-scoped, shared across workflows
|
|
58
|
+
# Hatchet::ConcurrencyExpression.new(
|
|
59
|
+
# expression: "input.group",
|
|
60
|
+
# max_runs: 1,
|
|
61
|
+
# limit_strategy: :group_round_robin,
|
|
62
|
+
# name: "tenant-wide-limit",
|
|
63
|
+
# is_tenant_scoped: true
|
|
64
|
+
# )
|
|
65
|
+
#
|
|
23
66
|
# @example Task-level concurrency with multiple keys
|
|
24
67
|
# [
|
|
25
68
|
# Hatchet::ConcurrencyExpression.new(expression: "input.digit", max_runs: 8, limit_strategy: :group_round_robin),
|
|
@@ -29,52 +72,72 @@ module Hatchet
|
|
|
29
72
|
# @return [String] CEL expression evaluated against the workflow input
|
|
30
73
|
attr_reader :expression
|
|
31
74
|
|
|
32
|
-
# @return [Integer] Maximum concurrent runs for this key
|
|
75
|
+
# @return [Integer, String] Maximum concurrent runs for this key: a fixed number, or
|
|
76
|
+
# a CEL expression over task input computing the max runs for that task's
|
|
77
|
+
# concurrency group. With an expression, a group's effective limit is the value
|
|
78
|
+
# from its most recently created task.
|
|
33
79
|
attr_reader :max_runs
|
|
34
80
|
|
|
35
81
|
# @return [Symbol] Strategy when limit is exceeded (:cancel_in_progress, :cancel_newest, :group_round_robin, :queue, :cancel_queued_except_newest, :cancel_queued_except_oldest)
|
|
36
82
|
attr_reader :limit_strategy
|
|
37
83
|
|
|
84
|
+
# @return [String, nil] Unique (per tenant) strategy name; required when tenant-scoped
|
|
85
|
+
attr_reader :name
|
|
86
|
+
|
|
87
|
+
# @return [Boolean] When true, the entry defines (or updates in place) a tenant-scoped
|
|
88
|
+
# strategy shared across workflows, keyed by name: every task declaring the same
|
|
89
|
+
# name consumes the same concurrency limit. The position in the concurrency list is
|
|
90
|
+
# the chain order, and chains sharing tenant-scoped strategies must order them
|
|
91
|
+
# consistently.
|
|
92
|
+
attr_reader :is_tenant_scoped
|
|
93
|
+
|
|
38
94
|
# @param expression [String] CEL expression evaluated against input
|
|
39
|
-
# @param max_runs [Integer] Maximum concurrent runs
|
|
95
|
+
# @param max_runs [Integer, String] Maximum concurrent runs, or a CEL expression computing them per group
|
|
40
96
|
# @param limit_strategy [Symbol] Strategy when limit is reached
|
|
41
|
-
|
|
97
|
+
# @param name [String, nil] Unique (per tenant) strategy name; required when tenant-scoped
|
|
98
|
+
# @param is_tenant_scoped [Boolean] Share this strategy across workflows, keyed by name
|
|
99
|
+
def initialize(expression:, max_runs: 1, limit_strategy: :cancel_in_progress, name: nil, is_tenant_scoped: false)
|
|
100
|
+
raise ArgumentError, "a name is required for tenant-scoped concurrency" if is_tenant_scoped && (name.nil? || name.empty?)
|
|
101
|
+
|
|
42
102
|
@expression = expression
|
|
43
103
|
@max_runs = max_runs
|
|
44
104
|
@limit_strategy = limit_strategy
|
|
105
|
+
@name = name
|
|
106
|
+
@is_tenant_scoped = is_tenant_scoped
|
|
45
107
|
end
|
|
46
108
|
|
|
109
|
+
# @deprecated kept for backwards compatibility; use {ConcurrencyProto::LIMIT_STRATEGY_MAP}
|
|
110
|
+
LIMIT_STRATEGY_MAP = ConcurrencyProto::LIMIT_STRATEGY_MAP
|
|
111
|
+
|
|
47
112
|
# Convert to a hash for API serialization
|
|
48
113
|
# @return [Hash]
|
|
49
114
|
def to_h
|
|
50
|
-
{
|
|
115
|
+
h = {
|
|
51
116
|
expression: @expression,
|
|
52
117
|
max_runs: @max_runs,
|
|
53
118
|
limit_strategy: @limit_strategy.to_s.upcase,
|
|
54
119
|
}
|
|
120
|
+
h[:name] = @name if @name
|
|
121
|
+
h[:is_tenant_scoped] = true if @is_tenant_scoped
|
|
122
|
+
h
|
|
55
123
|
end
|
|
56
124
|
|
|
57
|
-
# Map Ruby symbol to v1 proto enum symbol
|
|
58
|
-
LIMIT_STRATEGY_MAP = {
|
|
59
|
-
cancel_in_progress: :CANCEL_IN_PROGRESS,
|
|
60
|
-
cancel_newest: :CANCEL_NEWEST,
|
|
61
|
-
group_round_robin: :GROUP_ROUND_ROBIN,
|
|
62
|
-
queue: :QUEUE_NEWEST,
|
|
63
|
-
drop_newest: :DROP_NEWEST,
|
|
64
|
-
cancel_queued_except_newest: :CANCEL_QUEUED_EXCEPT_NEWEST,
|
|
65
|
-
cancel_queued_except_oldest: :CANCEL_QUEUED_EXCEPT_OLDEST,
|
|
66
|
-
}.freeze
|
|
67
|
-
|
|
68
125
|
# Convert to a V1::Concurrency protobuf message
|
|
69
126
|
# @return [V1::Concurrency]
|
|
70
127
|
def to_proto
|
|
71
|
-
proto_strategy = LIMIT_STRATEGY_MAP[@limit_strategy] || :CANCEL_IN_PROGRESS
|
|
128
|
+
proto_strategy = ConcurrencyProto::LIMIT_STRATEGY_MAP[@limit_strategy] || :CANCEL_IN_PROGRESS
|
|
129
|
+
static_max, max_runs_expression = ConcurrencyProto.split_max_runs(@max_runs)
|
|
72
130
|
|
|
73
|
-
|
|
131
|
+
args = {
|
|
74
132
|
expression: @expression,
|
|
75
|
-
max_runs:
|
|
133
|
+
max_runs: static_max,
|
|
76
134
|
limit_strategy: proto_strategy,
|
|
77
|
-
|
|
135
|
+
}
|
|
136
|
+
args[:max_runs_expression] = max_runs_expression if max_runs_expression
|
|
137
|
+
args[:name] = @name if @name
|
|
138
|
+
args[:is_tenant_scoped] = true if @is_tenant_scoped
|
|
139
|
+
|
|
140
|
+
::V1::Concurrency.new(**args)
|
|
78
141
|
end
|
|
79
142
|
end
|
|
80
143
|
end
|
|
@@ -9,7 +9,7 @@ require 'v1/shared/condition_pb'
|
|
|
9
9
|
require 'v1/shared/trigger_pb'
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
descriptor_data = "\n\x12v1/workflows.proto\x12\x02v1\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x19v1/shared/condition.proto\x1a\x17v1/shared/trigger.proto\"[\n\x12\x43\x61ncelTasksRequest\x12\x14\n\x0c\x65xternal_ids\x18\x01 \x03(\t\x12$\n\x06\x66ilter\x18\x02 \x01(\x0b\x32\x0f.v1.TasksFilterH\x00\x88\x01\x01\x42\t\n\x07_filter\"[\n\x12ReplayTasksRequest\x12\x14\n\x0c\x65xternal_ids\x18\x01 \x03(\t\x12$\n\x06\x66ilter\x18\x02 \x01(\x0b\x32\x0f.v1.TasksFilterH\x00\x88\x01\x01\x42\t\n\x07_filter\"\xb7\x01\n\x0bTasksFilter\x12\x10\n\x08statuses\x18\x01 \x03(\t\x12)\n\x05since\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\x05until\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00\x88\x01\x01\x12\x14\n\x0cworkflow_ids\x18\x04 \x03(\t\x12\x1b\n\x13\x61\x64\x64itional_metadata\x18\x05 \x03(\tB\x08\n\x06_until\".\n\x13\x43\x61ncelTasksResponse\x12\x17\n\x0f\x63\x61ncelled_tasks\x18\x01 \x03(\t\"-\n\x13ReplayTasksResponse\x12\x16\n\x0ereplayed_tasks\x18\x01 \x03(\t\"\xae\x02\n\x19TriggerWorkflowRunRequest\x12\x15\n\rworkflow_name\x18\x01 \x01(\t\x12\r\n\x05input\x18\x02 \x01(\x0c\x12\x1b\n\x13\x61\x64\x64itional_metadata\x18\x03 \x01(\x0c\x12\x15\n\x08priority\x18\x04 \x01(\x05H\x00\x88\x01\x01\x12U\n\x15\x64\x65sired_worker_labels\x18\x05 \x03(\x0b\x32\x36.v1.TriggerWorkflowRunRequest.DesiredWorkerLabelsEntry\x1aS\n\x18\x44\x65siredWorkerLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.v1.DesiredWorkerLabels:\x02\x38\x01\x42\x0b\n\t_priority\"1\n\x1aTriggerWorkflowRunResponse\x12\x13\n\x0b\x65xternal_id\x18\x01 \x01(\t\"X\n\x18\x42ranchDurableTaskRequest\x12\x18\n\x10task_external_id\x18\x01 \x01(\t\x12\x0f\n\x07node_id\x18\x02 \x01(\x03\x12\x11\n\tbranch_id\x18\x03 \x01(\x03\"Y\n\x19\x42ranchDurableTaskResponse\x12\x18\n\x10task_external_id\x18\x01 \x01(\t\x12\x0f\n\x07node_id\x18\x02 \x01(\x03\x12\x11\n\tbranch_id\x18\x03 \x01(\x03\"\xed\x04\n\x1c\x43reateWorkflowVersionRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\t\x12\x16\n\x0e\x65vent_triggers\x18\x04 \x03(\t\x12\x15\n\rcron_triggers\x18\x05 \x03(\t\x12!\n\x05tasks\x18\x06 \x03(\x0b\x32\x12.v1.CreateTaskOpts\x12$\n\x0b\x63oncurrency\x18\x07 \x01(\x0b\x32\x0f.v1.Concurrency\x12\x17\n\ncron_input\x18\x08 \x01(\tH\x00\x88\x01\x01\x12\x30\n\x0fon_failure_task\x18\t \x01(\x0b\x32\x12.v1.CreateTaskOptsH\x01\x88\x01\x01\x12\'\n\x06sticky\x18\n \x01(\x0e\x32\x12.v1.StickyStrategyH\x02\x88\x01\x01\x12\x1d\n\x10\x64\x65\x66\x61ult_priority\x18\x0b \x01(\x05H\x03\x88\x01\x01\x12(\n\x0f\x63oncurrency_arr\x18\x0c \x03(\x0b\x32\x0f.v1.Concurrency\x12*\n\x0f\x64\x65\x66\x61ult_filters\x18\r \x03(\x0b\x32\x11.v1.DefaultFilter\x12\x1e\n\x11input_json_schema\x18\x0e \x01(\x0cH\x04\x88\x01\x01\x12/\n\x0bidempotency\x18\x0f \x01(\x0b\x32\x15.v1.IdempotencyConfigH\x05\x88\x01\x01\x42\r\n\x0b_cron_inputB\x12\n\x10_on_failure_taskB\t\n\x07_stickyB\x13\n\x11_default_priorityB\x14\n\x12_input_json_schemaB\x0e\n\x0c_idempotency\"n\n\x11IdempotencyConfig\x12\x12\n\nexpression\x18\x01 \x01(\t\x12\x0e\n\x06ttl_ms\x18\x02 \x01(\x03\x12*\n\x06method\x18\x03 \x01(\x0e\x32\x15.v1.IdempotencyMethodH\x00\x88\x01\x01\x42\t\n\x07_method\"`\n\x19IdempotencyCollisionError\x12 \n\x18\x65xisting_run_external_id\x18\x01 \x01(\t\x12!\n\x19\x63olliding_run_external_id\x18\x02 \x01(\t\"\x87\x01\n$BulkTriggerIdempotencyCollisionError\x12,\n$successful_workflow_run_external_ids\x18\x01 \x03(\t\x12\x31\n\ncollisions\x18\x02 \x03(\x0b\x32\x1d.v1.IdempotencyCollisionError\"T\n\rDefaultFilter\x12\x12\n\nexpression\x18\x01 \x01(\t\x12\r\n\x05scope\x18\x02 \x01(\t\x12\x14\n\x07payload\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x42\n\n\x08_payload\"\
|
|
12
|
+
descriptor_data = "\n\x12v1/workflows.proto\x12\x02v1\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x19v1/shared/condition.proto\x1a\x17v1/shared/trigger.proto\"[\n\x12\x43\x61ncelTasksRequest\x12\x14\n\x0c\x65xternal_ids\x18\x01 \x03(\t\x12$\n\x06\x66ilter\x18\x02 \x01(\x0b\x32\x0f.v1.TasksFilterH\x00\x88\x01\x01\x42\t\n\x07_filter\"[\n\x12ReplayTasksRequest\x12\x14\n\x0c\x65xternal_ids\x18\x01 \x03(\t\x12$\n\x06\x66ilter\x18\x02 \x01(\x0b\x32\x0f.v1.TasksFilterH\x00\x88\x01\x01\x42\t\n\x07_filter\"\xb7\x01\n\x0bTasksFilter\x12\x10\n\x08statuses\x18\x01 \x03(\t\x12)\n\x05since\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\x05until\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00\x88\x01\x01\x12\x14\n\x0cworkflow_ids\x18\x04 \x03(\t\x12\x1b\n\x13\x61\x64\x64itional_metadata\x18\x05 \x03(\tB\x08\n\x06_until\".\n\x13\x43\x61ncelTasksResponse\x12\x17\n\x0f\x63\x61ncelled_tasks\x18\x01 \x03(\t\"-\n\x13ReplayTasksResponse\x12\x16\n\x0ereplayed_tasks\x18\x01 \x03(\t\"\xae\x02\n\x19TriggerWorkflowRunRequest\x12\x15\n\rworkflow_name\x18\x01 \x01(\t\x12\r\n\x05input\x18\x02 \x01(\x0c\x12\x1b\n\x13\x61\x64\x64itional_metadata\x18\x03 \x01(\x0c\x12\x15\n\x08priority\x18\x04 \x01(\x05H\x00\x88\x01\x01\x12U\n\x15\x64\x65sired_worker_labels\x18\x05 \x03(\x0b\x32\x36.v1.TriggerWorkflowRunRequest.DesiredWorkerLabelsEntry\x1aS\n\x18\x44\x65siredWorkerLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.v1.DesiredWorkerLabels:\x02\x38\x01\x42\x0b\n\t_priority\"1\n\x1aTriggerWorkflowRunResponse\x12\x13\n\x0b\x65xternal_id\x18\x01 \x01(\t\"X\n\x18\x42ranchDurableTaskRequest\x12\x18\n\x10task_external_id\x18\x01 \x01(\t\x12\x0f\n\x07node_id\x18\x02 \x01(\x03\x12\x11\n\tbranch_id\x18\x03 \x01(\x03\"Y\n\x19\x42ranchDurableTaskResponse\x12\x18\n\x10task_external_id\x18\x01 \x01(\t\x12\x0f\n\x07node_id\x18\x02 \x01(\x03\x12\x11\n\tbranch_id\x18\x03 \x01(\x03\"\xed\x04\n\x1c\x43reateWorkflowVersionRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\t\x12\x16\n\x0e\x65vent_triggers\x18\x04 \x03(\t\x12\x15\n\rcron_triggers\x18\x05 \x03(\t\x12!\n\x05tasks\x18\x06 \x03(\x0b\x32\x12.v1.CreateTaskOpts\x12$\n\x0b\x63oncurrency\x18\x07 \x01(\x0b\x32\x0f.v1.Concurrency\x12\x17\n\ncron_input\x18\x08 \x01(\tH\x00\x88\x01\x01\x12\x30\n\x0fon_failure_task\x18\t \x01(\x0b\x32\x12.v1.CreateTaskOptsH\x01\x88\x01\x01\x12\'\n\x06sticky\x18\n \x01(\x0e\x32\x12.v1.StickyStrategyH\x02\x88\x01\x01\x12\x1d\n\x10\x64\x65\x66\x61ult_priority\x18\x0b \x01(\x05H\x03\x88\x01\x01\x12(\n\x0f\x63oncurrency_arr\x18\x0c \x03(\x0b\x32\x0f.v1.Concurrency\x12*\n\x0f\x64\x65\x66\x61ult_filters\x18\r \x03(\x0b\x32\x11.v1.DefaultFilter\x12\x1e\n\x11input_json_schema\x18\x0e \x01(\x0cH\x04\x88\x01\x01\x12/\n\x0bidempotency\x18\x0f \x01(\x0b\x32\x15.v1.IdempotencyConfigH\x05\x88\x01\x01\x42\r\n\x0b_cron_inputB\x12\n\x10_on_failure_taskB\t\n\x07_stickyB\x13\n\x11_default_priorityB\x14\n\x12_input_json_schemaB\x0e\n\x0c_idempotency\"n\n\x11IdempotencyConfig\x12\x12\n\nexpression\x18\x01 \x01(\t\x12\x0e\n\x06ttl_ms\x18\x02 \x01(\x03\x12*\n\x06method\x18\x03 \x01(\x0e\x32\x15.v1.IdempotencyMethodH\x00\x88\x01\x01\x42\t\n\x07_method\"`\n\x19IdempotencyCollisionError\x12 \n\x18\x65xisting_run_external_id\x18\x01 \x01(\t\x12!\n\x19\x63olliding_run_external_id\x18\x02 \x01(\t\"\x87\x01\n$BulkTriggerIdempotencyCollisionError\x12,\n$successful_workflow_run_external_ids\x18\x01 \x03(\t\x12\x31\n\ncollisions\x18\x02 \x03(\x0b\x32\x1d.v1.IdempotencyCollisionError\"T\n\rDefaultFilter\x12\x12\n\nexpression\x18\x01 \x01(\t\x12\r\n\x05scope\x18\x02 \x01(\t\x12\x14\n\x07payload\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x42\n\n\x08_payload\"\x9d\x02\n\x0b\x43oncurrency\x12\x12\n\nexpression\x18\x01 \x01(\t\x12\x15\n\x08max_runs\x18\x02 \x01(\x05H\x00\x88\x01\x01\x12\x39\n\x0elimit_strategy\x18\x03 \x01(\x0e\x32\x1c.v1.ConcurrencyLimitStrategyH\x01\x88\x01\x01\x12\x11\n\x04name\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x1d\n\x10is_tenant_scoped\x18\x05 \x01(\x08H\x03\x88\x01\x01\x12 \n\x13max_runs_expression\x18\x06 \x01(\tH\x04\x88\x01\x01\x42\x0b\n\t_max_runsB\x11\n\x0f_limit_strategyB\x07\n\x05_nameB\x13\n\x11_is_tenant_scopedB\x16\n\x14_max_runs_expression\"\x89\x02\n\x0fTaskBatchConfig\x12\x16\n\x0e\x62\x61tch_max_size\x18\x01 \x01(\x05\x12\"\n\x15\x62\x61tch_max_interval_ms\x18\x02 \x01(\x05H\x00\x88\x01\x01\x12\x1c\n\x0f\x62\x61tch_group_key\x18\x03 \x01(\tH\x01\x88\x01\x01\x12!\n\x14\x62\x61tch_group_max_runs\x18\x04 \x01(\x05H\x02\x88\x01\x01\x12\x1d\n\x10\x62roadcast_output\x18\x05 \x01(\x08H\x03\x88\x01\x01\x42\x18\n\x16_batch_max_interval_msB\x12\n\x10_batch_group_keyB\x17\n\x15_batch_group_max_runsB\x13\n\x11_broadcast_output\"\xea\x05\n\x0e\x43reateTaskOpts\x12\x13\n\x0breadable_id\x18\x01 \x01(\t\x12\x0e\n\x06\x61\x63tion\x18\x02 \x01(\t\x12\x0f\n\x07timeout\x18\x03 \x01(\t\x12\x0e\n\x06inputs\x18\x04 \x01(\t\x12\x0f\n\x07parents\x18\x05 \x03(\t\x12\x0f\n\x07retries\x18\x06 \x01(\x05\x12,\n\x0brate_limits\x18\x07 \x03(\x0b\x32\x17.v1.CreateTaskRateLimit\x12;\n\rworker_labels\x18\x08 \x03(\x0b\x32$.v1.CreateTaskOpts.WorkerLabelsEntry\x12\x1b\n\x0e\x62\x61\x63koff_factor\x18\t \x01(\x02H\x00\x88\x01\x01\x12 \n\x13\x62\x61\x63koff_max_seconds\x18\n \x01(\x05H\x01\x88\x01\x01\x12$\n\x0b\x63oncurrency\x18\x0b \x03(\x0b\x32\x0f.v1.Concurrency\x12+\n\nconditions\x18\x0c \x01(\x0b\x32\x12.v1.TaskConditionsH\x02\x88\x01\x01\x12\x1d\n\x10schedule_timeout\x18\r \x01(\tH\x03\x88\x01\x01\x12\x12\n\nis_durable\x18\x0e \x01(\x08\x12;\n\rslot_requests\x18\x0f \x03(\x0b\x32$.v1.CreateTaskOpts.SlotRequestsEntry\x12\'\n\x05\x62\x61tch\x18\x10 \x01(\x0b\x32\x13.v1.TaskBatchConfigH\x04\x88\x01\x01\x1aL\n\x11WorkerLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.v1.DesiredWorkerLabels:\x02\x38\x01\x1a\x33\n\x11SlotRequestsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\x42\x11\n\x0f_backoff_factorB\x16\n\x14_backoff_max_secondsB\r\n\x0b_conditionsB\x13\n\x11_schedule_timeoutB\x08\n\x06_batch\"\xfd\x01\n\x13\x43reateTaskRateLimit\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x12\n\x05units\x18\x02 \x01(\x05H\x00\x88\x01\x01\x12\x15\n\x08key_expr\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x17\n\nunits_expr\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x1e\n\x11limit_values_expr\x18\x05 \x01(\tH\x03\x88\x01\x01\x12,\n\x08\x64uration\x18\x06 \x01(\x0e\x32\x15.v1.RateLimitDurationH\x04\x88\x01\x01\x42\x08\n\x06_unitsB\x0b\n\t_key_exprB\r\n\x0b_units_exprB\x14\n\x12_limit_values_exprB\x0b\n\t_duration\"@\n\x1d\x43reateWorkflowVersionResponse\x12\n\n\x02id\x18\x01 \x01(\t\x12\x13\n\x0bworkflow_id\x18\x02 \x01(\t\"+\n\x14GetRunDetailsRequest\x12\x13\n\x0b\x65xternal_id\x18\x01 \x01(\t\"\xaa\x01\n\rTaskRunDetail\x12\x13\n\x0b\x65xternal_id\x18\x01 \x01(\t\x12\x1d\n\x06status\x18\x02 \x01(\x0e\x32\r.v1.RunStatus\x12\x12\n\x05\x65rror\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06output\x18\x04 \x01(\x0cH\x01\x88\x01\x01\x12\x13\n\x0breadable_id\x18\x05 \x01(\t\x12\x12\n\nis_evicted\x18\x06 \x01(\x08\x42\x08\n\x06_errorB\t\n\x07_output\"\x84\x02\n\x15GetRunDetailsResponse\x12\r\n\x05input\x18\x01 \x01(\x0c\x12\x1d\n\x06status\x18\x02 \x01(\x0e\x32\r.v1.RunStatus\x12:\n\ttask_runs\x18\x03 \x03(\x0b\x32\'.v1.GetRunDetailsResponse.TaskRunsEntry\x12\x0c\n\x04\x64one\x18\x04 \x01(\x08\x12\x1b\n\x13\x61\x64\x64itional_metadata\x18\x05 \x01(\x0c\x12\x12\n\nis_evicted\x18\x06 \x01(\x08\x1a\x42\n\rTaskRunsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12 \n\x05value\x18\x02 \x01(\x0b\x32\x11.v1.TaskRunDetail:\x02\x38\x01*$\n\x0eStickyStrategy\x12\x08\n\x04SOFT\x10\x00\x12\x08\n\x04HARD\x10\x01*]\n\x11RateLimitDuration\x12\n\n\x06SECOND\x10\x00\x12\n\n\x06MINUTE\x10\x01\x12\x08\n\x04HOUR\x10\x02\x12\x07\n\x03\x44\x41Y\x10\x03\x12\x08\n\x04WEEK\x10\x04\x12\t\n\x05MONTH\x10\x05\x12\x08\n\x04YEAR\x10\x06*[\n\tRunStatus\x12\n\n\x06QUEUED\x10\x00\x12\x0b\n\x07RUNNING\x10\x01\x12\r\n\tCOMPLETED\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\x12\r\n\tCANCELLED\x10\x04\x12\x0b\n\x07\x45VICTED\x10\x05*(\n\x11IdempotencyMethod\x12\x07\n\x03TTL\x10\x00\x12\n\n\x06STATUS\x10\x01*\xc1\x01\n\x18\x43oncurrencyLimitStrategy\x12\x16\n\x12\x43\x41NCEL_IN_PROGRESS\x10\x00\x12\x0f\n\x0b\x44ROP_NEWEST\x10\x01\x12\x10\n\x0cQUEUE_NEWEST\x10\x02\x12\x15\n\x11GROUP_ROUND_ROBIN\x10\x03\x12\x11\n\rCANCEL_NEWEST\x10\x04\x12\x1f\n\x1b\x43\x41NCEL_QUEUED_EXCEPT_NEWEST\x10\x05\x12\x1f\n\x1b\x43\x41NCEL_QUEUED_EXCEPT_OLDEST\x10\x06\x32\xcf\x03\n\x0c\x41\x64minService\x12R\n\x0bPutWorkflow\x12 .v1.CreateWorkflowVersionRequest\x1a!.v1.CreateWorkflowVersionResponse\x12>\n\x0b\x43\x61ncelTasks\x12\x16.v1.CancelTasksRequest\x1a\x17.v1.CancelTasksResponse\x12>\n\x0bReplayTasks\x12\x16.v1.ReplayTasksRequest\x1a\x17.v1.ReplayTasksResponse\x12S\n\x12TriggerWorkflowRun\x12\x1d.v1.TriggerWorkflowRunRequest\x1a\x1e.v1.TriggerWorkflowRunResponse\x12\x44\n\rGetRunDetails\x12\x18.v1.GetRunDetailsRequest\x1a\x19.v1.GetRunDetailsResponse\x12P\n\x11\x42ranchDurableTask\x12\x1c.v1.BranchDurableTaskRequest\x1a\x1d.v1.BranchDurableTaskResponseBBZ@github.com/hatchet-dev/hatchet/internal/services/shared/proto/v1b\x06proto3"
|
|
13
13
|
|
|
14
14
|
pool = ::Google::Protobuf::DescriptorPool.generated_pool
|
|
15
15
|
pool.add_serialized_file(descriptor_data)
|
data/lib/hatchet/version.rb
CHANGED
data/sig/hatchet/concurrency.rbs
CHANGED
|
@@ -4,16 +4,26 @@ module Hatchet
|
|
|
4
4
|
CANCEL_NEWEST: Symbol
|
|
5
5
|
GROUP_ROUND_ROBIN: Symbol
|
|
6
6
|
QUEUE: Symbol
|
|
7
|
+
CANCEL_QUEUED_EXCEPT_NEWEST: Symbol
|
|
8
|
+
CANCEL_QUEUED_EXCEPT_OLDEST: Symbol
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
module ConcurrencyProto
|
|
12
|
+
LIMIT_STRATEGY_MAP: Hash[Symbol, Symbol]
|
|
13
|
+
|
|
14
|
+
def self.split_max_runs: (Integer | String max_runs) -> [Integer, String?]
|
|
7
15
|
end
|
|
8
16
|
|
|
9
17
|
class ConcurrencyExpression
|
|
10
18
|
LIMIT_STRATEGY_MAP: Hash[Symbol, Symbol]
|
|
11
19
|
|
|
12
20
|
attr_reader expression: String
|
|
13
|
-
attr_reader max_runs: Integer
|
|
21
|
+
attr_reader max_runs: Integer | String
|
|
14
22
|
attr_reader limit_strategy: Symbol
|
|
23
|
+
attr_reader name: String?
|
|
24
|
+
attr_reader is_tenant_scoped: bool
|
|
15
25
|
|
|
16
|
-
def initialize: (expression: String, ?max_runs: Integer, ?limit_strategy: Symbol) -> void
|
|
26
|
+
def initialize: (expression: String, ?max_runs: Integer | String, ?limit_strategy: Symbol, ?name: String?, ?is_tenant_scoped: bool) -> void
|
|
17
27
|
def to_h: () -> Hash[Symbol, untyped]
|
|
18
28
|
def to_proto: () -> untyped
|
|
19
29
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: hatchet-sdk
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.8.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- gabriel ruttner
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-
|
|
11
|
+
date: 2026-09-07 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: faraday
|