riverqueue 0.12.0 → 0.13.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 +50 -0
- data/README.md +22 -0
- data/docs/README.md +60 -13
- data/docs/conformance.md +72 -0
- data/docs/migrations.md +5 -8
- data/lib/client.rb +42 -9
- data/lib/client_runtime.rb +167 -58
- data/lib/driver/runtime.rb +215 -104
- data/lib/event.rb +8 -1
- data/lib/insert_opts.rb +7 -2
- data/lib/job.rb +1 -1
- data/lib/periodic_cron.rb +41 -6
- data/lib/periodic_job.rb +9 -1
- data/migration/README.md +4 -2
- data/migration/manifest.json +1 -2
- data/sig/client.rbs +5 -2
- data/sig/driver.rbs +6 -4
- data/sig/insert_opts.rbs +2 -2
- data/sig/job.rbs +2 -0
- data/sig/runtime.rbs +24 -4
- metadata +6 -4
data/sig/client.rbs
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
module River
|
|
2
2
|
MAX_ATTEMPTS_DEFAULT: Integer
|
|
3
|
+
MAX_ATTEMPTS_LIMIT: Integer
|
|
3
4
|
PRIORITY_DEFAULT: Integer
|
|
4
5
|
QUEUE_DEFAULT: String
|
|
5
6
|
|
|
@@ -20,7 +21,7 @@ module River
|
|
|
20
21
|
def id: () -> String
|
|
21
22
|
def insert: (jobArgs, ?insert_opts: InsertOpts?, ?max_attempts: Integer?,
|
|
22
23
|
?metadata: Hash[String | Symbol, untyped]?, ?priority: Integer?, ?queue: (String | Symbol)?,
|
|
23
|
-
?scheduled_at: Time?, ?state:
|
|
24
|
+
?scheduled_at: Time?, ?state: jobStateInitialInput?, ?tags: Array[String]?, ?unique_opts: UniqueOpts?) -> JobInsertResult
|
|
24
25
|
def insert_many: (Array[jobArgs | InsertManyParams]) -> Array[JobInsertResult]
|
|
25
26
|
def job_cancel: (Integer) -> JobRow
|
|
26
27
|
def job_delete: (Integer) -> JobRow
|
|
@@ -54,6 +55,7 @@ module River
|
|
|
54
55
|
|
|
55
56
|
DEFAULT_UNIQUE_STATES: Array[jobStateAll]
|
|
56
57
|
EMPTY_INSERT_OPTS: InsertOpts
|
|
58
|
+
INITIAL_STATES: Array[jobStateInitial]
|
|
57
59
|
REQUIRED_UNIQUE_STATES: Array[jobStateAll]
|
|
58
60
|
TAG_RE: Regexp
|
|
59
61
|
|
|
@@ -63,6 +65,7 @@ module River
|
|
|
63
65
|
private def run_insert_plugins: (Array[Driver::JobInsertParams]) { () -> Array[JobInsertResult] } -> Array[JobInsertResult]
|
|
64
66
|
private def truncate_time: (Time, Integer | Rational) -> Time
|
|
65
67
|
private def uint64_to_int64: (Integer) -> Integer
|
|
68
|
+
private def validate_insert_state: (String | Symbol) -> jobStateInitial
|
|
66
69
|
private def validate_tags: (Array[String]) -> Array[String]
|
|
67
70
|
private def validate_unique_states: (Array[jobStateInput]) -> Array[jobStateAll]
|
|
68
71
|
end
|
|
@@ -76,7 +79,7 @@ module River
|
|
|
76
79
|
|
|
77
80
|
def initialize: (jobArgs job, ?insert_opts: InsertOpts?, ?max_attempts: Integer?,
|
|
78
81
|
?metadata: Hash[String | Symbol, untyped]?, ?priority: Integer?, ?queue: (String | Symbol)?,
|
|
79
|
-
?scheduled_at: Time?, ?state:
|
|
82
|
+
?scheduled_at: Time?, ?state: jobStateInitialInput?, ?tags: Array[String]?, ?unique_opts: UniqueOpts?) -> void
|
|
80
83
|
def is_a?: (Class) -> bool
|
|
81
84
|
end
|
|
82
85
|
|
data/sig/driver.rbs
CHANGED
|
@@ -8,7 +8,7 @@ module River
|
|
|
8
8
|
def job_cancel: (Integer, ?now: Time) -> JobRow?
|
|
9
9
|
def job_delete: (Integer) -> JobRow?
|
|
10
10
|
def job_delete_finalized: (**untyped) -> Integer
|
|
11
|
-
def job_delete_if_running: (Integer) -> bool
|
|
11
|
+
def job_delete_if_running: (Integer) -> (bool | :cancelled)
|
|
12
12
|
def job_delete_many: (JobListParams) -> Array[JobRow]
|
|
13
13
|
def job_get_available: (queue: String, max: Integer, attempted_by: String, ?kinds: Array[String]?, ?now: Time) -> Array[JobRow]
|
|
14
14
|
def job_claim: (id: Integer, attempted_by: String, ?allow_scheduled: bool, ?now: Time) -> JobRow?
|
|
@@ -29,8 +29,8 @@ module River
|
|
|
29
29
|
def notification_delete_before: (horizon: Time, ?max: Integer) -> Integer
|
|
30
30
|
def queue_get: (String) -> Queue?
|
|
31
31
|
def queue_list: (?max: Integer) -> Array[Queue]
|
|
32
|
-
def queue_pause: (String, ?now: Time) ->
|
|
33
|
-
def queue_resume: (String, ?now: Time) ->
|
|
32
|
+
def queue_pause: (String, ?now: Time) -> Array[Queue]
|
|
33
|
+
def queue_resume: (String, ?now: Time) -> Array[Queue]
|
|
34
34
|
def queue_update: (String, metadata: Hash[untyped, untyped], ?now: Time) -> Queue?
|
|
35
35
|
def queue_upsert: (String, ?metadata: Hash[untyped, untyped], ?now: Time) -> Queue?
|
|
36
36
|
def transaction: [T] () { () -> T } -> T
|
|
@@ -117,7 +117,7 @@ module River
|
|
|
117
117
|
private def runtime_claim_jobs: (untyped, untyped, untyped, untyped) -> untyped
|
|
118
118
|
def job_list: (?untyped) -> untyped
|
|
119
119
|
def job_metadata_merge: (untyped, untyped) -> untyped
|
|
120
|
-
def job_rescue_stuck: (horizon: untyped, retry_policy: untyped, ?now: untyped, ?max: untyped) -> untyped
|
|
120
|
+
def job_rescue_stuck: (horizon: untyped, retry_policy: untyped, ?now: untyped, ?max: untyped, ?logger: untyped, ?rescue_if: untyped) -> untyped
|
|
121
121
|
def job_retry: (untyped, ?now: untyped) -> untyped
|
|
122
122
|
def job_schedule: (?now: untyped, ?max: untyped) -> untyped
|
|
123
123
|
def job_set_state_if_running: (id: untyped, state: untyped, ?now: untyped, ?attempt: untyped, ?error: untyped, ?finalized_at: untyped, ?metadata: untyped, ?scheduled_at: untyped) -> untyped
|
|
@@ -143,6 +143,7 @@ module River
|
|
|
143
143
|
def runtime_execute: (String) -> untyped
|
|
144
144
|
def runtime_in_clause: (untyped, untyped) -> untyped
|
|
145
145
|
def runtime_job_list_without_params: () -> untyped
|
|
146
|
+
def runtime_job_list: (JobListParams, ?for_delete: bool) -> Array[JobRow]
|
|
146
147
|
def runtime_job_rows: (String) -> untyped
|
|
147
148
|
def runtime_json: (untyped) -> untyped
|
|
148
149
|
def runtime_merge_metadata: (untyped) -> untyped
|
|
@@ -157,6 +158,7 @@ module River
|
|
|
157
158
|
def runtime_queue_columns: () -> untyped
|
|
158
159
|
def runtime_queue_from_row: (untyped) -> untyped
|
|
159
160
|
def runtime_quote: (untyped) -> String
|
|
161
|
+
def runtime_rescue_retry: (untyped, untyped, untyped, untyped, untyped) -> Time
|
|
160
162
|
def runtime_returning_ids: (untyped) -> untyped
|
|
161
163
|
def runtime_state: (untyped) -> untyped
|
|
162
164
|
def runtime_tag_contains: (untyped) -> untyped
|
data/sig/insert_opts.rbs
CHANGED
|
@@ -5,11 +5,11 @@ module River
|
|
|
5
5
|
attr_accessor priority: Integer?
|
|
6
6
|
attr_accessor queue: (String | Symbol)?
|
|
7
7
|
attr_accessor scheduled_at: Time?
|
|
8
|
-
attr_accessor state:
|
|
8
|
+
attr_accessor state: jobStateInitialInput?
|
|
9
9
|
attr_accessor tags: Array[String]?
|
|
10
10
|
attr_accessor unique_opts: UniqueOpts?
|
|
11
11
|
|
|
12
|
-
def initialize: (?max_attempts: Integer?, ?metadata: Hash[String | Symbol, untyped]?, ?priority: Integer?, ?queue: (String | Symbol)?, ?scheduled_at: Time?, ?state:
|
|
12
|
+
def initialize: (?max_attempts: Integer?, ?metadata: Hash[String | Symbol, untyped]?, ?priority: Integer?, ?queue: (String | Symbol)?, ?scheduled_at: Time?, ?state: jobStateInitialInput?, ?tags: Array[String]?, ?unique_opts: UniqueOpts?) -> void
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
class UniqueOpts
|
data/sig/job.rbs
CHANGED
|
@@ -9,6 +9,8 @@ module River
|
|
|
9
9
|
JOB_STATE_SCHEDULED: "scheduled"
|
|
10
10
|
|
|
11
11
|
type jobStateAll = "available" | "cancelled" | "completed" | "discarded" | "pending" | "retryable" | "running" | "scheduled"
|
|
12
|
+
type jobStateInitial = "available" | "pending" | "scheduled"
|
|
13
|
+
type jobStateInitialInput = jobStateInitial | :available | :pending | :scheduled
|
|
12
14
|
type jobStateInput = jobStateAll | :available | :cancelled | :completed | :discarded | :pending | :retryable | :running | :scheduled
|
|
13
15
|
|
|
14
16
|
interface _JobArgs
|
data/sig/runtime.rbs
CHANGED
|
@@ -288,8 +288,11 @@ module River
|
|
|
288
288
|
|
|
289
289
|
class PeriodicCron
|
|
290
290
|
@cron: untyped
|
|
291
|
+
@interval: Integer?
|
|
291
292
|
def initialize: (String, ?timezone: String) -> void
|
|
292
293
|
def next: (Time) -> Time
|
|
294
|
+
private
|
|
295
|
+
def parse_interval: (String) -> Integer
|
|
293
296
|
end
|
|
294
297
|
|
|
295
298
|
class PeriodicInterval
|
|
@@ -299,15 +302,17 @@ module River
|
|
|
299
302
|
end
|
|
300
303
|
|
|
301
304
|
class PeriodicJobBundle
|
|
305
|
+
@enabled: bool
|
|
302
306
|
@jobs: Hash[Integer, untyped]
|
|
303
307
|
@mutex: Mutex
|
|
304
308
|
@next_handle: Integer
|
|
305
309
|
@wake: untyped
|
|
306
|
-
def initialize: (Array[PeriodicJob], wake: untyped) -> void
|
|
310
|
+
def initialize: (Array[PeriodicJob], wake: untyped, ?enabled: bool) -> void
|
|
307
311
|
def add: (PeriodicJob) -> Integer
|
|
308
312
|
def add_many: (Array[PeriodicJob]) -> Array[Integer]
|
|
309
313
|
def clear: () -> self
|
|
310
314
|
def due: (Time) ?{ (PeriodicJob, StandardError) -> void } -> Array[PeriodicJob]
|
|
315
|
+
def empty?: () -> bool
|
|
311
316
|
def remove: (Integer) -> PeriodicJob?
|
|
312
317
|
def remove_by_id: (untyped) -> bool
|
|
313
318
|
end
|
|
@@ -316,6 +321,15 @@ module River
|
|
|
316
321
|
class Interrupted < StandardError
|
|
317
322
|
end
|
|
318
323
|
|
|
324
|
+
class JobTiming
|
|
325
|
+
attr_accessor finished_monotonic: Float
|
|
326
|
+
attr_reader queue_wait_duration: Float
|
|
327
|
+
attr_reader started_at: Time
|
|
328
|
+
attr_reader started_monotonic: Float
|
|
329
|
+
|
|
330
|
+
def initialize: (Time, Float, Time) -> void
|
|
331
|
+
end
|
|
332
|
+
|
|
319
333
|
@client: Client
|
|
320
334
|
@condition: ConditionVariable
|
|
321
335
|
@config: Config
|
|
@@ -356,8 +370,9 @@ module River
|
|
|
356
370
|
def check_remote_cancellations: (String) -> untyped
|
|
357
371
|
def error_handler_cancel?: (Exception, Job) -> bool
|
|
358
372
|
def execute: (JobRow) -> untyped
|
|
359
|
-
def finish_failed: (JobRow, Job, Exception,
|
|
360
|
-
def
|
|
373
|
+
def finish_failed: (JobRow, Job, Exception, JobTiming, ?cancelled: bool, ?worker: untyped) -> untyped
|
|
374
|
+
def finish_interrupted: (JobRow, Job, JobTiming) -> untyped
|
|
375
|
+
def finish_snoozed: (JobRow, Job, JobSnoozeError, JobTiming) -> untyped
|
|
361
376
|
def finish_work: (Integer) -> untyped
|
|
362
377
|
def invoke_plugins: (Symbol, *untyped) -> Array[untyped]
|
|
363
378
|
def invoke_worker: (untyped, Job) -> untyped
|
|
@@ -365,12 +380,15 @@ module River
|
|
|
365
380
|
def maintenance_loop: () -> untyped
|
|
366
381
|
def monotonic_now: () -> Float
|
|
367
382
|
def next_retry: (JobRow, Exception, Time, ?worker: untyped) -> Time
|
|
383
|
+
def next_snooze_count: (untyped) -> Integer
|
|
368
384
|
def retry_allowed?: (untyped, Job, Exception) -> untyped
|
|
369
385
|
def perform_work: (untyped, Job) -> untyped
|
|
386
|
+
def periodic_jobs_changed: () -> untyped
|
|
370
387
|
def producer_loop: (String, QueueConfig) -> untyped
|
|
371
|
-
def publish: (Symbol, JobRow,
|
|
388
|
+
def publish: (Symbol, JobRow, JobTiming) -> untyped
|
|
372
389
|
def queue_stopping?: (String) -> bool
|
|
373
390
|
def remove_subscription: (Subscription) -> Subscription?
|
|
391
|
+
def rescue_job?: (JobRow, Time) -> bool
|
|
374
392
|
def resolve_worker: (String) -> untyped
|
|
375
393
|
def run_periodic: (Time) -> untyped
|
|
376
394
|
def running_count: (String) -> Integer
|
|
@@ -378,5 +396,7 @@ module River
|
|
|
378
396
|
def start_producer: (String, QueueConfig) -> untyped
|
|
379
397
|
def stopping?: () -> bool
|
|
380
398
|
def wait: (Float | Integer) -> untyped
|
|
399
|
+
def wait_for_running_jobs: (String, Float | Integer) -> untyped
|
|
400
|
+
def worker_timeout: (untyped, Job) -> Float?
|
|
381
401
|
end
|
|
382
402
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: riverqueue
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.13.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Blake Gentry
|
|
@@ -100,7 +100,9 @@ extra_rdoc_files: []
|
|
|
100
100
|
files:
|
|
101
101
|
- CHANGELOG.md
|
|
102
102
|
- LICENSE
|
|
103
|
+
- README.md
|
|
103
104
|
- docs/README.md
|
|
105
|
+
- docs/conformance.md
|
|
104
106
|
- docs/migrations.md
|
|
105
107
|
- docs/testing.md
|
|
106
108
|
- docs/workers.md
|
|
@@ -183,10 +185,10 @@ homepage: https://riverqueue.com
|
|
|
183
185
|
licenses:
|
|
184
186
|
- MPL-2.0
|
|
185
187
|
metadata:
|
|
186
|
-
bug_tracker_uri: https://github.com/riverqueue/
|
|
187
|
-
changelog_uri: https://github.com/riverqueue/
|
|
188
|
+
bug_tracker_uri: https://github.com/riverqueue/river/issues
|
|
189
|
+
changelog_uri: https://github.com/riverqueue/river/blob/master/ruby/CHANGELOG.md
|
|
188
190
|
rubygems_mfa_required: 'true'
|
|
189
|
-
source_code_uri: https://github.com/riverqueue/
|
|
191
|
+
source_code_uri: https://github.com/riverqueue/river/tree/master/ruby
|
|
190
192
|
rdoc_options: []
|
|
191
193
|
require_paths:
|
|
192
194
|
- lib
|