rjob 0.4.4 → 0.5.2

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: e13e3bdb56490d8d69d74ca45483eb53c53bbe5510d0155f1f8edabe309171ab
4
- data.tar.gz: 9ebca9b23880e8cf3c682d9d63b8a34bd8c444873c983e5196914b0169202676
3
+ metadata.gz: 3499587dfa6fa5db867d088dfc0f48757a204df0cd07a252c3f880ce827effe6
4
+ data.tar.gz: 6ff88dc58d9e39eb337980b4fe1241bd3afb493cd15aff370ab463e4b2d086b6
5
5
  SHA512:
6
- metadata.gz: eb27291eb3a62b0e64ea79a21769b7ef1358d62a5bea4b47a0c2dfe90795943e6ef85c23aaa805655637771802999e7da617a689e7fdbd1fc1e1dec1178adb26
7
- data.tar.gz: f9887d29d557888890c6f657a374d481dff1643eedaaf7f66b87b8357b51a1eb8737e929096730c55dd4e5e504f525b7b98153138ad8ee2c4b8bbd740fec50ab
6
+ metadata.gz: 77d9c95f465434e5efc942b5dca1a98c64bc2f15c2c12691b258f993569c68c29f1146958e8856633e9bee32bcc82119d687b3ee37a29eb6fa5163238eeacf08
7
+ data.tar.gz: 523ff1e067f99d9fb632c248d7b07157112d0d6197574e717d319900f76e8c646698f692388760dccb521abfbf36f88fe01b5c01614ec71f0b28fcf7319c5a71
data/lib/rjob/job.rb CHANGED
@@ -30,7 +30,7 @@ class Rjob::Job
30
30
  end
31
31
 
32
32
  def serialize
33
- "#{@id}!#{@retry_num}!#{@payload}".force_encoding(Encoding::ASCII_8BIT)
33
+ "#{@id}!#{@retry_num}!#{@payload}".b
34
34
  end
35
35
 
36
36
  def self.deserialize(context, job_str)
@@ -20,7 +20,7 @@ class Rjob::RecurringJob
20
20
  end
21
21
 
22
22
  def maybe_enqueue(redis)
23
- key_name = "#{@context.prefix}:recurring:1:#{@unique_id}:lastrun"
23
+ key_name = "#{@context.prefix}:recurring:1:#{@unique_id}:lastrun".b
24
24
  current_time = Time.now
25
25
 
26
26
  last_run_str = redis.get(key_name)
data/lib/rjob/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
 
2
2
  module Rjob
3
- VERSION = "0.4.4".freeze
3
+ VERSION = "0.5.2".freeze
4
4
  end
@@ -24,6 +24,7 @@ class Rjob::WorkerProcess
24
24
  @max_queue_size = 20
25
25
  max_threads = @context.config.fetch(:max_threads, 2)
26
26
 
27
+ @subscription_mutex = Mutex.new
27
28
  @subscription_thread = nil
28
29
  @thread_pool = Concurrent::ThreadPoolExecutor.new(
29
30
  min_threads: [2, max_threads].min,
@@ -66,7 +67,10 @@ class Rjob::WorkerProcess
66
67
 
67
68
  def disable_subscription_thread
68
69
  return unless @subscription_thread
69
- @subscription_thread.raise(StopSubscription.new)
70
+ @subscription_mutex.synchronize do
71
+ @subscription_thread.raise(StopSubscription.new)
72
+ end
73
+
70
74
  @subscription_thread = nil
71
75
  end
72
76
 
@@ -79,7 +83,10 @@ class Rjob::WorkerProcess
79
83
  on.message do |_, bucket_no|
80
84
  loop do
81
85
  break unless @state == :running
82
- break unless start_processing_message_from_bucket(bucket_no)
86
+
87
+ @subscription_mutex.synchronize do
88
+ break unless start_processing_message_from_bucket(bucket_no)
89
+ end
83
90
  end
84
91
  end
85
92
  end
@@ -91,45 +98,42 @@ class Rjob::WorkerProcess
91
98
  exit 1
92
99
  end
93
100
  end
101
+
94
102
  @subscription_thread.run
95
103
  end
96
104
 
97
105
  def run_iteration
98
- begin
99
- stop_threshold = (@max_queue_size * 0.7).to_i
100
- if @thread_pool.queue_length >= stop_threshold || @state != :running
101
- disable_subscription_thread
102
- elsif @state == :running
103
- if !@subscription_thread
104
- enable_subscription_thread
105
- sleep(ITERATION_TIMEOUT)
106
- scan_buckets
107
- end
106
+ stop_threshold = (@max_queue_size * 0.7).to_i
107
+ if @thread_pool.queue_length >= stop_threshold || @state != :running
108
+ disable_subscription_thread
109
+ elsif @state == :running
110
+ if !@subscription_thread
111
+ enable_subscription_thread
112
+ sleep(ITERATION_TIMEOUT)
113
+ scan_buckets
108
114
  end
115
+ end
109
116
 
110
- if @state == :exiting
111
- if @thread_pool.shutdown?
112
- @state = :exited
113
- elsif !@thread_pool.shuttingdown?
114
- @thread_pool.shutdown
115
- else
116
- puts "Waiting shutdown..."
117
- end
117
+ if @state == :exiting
118
+ if @thread_pool.shutdown?
119
+ @state = :exited
120
+ elsif !@thread_pool.shuttingdown?
121
+ @thread_pool.shutdown
122
+ else
123
+ puts "Waiting shutdown..."
118
124
  end
125
+ end
119
126
 
120
- report_stats
121
-
122
- check_leadership
127
+ report_stats
123
128
 
124
- if leader? && @state == :running
125
- exercise_leadership if @iteration_no % 2 == 0
126
- end
129
+ check_leadership
127
130
 
128
- @iteration_no += 1
129
- sleep(ITERATION_TIMEOUT) unless @state == :exited
130
- rescue StandardError => e
131
- raise e
131
+ if leader? && @state == :running
132
+ exercise_leadership if @iteration_no % 2 == 0
132
133
  end
134
+
135
+ @iteration_no += 1
136
+ sleep(ITERATION_TIMEOUT) unless @state == :exited
133
137
  end
134
138
 
135
139
  def check_leadership
@@ -165,9 +169,9 @@ class Rjob::WorkerProcess
165
169
  }
