racecar 2.3.1 → 2.7.0.beta1

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
2
  SHA256:
3
- metadata.gz: 76c24f3e555a6dc918ac8305af887ffef0ac01a69777a23b87f82ceffde2ac10
4
- data.tar.gz: d726316346947532195ee496a6968d7805a488d79e365e729bc5402b8fc72020
3
+ metadata.gz: 5fa253ad86ec573e727e7eb156b0a48f464167553966ac02f7765bc50db6c80e
4
+ data.tar.gz: c780b364b6ef7f54740fddeb38b13d835c922671b04c2a71e24135ea23977606
5
5
  SHA512:
6
- metadata.gz: 26717684ff1357eea174e0da260242aaa2dbc5f9114e3b9a740f76c905e42ee2a9e888dbe8baf9fb03df4a493ce9f310d0a38e296cf0810c94c378627d0f96bc
7
- data.tar.gz: 1cfabc0277274391c0ffe58d4ad6e222de078e526e581eb262e32b1b4c23dbb76713f2a39649d8e4578c5d141bf9c42c9700c2de638dbc3dc23895f99a53c66b
6
+ metadata.gz: 99a36891132422bbb90165e5f9d0eca25076d8c85b128ee4d28057d678d670bd4ec6e8a2c83cf1517a62a5dc2536aabc4f01ed8b51f67a08941087ab64cfb472
7
+ data.tar.gz: 3be8df1ebfec2c317346e202f8d868b2d30d361885a71a17484ab9a2b3e52e1f3ca8f9cd61215f3e89809aa258dcca67ec3b0b714a74416f882e33096b9f0f8c
@@ -12,7 +12,7 @@ jobs:
12
12
 
13
13
  strategy:
14
14
  matrix:
15
- ruby-version: ["2.5", "2.6", "3.0"]
15
+ ruby-version: ["2.6", "3.0"]
16
16
 
17
17
  steps:
18
18
  - uses: zendesk/checkout@v2
