lowkiq 1.1.0 → 1.2.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: 1737d4cbb8058600c3c3b162c6d48b8749d5f1750524538f73300fbcd0090269
4
- data.tar.gz: 6014eb81fa0550a93efa7e04d2785bc4616f8f004563c906fd9f3ee930ba3183
3
+ metadata.gz: 97231d250b03b74533a83cc66b69aafcab6422a55b83ad4a479d4898c00a2b9b
4
+ data.tar.gz: 6e29b0b370b9a201d10b3398fd1ed24a87efed091183a02cb29fea68625cf8fd
5
5
  SHA512:
6
- metadata.gz: 16bb89de9f1f25a745602e70ae9e172fb85cbbad9b9ed50061fd6c3c74dd0122c204c7b6c973bbb02e2c891bc45449882da479a3b59b5108b65073b9d000e8a2
7
- data.tar.gz: 0d9c5316a08272e539c34a1cda2e688348b93f3c255ec9c2faef8f3db7363e1e8e87402a4cda880cce95249e2120686f86d05bdba5bb117c3cefb079885bc52f
6
+ metadata.gz: 4275cf8a1235c9c5f527b40b011edaea72bebda8493128a8029c35c5cd166288ffb01187e39d6a301b132d27b3cd6d32f7b9f9cfec9d6fa0e3edfe943eaa0da2
7
+ data.tar.gz: 46b65d96ffbc183fa47e85b487f88fe0d9aee256eb379be9fe20fcdc54c0239dcd4fecc2873c14a460024cb3f764c4a1797805b77c7b8d2f1078a40f14db404c
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- lowkiq (1.1.0)
4
+ lowkiq (1.2.1)
5
5
  connection_pool (~> 2.2, >= 2.2.2)
6
6
  rack (>= 1.5.0)
7
7
  redis (>= 4.0.1, < 5)
@@ -11,7 +11,7 @@ GEM
11
11
  specs:
12
12
  byebug (11.1.3)
13
13
  coderay (1.1.3)
14
- connection_pool (2.2.3)
14
+ connection_pool (2.2.5)
15
15
  diff-lcs (1.3)
16
16
  method_source (1.0.0)
17
17
  pry (0.13.1)
@@ -24,7 +24,7 @@ GEM
24
24
  rack-test (1.1.0)
25
25
  rack (>= 1.0, < 3)
26
26
  rake (12.3.3)
27
- redis (4.2.5)
27
+ redis (4.7.1)
28
28
  rspec (3.9.0)
29
29
  rspec-core (~> 3.9.0)
30
30
  rspec-expectations (~> 3.9.0)
@@ -43,7 +43,7 @@ PLATFORMS
43
43
  ruby
44
44
 
45
45
  DEPENDENCIES
46
- bundler (~> 2.1.0)
46
+ bundler (~> 2.1)
47
47
  lowkiq!
48
48
  pry-byebug (~> 3.9.0)
49
49
  rack-test (~> 1.1)
@@ -52,4 +52,4 @@ DEPENDENCIES
52
52
  rspec-mocks (~> 3.8)
53
53
 
54
54
  BUNDLED WITH
