inst-jobs 2.0.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (98) hide show
  1. checksums.yaml +4 -4
  2. data/db/migrate/20101216224513_create_delayed_jobs.rb +9 -7
  3. data/db/migrate/20110531144916_cleanup_delayed_jobs_indexes.rb +8 -13
  4. data/db/migrate/20110610213249_optimize_delayed_jobs.rb +8 -8
  5. data/db/migrate/20110831210257_add_delayed_jobs_next_in_strand.rb +25 -25
  6. data/db/migrate/20120510004759_delayed_jobs_delete_trigger_lock_for_update.rb +4 -8
  7. data/db/migrate/20120531150712_drop_psql_jobs_pop_fn.rb +1 -3
  8. data/db/migrate/20120607164022_delayed_jobs_use_advisory_locks.rb +11 -15
  9. data/db/migrate/20120607181141_index_jobs_on_locked_by.rb +1 -1
  10. data/db/migrate/20120608191051_add_jobs_run_at_index.rb +2 -2
  11. data/db/migrate/20120927184213_change_delayed_jobs_handler_to_text.rb +1 -1
  12. data/db/migrate/20140505215510_copy_failed_jobs_original_id.rb +2 -3
  13. data/db/migrate/20150807133223_add_max_concurrent_to_jobs.rb +9 -13
  14. data/db/migrate/20151210162949_improve_max_concurrent.rb +4 -8
  15. data/db/migrate/20161206323555_add_back_default_string_limits_jobs.rb +3 -2
  16. data/db/migrate/20181217155351_speed_up_max_concurrent_triggers.rb +13 -17
  17. data/db/migrate/20200330230722_add_id_to_get_delayed_jobs_index.rb +8 -8
  18. data/db/migrate/20200824222232_speed_up_max_concurrent_delete_trigger.rb +72 -77
  19. data/db/migrate/20200825011002_add_strand_order_override.rb +93 -97
  20. data/db/migrate/20210809145804_add_n_strand_index.rb +12 -0
  21. data/db/migrate/20210812210128_add_singleton_column.rb +200 -0
  22. data/db/migrate/20210917232626_add_delete_conflicting_singletons_before_unlock_trigger.rb +27 -0
  23. data/db/migrate/20210928174754_fix_singleton_condition_in_before_insert.rb +56 -0
  24. data/db/migrate/20210929204903_update_conflicting_singleton_function_to_use_index.rb +27 -0
  25. data/exe/inst_jobs +3 -2
  26. data/lib/delayed/backend/active_record.rb +211 -168
  27. data/lib/delayed/backend/base.rb +110 -72
  28. data/lib/delayed/batch.rb +11 -9
  29. data/lib/delayed/cli.rb +98 -84
  30. data/lib/delayed/core_ext/kernel.rb +4 -2
  31. data/lib/delayed/daemon.rb +70 -74
  32. data/lib/delayed/job_tracking.rb +26 -25
  33. data/lib/delayed/lifecycle.rb +27 -23
  34. data/lib/delayed/log_tailer.rb +17 -17
  35. data/lib/delayed/logging.rb +13 -16
  36. data/lib/delayed/message_sending.rb +43 -52
  37. data/lib/delayed/performable_method.rb +6 -8
  38. data/lib/delayed/periodic.rb +72 -68
  39. data/lib/delayed/plugin.rb +2 -4
  40. data/lib/delayed/pool.rb +205 -168
  41. data/lib/delayed/server/helpers.rb +6 -6
  42. data/lib/delayed/server.rb +51 -54
  43. data/lib/delayed/settings.rb +94 -81
  44. data/lib/delayed/testing.rb +21 -22
  45. data/lib/delayed/version.rb +1 -1
  46. data/lib/delayed/work_queue/in_process.rb +21 -17
  47. data/lib/delayed/work_queue/parent_process/client.rb +55 -53
  48. data/lib/delayed/work_queue/parent_process/server.rb +245 -207
  49. data/lib/delayed/work_queue/parent_process.rb +52 -53
  50. data/lib/delayed/worker/consul_health_check.rb +32 -33
  51. data/lib/delayed/worker/health_check.rb +34 -26
  52. data/lib/delayed/worker/null_health_check.rb +3 -1
  53. data/lib/delayed/worker/process_helper.rb +8 -9
  54. data/lib/delayed/worker.rb +272 -241
  55. data/lib/delayed/yaml_extensions.rb +12 -10
  56. data/lib/delayed_job.rb +37 -37
  57. data/lib/inst-jobs.rb +1 -1
  58. data/spec/active_record_job_spec.rb +143 -139
  59. data/spec/delayed/cli_spec.rb +7 -7
  60. data/spec/delayed/daemon_spec.rb +10 -9
  61. data/spec/delayed/message_sending_spec.rb +16 -9
  62. data/spec/delayed/periodic_spec.rb +14 -21
  63. data/spec/delayed/server_spec.rb +38 -38
  64. data/spec/delayed/settings_spec.rb +26 -25
  65. data/spec/delayed/work_queue/in_process_spec.rb +7 -8
  66. data/spec/delayed/work_queue/parent_process/client_spec.rb +17 -12
  67. data/spec/delayed/work_queue/parent_process/server_spec.rb +117 -41
  68. data/spec/delayed/work_queue/parent_process_spec.rb +21 -23
  69. data/spec/delayed/worker/consul_health_check_spec.rb +37 -50
  70. data/spec/delayed/worker/health_check_spec.rb +60 -52
  71. data/spec/delayed/worker_spec.rb +44 -21
  72. data/spec/sample_jobs.rb +45 -15
  73. data/spec/shared/delayed_batch.rb +74 -67
  74. data/spec/shared/delayed_method.rb +143 -102
  75. data/spec/shared/performable_method.rb +39 -38
  76. data/spec/shared/shared_backend.rb +550 -437
  77. data/spec/shared/testing.rb +14 -14
  78. data/spec/shared/worker.rb +156 -148
  79. data/spec/shared_jobs_specs.rb +13 -13
  80. data/spec/spec_helper.rb +53 -55
  81. metadata +148 -82
  82. data/lib/delayed/backend/redis/bulk_update.lua +0 -50
  83. data/lib/delayed/backend/redis/destroy_job.lua +0 -2
  84. data/lib/delayed/backend/redis/enqueue.lua +0 -29
  85. data/lib/delayed/backend/redis/fail_job.lua +0 -5
  86. data/lib/delayed/backend/redis/find_available.lua +0 -3
  87. data/lib/delayed/backend/redis/functions.rb +0 -59
  88. data/lib/delayed/backend/redis/get_and_lock_next_available.lua +0 -17
  89. data/lib/delayed/backend/redis/includes/jobs_common.lua +0 -203
  90. data/lib/delayed/backend/redis/job.rb +0 -535
  91. data/lib/delayed/backend/redis/set_running.lua +0 -5
  92. data/lib/delayed/backend/redis/tickle_strand.lua +0 -2
  93. data/spec/gemfiles/42.gemfile +0 -7
  94. data/spec/gemfiles/50.gemfile +0 -7
  95. data/spec/gemfiles/51.gemfile +0 -7
  96. data/spec/gemfiles/52.gemfile +0 -7
  97. data/spec/gemfiles/60.gemfile +0 -7
  98. data/spec/redis_job_spec.rb +0 -148
