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 +4 -4
- data/Gemfile.lock +5 -5
- data/README.md +52 -1
- data/assets/app.js +1 -1
- data/lib/lowkiq/queue/fetch.rb +2 -2
- data/lib/lowkiq/queue/queue.rb +3 -3
- data/lib/lowkiq/shard_handler.rb +2 -1
- data/lib/lowkiq/version.rb +1 -1
- data/lib/lowkiq/worker.rb +14 -9
- data/lib/lowkiq.rb +16 -3
- data/lowkiq.gemspec +1 -1
- metadata +5 -5
data/lib/lowkiq/queue/fetch.rb
CHANGED
@@ -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
|
data/lib/lowkiq/queue/queue.rb
CHANGED
@@ -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
|
data/lib/lowkiq/shard_handler.rb
CHANGED
@@ -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
|
69
|
+
job[:error] = Lowkiq.format_error.call(ex)
|
69
70
|
job
|
70
71
|
end
|
71
72
|
end
|
data/lib/lowkiq/version.rb
CHANGED
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
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
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
|
56
|
+
def middleware_wrapper(middlewares)
|
56
57
|
null = -> (worker, batch, &block) { block.call }
|
57
|
-
|
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
|
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.
|
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:
|
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
|
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
|
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.
|
218
|
+
rubygems_version: 3.2.22
|
219
219
|
signing_key:
|
220
220
|
specification_version: 4
|
221
221
|
summary: Lowkiq
|