55
- 2.1.4
55
+ 2.2.22
data/README.md CHANGED
@@ -28,6 +28,8 @@ Ordered background jobs processing
28
28
  * [Recommendations on configuration](#recommendations-on-configuration)
29
29
  + [`SomeWorker.shards_count`](#someworkershards_count)
30
30
  + [`SomeWorker.max_retry_count`](#someworkermax_retry_count)
31
+ * [Changing of worker's shards amount](#changing-of-workers-shards-amount)
32
+ * [Extended error info](#extended-error-info)
31
33
 
32
34
  ## Rationale
33
35
 
@@ -204,6 +206,12 @@ module ATestWorker
204
206
  10 * (count + 1) # (i.e. 10, 20, 30, 40, 50)
205
207
  end
206
208
 
209
+ def self.retries_exhausted(batch)
210
+ batch.each do |job|
211
+ Rails.logger.info "retries exhausted for #{name} with error #{job[:error]}"
212
+ end
213
+ end
214
+
207
215
  def self.perform(payloads_by_id)
208
216
  # payloads_by_id is a hash map
209
217
  payloads_by_id.each do |id, payloads|
@@ -285,7 +293,8 @@ Options and their default values are:
285
293
  + `Lowkiq.redis = ->() { Redis.new url: ENV.fetch('REDIS_URL') }` - redis connection options
286
294
  + `Lowkiq.client_pool_size = 5` - redis pool size for queueing jobs
287
295
  + `Lowkiq.pool_timeout = 5` - client and server redis pool timeout
288
- + `Lowkiq.server_middlewares = []` - a middleware list, used for worker wrapping
296
+ + `Lowkiq.server_middlewares = []` - a middleware list, used when job is processed
297
+ + `Lowkiq.client_middlewares = []` - a middleware list, used when job is enqueued
289
298
  + `Lowkiq.on_server_init = ->() {}` - a lambda is being executed when server inits
290
299
  + `Lowkiq.build_scheduler = ->() { Lowkiq.build_lag_scheduler }` is a scheduler
291
300
  + `Lowkiq.build_splitter = ->() { Lowkiq.build_default_splitter }` is a splitter
@@ -293,6 +302,10 @@ Options and their default values are:
293
302
  + `Lowkiq.dump_payload = Marshal.method :dump`
294
303
  + `Lowkiq.load_payload = Marshal.method :load`
295
304
 
305
+ + `Lowkiq.format_error = -> (error) { error.message }` can be used to add error backtrace. Please see [Extended error info](#extended-error-info)
306
+ + `Lowkiq.dump_error = -> (msg) { msg }` can be used to implement a custom compression logic for errors. Recommended when using `Lowkiq.format_error`.
307
+ + `Lowkiq.load_error = -> (msg) { msg }` can be used to implement a custom decompression logic for errors.
308
+
296
309
  ```ruby
297
310
  $logger = Logger.new(STDOUT)
298
311
 
@@ -310,6 +323,13 @@ Lowkiq.server_middlewares << -> (worker, batch, &block) do
310
323
  raise e
311
324
  end
312
325
  end
326
+
327
+ Lowkiq.client_middlewares << -> (worker, batch, &block) do
328
+ $logger.info "Enqueueing job for #{worker} #{batch}"
329
+ block.call
330
+ $logger.info "Enqueued job for #{worker} #{batch}"
331
+ end
332
+
313
333
  ```
314
334
 
315
335
  ## Performance
@@ -486,6 +506,17 @@ Lowkiq.on_server_init = ->() do
486
506
  end
487
507
  ```
488
508
 
509
+ Note: In Rails 7, the worker files wouldn't be loaded by default in the initializers since they are managed by the `main` autoloader. To solve this, we can wrap setting the workers around the `to_prepare` configuration.
510
+
511
+ ```ruby
512
+ Rails.application.config.to_prepare do
513
+ Lowkiq.workers = [
514
+ ATestWorker,
515
+ OtherCoolWorker
516
+ ]
517
+ end
518
+ ```
519
+
489
520
  Execution: `bundle exec lowkiq -r ./config/environment.rb`
490
521
 
491
522
 
@@ -666,3 +697,23 @@ module ATestMigrationWorker
666
697
  end
667
698
  end
668
699
  ```
700
+
701
+ ## Extended error info
702
+ For failed jobs, lowkiq only stores `error.message` by default. This can be configured by using `Lowkiq.format_error` setting.
703
+ `Lowkiq.dump` and `Lowkiq.load_error` can be used to compress and decompress the error messages respectively.
704
+ Example:
705
+ ```ruby
706
+ Lowkiq.format_error = -> (error) { error.full_message(highlight: false) }
707
+
708
+ Lowkiq.dump_error = Proc.new do |msg|
709
+ compressed = Zlib::Deflate.deflate(msg.to_s)
710
+ Base64.encode64(compressed)
711
+ end
712
+
713
+ Lowkiq.load_error = Proc.new do |input|
714
+ decoded = Base64.decode64(input)
715
+ Zlib::Inflate.inflate(decoded)
716
+ rescue
717
+ input
718
+ end
719
+ ```