data/spec/spec_helper.rb CHANGED
@@ -1,105 +1,103 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'delayed_job'
4
- require 'delayed/testing'
3
+ require "delayed_job"
4
+ require "delayed/testing"
5
5
 
6
- require 'database_cleaner'
7
- require 'rack/test'
8
- require 'test_after_commit' if ::Rails.version < '5'
9
- require 'timecop'
10
- require 'pry'
11
- require 'byebug'
6
+ require "database_cleaner"
7
+ require "fileutils"
8
+ require "rack/test"
9
+ require "timecop"
10
+ require "webmock/rspec"
12
11
 
13
- RSpec.configure do |config|
12
+ require "pry"
13
+ require "byebug"
14
14
 
15
+ RSpec.configure do |config|
15
16
  config.expect_with(:rspec) do |c|
16
- c.syntax = [:should, :expect]
17
+ c.syntax = %i[should expect]
17
18
  end
18
19
 
19
20
  config.before(:suite) do
20
21
  DatabaseCleaner.strategy = :transaction
21
22
  DatabaseCleaner.clean_with(:truncation)
23
+ WebMock.disable_net_connect!
22
24
  end
23
25
 
24
- config.before(:each) do |example|
25
- if Delayed::Backend::Redis::Job.redis
26
- Delayed::Backend::Redis::Job.redis.flushdb
27
- end
28
- DatabaseCleaner.strategy = (example.metadata[:sinatra] || example.metadata[:non_transactional]) ?
29
- :truncation : :transaction
26
+ config.before do |example|
27
+ DatabaseCleaner.strategy = if example.metadata[:sinatra] || example.metadata[:non_transactional]
28
+ :truncation
29
+ else
30
+ :transaction
31
+ end
30
32
  DatabaseCleaner.start
31
33
  end
32
34
 
33
- config.after(:each) do
35
+ config.after do
34
36
  DatabaseCleaner.clean
35
37
  end
36
38
  end
37
39
 
38
40
  module NoYamlDump
39
- def encode_with(coder)
40
- end
41
+ def encode_with(coder); end
41
42
  end
42
43
  # example groups are often the sender, and if we try to serialize them,
43
44
  # the resultant object is then encoded in the sender, and then we serialize
44
45
  # again, and it just keeps getting bigger and bigger and bigger...
45
46
  RSpec::Core::ExampleGroup.include(NoYamlDump)
46
47
 
47
- ENV['TEST_ENV_NUMBER'] ||= '1'
48
- ENV['TEST_DB_HOST'] ||= 'localhost'
49
- ENV['TEST_DB_DATABASE'] ||= "inst-jobs-test-#{ENV['TEST_ENV_NUMBER']}"
50
- ENV['TEST_REDIS_CONNECTION'] ||= 'redis://localhost:6379/'
51
-
52
- Delayed::Backend::Redis::Job.redis = Redis.new(url: ENV['TEST_REDIS_CONNECTION'])
53
- Delayed::Backend::Redis::Job.redis.select ENV['TEST_ENV_NUMBER']
48
+ ENV["TEST_ENV_NUMBER"] ||= "1"
49
+ ENV["TEST_DB_HOST"] ||= "localhost"
50
+ ENV["TEST_DB_DATABASE"] ||= "inst-jobs-test-#{ENV['TEST_ENV_NUMBER']}"
54
51
 
55
52
  connection_config = {
56
53
  adapter: :postgresql,
57
- host: ENV['TEST_DB_HOST'].presence,
58
- encoding: 'utf8',
59
- username: ENV['TEST_DB_USERNAME'],
60
- database: ENV['TEST_DB_DATABASE'],
54
+ host: ENV["TEST_DB_HOST"].presence,
55
+ encoding: "utf8",
56
+ username: ENV["TEST_DB_USERNAME"],
57
+ database: ENV["TEST_DB_DATABASE"]
61
58
  }
62
59
 
63
- if ::Rails.version < '5'
64
- class ActiveRecord::Migration
65
- class << self
66
- def [](_version); self; end
67
- end
68
- end
69
- end
70
-
71
60
  def migrate(file)
72
- if ::Rails.version < '5.2'
73
- ActiveRecord::Migrator.migrate(file)
74
- elsif ::Rails.version >= '6'
75
- ActiveRecord::MigrationContext.new(file, ActiveRecord::SchemaMigration).migrate
76
- else
77
- ActiveRecord::MigrationContext.new(file).migrate
78
- end
61
+ ActiveRecord::MigrationContext.new(file, ActiveRecord::SchemaMigration).migrate
79
62
  end
80
63
 
81
64
  # create the test db if it does not exist, to help out wwtd
82
- ActiveRecord::Base.establish_connection(connection_config.merge(database: 'postgres'))
65
+ ActiveRecord::Base.establish_connection(connection_config.merge(database: "postgres"))
83
66
  begin
