switchman-inst-jobs 1.3.5 → 1.4.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6175dabd6f8d0d343728a55d9cee438df89cdef4f3f71a17c9aeddd9e4f8cf54
4
- data.tar.gz: 71281b6a418355f247d8bc9840be991eaff15939b4b48eb5766fe485dcb58d08
3
+ metadata.gz: 6ea858af15b508930d58fd21c5c097c4cedc0f244ef12f7d529120d79483322d
4
+ data.tar.gz: e431ab3d85859d0dc3acc5e95fbb820bc272c51bc4124615f0bc314c7d6f311a
5
5
  SHA512:
6
- metadata.gz: dd79f316dd7b2dc21e754f8c7b2a42e01bfad995146ed32d28b23883d8e56aff32428046a9715970ca349357bacf6db5dfb9f250161c595d69c17405fbefd94f
7
- data.tar.gz: f42b6c28e9956c4301e92d016d65fd69dfe1dc686d1754a4e1d94575987fd38024f35418f34a69029b539bfdc9ebce241c0fc84c88ff9739bb4649baecafde3c
6
+ metadata.gz: 263dc8ef6c816010d058a8033487a3ed89d6978accf1f16f73ebbc311ece6266f57333c80cf9a9f27d738359638e317e3179a2181d6940efbf8c522a02ba6a67
7
+ data.tar.gz: a7078f7f69c97e18cabbaa0ab3c4e1ef9df08472b29f2fe188cc83353b0759333e806a72e72bccdd6a635e642f75c5008092595be0ad3b6bbda114e27ce8723a
@@ -64,12 +64,14 @@ module SwitchmanInstJobs
64
64
 
65
65
  def deserialize(source)
66
66
  raise ShardNotFoundError, shard_id unless current_shard
67
+
67
68
  current_shard.activate { super }
68
69
  rescue ::Switchman::ConnectionError, PG::ConnectionBad, PG::UndefinedTable
69
70
  # likely a missing shard with a stale cache
70
71
  current_shard.send(:clear_cache)
71
72
  ::Switchman::Shard.clear_cache
72
73
  raise ShardNotFoundError, shard_id unless ::Switchman::Shard.where(id: shard_id).exists?
74
+
73
75
  raise
74
76
  end
75
77
  end
@@ -3,6 +3,7 @@ module SwitchmanInstJobs
3
3
  module MessageSending
4
4
  def send_later_enqueue_args(method, _enqueue_args = {}, *args)
5
5
  return send(method, *args) if ::Switchman::DatabaseServer.creating_new_shard
6
+
6
7
  super
7
8
  end
8
9
  end
@@ -20,17 +20,20 @@ module SwitchmanInstJobs
20
20
 
21
21
  def reschedule_abandoned_jobs(call_super: false)
22
22
  shards = ::Switchman::Shard.delayed_jobs_shards
23
- call_super = true if shards.length == 1
24
- if call_super
25
- return munge_service_name(::Switchman::Shard.current(:delayed_jobs)) { super() }
23
+ call_super = shards.first if shards.length == 1
24
+ unless call_super == false
25
+ call_super.activate(:delayed_jobs) do
26
+ return munge_service_name(call_super) { super() }
27
+ end
26
28
  end
27
29
 
28
30
  ::Switchman::Shard.with_each_shard(shards, [:delayed_jobs], exception: :ignore) do
31
+ shard = ::Switchman::Shard.current(:delayed_jobs)
29
32
  singleton = <<~SINGLETON
30
- periodic: Delayed::Worker::HealthCheck.reschedule_abandoned_jobs:#{::Switchman::Shard.current(:delayed_jobs).id}
33
+ periodic: Delayed::Worker::HealthCheck.reschedule_abandoned_jobs:#{shard.id}
31
34
  SINGLETON
32
35
  send_later_enqueue_args(
33
- :reschedule_abandoned_jobs, { singleton: singleton }, call_super: true
36
+ :reschedule_abandoned_jobs, { singleton: singleton }, call_super: shard
34
37
  )
35
38
  end
36
39
  end
@@ -8,6 +8,14 @@ module SwitchmanInstJobs
8
8
 
9
9
  initializer 'sharding.delayed' do
10
10
  SwitchmanInstJobs.initialize_inst_jobs
11
+
12
+ ::Delayed::Worker.lifecycle.around(:work_queue_pop) do |worker, config, &block|
13
+ if config[:shard]
14
+ ::Switchman::Shard.lookup(config[:shard]).activate(:delayed_jobs) { block.call(worker, config) }
15
+ else
16
+ block.call(worker, config)
17
+ end
18
+ end
11
19
  end
12
20
 
13
21
  initializer 'sharding.shackles', after: 'switchman.extend_shackles' do
@@ -2,9 +2,7 @@ module SwitchmanInstJobs
2
2
  module NewRelic
3
3
  module FixNewRelicDelayedJobs
4
4
  module NewRelicJobInvoker
5
- if defined?(::NewRelic)
6
- include ::NewRelic::Agent::Instrumentation::ControllerInstrumentation
7
- end
5
+ include ::NewRelic::Agent::Instrumentation::ControllerInstrumentation if defined?(::NewRelic)
8
6
 
9
7
  def invoke_job(*args, &block)
10
8
  options = {
@@ -3,12 +3,18 @@ module SwitchmanInstJobs
3
3
  module DatabaseServer
4
4
  def delayed_jobs_shard(shard = nil)
5
5
  return shard if config[:delayed_jobs_shard] == 'self'
6
+
6
7
  dj_shard =
7
8
  config[:delayed_jobs_shard] &&
8
9
  ::Switchman::Shard.lookup(config[:delayed_jobs_shard])
9
10
  # have to avoid recursion for the default shard asking for the default
10
11
  # shard's delayed_jobs_shard
11
- dj_shard ||= shard if shard&.default?
12
+ if shard&.default?
13
+ # first look for any shard that behaves like a jobs shard
14
+ dj_shard ||= ::Switchman::Shard.delayed_jobs_shards.first
15
+ # we're really truly out of options, use the default shard itself
16
+ dj_shard ||= shard
17
+ end
12
18
  dj_shard ||= SwitchmanInstJobs.delayed_jobs_shard_fallback&.call(self, shard)
13
19
  dj_shard || ::Switchman::Shard.default.delayed_jobs_shard
14
20
  end
@@ -18,6 +18,11 @@ module SwitchmanInstJobs
18
18
  end
19
19
 
20
20
  module ClassMethods
21
+ def clear_cache
22
+ super
23
+ remove_instance_variable(:@delayed_jobs_shards) if instance_variable_defined?(:@delayed_jobs_shards)
24
+ end
25
+
21
26
  def current(category = :primary)
22
27
  if category == :delayed_jobs
23
28
  active_shards[category] || super(:primary).delayed_jobs_shard
@@ -53,19 +58,32 @@ module SwitchmanInstJobs
53
58
  end
54
59
 
55
60
  def delayed_jobs_shards
56
- @delayed_jobs_shards ||= begin
57
- db_dj_shards = ::Switchman::DatabaseServer.all.map do |db|
58
- next db.shards.to_a if db.config[:delayed_jobs_shard] == 'self'
59
- db.delayed_jobs_shard
60
- end.compact.flatten.uniq # yes, all three
61
- shard_dj_shards = ::Switchman::Shard
62
- .where.not(delayed_jobs_shard_id: nil)
63
- .distinct
64
- .pluck(:delayed_jobs_shard_id)
65
- .map { |id| ::Switchman::Shard.lookup(id) }
66
- .compact
67
- (db_dj_shards + shard_dj_shards).uniq.sort
61
+ unless instance_variable_defined?(:@delayed_jobs_shards)
62
+ # re-entrancy protection
63
+ @delayed_jobs_shards = begin
64
+ shard_dj_shards = [] unless ::Switchman::Shard.columns_hash.key?('delayed_jobs_shard_id')
65
+ shard_dj_shards ||= begin
66
+ ::Switchman::Shard
67
+ .where.not(delayed_jobs_shard_id: nil)
68
+ .distinct
69
+ .pluck(:delayed_jobs_shard_id)
70
+ .map { |id| ::Switchman::Shard.lookup(id) }
71
+ .compact
72
+ end
73
+ # set it temporarily, to avoid the default shard falling back to itself
74
+ # if other shards are usable
75
+ @delayed_jobs_shards = shard_dj_shards.uniq.sort
76
+
77
+ db_dj_shards = ::Switchman::DatabaseServer.all.map do |db|
78
+ next db.shards.to_a if db.config[:delayed_jobs_shard] == 'self'
79
+
80
+ db.delayed_jobs_shard
81
+ end.compact.flatten.uniq # yes, all three
82
+
83
+ (db_dj_shards + shard_dj_shards).uniq.sort
84
+ end
68
85
  end
86
+ @delayed_jobs_shards
69
87
  end
70
88
  end
71
89
  end
@@ -1,3 +1,3 @@
1
1
  module SwitchmanInstJobs
2
- VERSION = '1.3.5'.freeze
2
+ VERSION = '1.4.3'.freeze
3
3
  end
@@ -5,7 +5,7 @@ module SwitchmanInstJobs
5
5
  if object.tag == '!ruby/ActiveRecord:Switchman::Shard'
6
6
  ::Switchman::Shard.lookup(object.value) ||
7
7
  raise(Delayed::Backend::RecordNotFound,
8
- "Couldn't find Switchman::Shard with id #{object.value.inspect}")
8
+ "Couldn't find Switchman::Shard with id #{object.value.inspect}")
9
9
  else
