upperkut 0.8.0 → 0.8.1

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: 610726bb89a40550a7aebd91196d982e667a5dee5dd37679b3b120a8402d2874
4
- data.tar.gz: 707172c85bbf22f04a8c2bb5436e5dec749d42e5bc7893e33818f2e51139f78e
3
+ metadata.gz: b61a3728cde5e295de277abc22836653fc332640843bce69f3ca3832f830a1ec
4
+ data.tar.gz: f781b92bd8923e67e3f26a207904ee4b80bf54104bc98364559d4924a5b3c5e2
5
5
  SHA512:
6
- metadata.gz: f9e88a6c5382cfd1cd7aa250b3830ad2aec804d4d1715938f2dc38bb66cad313c4ce5c9de6b94d1ad311025597fe5401ad0175a0fef1e24f95da8936a006adba
7
- data.tar.gz: f33ffc495ec7653169ab8a3a1576cfa3fdafa60d751ff11815fe58c4a0a774703c0ed522f3713890ddb740a184c4ae187d641562fb49b650df8c651e774ca5ec
6
+ metadata.gz: 961de37230a1db0d1c8162b9a7e25f69715f647f154b3b36e66aef2568d0620235fbeaa5b92bcfefdb5189bcee0b1de98220e0db6811ee7dc3477114bdea3758
7
+ data.tar.gz: f509c2623813dd4132b1df11dc220de1082f441078a5ddc96b753fec9d47c87ea62851af45dd4257c60578e83b0647a36ef6a8f1a643a5748cbf58751206403d
@@ -1,8 +1,9 @@
1
1
  # Upperkut changes
2
2
  0.8.x
3
3
  --------
4
+ - Added exponential backoff when push_items #57
4
5
  - Introducing Item to avoid losing enqueued at and report wrong latency
5
- metrics, thanks to @jeangnc
6
+ metrics #56 thanks to @jeangnc
6
7
 
7
8
  0.7.x
8
9
  ---------
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- upperkut (0.8.0)
4
+ upperkut (0.8.1)
5
5
  connection_pool (~> 2.2, >= 2.2.2)
6
6
  redis (>= 4.1.0, < 5.0.0)
7
7
 
@@ -102,8 +102,10 @@ module Upperkut
102
102
  def redis
103
103
  raise ArgumentError, 'requires a block' unless block_given?
104
104
 
105
- redis_pool.with do |conn|
106
- yield conn
105
+ retry_block do
106
+ redis_pool.with do |conn|
107
+ yield conn
108
+ end
107
109
  end
108
110
  end
109
111
 
@@ -182,8 +182,10 @@ module Upperkut
182
182
  def redis
183
183
  raise ArgumentError, 'requires a block' unless block_given?
184
184
 
185
- redis_pool.with do |conn|
186
- yield conn
185
+ retry_block do
186
+ redis_pool.with do |conn|
187
+ yield conn
188
+ end
187
189
  end
188
190
  end
189
191
 
@@ -28,9 +28,13 @@ module Upperkut
28
28
 
29
29
  def initialize(worker, options = {})
30
30
  @options = options
31
- initialize_options
32
- @redis_pool = setup_redis_pool
31
+ @redis_options = @options.fetch(:redis, {})
33
32
  @worker = worker
33
+
34
+ @batch_size = @options.fetch(
35
+ :batch_size,
36
+ Integer(ENV['UPPERKUT_BATCH_SIZE'] || 1000)
37
+ )
34
38
  end
35
39
 
36
40
  def push_items(items = [])
@@ -82,13 +86,12 @@ module Upperkut
82
86
 
83
87
  private
84
88
 
85
- def initialize_options
86
- @redis_options = @options.fetch(:redis, {})
89
+ def key
90
+ "upperkut:queued:#{to_underscore(@worker.name)}"
91
+ end
87
92
 
88
- @batch_size = @options.fetch(
89
- :batch_size,
90
- Integer(ENV['UPPERKUT_BATCH_SIZE'] || 1000)
91
- )
93
+ def ensure_timestamp_attr(item)
94
+ item['timestamp'] = Time.now.utc.to_i unless item.key?('timestamp')
92
95
  end
93
96
 
94
97
  def pop_values(redis_client, args)
@@ -123,26 +126,24 @@ module Upperkut
123
126
  now_timestamp - job['timestamp'].to_f
124
127
  end
125
128
 
126
- def setup_redis_pool
127
- return @redis_options if @redis_options.is_a?(ConnectionPool)
128
-
129
- RedisPool.new(options.fetch(:redis, {})).create
130
- end
131
-
132
129
  def redis
133
130
  raise ArgumentError, 'requires a block' unless block_given?
134
131
 
135
- @redis_pool.with do |conn|
136
- yield conn
132
+ retry_block do
133
+ redis_pool.with do |conn|
134
+ yield conn
135
+ end
137
136
  end
138
137
  end
139
138
 
140
- def ensure_timestamp_attr(item)
141
- item['timestamp'] = Time.now.utc.to_i unless item.key?('timestamp')
142
- end
143
-
144
- def key
145
- "upperkut:queued:#{to_underscore(@worker.name)}"
139
+ def redis_pool
140
+ @redis_pool ||= begin
141
+ if @redis_options.is_a?(ConnectionPool)
142
+ @redis_options
143
+ else
144
+ RedisPool.new(@redis_options).create
145
+ end
146
+ end
146
147
  end
147
148
  end
148
149
  end
@@ -36,5 +36,22 @@ module Upperkut
36
36
  memo << Item.from_json(item) if item
37
37
  end
38
38
  end
39
+
40
+ def retry_block(retries_limit = 3, base_sleep = 2)
41
+ retries = 0
42
+
43
+ begin
44
+ yield
45
+ rescue StandardError => err
46
+ if retries < retries_limit
47
+ retries += 1
48
+ sleep_time = base_sleep**retries
49
+ Kernel.sleep(sleep_time)
50
+ retry
51
+ end
52
+
53
+ raise err
54
+ end
55
+ end
39
56
  end
40
57
  end
@@ -1,3 +1,3 @@
1
1
  module Upperkut
2
- VERSION = '0.8.0'.freeze
2
+ VERSION = '0.8.1'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: upperkut
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.8.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nando Sousa
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-03-25 00:00:00.000000000 Z
11
+ date: 2020-04-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: connection_pool