84
67
  ActiveRecord::Base.connection.create_database(connection_config[:database])
85
68
  rescue ActiveRecord::StatementInvalid
69
+ nil
86
70
  end
87
71
  ActiveRecord::Base.establish_connection(connection_config)
88
- # TODO reset db and migrate again, to test migrations
72
+
73
+ # we need to ensure this callback is called for activerecord-pg-extensions,
74
+ # which isn't running because we're not using Rails to setup the database
75
+ ActiveRecord::PGExtensions::Railtie.run_initializers
76
+
77
+ # TODO: reset db and migrate again, to test migrations
89
78
 
90
79
  migrate("db/migrate")
91
80
  migrate("spec/migrate")
92
81
  Delayed::Backend::ActiveRecord::Job.reset_column_information
93
82
  Delayed::Backend::ActiveRecord::Job::Failed.reset_column_information
94
83
 
95
- Time.zone = 'UTC'
96
- Rails.logger = Logger.new(nil)
84
+ Time.zone = "UTC" # rubocop:disable Rails/TimeZoneAssignment
85
+ FileUtils.mkdir_p("tmp")
86
+ ActiveRecord::Base.logger = Rails.logger = Logger.new("tmp/test.log")
97
87
 
98
88
  # Purely useful for test cases...
99
89
  class Story < ActiveRecord::Base
100
- def tell; text; end
101
- def whatever(n, _); tell*n; end
102
- def whatever_else(n, _); tell*n; end
90
+ def tell
91
+ text
92
+ end
93
+
94
+ def whatever(times, _)
95
+ tell * times
96
+ end
97
+
98
+ def whatever_else(times, _)
99
+ tell * times
100
+ end
103
101
 
104
102
  handle_asynchronously :whatever
105
103
  handle_asynchronously :whatever_else, queue: "testqueue"
@@ -122,7 +120,7 @@ module MyReverser
122
120
  end
123
121
 
124
122
  def change_setting(klass, setting_name, value)
125
- old_val = klass.class_variable_get(:"@@#{setting_name}")
123
+ old_val = klass.send(setting_name)
126
124
  klass.send("#{setting_name}=", value)
127
125
  yield
128
126
  ensure
@@ -133,5 +131,5 @@ def run_job(job)
133
131
  Delayed::Testing.run_job(job)
134
132
  end
135
133
 
136
- require File.expand_path('../sample_jobs', __FILE__)
137
- require File.expand_path('../shared_jobs_specs', __FILE__)
134
+ require_relative "sample_jobs"
135
+ require_relative "shared_jobs_specs"
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: inst-jobs
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tobias Luetke
8
8
  - Brian Palmer
9
- autorequire:
9
+ autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2020-12-07 00:00:00.000000000 Z
12
+ date: 2021-09-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -17,28 +17,42 @@ dependencies:
17
17
  requirements:
18
18
  - - ">="
19
19
  - !ruby/object:Gem::Version
20
- version: '4.2'
20
+ version: '6.0'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - ">="
26
26
  - !ruby/object:Gem::Version
27
- version: '4.2'
27
+ version: '6.0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: activerecord-pg-extensions
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '0.4'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '0.4'
28
42
  - !ruby/object:Gem::Dependency
29
43
  name: activesupport
30
44
  requirement: !ruby/object:Gem::Requirement
31
45
  requirements:
32
46
  - - ">="
33
47
  - !ruby/object:Gem::Version
34
- version: '4.2'
48
+ version: '6.0'
35
49
  type: :runtime
36
50
  prerelease: false
37
51
  version_requirements: !ruby/object:Gem::Requirement
38
52
  requirements:
39
53
  - - ">="
40
54
  - !ruby/object:Gem::Version
41
- version: '4.2'
55
+ version: '6.0'
42
56
  - !ruby/object:Gem::Dependency
43
57
  name: after_transaction_commit
44
58
  requirement: !ruby/object:Gem::Requirement
@@ -60,75 +74,61 @@ dependencies:
60
74
  - !ruby/object:Gem::Version
61
75
  version: '3'
62
76
  - !ruby/object:Gem::Dependency