data/CHANGELOG.md CHANGED
@@ -2,6 +2,23 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## v2.7.0
6
+
7
+ * Update librdkafka version from 1.5.0 to 1.8.2 by upgrading from rdkafka 0.10.0 to 0.11.1. ([#283](https://github.com/zendesk/racecar/pull/283))
8
+
9
+ ## v2.6.0
10
+
11
+ * Add capability to specify partition number when producing messages
12
+
13
+ ## v2.5.0
14
+
15
+ * `fetch_messages` can be configured per consumer, just as the maximum timeout to wait for a full batch.
16
+
17
+ ## v2.4.0
18
+
19
+ * Update librdkafka version from 1.4.0 to 1.5.0 by upgrading from rdkafka 0.8.0 to 0.10.0. ([#263](https://github.com/zendesk/racecar/pull/263))
20
+ * Restore support for Ruby 2.4 (#258)
21
+
5
22
  ## racecar v2.3.1
6
23
 
7
24
  * Handle `ERR_NOT_COORDINATOR` (#209)
data/Gemfile CHANGED
@@ -4,3 +4,7 @@ source 'https://rubygems.org'
4
4
 
5
5
  # Specify your gem's dependencies in racecar.gemspec
6
6
  gemspec
7
+
8
+ # We actually support version 6.0 (see gemspec); this extra restriction is added just for running the test suite also
9
+ # on Ruby 2.4, which activesupport 6.0 no longer supports
10
+ gem 'activesupport', '< 6.0'
data/Gemfile.lock CHANGED
@@ -1,38 +1,37 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- racecar (2.3.0)
4
+ racecar (2.6.0)
5
5
  king_konf (~> 1.0.0)
6
- rdkafka (~> 0.8.0)
6
+ rdkafka (~> 0.11.1)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- activesupport (6.0.3.4)
11
+ activesupport (5.2.6)
12
12
  concurrent-ruby (~> 1.0, >= 1.0.2)
13
13
  i18n (>= 0.7, < 2)
14
14
  minitest (~> 5.1)
15
15
  tzinfo (~> 1.1)
16
- zeitwerk (~> 2.2, >= 2.2.2)
17
16
  coderay (1.1.3)
18
- concurrent-ruby (1.1.7)
17
+ concurrent-ruby (1.1.9)
19
18
  diff-lcs (1.4.4)
20
- dogstatsd-ruby (4.8.2)
21
- ffi (1.15.3)
22
- i18n (1.8.5)
19
+ dogstatsd-ruby (5.2.0)
20
+ ffi (1.15.5)
21
+ i18n (1.8.10)
23
22
  concurrent-ruby (~> 1.0)
24
23
  king_konf (1.0.0)
25
24
  method_source (1.0.0)
26
- mini_portile2 (2.6.1)
27
- minitest (5.14.2)
25
+ mini_portile2 (2.7.1)
26
+ minitest (5.14.4)
28
27
  pry (0.13.1)
29
28
  coderay (~> 1.1)
30
29
  method_source (~> 1.0)
31
30
  rake (13.0.1)
32
- rdkafka (0.8.1)
33
- ffi (~> 1.9)
34
- mini_portile2 (~> 2.1)
35
- rake (>= 12.3)
31
+ rdkafka (0.11.1)
32
+ ffi (~> 1.15)
33
+ mini_portile2 (~> 2.6)
34
+ rake (> 12)
36
35
  rspec (3.10.0)
37
36
  rspec-core (~> 3.10.0)
38
37
  rspec-expectations (~> 3.10.0)
@@ -48,17 +47,16 @@ GEM
48
47
  rspec-support (3.10.2)
49
48
  thread_safe (0.3.6)
50
49
  timecop (0.9.2)
51
- tzinfo (1.2.8)
50
+ tzinfo (1.2.9)
52
51
  thread_safe (~> 0.1)
53
- zeitwerk (2.4.2)
54
52
 
55
53
  PLATFORMS
56
54
  ruby
57
55
 
58
56
  DEPENDENCIES
59
- activesupport (>= 4.0, < 6.1)
57
+ activesupport (< 6.0)
60
58
  bundler (>= 1.13, < 3)
61
- dogstatsd-ruby (>= 4.0.0, < 5.0.0)
59
+ dogstatsd-ruby (>= 4.0.0, < 6.0.0)
62
60
  pry
63
61
  racecar!
64
62
  rake (> 10.0)
@@ -66,4 +64,4 @@ DEPENDENCIES
66
64
  timecop
67
65
 
68
66
  BUNDLED WITH
69
- 2.1.4
67
+ 2.3.7
data/README.md CHANGED
@@ -269,6 +269,10 @@ end
269
269
  - `group_id` – The group id to use for a given group of consumers. Note that this _must_ be different for each consumer class. If left blank a group id is generated based on the consumer class name such that (for example) a consumer with the class name `BaconConsumer` would default to a group id of `bacon-consumer`.
270
270
  - `group_id_prefix` – A prefix used when generating consumer group names. For instance, if you set the prefix to be `kevin.` and your consumer class is named `BaconConsumer`, the resulting consumer group will be named `kevin.bacon-consumer`.
271
271
 
272
+ #### Batches
273
+
274
+ - `fetch_messages` - The number of messages to fetch in a single batch. This can be set on a per consumer basis.
275
+
272
276
  #### Logging
273
277
 
274
278
  - `logfile` – A filename that log messages should be written to. Default is `nil`, which means logs will be written to standard output.
@@ -223,6 +223,7 @@ module Racecar
223
223
  self.parallel_workers = consumer_class.parallel_workers
224
224
  self.subscriptions = consumer_class.subscriptions
225
225
  self.max_wait_time = consumer_class.max_wait_time || self.max_wait_time
226
+ self.fetch_messages = consumer_class.fetch_messages || self.fetch_messages
226
227
  self.pidfile ||= "#{group_id}.pid"
227
228
  end
228
229
 
@@ -9,7 +9,7 @@ module Racecar
9
9
  class << self
10
10
  attr_accessor :max_wait_time
11
11
  attr_accessor :group_id
12
- attr_accessor :producer, :consumer, :parallel_workers
12
+ attr_accessor :producer, :consumer, :parallel_workers, :fetch_messages
13
13
 
14
14
  def subscriptions
15
15
  @subscriptions ||= []
@@ -63,25 +63,27 @@ module Racecar
63
63
 
64
64
  @instrumenter.instrument('deliver_messages', instrumentation_payload) do
65
65
  @delivery_handles.each do |handle|
66
- # rdkafka-ruby checks every wait_timeout seconds if the message was
67
- # successfully delivered, up to max_wait_timeout seconds before raising
68
- # Rdkafka::AbstractHandle::WaitTimeoutError. librdkafka will (re)try to
69
- # deliver all messages in the background, until "config.message_timeout"
70
- # (message.timeout.ms) is exceeded. Phrased differently, rdkafka-ruby's
71
- # WaitTimeoutError is just informative.
72
- # The raising can be avoided if max_wait_timeout below is greater than
73
- # config.message_timeout, but config is not available here (without
74
- # changing the interface).
75
- handle.wait(max_wait_timeout: 60, wait_timeout: 0.1)
76
- rescue Rdkafka::AbstractHandle::WaitTimeoutError => e
77
- partition = MessageDeliveryError.partition_from_delivery_handle(handle)
78
- # ideally we could use the logger passed to the Runner, but it is not
79
- # available here. The runner sets it for Rdkafka, though, so we can use
80
- # that instead.
81
- @config.logger.debug "Still trying to deliver message to (partition #{partition})... (will try up to Racecar.config.message_timeout)"
82
- retry
83
- rescue Rdkafka::RdkafkaError => e
84
- raise MessageDeliveryError.new(e, handle)
66
+ begin
67
+ # rdkafka-ruby checks every wait_timeout seconds if the message was
68
+ # successfully delivered, up to max_wait_timeout seconds before raising
69
+ # Rdkafka::AbstractHandle::WaitTimeoutError. librdkafka will (re)try to
70
+ # deliver all messages in the background, until "config.message_timeout"
71
+ # (message.timeout.ms) is exceeded. Phrased differently, rdkafka-ruby's
72
+ # WaitTimeoutError is just informative.
73
+ # The raising can be avoided if max_wait_timeout below is greater than
74
+ # config.message_timeout, but config is not available here (without
75
+ # changing the interface).
76
+ handle.wait(max_wait_timeout: 60, wait_timeout: 0.1)
77
+ rescue Rdkafka::AbstractHandle::WaitTimeoutError => e
78
+ partition = MessageDeliveryError.partition_from_delivery_handle(handle)
79
+ # ideally we could use the logger passed to the Runner, but it is not
80
+ # available here. The runner sets it for Rdkafka, though, so we can use
81
+ # that instead.
82
+ @config.logger.debug "Still trying to deliver message to (partition #{partition})... (will try up to Racecar.config.message_timeout)"
83
+ retry
84
+ rescue Rdkafka::RdkafkaError => e
85
+ raise MessageDeliveryError.new(e, handle)
86
+ end
85
87
  end
86
88
  end
87
89
  end
@@ -91,13 +93,14 @@ module Racecar
91
93
  protected
92
94
 
93
95
  # https://github.com/appsignal/rdkafka-ruby#producing-messages
94
- def produce(payload, topic:, key: nil, partition_key: nil, headers: nil, create_time: nil)
96
+ def produce(payload, topic:, key: nil, partition: nil, partition_key: nil, headers: nil, create_time: nil)
95
97
  @delivery_handles ||= []
96
98
  message_size = payload.respond_to?(:bytesize) ? payload.bytesize : 0
97
99
  instrumentation_payload = {
98
100
  value: payload,
99
101
  headers: headers,
100
102
  key: key,
103
+ partition: partition,
101
104
  partition_key: partition_key,
102
105
  topic: topic,
103
106
  message_size: message_size,
@@ -110,6 +113,7 @@ module Racecar
110
113
  topic: topic,
111
114
  payload: payload,
112
115
  key: key,
116
+ partition: partition,
113
117
  partition_key: partition_key,
114
118
  timestamp: create_time,
115
119
  headers: headers,
@@ -63,10 +63,14 @@ module Racecar
63
63
  clear
64
64
  end
65
65
 
66
+ def close
67
+ @statsd&.close
68
+ end
69
+
66
70
  private
67
71
 
68
72
  def clear
69
- @statsd && @statsd.close
73
+ close
70
74
  @statsd = nil
71
75
  end
72
76
  end
@@ -92,6 +92,7 @@ module Racecar
92
92
  end
93
93
  ensure
94
94
  producer.close
95
+ Racecar::Datadog.close if Object.const_defined?("Racecar::Datadog")
95
96
  end
96
97
 
97
98
  def stop
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Racecar
4
- VERSION = "2.3.1"
4
+ VERSION = "2.7.0.beta1"
5
5
  end
data/racecar.gemspec CHANGED
@@ -20,14 +20,16 @@ Gem::Specification.new do |spec|
20
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
21
  spec.require_paths = ["lib"]
22
22
 
23
+ spec.required_ruby_version = '>= 2.6'
24
+
23
25
  spec.add_runtime_dependency "king_konf", "~> 1.0.0"
24
- spec.add_runtime_dependency "rdkafka", "~> 0.8.0"
26
+ spec.add_runtime_dependency "rdkafka", "~> 0.11.1"
25
27
 
26
28
  spec.add_development_dependency "bundler", [">= 1.13", "< 3"]
27
29
  spec.add_development_dependency "pry"
28
30
  spec.add_development_dependency "rake", "> 10.0"
29
31
  spec.add_development_dependency "rspec", "~> 3.0"
30
32
  spec.add_development_dependency "timecop"
31
- spec.add_development_dependency "dogstatsd-ruby", ">= 4.0.0", "< 5.0.0"
33
+ spec.add_development_dependency "dogstatsd-ruby", ">= 4.0.0", "< 6.0.0"
32
34
  spec.add_development_dependency "activesupport", ">= 4.0", "< 6.1"
33
35
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: racecar
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.1
4
+ version: 2.7.0.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Schierbeck
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2021-09-02 00:00:00.000000000 Z
12
+ date: 2022-02-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: king_konf
@@ -31,14 +31,14 @@ dependencies:
31
31
  requirements:
32
32
  - - "~>"
33
33
  - !ruby/object:Gem::Version
34
- version: 0.8.0
34
+ version: 0.11.1
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
- version: 0.8.0
41
+ version: 0.11.1
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: bundler
44
44
  requirement: !ruby/object:Gem::Requirement
@@ -124,7 +124,7 @@ dependencies:
124
124
  version: 4.0.0
125
125
  - - "<"
126
126
  - !ruby/object:Gem::Version
127
- version: 5.0.0
127
+ version: 6.0.0
128
128
  type: :development
129
129
  prerelease: false
130
130
  version_requirements: !ruby/object:Gem::Requirement
@@ -134,7 +134,7 @@ dependencies:
134
134
  version: 4.0.0
135
135
  - - "<"
136
136
  - !ruby/object:Gem::Version
137
- version: 5.0.0
137
+ version: 6.0.0
138
138
  - !ruby/object:Gem::Dependency
139
139
  name: activesupport
140
140
  requirement: !ruby/object:Gem::Requirement
@@ -222,12 +222,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
222
222
  requirements:
223
223
  - - ">="
224
224
  - !ruby/object:Gem::Version
225
- version: '0'
225
+ version: '2.6'
226
226
  required_rubygems_version: !ruby/object:Gem::Requirement
227
227
  requirements:
228
- - - ">="
228
+ - - ">"
229
229
  - !ruby/object:Gem::Version
230
- version: '0'
230
+ version: 1.3.1
231
231
  requirements: []
232
232
  rubygems_version: 3.1.2
233
233
  signing_key: