solid_queue 0.2.1 → 0.3.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.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +56 -7
  3. data/app/models/solid_queue/blocked_execution.rb +3 -3
  4. data/app/models/solid_queue/claimed_execution.rb +0 -1
  5. data/app/models/solid_queue/execution/dispatching.rb +1 -1
  6. data/app/models/solid_queue/job/clearable.rb +3 -3
  7. data/app/models/solid_queue/job/executable.rb +2 -6
  8. data/app/models/solid_queue/job/recurrable.rb +13 -0
  9. data/app/models/solid_queue/job.rb +1 -1
  10. data/app/models/solid_queue/recurring_execution.rb +26 -0
  11. data/app/models/solid_queue/scheduled_execution.rb +1 -1
  12. data/app/models/solid_queue/semaphore.rb +5 -22
  13. data/db/migrate/20240218110712_create_recurring_executions.rb +14 -0
  14. data/lib/solid_queue/configuration.rb +14 -5
  15. data/lib/solid_queue/dispatcher/concurrency_maintenance.rb +44 -0
  16. data/lib/solid_queue/dispatcher/recurring_schedule.rb +56 -0
  17. data/lib/solid_queue/dispatcher/recurring_task.rb +85 -0
  18. data/lib/solid_queue/dispatcher.rb +21 -36
  19. data/lib/solid_queue/processes/base.rb +1 -18
  20. data/lib/solid_queue/processes/callbacks.rb +19 -0
  21. data/lib/solid_queue/processes/poller.rb +28 -0
  22. data/lib/solid_queue/processes/registrable.rb +5 -6
  23. data/lib/solid_queue/processes/runnable.rb +31 -46
  24. data/lib/solid_queue/processes/supervised.rb +4 -0
  25. data/lib/solid_queue/recurring_tasks/manager.rb +31 -0
  26. data/lib/solid_queue/recurring_tasks/schedule.rb +58 -0
  27. data/lib/solid_queue/recurring_tasks/task.rb +87 -0
  28. data/lib/solid_queue/supervisor.rb +1 -1
  29. data/lib/solid_queue/version.rb +1 -1
  30. data/lib/solid_queue/worker.rb +11 -12
  31. data/lib/solid_queue.rb +22 -24
  32. metadata +116 -10
  33. data/lib/active_job/uniqueness.rb +0 -41
  34. data/lib/solid_queue/dispatcher/scheduled_executions_dispatcher.rb +0 -6
metadata CHANGED
@@ -1,29 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solid_queue
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rosa Gutierrez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-01-30 00:00:00.000000000 Z
11
+ date: 2024-03-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rails
14
+ name: activerecord
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '7.1'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '7.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: activejob
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '7.1'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '7.1'
41
+ - !ruby/object:Gem::Dependency
42
+ name: railties
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '7.1'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
25
53
  - !ruby/object:Gem::Version
26
54
  version: '7.1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: concurrent-ruby
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 1.2.2
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 1.2.2
69
+ - !ruby/object:Gem::Dependency
70
+ name: fugit
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 1.9.0
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 1.9.0
27
83
  - !ruby/object:Gem::Dependency
28
84
  name: debug
29
85
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +122,48 @@ dependencies:
66
122
  - - ">="
67
123
  - !ruby/object:Gem::Version
68
124
  version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: mysql2
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: pg
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: sqlite3
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
69
167
  description: Database-backed Active Job backend.
70
168
  email:
71
169
  - rosa@37signals.com
@@ -86,6 +184,7 @@ files:
86
184
  - app/models/solid_queue/job/clearable.rb
87
185
  - app/models/solid_queue/job/concurrency_controls.rb
88
186
  - app/models/solid_queue/job/executable.rb
187
+ - app/models/solid_queue/job/recurrable.rb
89
188
  - app/models/solid_queue/job/schedulable.rb
90
189
  - app/models/solid_queue/pause.rb
91
190
  - app/models/solid_queue/process.rb
@@ -94,14 +193,15 @@ files:
94
193
  - app/models/solid_queue/queue_selector.rb
95
194
  - app/models/solid_queue/ready_execution.rb
96
195
  - app/models/solid_queue/record.rb
196
+ - app/models/solid_queue/recurring_execution.rb
97
197
  - app/models/solid_queue/scheduled_execution.rb
98
198
  - app/models/solid_queue/semaphore.rb