63
- name: railties
64
- requirement: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '4.2'
69
- type: :runtime
70
- prerelease: false
71
- version_requirements: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '4.2'
76
- - !ruby/object:Gem::Dependency
77
- name: redis
77
+ name: debug_inspector
78
78
  requirement: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ">"
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '3.0'
82
+ version: '1.0'
83
83
  type: :runtime
84
84
  prerelease: false
85
85
  version_requirements: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ">"
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '3.0'
89
+ version: '1.0'
90
90
  - !ruby/object:Gem::Dependency
91
- name: redis-scripting
91
+ name: fugit
92
92
  requirement: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 1.0.1
96
+ version: '1.3'
97
97
  type: :runtime
98
98
  prerelease: false
99
99
  version_requirements: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 1.0.1
103
+ version: '1.3'
104
104
  - !ruby/object:Gem::Dependency
105
- name: fugit
105
+ name: railties
106
106
  requirement: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - "~>"
108
+ - - ">="
109
109
  - !ruby/object:Gem::Version
110
- version: '1.3'
110
+ version: '6.0'
111
111
  type: :runtime
112
112
  prerelease: false
113
113
  version_requirements: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - "~>"
115
+ - - ">="
116
116
  - !ruby/object:Gem::Version
117
- version: '1.3'
117
+ version: '6.0'
118
118
  - !ruby/object:Gem::Dependency
119
- name: debug_inspector
119
+ name: appraisal
120
120
  requirement: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: 0.0.3
125
- type: :runtime
124
+ version: '2.4'
125
+ type: :development
126
126
  prerelease: false
127
127
  version_requirements: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: 0.0.3
131
+ version: '2.4'
132
132
  - !ruby/object:Gem::Dependency
133
133
  name: bump
134
134
  requirement: !ruby/object:Gem::Requirement
@@ -161,44 +161,58 @@ dependencies:
161
161
  name: database_cleaner
162
162
  requirement: !ruby/object:Gem::Requirement
163
163
  requirements:
164
- - - '='
164
+ - - "~>"
165
165
  - !ruby/object:Gem::Version
166
- version: 1.6.1
166
+ version: '2.0'
167
167
  type: :development
168
168
  prerelease: false
169
169
  version_requirements: !ruby/object:Gem::Requirement
170
170
  requirements:
171
- - - '='
171
+ - - "~>"
172
172
  - !ruby/object:Gem::Version
173
- version: 1.6.1
173
+ version: '2.0'
174
174
  - !ruby/object:Gem::Dependency
175
- name: imperium
175
+ name: database_cleaner-active_record
176
176
  requirement: !ruby/object:Gem::Requirement
177
177
  requirements:
178
- - - ">="
178
+ - - "~>"
179
179
  - !ruby/object:Gem::Version
180
- version: 0.5.2
180
+ version: '2.0'
181
181
  type: :development
182
182
  prerelease: false
183
183
  version_requirements: !ruby/object:Gem::Requirement
184
184
  requirements:
185
- - - ">="
185
+ - - "~>"
186
186
  - !ruby/object:Gem::Version
187
- version: 0.5.2
187
+ version: '2.0'
188
+ - !ruby/object:Gem::Dependency
189
+ name: diplomat
190
+ requirement: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: 2.5.1
195
+ type: :development
196
+ prerelease: false
197
+ version_requirements: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - "~>"
200
+ - !ruby/object:Gem::Version
201
+ version: 2.5.1
188
202
  - !ruby/object:Gem::Dependency
189
203
  name: pg
190
204
  requirement: !ruby/object:Gem::Requirement
191
205
  requirements:
192
- - - "<"
206
+ - - ">="
193
207
  - !ruby/object:Gem::Version
194
- version: '1.0'
208
+ version: '0'
195
209
  type: :development
196
210
  prerelease: false
197
211
  version_requirements: !ruby/object:Gem::Requirement
198
212
  requirements:
199
- - - "<"
213
+ - - ">="
200
214
  - !ruby/object:Gem::Version
201
- version: '1.0'
215
+ version: '0'
202
216
  - !ruby/object:Gem::Dependency
203
217
  name: pry
204
218
  requirement: !ruby/object:Gem::Requirement
@@ -261,14 +275,70 @@ dependencies:
261
275
  requirements:
262
276
  - - "~>"
263
277
  - !ruby/object:Gem::Version
264
- version: 3.8.0
278
+ version: '3.10'
279
+ type: :development
280
+ prerelease: false
281
+ version_requirements: !ruby/object:Gem::Requirement
282
+ requirements:
283
+ - - "~>"
284
+ - !ruby/object:Gem::Version
285
+ version: '3.10'
286
+ - !ruby/object:Gem::Dependency
287
+ name: rubocop
288
+ requirement: !ruby/object:Gem::Requirement
289
+ requirements:
290
+ - - "~>"
291
+ - !ruby/object:Gem::Version
292
+ version: '1.19'
293
+ type: :development
294
+ prerelease: false
295
+ version_requirements: !ruby/object:Gem::Requirement
296
+ requirements:
297
+ - - "~>"
298
+ - !ruby/object:Gem::Version
299
+ version: '1.19'
300
+ - !ruby/object:Gem::Dependency
301
+ name: rubocop-rails
302
+ requirement: !ruby/object:Gem::Requirement
303
+ requirements:
304
+ - - "~>"
305
+ - !ruby/object:Gem::Version
306
+ version: '2.11'
265
307
  type: :development
266
308
  prerelease: false
267
309
  version_requirements: !ruby/object:Gem::Requirement
268
310
  requirements:
269
311
  - - "~>"
270
312
  - !ruby/object:Gem::Version
271
- version: 3.8.0
313
+ version: '2.11'
314
+ - !ruby/object:Gem::Dependency
315
+ name: rubocop-rake
316
+ requirement: !ruby/object:Gem::Requirement
317
+ requirements:
318
+ - - "~>"
319
+ - !ruby/object:Gem::Version
320
+ version: '0.6'
321
+ type: :development
322
+ prerelease: false
323
+ version_requirements: !ruby/object:Gem::Requirement
324
+ requirements:
325
+ - - "~>"
326
+ - !ruby/object:Gem::Version
327
+ version: '0.6'
328
+ - !ruby/object:Gem::Dependency
329
+ name: rubocop-rspec
330
+ requirement: !ruby/object:Gem::Requirement
331
+ requirements:
332
+ - - "~>"
333
+ - !ruby/object:Gem::Version
334
+ version: '2.4'
335
+ type: :development
336
+ prerelease: false
337
+ version_requirements: !ruby/object:Gem::Requirement
338
+ requirements:
339
+ - - "~>"
340
+ - !ruby/object:Gem::Version
341
+ version: '2.4'
272
342
  - !ruby/object:Gem::Dependency
273
343
  name: sinatra
274
344
  requirement: !ruby/object:Gem::Requirement
@@ -303,14 +373,28 @@ dependencies:
303
373
  requirements:
304
374
  - - '='
305
375
  - !ruby/object:Gem::Version
306
- version: 0.7.1
376
+ version: 0.9.4
307
377
  type: :development
308
378
  prerelease: false
309
379
  version_requirements: !ruby/object:Gem::Requirement
310
380
  requirements:
311
381
  - - '='
312
382
  - !ruby/object:Gem::Version
313
- version: 0.7.1
383
+ version: 0.9.4
384
+ - !ruby/object:Gem::Dependency
385
+ name: webmock
386
+ requirement: !ruby/object:Gem::Requirement
387
+ requirements:
388
+ - - ">="
389
+ - !ruby/object:Gem::Version
390
+ version: '0'
391
+ type: :development
392
+ prerelease: false
393
+ version_requirements: !ruby/object:Gem::Requirement
394
+ requirements:
395
+ - - ">="
396
+ - !ruby/object:Gem::Version
397
+ version: '0'
314
398
  - !ruby/object:Gem::Dependency
315
399
  name: wwtd
316
400
  requirement: !ruby/object:Gem::Requirement
@@ -325,7 +409,7 @@ dependencies:
325
409
  - - "~>"
326
410
  - !ruby/object:Gem::Version
327
411
  version: 1.4.0
328
- description:
412
+ description:
329
413
  email:
330
414
  - brianp@instructure.com
331
415
  executables:
@@ -359,20 +443,14 @@ files:
359
443
  - db/migrate/20200330230722_add_id_to_get_delayed_jobs_index.rb
360
444
  - db/migrate/20200824222232_speed_up_max_concurrent_delete_trigger.rb
361
445
  - db/migrate/20200825011002_add_strand_order_override.rb
446
+ - db/migrate/20210809145804_add_n_strand_index.rb
447
+ - db/migrate/20210812210128_add_singleton_column.rb
448
+ - db/migrate/20210917232626_add_delete_conflicting_singletons_before_unlock_trigger.rb
449
+ - db/migrate/20210928174754_fix_singleton_condition_in_before_insert.rb
450
+ - db/migrate/20210929204903_update_conflicting_singleton_function_to_use_index.rb
362
451
  - exe/inst_jobs
363
452
  - lib/delayed/backend/active_record.rb
364
453
  - lib/delayed/backend/base.rb
365
- - lib/delayed/backend/redis/bulk_update.lua
366
- - lib/delayed/backend/redis/destroy_job.lua
367
- - lib/delayed/backend/redis/enqueue.lua
368
- - lib/delayed/backend/redis/fail_job.lua
369
- - lib/delayed/backend/redis/find_available.lua
370
- - lib/delayed/backend/redis/functions.rb
371
- - lib/delayed/backend/redis/get_and_lock_next_available.lua
372
- - lib/delayed/backend/redis/includes/jobs_common.lua
373
- - lib/delayed/backend/redis/job.rb
374
- - lib/delayed/backend/redis/set_running.lua
375
- - lib/delayed/backend/redis/tickle_strand.lua
376
454
  - lib/delayed/batch.rb
377
455
  - lib/delayed/cli.rb
378
456
  - lib/delayed/core_ext/kernel.rb
@@ -422,13 +500,7 @@ files:
422
500
  - spec/delayed/worker/consul_health_check_spec.rb
423
501
  - spec/delayed/worker/health_check_spec.rb
424
502
  - spec/delayed/worker_spec.rb
425
- - spec/gemfiles/42.gemfile
426
- - spec/gemfiles/50.gemfile
427
- - spec/gemfiles/51.gemfile
428
- - spec/gemfiles/52.gemfile
429
- - spec/gemfiles/60.gemfile
430
503
  - spec/migrate/20140924140513_add_story_table.rb
431
- - spec/redis_job_spec.rb
432
504
  - spec/sample_jobs.rb
433
505
  - spec/shared/delayed_batch.rb
434
506
  - spec/shared/delayed_method.rb
@@ -441,7 +513,7 @@ files:
441
513
  homepage: https://github.com/instructure/inst-jobs
442
514
  licenses: []
443
515
  metadata: {}
444
- post_install_message:
516
+ post_install_message:
445
517
  rdoc_options: []
446
518
  require_paths:
447
519
  - lib
@@ -456,19 +528,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
456
528
  - !ruby/object:Gem::Version
457
529
  version: '0'
458
530
  requirements: []
459
- rubygems_version: 3.0.3
460
- signing_key:
531
+ rubygems_version: 3.2.24
532
+ signing_key:
461
533
  specification_version: 4
462
534
  summary: Instructure-maintained fork of delayed_job
463
535
  test_files:
464
536
  - spec/sample_jobs.rb
465
537
  - spec/spec_helper.rb
466
- - spec/redis_job_spec.rb
467
- - spec/gemfiles/60.gemfile
468
- - spec/gemfiles/42.gemfile
469
- - spec/gemfiles/52.gemfile
470
- - spec/gemfiles/50.gemfile
471
- - spec/gemfiles/51.gemfile
472
538
  - spec/shared_jobs_specs.rb
473
539
  - spec/shared/performable_method.rb
474
540
  - spec/shared/testing.rb
