rafka 0.4.1 → 0.5.0

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
- SHA1:
3
- metadata.gz: 298aa80cafed24d522c37312a86bac1f81b74f79
4
- data.tar.gz: c282176e68fa39923a14850f84690f2a4f897a8a
2
+ SHA256:
3
+ metadata.gz: f4b1340d7d6aed3fc3151f8655993b1a197016be9dd8537856118fca48d305bb
4
+ data.tar.gz: 4741170487839f7087b9637e7473a7ac4e005e339c34ef9886aabd984873afe5
5
5
  SHA512:
6
- metadata.gz: 5dc4609117de5fed0965b0c0a842eb52d2d476c5be19676ea6fc6d188d6f7d9122097df2923887a3275db762bbf97c39b6e1797b757a8a8cdfbfe5cbc520134e
7
- data.tar.gz: e9eb72063aa3ba0396205b6b6791d228bab9106d2c02bde5064232608cf235f3bfb4c7007ebd5147e588604b8bd4e072cfd0920b5e83be21ff6e4a8d68522626
6
+ metadata.gz: f1c285aae295bb0c5b0f575116ba2734f57b2117b3555ba272d97a18ea8bde86ecde1d1308063d3310b351657b4e6f70514bca9842498ed92717254ce0c6daad
7
+ data.tar.gz: 0a69e03ccc7344446f3f77c239d43a99c6d5e19567a4833ef0458cf13a82497ba4e67c6935698ba99c9764dfc42e133e0173d867114228d54c1768a543d56679
@@ -4,6 +4,11 @@ Breaking changes are prefixed with a "[BREAKING]" label.
4
4
 
5
5
  ## master (unreleased)
6
6
 
7
+ ## 0.5.0 (2019-10-09)
8
+
9
+ ## Changed
10
+
11
+ - Consumer operations are now restarted upon `Rafka::ConsumeError: Server shutdown` exceptions (i.e. during server restarts) [[#27](https://github.com/skroutz/rafka-rb/pull/27)]
7
12
 
8
13
  ## 0.4.1 (2018-23-05)
9
14
 
@@ -14,6 +14,12 @@ module Rafka
14
14
  port: 6380
15
15
  }.freeze
16
16
 
17
+ # Server errors upon which we should retry the operation.
18
+ RETRIABLE_ERRORS = [
19
+ "CONS Server shutdown"
20
+ ].freeze
21
+
22
+ # Wraps errors from redis-rb to our own error classes
17
23
  def self.wrap_errors
18
24
  yield
19
25
  rescue Redis::CommandError => e
@@ -21,4 +27,21 @@ module Rafka
21
27
  raise ConsumeError, e.message[5..-1] if e.message.start_with?("CONS ")
22
28
  raise CommandError, e.message
23
29
  end
30
+
31
+ # Retries the operation upon Redis::CommandError
32
+ def self.with_retry(max_retries=15)
33
+ retries = 0
34
+
35
+ begin
36
+ yield
37
+ rescue Redis::CommandError => e
38
+ if RETRIABLE_ERRORS.include?(e.message) && retries < max_retries
39
+ sleep 1
40
+ retries += 1
41
+ retry
42
+ end
43
+
44
+ raise e
45
+ end
46
+ end
24
47
  end
@@ -61,7 +61,8 @@ module Rafka
61
61
  # {#commit}.
62
62
  #
63
63
  # @param timeout [Fixnum] the time in seconds to wait for a message. If
64
- # reached, {#consume} returns nil.
64
+ # reached, {#consume} returns nil. Must be smaller than or equal to the underlying Redis client's
65
+ # `read_timeout` which superseeds the current timeout.
65
66
  #
66
67
  # @yieldparam [Message] msg the consumed message
67
68
  #
@@ -239,7 +240,9 @@ module Rafka
239
240
  msg = nil
240
241
 
241
242
  Rafka.wrap_errors do
242
- msg = @redis.blpop(@blpop_arg, timeout: timeout)
243
+ Rafka.with_retry do
244
+ msg = @redis.blpop(@blpop_arg, timeout: timeout)
245
+ end
243
246
  end
244
247
 
245
248
  msg = Message.new(msg) if msg
@@ -46,10 +46,14 @@ module Rafka
46
46
  end
47
47
  end
48
48
 
49
- # Flush any buffered messages. Blocks until all messages are written or the
50
- # given timeout exceeds.
49
+ # Flush any outstanding messages. The server will block until all messages
50
+ # are written or the provided timeout is exceeded. Note however, that the
51
+ # provided timeout may be overshot by the `read_timeout` setting of the
52
+ # underlying Redis client. This means that the client might interrupt the
53
+ # call earlier than timeout_ms, if `read_timeout` is less than `timeout_ms`.
51
54
  #
52
- # @param timeout_ms [Fixnum]
55
+ # @param timeout_ms [Fixnum]. Must be smaller than or equal to the underlying Redis client's `read_timeout`
56
+ # which superseeds the current timeout.
53
57
  #
54
58
  # @return [Fixnum] The number of unflushed messages
55
59
  def flush(timeout_ms=5000)
@@ -1,3 +1,3 @@
1
1
  module Rafka
2
- VERSION = "0.4.1".freeze
2
+ VERSION = "0.5.0".freeze
3
3
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rafka
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Agis Anastasopoulos
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-24 00:00:00.000000000 Z
11
+ date: 2019-10-07 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: redis
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 3.3.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 3.3.2
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: minitest
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -118,8 +132,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
118
132
  - !ruby/object:Gem::Version
119
133
  version: '0'
120
134
  requirements: []
121
- rubyforge_project:
122
- rubygems_version: 2.5.2.3
135
+ rubygems_version: 3.0.4
123
136
  signing_key:
124
137
  specification_version: 4
125
138
  summary: Ruby driver for Rafka