hatchet-sdk 0.10.0 → 0.11.1
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 +12 -0
- data/lib/hatchet/clients/grpc/admin.rb +20 -0
- data/lib/hatchet/clients/rest/.openapi-generator/FILES +10 -0
- data/lib/hatchet/clients/rest/README.md +16 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/serverless_api.rb +405 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/streams_api.rb +80 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/tenant_api.rb +71 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/rate_limit.rb +14 -4
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_entitlements.rb +367 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_create_serverless_endpoint_request.rb +411 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_serverless_endpoint.rb +556 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_serverless_endpoint_kind.rb +40 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_serverless_endpoint_list.rb +231 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_serverless_endpoint_status.rb +271 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_stream_topic.rb +343 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_stream_topic_list.rb +292 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_update_serverless_endpoint_request.rb +354 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow.rb +14 -4
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest.rb +10 -0
- data/lib/hatchet/context.rb +13 -0
- data/lib/hatchet/contracts/v1/dispatcher_pb.rb +2 -1
- data/lib/hatchet/contracts/workflows/workflows_pb.rb +3 -1
- data/lib/hatchet/contracts/workflows/workflows_services_pb.rb +1 -0
- data/lib/hatchet/features/rate_limits.rb +13 -0
- data/lib/hatchet/version.rb +1 -1
- data/lib/hatchet/worker/durable_event_listener.rb +5 -5
- data/lib/hatchet/worker/received_satisfied_orders.rb +49 -0
- data/lib/hatchet/worker/runner.rb +6 -2
- data/lib/hatchet-sdk.rb +1 -0
- data/sig/hatchet/clients/grpc/admin.rbs +1 -0
- data/sig/hatchet/context.rbs +1 -0
- data/sig/hatchet/features/rate_limits.rbs +1 -0
- data/sig/hatchet/worker/received_satisfied_orders.rbs +11 -0
- metadata +14 -2
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Hatchet
|
|
4
|
+
module WorkerRuntime
|
|
5
|
+
# The highest satisfied_order received per (task_external_id, invocation_count). Reported in
|
|
6
|
+
# worker status requests so that after a reconnect the server resumes ordered delivery where
|
|
7
|
+
# this worker left off instead of waiting for orders it already sent.
|
|
8
|
+
#
|
|
9
|
+
# Not thread-safe; the durable event listener guards it with its own lock.
|
|
10
|
+
class ReceivedSatisfiedOrders
|
|
11
|
+
def initialize
|
|
12
|
+
@highest_by_invocation = {}
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def record(completed)
|
|
16
|
+
return unless completed.has_satisfied_order?
|
|
17
|
+
|
|
18
|
+
invocation = [completed.ref.durable_task_external_id, completed.ref.invocation_count]
|
|
19
|
+
@highest_by_invocation[invocation] = [@highest_by_invocation.fetch(invocation, 0), completed.satisfied_order].max
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# callback_keys are [task_external_id, invocation_count, branch_id, node_id]
|
|
23
|
+
def to_proto_for(callback_keys)
|
|
24
|
+
invocations = callback_keys.map { |(task_external_id, invocation_count, _, _)| [task_external_id, invocation_count] }
|
|
25
|
+
|
|
26
|
+
invocations.uniq.filter_map do |(durable_task_external_id, invocation_count)|
|
|
27
|
+
highest_received = @highest_by_invocation[[durable_task_external_id, invocation_count]]
|
|
28
|
+
next if highest_received.nil?
|
|
29
|
+
|
|
30
|
+
::V1::DurableTaskReceivedSatisfiedOrder.new(
|
|
31
|
+
durable_task_external_id: durable_task_external_id,
|
|
32
|
+
invocation_count: invocation_count,
|
|
33
|
+
highest_received_satisfied_order: highest_received,
|
|
34
|
+
)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def delete_through(durable_task_external_id, invocation_count)
|
|
39
|
+
@highest_by_invocation.delete_if do |(task_external_id, recorded_invocation_count), _|
|
|
40
|
+
task_external_id == durable_task_external_id && recorded_invocation_count <= invocation_count
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def clear
|
|
45
|
+
@highest_by_invocation.clear
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -467,9 +467,13 @@ module Hatchet
|
|
|
467
467
|
end
|
|
468
468
|
|
|
469
469
|
def cleanup_action(action_key)
|
|
470
|
-
@contexts_mu.synchronize do
|
|
471
|
-
@contexts.delete(action_key)
|
|
470
|
+
ctx = @contexts_mu.synchronize do
|
|
472
471
|
@task_threads.delete(action_key)
|
|
472
|
+
@contexts.delete(action_key)
|
|
473
|
+
end
|
|
474
|
+
|
|
475
|
+
if @durable_event_listener && ctx.is_a?(DurableContext)
|
|
476
|
+
@durable_event_listener.cleanup_task_state(ctx.step_run_id, ctx.invocation_count || 1)
|
|
473
477
|
end
|
|
474
478
|
|
|
475
479
|
@eviction_manager&.unregister_run(action_key)
|
data/lib/hatchet-sdk.rb
CHANGED
|
@@ -67,6 +67,7 @@ module Hatchet
|
|
|
67
67
|
require_relative "hatchet/worker/workflow_run_listener"
|
|
68
68
|
require_relative "hatchet/worker/durable_eviction/cache"
|
|
69
69
|
require_relative "hatchet/worker/durable_eviction/manager"
|
|
70
|
+
require_relative "hatchet/worker/received_satisfied_orders"
|
|
70
71
|
require_relative "hatchet/worker/durable_event_listener"
|
|
71
72
|
require_relative "hatchet/worker/runner"
|
|
72
73
|
|
data/sig/hatchet/context.rbs
CHANGED
|
@@ -32,6 +32,7 @@ module Hatchet
|
|
|
32
32
|
def cancel: () -> void
|
|
33
33
|
def refresh_timeout: (Integer | String duration) -> void
|
|
34
34
|
def release_slot: () -> void
|
|
35
|
+
def pause_rate_limit: (String key, until_time: Time) -> Time
|
|
35
36
|
def put_stream: (String data) -> void
|
|
36
37
|
def task_run_errors: () -> Array[TaskRunError]
|
|
37
38
|
def get_task_run_error: (Task | Symbol | String task_ref) -> TaskRunError?
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
module Hatchet
|
|
2
|
+
module WorkerRuntime
|
|
3
|
+
class ReceivedSatisfiedOrders
|
|
4
|
+
def initialize: () -> void
|
|
5
|
+
def record: (untyped completed) -> void
|
|
6
|
+
def to_proto_for: (Array[[String, Integer, Integer, Integer]] callback_keys) -> Array[untyped]
|
|
7
|
+
def delete_through: (String durable_task_external_id, Integer invocation_count) -> void
|
|
8
|
+
def clear: () -> void
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
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.11.1
|
|
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-10-
|
|
11
|
+
date: 2026-10-26 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: faraday
|
|
@@ -218,6 +218,7 @@ files:
|
|
|
218
218
|
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/metadata_api.rb
|
|
219
219
|
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/observability_api.rb
|
|
220
220
|
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/rate_limits_api.rb
|
|
221
|
+
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/serverless_api.rb
|
|
221
222
|
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/slack_api.rb
|
|
222
223
|
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/sns_api.rb
|
|
223
224
|
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/step_run_api.rb
|
|
@@ -341,6 +342,7 @@ files:
|
|
|
341
342
|
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_alert_email_group.rb
|
|
342
343
|
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_alert_email_group_list.rb
|
|
343
344
|
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_alerting_settings.rb
|
|
345
|
+
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_entitlements.rb
|
|
344
346
|
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_environment.rb
|
|
345
347
|
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_invite.rb
|
|
346
348
|
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_invite_list.rb
|
|
@@ -378,6 +380,7 @@ files:
|
|
|
378
380
|
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_cel_debug_response.rb
|
|
379
381
|
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_cel_debug_response_status.rb
|
|
380
382
|
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_create_filter_request.rb
|
|
383
|
+
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_create_serverless_endpoint_request.rb
|
|
381
384
|
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_create_webhook_request.rb
|
|
382
385
|
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_create_webhook_request_api_key.rb
|
|
383
386
|
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_create_webhook_request_base.rb
|
|
@@ -405,7 +408,13 @@ files:
|
|
|
405
408
|
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_restore_task_response.rb
|
|
406
409
|
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_running_detail_count.rb
|
|
407
410
|
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_running_filter.rb
|
|
411
|
+
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_serverless_endpoint.rb
|
|
412
|
+
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_serverless_endpoint_kind.rb
|
|
413
|
+
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_serverless_endpoint_list.rb
|
|
414
|
+
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_serverless_endpoint_status.rb
|
|
408
415
|
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_stream_payload_ref.rb
|
|
416
|
+
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_stream_topic.rb
|
|
417
|
+
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_stream_topic_list.rb
|
|
409
418
|
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_task_event.rb
|
|
410
419
|
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_task_event_list.rb
|
|
411
420
|
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_task_event_type.rb
|
|
@@ -421,6 +430,7 @@ files:
|
|
|
421
430
|
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_task_timing_list.rb
|
|
422
431
|
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_trigger_workflow_run_request.rb
|
|
423
432
|
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_update_filter_request.rb
|
|
433
|
+
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_update_serverless_endpoint_request.rb
|
|
424
434
|
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_update_webhook_request.rb
|
|
425
435
|
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_wait_item.rb
|
|
426
436
|
- lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_webhook.rb
|
|
@@ -534,6 +544,7 @@ files:
|
|
|
534
544
|
- lib/hatchet/worker/durable_eviction/cache.rb
|
|
535
545
|
- lib/hatchet/worker/durable_eviction/manager.rb
|
|
536
546
|
- lib/hatchet/worker/health_check.rb
|
|
547
|
+
- lib/hatchet/worker/received_satisfied_orders.rb
|
|
537
548
|
- lib/hatchet/worker/runner.rb
|
|
538
549
|
- lib/hatchet/worker/workflow_run_listener.rb
|
|
539
550
|
- lib/hatchet/worker_obj.rb
|
|
@@ -583,6 +594,7 @@ files:
|
|
|
583
594
|
- sig/hatchet/worker/durable_eviction/cache.rbs
|
|
584
595
|
- sig/hatchet/worker/durable_eviction/manager.rbs
|
|
585
596
|
- sig/hatchet/worker/health_check.rbs
|
|
597
|
+
- sig/hatchet/worker/received_satisfied_orders.rbs
|
|
586
598
|
- sig/hatchet/worker/runner.rbs
|
|
587
599
|
- sig/hatchet/worker/workflow_run_listener.rbs
|
|
588
600
|
- sig/hatchet/worker_obj.rbs
|