lowkiq 1.1.0 → 1.2.2

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 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
+ ```