switchman-inst-jobs 4.0.17 → 4.2.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/lib/switchman_inst_jobs/delayed/backend/base.rb +2 -4
- data/lib/switchman_inst_jobs/guard_rail.rb +1 -1
- data/lib/switchman_inst_jobs/jobs_migrator.rb +27 -24
- data/lib/switchman_inst_jobs/new_relic.rb +2 -2
- data/lib/switchman_inst_jobs/switchman/shard.rb +1 -1
- data/lib/switchman_inst_jobs/version.rb +1 -1
- metadata +7 -203
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e1c01e6bdfd2a5cd3ddd756936a2793526c8e8860883bcd1ea8caa9febad979d
|
4
|
+
data.tar.gz: 4998d1686e5dfceffb5c1a41dcf0959266c8caf73bd99aa0e50e89523e41ba51
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aae64990ef75016c24ded178bf0edcf4b4343499b6d226d6c86104d9d15d23bd7a77acf35e622aff989e3292d0abf59bd15d4dd3d20e11e4f9e66e4fe393e581
|
7
|
+
data.tar.gz: 854dd08052ca1b042646ce2fd08c4c0f76d2f5075f11ecebf34f04f8293c3ab2c8d9977817adf2b5e0f6e4c67a6726e49bd4dc9d491b961a391588e78c22a274
|
@@ -21,7 +21,7 @@ module SwitchmanInstJobs
|
|
21
21
|
::Switchman::Shard.periodic_clear_shard_cache
|
22
22
|
current_shard = options[:current_shard] || ::Switchman::Shard.current
|
23
23
|
enqueue_options = options.merge(
|
24
|
-
current_shard:
|
24
|
+
current_shard:
|
25
25
|
)
|
26
26
|
enqueue_job = -> { ::GuardRail.activate(:primary) { super(object, **enqueue_options) } }
|
27
27
|
|
@@ -48,9 +48,7 @@ module SwitchmanInstJobs
|
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
|
-
|
52
|
-
::SwitchmanInstJobs::Delayed::Settings.configured_shard_ids
|
53
|
-
end
|
51
|
+
delegate :configured_shard_ids, to: :"::SwitchmanInstJobs::Delayed::Settings"
|
54
52
|
|
55
53
|
def processes_locked_locally
|
56
54
|
shard_ids = configured_shard_ids
|
@@ -21,7 +21,7 @@ module SwitchmanInstJobs
|
|
21
21
|
@validation_callbacks = []
|
22
22
|
end
|
23
23
|
|
24
|
-
def transaction_on(shards, &
|
24
|
+
def transaction_on(shards, &)
|
25
25
|
return yield if shards.empty?
|
26
26
|
|
27
27
|
shard = shards.pop
|
@@ -29,7 +29,7 @@ module SwitchmanInstJobs
|
|
29
29
|
shard.activate(::Delayed::Backend::ActiveRecord::AbstractJob) do
|
30
30
|
::Delayed::Job.transaction do
|
31
31
|
current_shard.activate(::Delayed::Backend::ActiveRecord::AbstractJob) do
|
32
|
-
transaction_on(shards, &
|
32
|
+
transaction_on(shards, &)
|
33
33
|
end
|
34
34
|
end
|
35
35
|
end
|
@@ -37,7 +37,7 @@ module SwitchmanInstJobs
|
|
37
37
|
|
38
38
|
def migrate_shards(shard_map)
|
39
39
|
source_shards = Set[]
|
40
|
-
target_shards = Hash.new([])
|
40
|
+
target_shards = Hash.new([].freeze)
|
41
41
|
shard_map.each do |(shard, target_shard)|
|
42
42
|
shard = ::Switchman::Shard.find(shard) unless shard.is_a?(::Switchman::Shard)
|
43
43
|
source_shards << shard.delayed_jobs_shard.id
|
@@ -45,7 +45,7 @@ module SwitchmanInstJobs
|
|
45
45
|
target_shards[target_shard] += [shard.id]
|
46
46
|
|
47
47
|
@validation_callbacks&.each do |proc|
|
48
|
-
proc.call(shard
|
48
|
+
proc.call(shard:, target_shard: ::Switchman::Shard.find(target_shard))
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
@@ -171,10 +171,10 @@ module SwitchmanInstJobs
|
|
171
171
|
# 4) is taken care of here, by leaving next_in_strand alone and
|
172
172
|
# it should execute on the new shard
|
173
173
|
batch_move_jobs(
|
174
|
-
target_shard
|
175
|
-
source_shard
|
174
|
+
target_shard:,
|
175
|
+
source_shard:,
|
176
176
|
scope: jobs_scope,
|
177
|
-
batch_size:
|
177
|
+
batch_size:
|
178
178
|
) do |job, new_job|
|
179
179
|
# This ensures jobs enqueued on the old jobs shard run before jobs on the new jobs queue
|
180
180
|
new_job.strand_order_override = job.strand_order_override - 1
|
@@ -190,7 +190,7 @@ module SwitchmanInstJobs
|
|
190
190
|
all_scope = ::Delayed::Job.shard(source_shard).where("strand IS NOT NULL OR singleton IS NOT NULL")
|
191
191
|
|
192
192
|
singleton_blocker_additional_kwargs = {
|
193
|
-
locked_at:
|
193
|
+
locked_at: Time.now.utc,
|
194
194
|
locked_by: ::Delayed::Backend::Base::ON_HOLD_BLOCKER
|
195
195
|
}
|
196
196
|
|
@@ -230,14 +230,16 @@ module SwitchmanInstJobs
|
|
230
230
|
blocked_shard_ids = blocked_shards.pluck(:id)
|
231
231
|
query = lambda { |column, scope|
|
232
232
|
::Delayed::Job
|
233
|
-
.where(id: ::Delayed::Job
|
234
|
-
.
|
233
|
+
.where(id: ::Delayed::Job
|
234
|
+
.with(all_col: ::Delayed::Job.and(scope).distinct.select(column))
|
235
|
+
.with(blocked_col: ::Delayed::Job.from("all_col").select(column).where.not(
|
236
|
+
::Delayed::Job.select(1)
|
237
|
+
.where(next_in_strand: true).or(::Delayed::Job.where(source: "JobsMigrator::StrandBlocker"))
|
238
|
+
.where("#{column} = all_col.#{column}").arel.exists
|
239
|
+
))
|
240
|
+
.select("DISTINCT ON (#{column}) id")
|
235
241
|
.where.not(shard_id: blocked_shard_ids)
|
236
|
-
.where(
|
237
|
-
::Delayed::Job.select(1).from("#{::Delayed::Job.quoted_table_name} dj2")
|
238
|
-
.where("dj2.next_in_strand = true OR dj2.source = 'JobsMigrator::StrandBlocker'")
|
239
|
-
.where("dj2.#{column} = delayed_jobs.#{column}").arel.exists.not
|
240
|
-
)
|
242
|
+
.where({ column => ::Delayed::Job.from("blocked_col").select(column) })
|
241
243
|
.order(column, :strand_order_override, :id)).limit(batch_size)
|
242
244
|
}
|
243
245
|
|
@@ -249,12 +251,13 @@ module SwitchmanInstJobs
|
|
249
251
|
# batches
|
250
252
|
|
251
253
|
loop do
|
252
|
-
break if query.call(:strand,
|
254
|
+
break if query.call(:strand, ::Delayed::Job.where.not(strand: nil)).update_all(next_in_strand: true).zero?
|
253
255
|
end
|
254
256
|
|
255
257
|
loop do
|
256
258
|
break if query.call(:singleton,
|
257
|
-
|
259
|
+
::Delayed::Job.where(strand: nil)
|
260
|
+
.where.not(singleton: nil)).update_all(next_in_strand: true).zero?
|
258
261
|
end
|
259
262
|
end
|
260
263
|
end
|
@@ -266,10 +269,10 @@ module SwitchmanInstJobs
|
|
266
269
|
shard_map = build_shard_map(scope, source_shard)
|
267
270
|
shard_map.each do |(target_shard, source_shard_ids)|
|
268
271
|
batch_move_jobs(
|
269
|
-
target_shard
|
270
|
-
source_shard
|
272
|
+
target_shard:,
|
273
|
+
source_shard:,
|
271
274
|
scope: scope.where(shard_id: source_shard_ids).where(locked_by: nil),
|
272
|
-
batch_size:
|
275
|
+
batch_size:
|
273
276
|
)
|
274
277
|
end
|
275
278
|
end
|
@@ -291,7 +294,7 @@ module SwitchmanInstJobs
|
|
291
294
|
end
|
292
295
|
|
293
296
|
def unblock_strand!(strand, new_parallelism: nil)
|
294
|
-
job_scope = ::Delayed::Job.where(strand:
|
297
|
+
job_scope = ::Delayed::Job.where(strand:)
|
295
298
|
raise JobsBlockedError if blocked_by_migrator?(job_scope)
|
296
299
|
|
297
300
|
::Delayed::Job.transaction do
|
@@ -321,7 +324,7 @@ module SwitchmanInstJobs
|
|
321
324
|
end
|
322
325
|
|
323
326
|
def unblock_singleton!(singleton)
|
324
|
-
job_scope = ::Delayed::Job.where(strand: nil, singleton:
|
327
|
+
job_scope = ::Delayed::Job.where(strand: nil, singleton:)
|
325
328
|
raise JobsBlockedError if blocked_by_migrator?(job_scope)
|
326
329
|
|
327
330
|
::Delayed::Job.transaction do
|
@@ -334,7 +337,7 @@ module SwitchmanInstJobs
|
|
334
337
|
if next_in_strand
|
335
338
|
0
|
336
339
|
elsif id
|
337
|
-
::Delayed::Job.where(id:
|
340
|
+
::Delayed::Job.where(id:).update_all(next_in_strand: true)
|
338
341
|
end
|
339
342
|
end
|
340
343
|
end
|
@@ -403,7 +406,7 @@ module SwitchmanInstJobs
|
|
403
406
|
@before_move_callbacks&.each do |proc|
|
404
407
|
proc.call(
|
405
408
|
old_job: job,
|
406
|
-
new_job:
|
409
|
+
new_job:
|
407
410
|
)
|
408
411
|
end
|
409
412
|
new_job
|
@@ -6,14 +6,14 @@ module SwitchmanInstJobs
|
|
6
6
|
module NewRelicJobInvoker
|
7
7
|
include ::NewRelic::Agent::Instrumentation::ControllerInstrumentation if defined?(::NewRelic)
|
8
8
|
|
9
|
-
def invoke_job(
|
9
|
+
def invoke_job(...)
|
10
10
|
options = {
|
11
11
|
category: NR_TRANSACTION_CATEGORY,
|
12
12
|
path: tag
|
13
13
|
}
|
14
14
|
|
15
15
|
perform_action_with_newrelic_trace(options) do
|
16
|
-
super(
|
16
|
+
super(...)
|
17
17
|
end
|
18
18
|
end
|
19
19
|
end
|
@@ -100,7 +100,7 @@ module SwitchmanInstJobs
|
|
100
100
|
|
101
101
|
def periodic_clear_shard_cache
|
102
102
|
# TODO: make this configurable
|
103
|
-
@timed_cache ||= TimedCache.new(-> { 60.
|
103
|
+
@timed_cache ||= TimedCache.new(-> { 60.seconds.ago }) do
|
104
104
|
::Switchman::Shard.clear_cache
|
105
105
|
end
|
106
106
|
@timed_cache.clear
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: switchman-inst-jobs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0
|
4
|
+
version: 4.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bryan Petty
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-
|
11
|
+
date: 2025-08-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: inst-jobs
|
@@ -50,20 +50,20 @@ dependencies:
|
|
50
50
|
requirements:
|
51
51
|
- - ">="
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: '
|
53
|
+
version: '7.0'
|
54
54
|
- - "<"
|
55
55
|
- !ruby/object:Gem::Version
|
56
|
-
version: '
|
56
|
+
version: '8.0'
|
57
57
|
type: :runtime
|
58
58
|
prerelease: false
|
59
59
|
version_requirements: !ruby/object:Gem::Requirement
|
60
60
|
requirements:
|
61
61
|
- - ">="
|
62
62
|
- !ruby/object:Gem::Version
|
63
|
-
version: '
|
63
|
+
version: '7.0'
|
64
64
|
- - "<"
|
65
65
|
- !ruby/object:Gem::Version
|
66
|
-
version: '
|
66
|
+
version: '8.0'
|
67
67
|
- !ruby/object:Gem::Dependency
|
68
68
|
name: switchman
|
69
69
|
requirement: !ruby/object:Gem::Requirement
|
@@ -84,202 +84,6 @@ dependencies:
|
|
84
84
|
- - "<"
|
85
85
|
- !ruby/object:Gem::Version
|
86
86
|
version: '5.0'
|
87
|
-
- !ruby/object:Gem::Dependency
|
88
|
-
name: bundler
|
89
|
-
requirement: !ruby/object:Gem::Requirement
|
90
|
-
requirements:
|
91
|
-
- - ">="
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
version: '0'
|
94
|
-
type: :development
|
95
|
-
prerelease: false
|
96
|
-
version_requirements: !ruby/object:Gem::Requirement
|
97
|
-
requirements:
|
98
|
-
- - ">="
|
99
|
-
- !ruby/object:Gem::Version
|
100
|
-
version: '0'
|
101
|
-
- !ruby/object:Gem::Dependency
|
102
|
-
name: byebug
|
103
|
-
requirement: !ruby/object:Gem::Requirement
|
104
|
-
requirements:
|
105
|
-
- - ">="
|
106
|
-
- !ruby/object:Gem::Version
|
107
|
-
version: '0'
|
108
|
-
type: :development
|
109
|
-
prerelease: false
|
110
|
-
version_requirements: !ruby/object:Gem::Requirement
|
111
|
-
requirements:
|
112
|
-
- - ">="
|
113
|
-
- !ruby/object:Gem::Version
|
114
|
-
version: '0'
|
115
|
-
- !ruby/object:Gem::Dependency
|
116
|
-
name: diplomat
|
117
|
-
requirement: !ruby/object:Gem::Requirement
|
118
|
-
requirements:
|
119
|
-
- - "~>"
|
120
|
-
- !ruby/object:Gem::Version
|
121
|
-
version: 2.5.1
|
122
|
-
type: :development
|
123
|
-
prerelease: false
|
124
|
-
version_requirements: !ruby/object:Gem::Requirement
|
125
|
-
requirements:
|
126
|
-
- - "~>"
|
127
|
-
- !ruby/object:Gem::Version
|
128
|
-
version: 2.5.1
|
129
|
-
- !ruby/object:Gem::Dependency
|
130
|
-
name: newrelic_rpm
|
131
|
-
requirement: !ruby/object:Gem::Requirement
|
132
|
-
requirements:
|
133
|
-
- - ">="
|
134
|
-
- !ruby/object:Gem::Version
|
135
|
-
version: '0'
|
136
|
-
type: :development
|
137
|
-
prerelease: false
|
138
|
-
version_requirements: !ruby/object:Gem::Requirement
|
139
|
-
requirements:
|
140
|
-
- - ">="
|
141
|
-
- !ruby/object:Gem::Version
|
142
|
-
version: '0'
|
143
|
-
- !ruby/object:Gem::Dependency
|
144
|
-
name: pg
|
145
|
-
requirement: !ruby/object:Gem::Requirement
|
146
|
-
requirements:
|
147
|
-
- - "~>"
|
148
|
-
- !ruby/object:Gem::Version
|
149
|
-
version: '1.0'
|
150
|
-
type: :development
|
151
|
-
prerelease: false
|
152
|
-
version_requirements: !ruby/object:Gem::Requirement
|
153
|
-
requirements:
|
154
|
-
- - "~>"
|
155
|
-
- !ruby/object:Gem::Version
|
156
|
-
version: '1.0'
|
157
|
-
- !ruby/object:Gem::Dependency
|
158
|
-
name: pry
|
159
|
-
requirement: !ruby/object:Gem::Requirement
|
160
|
-
requirements:
|
161
|
-
- - "~>"
|
162
|
-
- !ruby/object:Gem::Version
|
163
|
-
version: '0'
|
164
|
-
type: :development
|
165
|
-
prerelease: false
|
166
|
-
version_requirements: !ruby/object:Gem::Requirement
|
167
|
-
requirements:
|
168
|
-
- - "~>"
|
169
|
-
- !ruby/object:Gem::Version
|
170
|
-
version: '0'
|
171
|
-
- !ruby/object:Gem::Dependency
|
172
|
-
name: rake
|
173
|
-
requirement: !ruby/object:Gem::Requirement
|
174
|
-
requirements:
|
175
|
-
- - "~>"
|
176
|
-
- !ruby/object:Gem::Version
|
177
|
-
version: '13'
|
178
|
-
type: :development
|
179
|
-
prerelease: false
|
180
|
-
version_requirements: !ruby/object:Gem::Requirement
|
181
|
-
requirements:
|
182
|
-
- - "~>"
|
183
|
-
- !ruby/object:Gem::Version
|
184
|
-
version: '13'
|
185
|
-
- !ruby/object:Gem::Dependency
|
186
|
-
name: rspec
|
187
|
-
requirement: !ruby/object:Gem::Requirement
|
188
|
-
requirements:
|
189
|
-
- - "~>"
|
190
|
-
- !ruby/object:Gem::Version
|
191
|
-
version: '3.10'
|
192
|
-
type: :development
|
193
|
-
prerelease: false
|
194
|
-
version_requirements: !ruby/object:Gem::Requirement
|
195
|
-
requirements:
|
196
|
-
- - "~>"
|
197
|
-
- !ruby/object:Gem::Version
|
198
|
-
version: '3.10'
|
199
|
-
- !ruby/object:Gem::Dependency
|
200
|
-
name: rspec-rails
|
201
|
-
requirement: !ruby/object:Gem::Requirement
|
202
|
-
requirements:
|
203
|
-
- - "~>"
|
204
|
-
- !ruby/object:Gem::Version
|
205
|
-
version: '5.0'
|
206
|
-
type: :development
|
207
|
-
prerelease: false
|
208
|
-
version_requirements: !ruby/object:Gem::Requirement
|
209
|
-
requirements:
|
210
|
-
- - "~>"
|
211
|
-
- !ruby/object:Gem::Version
|
212
|
-
version: '5.0'
|
213
|
-
- !ruby/object:Gem::Dependency
|
214
|
-
name: rubocop-inst
|
215
|
-
requirement: !ruby/object:Gem::Requirement
|
216
|
-
requirements:
|
217
|
-
- - "~>"
|
218
|
-
- !ruby/object:Gem::Version
|
219
|
-
version: '1'
|
220
|
-
type: :development
|
221
|
-
prerelease: false
|
222
|
-
version_requirements: !ruby/object:Gem::Requirement
|
223
|
-
requirements:
|
224
|
-
- - "~>"
|
225
|
-
- !ruby/object:Gem::Version
|
226
|
-
version: '1'
|
227
|
-
- !ruby/object:Gem::Dependency
|
228
|
-
name: rubocop-rails
|
229
|
-
requirement: !ruby/object:Gem::Requirement
|
230
|
-
requirements:
|
231
|
-
- - "~>"
|
232
|
-
- !ruby/object:Gem::Version
|
233
|
-
version: '2.10'
|
234
|
-
type: :development
|
235
|
-
prerelease: false
|
236
|
-
version_requirements: !ruby/object:Gem::Requirement
|
237
|
-
requirements:
|
238
|
-
- - "~>"
|
239
|
-
- !ruby/object:Gem::Version
|
240
|
-
version: '2.10'
|
241
|
-
- !ruby/object:Gem::Dependency
|
242
|
-
name: rubocop-rake
|
243
|
-
requirement: !ruby/object:Gem::Requirement
|
244
|
-
requirements:
|
245
|
-
- - "~>"
|
246
|
-
- !ruby/object:Gem::Version
|
247
|
-
version: '0.6'
|
248
|
-
type: :development
|
249
|
-
prerelease: false
|
250
|
-
version_requirements: !ruby/object:Gem::Requirement
|
251
|
-
requirements:
|
252
|
-
- - "~>"
|
253
|
-
- !ruby/object:Gem::Version
|
254
|
-
version: '0.6'
|
255
|
-
- !ruby/object:Gem::Dependency
|
256
|
-
name: rubocop-rspec
|
257
|
-
requirement: !ruby/object:Gem::Requirement
|
258
|
-
requirements:
|
259
|
-
- - "~>"
|
260
|
-
- !ruby/object:Gem::Version
|
261
|
-
version: '2.4'
|
262
|
-
type: :development
|
263
|
-
prerelease: false
|
264
|
-
version_requirements: !ruby/object:Gem::Requirement
|
265
|
-
requirements:
|
266
|
-
- - "~>"
|
267
|
-
- !ruby/object:Gem::Version
|
268
|
-
version: '2.4'
|
269
|
-
- !ruby/object:Gem::Dependency
|
270
|
-
name: simplecov
|
271
|
-
requirement: !ruby/object:Gem::Requirement
|
272
|
-
requirements:
|
273
|
-
- - "~>"
|
274
|
-
- !ruby/object:Gem::Version
|
275
|
-
version: '0.21'
|
276
|
-
type: :development
|
277
|
-
prerelease: false
|
278
|
-
version_requirements: !ruby/object:Gem::Requirement
|
279
|
-
requirements:
|
280
|
-
- - "~>"
|
281
|
-
- !ruby/object:Gem::Version
|
282
|
-
version: '0.21'
|
283
87
|
description:
|
284
88
|
email:
|
285
89
|
- bpetty@instructure.com
|
@@ -367,7 +171,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
367
171
|
requirements:
|
368
172
|
- - ">="
|
369
173
|
- !ruby/object:Gem::Version
|
370
|
-
version: '3.
|
174
|
+
version: '3.1'
|
371
175
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
372
176
|
requirements:
|
373
177
|
- - ">="
|