166
170
 
167
171
  @context.redis do |r|
168
- r.pipelined do
172
+ r.pipelined do |pl|
169
173
  state_data.each do |k, v|
170
- r.hset(key_prefix, k, v.to_s)
174
+ pl.hset(key_prefix, k, v.to_s)
171
175
  end
172
176
  end
173
177
  end
@@ -186,6 +190,8 @@ class Rjob::WorkerProcess
186
190
 
187
191
  return false if job_str == nil
188
192
 
193
+ job_str = job_str.b
194
+
189
195
  # move to inside thread
190
196
  job_processor = Rjob::JobProcessor.new(context, job_str)
191
197
 
@@ -202,7 +208,7 @@ class Rjob::WorkerProcess
202
208
  remove_job_from_working(job_str, bucket)
203
209
  end
204
210
  end
205
- rescue Concurrent::RejectedExecutionError => e
211
+ rescue Concurrent::RejectedExecutionError
206
212
  @returned_count.increment
207
213
  return_job_execution(job_str, bucket)
208
214
  ensure
@@ -221,8 +227,8 @@ class Rjob::WorkerProcess
221
227
  @context.script_runner.exec(r, :retry_job, [],
222
228
  [
223
229
  next_retry_at.to_s,
224
- job.retry_num,
225
- bucket,
230
+ job.retry_num.to_s,
231
+ bucket.to_s,
226
232
  job.id.to_s,
227
233
  job.payload,
228
234
  @prefix
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rjob
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.4
4
+ version: 0.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - André D. Piske
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-06-19 00:00:00.000000000 Z
11
+ date: 2022-04-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oj
@@ -42,16 +42,16 @@ dependencies:
42
42
  name: redis
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '4.1'
47
+ version: 3.0.5
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '4.1'
54
+ version: 3.0.5
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: msgpack
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -100,20 +100,6 @@ dependencies:
100
100
  - - "~>"
101
101
  - !ruby/object:Gem::Version
102
102
  version: 1.1.6
103
- - !ruby/object:Gem::Dependency
104
- name: rake
105
- requirement: !ruby/object:Gem::Requirement
106
- requirements:
107
- - - "~>"
108
- - !ruby/object:Gem::Version
109
- version: '13.0'
110
- type: :runtime
111
- prerelease: false
112
- version_requirements: !ruby/object:Gem::Requirement
113
- requirements:
114
- - - "~>"
115
- - !ruby/object:Gem::Version
116
- version: '13.0'
117
103
  description: 'RJob: asynchronous job processing'
118
104
  email: andrepiske@gmail.com
119
105
  executables:
@@ -142,7 +128,8 @@ files:
142
128
  - lib/rjob/worker.rb
143
129
  - lib/rjob/worker_process.rb
144
130
  homepage: https://gitlab.com/andrepiske/rjob
145
- licenses: []
131
+ licenses:
132
+ - Apache-2.0
146
133
  metadata: {}
147
134
  post_install_message:
148
135
  rdoc_options: []
@@ -159,7 +146,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
159
146
  - !ruby/object:Gem::Version
160
147
  version: '0'
161
148
  requirements: []
162
- rubygems_version: 3.2.18
149
+ rubygems_version: 3.3.11
163
150
  signing_key:
164
151
  specification_version: 4
165
152
  summary: Asynchronous job processing