10
10
  super
11
11
  end
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: 1.3.5
4
+ version: 1.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bryan Petty
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-07-30 00:00:00.000000000 Z
11
+ date: 2020-08-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: inst-jobs
@@ -16,7 +16,7 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.12.1
19
+ version: '0.15'
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
22
  version: '0.16'
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: 0.12.1
29
+ version: '0.15'
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: '0.16'
@@ -36,7 +36,7 @@ dependencies:
36
36
  requirements:
37
37
  - - ">="
38
38
  - !ruby/object:Gem::Version
39
- version: '4.2'
39
+ version: '5.2'
40
40
  - - "<"
41
41
  - !ruby/object:Gem::Version
42
42
  version: '6.1'
@@ -46,7 +46,7 @@ dependencies:
46
46
  requirements:
47
47
  - - ">="
48
48
  - !ruby/object:Gem::Version
49
- version: '4.2'
49
+ version: '5.2'
50
50
  - - "<"
51
51
  - !ruby/object:Gem::Version
52
52
  version: '6.1'
@@ -56,20 +56,20 @@ dependencies:
56
56
  requirements:
57
57
  - - ">="
58
58
  - !ruby/object:Gem::Version
59
- version: 1.9.7
59
+ version: '1.14'
60
60
  - - "<"
61
61
  - !ruby/object:Gem::Version
62
- version: '1.15'
62
+ version: '1.16'
63
63
  type: :runtime
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - ">="
68
68
  - !ruby/object:Gem::Version
69
- version: 1.9.7
69
+ version: '1.14'
70
70
  - - "<"
71
71
  - !ruby/object:Gem::Version
72
- version: '1.15'
72
+ version: '1.16'
73
73
  - !ruby/object:Gem::Dependency
74
74
  name: bundler
75
75
  requirement: !ruby/object:Gem::Requirement
@@ -132,14 +132,14 @@ dependencies:
132
132
  requirements:
133
133
  - - "~>"
134
134
  - !ruby/object:Gem::Version
135
- version: '0'
135
+ version: '1.0'
136
136
  type: :development
137
137
  prerelease: false
138
138
  version_requirements: !ruby/object:Gem::Requirement