@@ -1,50 +0,0 @@
1
- local action, id_string, flavor, query, now = unpack(ARGV)
2
-
3
- local ids = {}
4
-
5
- if string.len(flavor) > 0 then
6
- if flavor == 'current' then
7
- ids = redis.call('ZRANGE', Keys.queue(query), 0, -1)
8
- elseif flavor == 'future' then
9
- ids = redis.call('ZRANGE', Keys.future_queue(query), 0, -1)
10
- elseif flavor == 'strand' then
11
- ids = redis.call('LRANGE', Keys.strand(query), 0, -1)
12
- elseif flavor == 'tag' then
13
- ids = redis.call('SMEMBERS', Keys.tag(query))
14
- end
15
- else
16
- -- can't pass an array to redis/lua, so we split the string here
17
- for id in string.gmatch(id_string, "([%w-]+)") do
18
- if job_exists(id) then
19
- table.insert(ids, id)
20
- end
21
- end
22
- end
23
-
24
- local count = 0
25
- for idx, job_id in ipairs(ids) do
26
- if action == 'hold' then
27
- local queue, strand, locked_by = unpack(redis.call('HMGET', Keys.job(job_id), 'queue', 'strand', 'locked_by'))
28
- if not locked_by then
29
- count = count + 1
30
- remove_from_queues(job_id, queue, strand)
31
- redis.call('HMSET', Keys.job(job_id), 'locked_at', now, 'locked_by', 'on hold', 'attempts', 50)
32
- end
33
- elseif action == 'unhold' then
34
- local queue, locked_by = unpack(redis.call('HMGET', Keys.job(job_id), 'queue', 'locked_by'))
35
- if locked_by == 'on hold' then
36
- count = count + 1
37
- add_to_queues(job_id, queue, now)
38
- redis.call('HDEL', Keys.job(job_id), 'locked_at', 'locked_by')
39
- redis.call('HMSET', Keys.job(job_id), 'attempts', 0)
40
- end
41
- elseif action == 'destroy' then
42
- local locked_by = redis.call('HGET', Keys.job(job_id), 'locked_by')
43
- if not locked_by or locked_by == 'on hold' then
44
- count = count + 1
45
- destroy_job(job_id, now)
46
- end
47
- end
48
- end
49
-
50
- return count
@@ -1,2 +0,0 @@
1
- local job_id, now = unpack(ARGV)
2
- destroy_job(job_id, now)
@@ -1,29 +0,0 @@
1
- local job_id, queue, strand, now, for_singleton = unpack(ARGV)
2
- local strand_key = Keys.strand(strand)
3
-
4
- -- if this is a singleton job, only queue it up if another doesn't exist on the strand
5
- -- otherwise, delete it and return the other job id
6
- if for_singleton then
7
- local job_ids = redis.call('LRANGE', strand_key, 0, 1)
8
- local job_to_check = 1
9
- if job_exists(job_ids[1]) and redis.call('HGET', Keys.job(job_ids[1]), 'locked_at') then
10
- job_to_check = 2
11
- end
12
-
13
- local job_to_check_id = job_ids[job_to_check]
14
- if job_exists(job_to_check_id) then
15
- -- delete the new job, we found a match
16
- redis.call('DEL', Keys.job(job_id))
17
- return job_to_check_id
18
- end
19
- end
20
-
21
- -- if this job is in a strand, add it to the strand queue first
22
- -- if it's not at the front of the strand, we won't enqueue it below
23
- if strand_key then
24
- add_to_strand(job_id, strand)
25
- end
26
-
27
- add_to_queues(job_id, queue, now)
28
-
29
- return job_id
@@ -1,5 +0,0 @@
1
- local job_id = unpack(ARGV)
2
- local failed_at, queue, strand = unpack(redis.call('HMGET', Keys.job(job_id), 'failed_at', 'queue', 'strand'))
3
-
4
- remove_from_queues(job_id, queue, strand)
5
- redis.call('ZADD', Keys.failed_jobs(), failed_at, job_id)
@@ -1,3 +0,0 @@
1
- local queue, limit, offset, min_priority, max_priority, now = unpack(ARGV)
2
-
3
- return find_available(queue, limit, offset, min_priority, max_priority, now)