99
199
  - config/routes.rb
100
200
  - db/migrate/20231211200639_create_solid_queue_tables.rb
101
201
  - db/migrate/20240110143450_add_missing_index_to_blocked_executions.rb
202
+ - db/migrate/20240218110712_create_recurring_executions.rb
102
203
  - lib/active_job/concurrency_controls.rb
103
204
  - lib/active_job/queue_adapters/solid_queue_adapter.rb
104
- - lib/active_job/uniqueness.rb
105
205
  - lib/generators/solid_queue/install/USAGE
106
206
  - lib/generators/solid_queue/install/install_generator.rb
107
207
  - lib/generators/solid_queue/install/templates/config.yml
@@ -110,10 +210,13 @@ files:
110
210
  - lib/solid_queue/app_executor.rb
111
211
  - lib/solid_queue/configuration.rb
112
212
  - lib/solid_queue/dispatcher.rb
113
- - lib/solid_queue/dispatcher/scheduled_executions_dispatcher.rb
213
+ - lib/solid_queue/dispatcher/concurrency_maintenance.rb
214
+ - lib/solid_queue/dispatcher/recurring_schedule.rb
215
+ - lib/solid_queue/dispatcher/recurring_task.rb
114
216
  - lib/solid_queue/engine.rb
115
217
  - lib/solid_queue/pool.rb
116
218
  - lib/solid_queue/processes/base.rb
219
+ - lib/solid_queue/processes/callbacks.rb
117
220
  - lib/solid_queue/processes/interruptible.rb
118
221
  - lib/solid_queue/processes/pidfile.rb
119
222
  - lib/solid_queue/processes/poller.rb
@@ -122,16 +225,19 @@ files:
122
225
  - lib/solid_queue/processes/runnable.rb
123
226
  - lib/solid_queue/processes/signals.rb
124
227
  - lib/solid_queue/processes/supervised.rb
228
+ - lib/solid_queue/recurring_tasks/manager.rb
229
+ - lib/solid_queue/recurring_tasks/schedule.rb
230
+ - lib/solid_queue/recurring_tasks/task.rb
125
231
  - lib/solid_queue/supervisor.rb
126
232
  - lib/solid_queue/tasks.rb
127
233
  - lib/solid_queue/version.rb
128
234
  - lib/solid_queue/worker.rb
129
- homepage: http://github.com/basecamp/solid_queue
235
+ homepage: https://github.com/basecamp/solid_queue
130
236
  licenses:
131
237
  - MIT
132
238
  metadata:
133
- homepage_uri: http://github.com/basecamp/solid_queue
134
- source_code_uri: http://github.com/basecamp/solid_queue
239
+ homepage_uri: https://github.com/basecamp/solid_queue
240
+ source_code_uri: https://github.com/basecamp/solid_queue
135
241
  post_install_message:
136
242
  rdoc_options: []
137
243
  require_paths:
@@ -1,41 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ActiveJob
4
- module Uniqueness
5
- extend ActiveSupport::Concern
6
-
7
- DEFAULT_UNIQUENESS_GROUP = ->(*) { self.class.name }
8
-
9
- included do
10
- class_attribute :uniqueness_key, instance_accessor: false
11
- class_attribute :uniqueness_group, default: DEFAULT_UNIQUENESS_GROUP, instance_accessor: false
12
-
13
- class_attribute :uniqueness_duration
14
- end
15
-
16
- class_methods do
17
- def enqueued_uniquely_by(key:, group: DEFAULT_UNIQUENESS_GROUP, duration: SolidQueue.default_uniqueness_period)
18
- self.uniqueness_key = key
19
- self.uniqueness_group = group
20
- self.uniqueness_duration = duration
21
- end
22
- end
23
-
24
- def uniqueness_key
25
- if self.class.uniqueness_key
26
- param = compute_concurrency_parameter(self.class.concurrency_key)
27
-
28
- case param
29
- when ActiveRecord::Base
30
- [ concurrency_group, param.class.name, param.id ]
31
- else
32
- [ concurrency_group, param ]
33
- end.compact.join("/")
34
- end
35
- end
36
-
37
- def enqueued_uniquely?
38
- uniqueness_key.present?
39
- end
40
- end
41
- end
@@ -1,6 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module SolidQueue
4
- class Dispatcher::ScheduledExecutionsDispatcher < Dispatcher
5
- end
6
- end