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.
@@ -22,7 +22,7 @@ module Lowkiq
22
22
  perform_in: x[1][0],
23
23
  retry_count: x[1][1],
24
24
  payloads: x[1][2].map { |(payload, score)| [Lowkiq.load_payload.call(payload), score] },
25
- error: x[1][3],
25
+ error: Lowkiq.load_error.call(x[1][3]),
26
26
  }.compact
27
27
  end.compact
28
28
  end
@@ -42,7 +42,7 @@ module Lowkiq
42
42
  id: x[0],
43
43
  updated_at: x[1][0],
44
44
  payloads: x[1][1].map { |(payload, score)| [Lowkiq.load_payload.call(payload), score] },
45
- error: x[1][2],
45
+ error: Lowkiq.load_error.call(x[1][2]),
46
46
  }.compact
47
47
  end.compact
48
48
  end
@@ -83,7 +83,7 @@ module Lowkiq
83
83
  payloads = job.fetch(:payloads).map do |(payload, score)|
84
84
  [score, Lowkiq.dump_payload.call(payload)]
85
85
  end
86
- error = job.fetch(:error, nil)
86
+ error = Lowkiq.dump_error.call(job.fetch(:error, nil))
87
87
 
88
88
  shard = id_to_shard id
89
89
 
@@ -141,7 +141,7 @@ module Lowkiq
141
141
  payloads = job.fetch(:payloads).map do |(payload, score)|
142
142
  [score, Lowkiq.dump_payload.call(payload)]
143
143
  end
144
- error = job.fetch(:error, nil)
144
+ error = Lowkiq.dump_error.call(job.fetch(:error, nil))
145
145
 
146
146
 
147
147
  redis.zadd @keys.morgue_all_ids_lex_zset, 0, id
@@ -216,7 +216,7 @@ module Lowkiq
216
216
  perform_in: ids_with_perform_in[id].to_f,
217
217
  retry_count: ids_with_retry_count[id].to_f,
218
218
  payloads: payloads.map { |(payload, score)| [Lowkiq.load_payload.call(payload), score] },
219
- error: errors[id]
219
+ error: Lowkiq.load_error.call(errors[id])
220
220
  }.compact
221
221
  end.compact
222
222
  end
@@ -40,6 +40,7 @@ module Lowkiq
40
40
  @queue.push_back back
41
41
  @queue.push_to_morgue morgue
42
42
  @queue.ack @shard_index, data, :fail
43
+ @worker.retries_exhausted morgue
43
44
  false
44
45
  end
45
46
  end
@@ -65,7 +66,7 @@ module Lowkiq
65
66
  data.map! do |job|
66
67
  job[:retry_count] += 1
67
68
  job[:perform_in] = @timestamp.call + @worker.retry_in(job[:retry_count])
68
- job[:error] = ex.message
69
+ job[:error] = Lowkiq.format_error.call(ex)
69
70
  job
70
71
  end
71
72
  end
@@ -1,3 +1,3 @@
1
1
  module Lowkiq
2
- VERSION = "1.1.0"
2
+ VERSION = "1.2.2"
3
3
  end
data/lib/lowkiq/worker.rb CHANGED
@@ -3,21 +3,25 @@ module Lowkiq
3
3
  attr_accessor :shards_count,
4
4
  :batch_size,
5
5
  :max_retry_count,
6
- :queue_name,
6
+ :queue_name
7
7
 
8
- def self.extended(mod)
9
- super
10
- mod.shards_count = 5
11
- mod.batch_size = 1
12
- mod.max_retry_count = 25
13
- mod.queue_name = mod.name
14
- end
8
+ def self.extended(mod)
9
+ super
10
+ mod.shards_count = 5
11
+ mod.batch_size = 1
12
+ mod.max_retry_count = 25
13
+ mod.queue_name = mod.name
14
+ end
15
15
 
16
16
  # i.e. 15, 16, 31, 96, 271, ... seconds + a random amount of time
17
17
  def retry_in(retry_count)
18
18
  (retry_count ** 4) + 15 + (rand(30) * (retry_count + 1))
19
19
  end
20
20
 
21
+ def retries_exhausted(batch)
22
+ # no-op
23
+ end
24
+
21
25
  def perform(payload)
22
26
  fail "not implemented"
23
27
  end
@@ -35,7 +39,8 @@ module Lowkiq
35
39
  end
36
40
 
37
41
  def perform_async(batch)