139
139
  requirements:
140
140
  - - "~>"
141
141
  - !ruby/object:Gem::Version
142
- version: '0'
142
+ version: '1.0'
143
143
  - !ruby/object:Gem::Dependency
144
144
  name: pry
145
145
  requirement: !ruby/object:Gem::Requirement
@@ -160,14 +160,14 @@ dependencies:
160
160
  requirements:
161
161
  - - "~>"
162
162
  - !ruby/object:Gem::Version
163
- version: '12.0'
163
+ version: '12'
164
164
  type: :development
165
165
  prerelease: false
166
166
  version_requirements: !ruby/object:Gem::Requirement
167
167
  requirements:
168
168
  - - "~>"
169
169
  - !ruby/object:Gem::Version
170
- version: '12.0'
170
+ version: '12'
171
171
  - !ruby/object:Gem::Dependency
172
172
  name: rspec
173
173
  requirement: !ruby/object:Gem::Requirement
@@ -202,42 +202,56 @@ dependencies:
202
202
  requirements:
203
203
  - - "~>"
204
204
  - !ruby/object:Gem::Version
205
- version: 0.57.2
205
+ version: 0.79.0
206
+ type: :development
207
+ prerelease: false
208
+ version_requirements: !ruby/object:Gem::Requirement
209
+ requirements:
210
+ - - "~>"
211
+ - !ruby/object:Gem::Version
212
+ version: 0.79.0
213
+ - !ruby/object:Gem::Dependency
214
+ name: rubocop-rails
215
+ requirement: !ruby/object:Gem::Requirement
216
+ requirements:
217
+ - - "~>"
218
+ - !ruby/object:Gem::Version
219
+ version: 2.4.2
206
220
  type: :development
207
221
  prerelease: false
208
222
  version_requirements: !ruby/object:Gem::Requirement
209
223
  requirements:
210
224
  - - "~>"
211
225
  - !ruby/object:Gem::Version
212
- version: 0.57.2
226
+ version: 2.4.2
213
227
  - !ruby/object:Gem::Dependency
214
228
  name: simplecov
215
229
  requirement: !ruby/object:Gem::Requirement
216
230
  requirements:
217
231
  - - "~>"
218
232
  - !ruby/object:Gem::Version
219
- version: '0.14'
233
+ version: '0.18'
220
234
  type: :development
221
235
  prerelease: false
222
236
  version_requirements: !ruby/object:Gem::Requirement
223
237
  requirements:
224
238
  - - "~>"
225
239
  - !ruby/object:Gem::Version
226
- version: '0.14'
240
+ version: '0.18'
227
241
  - !ruby/object:Gem::Dependency
228
242
  name: wwtd
229
243
  requirement: !ruby/object:Gem::Requirement
230
244
  requirements:
231
245
  - - "~>"
232
246
  - !ruby/object:Gem::Version
233
- version: 1.3.0
247
+ version: '1.4'
234
248
  type: :development
235
249
  prerelease: false
236
250
  version_requirements: !ruby/object:Gem::Requirement
237
251
  requirements:
238
252
  - - "~>"
239
253
  - !ruby/object:Gem::Version
240
- version: 1.3.0
254
+ version: '1.4'
241
255
  description:
242
256
  email:
243
257
  - bpetty@instructure.com
@@ -276,14 +290,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
276
290
  requirements:
277
291
  - - ">="
278
292
  - !ruby/object:Gem::Version
279
- version: '2.3'
293
+ version: '2.4'
280
294
  required_rubygems_version: !ruby/object:Gem::Requirement
281
295
  requirements:
282
296
  - - ">="
283
297
  - !ruby/object:Gem::Version
284
298
  version: '0'
285
299
  requirements: []
286
- rubygems_version: 3.0.3
300
+ rubygems_version: 3.1.4
287
301
  signing_key:
288
302
  specification_version: 4
289
303
  summary: Switchman and Instructure Jobs compatibility gem.