rafka 0.4.1 → 0.5.0

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