38
- client_queue.push batch
42
+ Lowkiq.client_wrapper.call(self, batch) {client_queue.push batch}
39
43
  end
44
+
40
45
  end
41
46
  end
data/lib/lowkiq.rb CHANGED
@@ -38,10 +38,11 @@ module Lowkiq
38
38
  class << self
39
39
  attr_accessor :poll_interval, :threads_per_node,
40
40
  :redis, :client_pool_size, :pool_timeout,
41
- :server_middlewares, :on_server_init,
41
+ :server_middlewares, :client_middlewares, :on_server_init,
42
42
  :build_scheduler, :build_splitter,
43
43
  :last_words,
44
44
  :dump_payload, :load_payload,
45
+ :format_error, :dump_error, :load_error,
45
46
  :workers
46
47
 
47
48
  def server_redis_pool
@@ -52,9 +53,9 @@ module Lowkiq
52
53
  @client_redis_pool ||= ConnectionPool.new(size: client_pool_size, timeout: pool_timeout, &redis)
53
54
  end
54
55
 
55
- def server_wrapper
56
+ def middleware_wrapper(middlewares)
56
57
  null = -> (worker, batch, &block) { block.call }
57
- server_middlewares.reduce(null) do |wrapper, m|
58
+ middlewares.reduce(null) do |wrapper, m|
58
59
  -> (worker, batch, &block) do
59
60
  wrapper.call worker, batch do
60
61
  m.call worker, batch, &block
@@ -63,6 +64,14 @@ module Lowkiq
63
64
  end
64
65
  end
65
66
 
67
+ def client_wrapper
68
+ @client_wrapper ||= self.middleware_wrapper(self.client_middlewares)
69
+ end
70
+
71
+ def server_wrapper
72
+ @server_wrapper ||= self.middleware_wrapper(self.server_middlewares)
73
+ end
74
+
66
75
  def shard_handlers
67
76
  self.workers.flat_map do |w|
68
77
  ShardHandler.build_many w, self.server_wrapper
@@ -102,11 +111,15 @@ module Lowkiq
102
111
  self.client_pool_size = 5
103
112
  self.pool_timeout = 5
104
113
  self.server_middlewares = []
114
+ self.client_middlewares = []
105
115
  self.on_server_init = ->() {}
106
116
  self.build_scheduler = ->() { Lowkiq.build_lag_scheduler }
107
117
  self.build_splitter = ->() { Lowkiq.build_default_splitter }
108
118
  self.last_words = ->(ex) {}
109
119
  self.dump_payload = ::Marshal.method :dump
110
120
  self.load_payload = ::Marshal.method :load
121
+ self.format_error = -> (error) { error.message }
122
+ self.dump_error = -> (msg) { msg }
123
+ self.load_error = -> (msg) { msg }
111
124
  self.workers = []
112
125
  end
data/lowkiq.gemspec CHANGED
@@ -29,7 +29,7 @@ Gem::Specification.new do |spec|
29
29
  spec.add_dependency "connection_pool", "~> 2.2", ">= 2.2.2"
30
30
  spec.add_dependency "rack", ">= 1.5.0"
31
31
 
32
- spec.add_development_dependency "bundler", "~> 2.1.0"
32
+ spec.add_development_dependency "bundler", "~> 2.1"
33
33
  spec.add_development_dependency "rake", "~> 12.3.0"
34
34
  spec.add_development_dependency "rspec", "~> 3.0"
35
35
  spec.add_development_dependency "rspec-mocks", "~> 3.8"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lowkiq
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mikhail Kuzmin
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-01-25 00:00:00.000000000 Z
11
+ date: 2022-08-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis
@@ -70,14 +70,14 @@ dependencies:
70
70
  requirements:
71
71
  - - "~>"
72
72
  - !ruby/object:Gem::Version
73
- version: 2.1.0
73
+ version: '2.1'
74
74
  type: :development
75
75
  prerelease: false
76
76
  version_requirements: !ruby/object:Gem::Requirement
77
77
  requirements:
78
78
  - - "~>"
79
79
  - !ruby/object:Gem::Version
80
- version: 2.1.0
80
+ version: '2.1'
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: rake
83
83
  requirement: !ruby/object:Gem::Requirement
@@ -215,7 +215,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
215
215
  - !ruby/object:Gem::Version
216
216
  version: '0'
217
217
  requirements: []
218
- rubygems_version: 3.1.4
218
+ rubygems_version: 3.2.22
219
219
  signing_key:
220
220
  specification_version: 4
221
221
  summary: Lowkiq