racecar 2.4.0 → 2.8.2

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: 9bb07a3f984de71b18b9401ec7908158aba831c54a4972e9de7af59d2d7ae3ea
4
- data.tar.gz: 6e00e2f40495624944963868001e0cf20885c9f33e49ad8d147d0037562e96fa
3
+ metadata.gz: 4cbf6ca4837bdd3893c8342936f9d5ea115a5b3a585e0c843e62171e00038e72
4
+ data.tar.gz: d8603c46cf801d0f41f017d5b27b35e0d2b195eec5be11a1f7b6bf77413726b4
5
5
  SHA512:
6
- metadata.gz: 0f5d1b6b84dbd96343a09387709676e0ac1250f1ac79f82225cb2060d8900f91f724f1bf0c722d6c440ce6c65ee175da930fc0bd542f6138eeeaab7d80d9662a
7
- data.tar.gz: ca635a04ca6ea5019e625563417ac5c3097d2999d145a26089a9f86eb00312cf242110dcf44958180bdafbfebac5a319fb70b559d2cebe364c906caa93db9ced
6
+ metadata.gz: 78bdedfe7bd888a3716f5a29f28810f4c4d2f03e43c33b8e47ed08607155211fca1d47f4eab6a4f0def6976bb7ca3263117e52d2e0fa7f0a721c56ec70c7ee3d
7
+ data.tar.gz: 2bf6e2b50980add68363b59718f54403caada58abcb404a9018ac4304519bbbb7ed920578d37bcadefad63964812e7374d367298f403577725eef79af269c604
@@ -0,0 +1,17 @@
1
+ version: 2
2
+ registries:
3
+ artifactory:
4
+ type: rubygems-server
5
+ url: ${{secrets.ARTIFACTORY_URL}}
6
+ username: ${{secrets.ARTIFACTORY_USERNAME}}
7
+ password: ${{secrets.ARTIFACTORY_API_KEY}}
8
+ updates:
9
+ - package-ecosystem: "bundler"
10
+ vendor: true
11
+ directory: "/"
12
+ registries:
13
+ - artifactory
14
+ schedule:
15
+ interval: "daily"
16
+ allow:
17
+ - dependency-type: "direct" # only explicitly defined dependencies.
@@ -12,7 +12,7 @@ jobs:
12
12
 
13
13
  strategy:
14
14
  matrix:
15
- ruby-version: ["2.4", "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
@@ -1,5 +1,29 @@
1
1
  # Changelog
2
2
 
3
+ ## Unreleased
4
+
5
+ ## v2.8.2
6
+ * Handles ErroneousStateError, in previous versions the consumer would do several unecessary group leave/joins. The log level is also changed to WARN instead of ERROR. ([#285](https://github.com/zendesk/racecar/pull/295))
7
+
8
+ ## v2.8.1
9
+ * Adds new ErroneousStateError to racecar in order to give more information on this new possible exception.
10
+
11
+ ## v2.8.0
12
+ * Update librdkafka version from 1.8.2 to 1.9.0 by upgrading from rdkafka 0.10.0 to 0.12.0. ([#283](https://github.com/zendesk/racecar/pull/293))
13
+
14
+ ## v2.7.0
15
+
16
+ * 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))
17
+ * Bumps minimum required Ruby version to 2.6
18
+
19
+ ## v2.6.0
20
+
21
+ * Add capability to specify partition number when producing messages
22
+
23
+ ## v2.5.0
24
+
25
+ * `fetch_messages` can be configured per consumer, just as the maximum timeout to wait for a full batch.
26
+
3
27
  ## v2.4.0
4
28
 
5
29
  * 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))
data/Gemfile.lock CHANGED
@@ -1,9 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- racecar (2.3.1)
4
+ racecar (2.8.2.beta)
5
5
  king_konf (~> 1.0.0)
6
- rdkafka (~> 0.10.0)
6
+ rdkafka (~> 0.12.0)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
@@ -16,22 +16,22 @@ GEM
16
16
  coderay (1.1.3)
17
17
  concurrent-ruby (1.1.9)
18
18
  diff-lcs (1.4.4)
19
- dogstatsd-ruby (4.8.2)
20
- ffi (1.15.4)
19
+ dogstatsd-ruby (5.2.0)
20
+ ffi (1.15.5)
21
21
  i18n (1.8.10)
22
22
  concurrent-ruby (~> 1.0)
23
23
  king_konf (1.0.0)
24
24
  method_source (1.0.0)
25
- mini_portile2 (2.7.0)
25
+ mini_portile2 (2.8.0)
26
26
  minitest (5.14.4)
27
27
  pry (0.13.1)
28
28
  coderay (~> 1.1)
29
29
  method_source (~> 1.0)
30
30
  rake (13.0.1)
31
- rdkafka (0.10.0)
32
- ffi (~> 1.9)
33
- mini_portile2 (~> 2.1)
34
- rake (>= 12.3)
31
+ rdkafka (0.12.0)
32
+ ffi (~> 1.15)
33
+ mini_portile2 (~> 2.6)
34
+ rake (> 12)
35
35
  rspec (3.10.0)
36
36
  rspec-core (~> 3.10.0)
37
37
  rspec-expectations (~> 3.10.0)
@@ -56,7 +56,7 @@ PLATFORMS
56
56
  DEPENDENCIES
57
57
  activesupport (< 6.0)
58
58
  bundler (>= 1.13, < 3)
59
- dogstatsd-ruby (>= 4.0.0, < 5.0.0)
59
+ dogstatsd-ruby (>= 4.0.0, < 6.0.0)
60
60
  pry
61
61
  racecar!
62
62
  rake (> 10.0)
@@ -64,4 +64,4 @@ DEPENDENCIES
64
64
  timecop
65
65
 
66
66
  BUNDLED WITH
67
- 2.2.15
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 ||= []
@@ -93,13 +93,14 @@ module Racecar
93
93
  protected
94
94
 
95
95
  # https://github.com/appsignal/rdkafka-ruby#producing-messages
96
- 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)
97
97
  @delivery_handles ||= []
98
98
  message_size = payload.respond_to?(:bytesize) ? payload.bytesize : 0
99
99
  instrumentation_payload = {
100
100
  value: payload,
101
101
  headers: headers,
102
102
  key: key,
103
+ partition: partition,
103
104
  partition_key: partition_key,
104
105
  topic: topic,
105
106
  message_size: message_size,
@@ -112,6 +113,7 @@ module Racecar
112
113
  topic: topic,
113
114
  payload: payload,
114
115
  key: key,
116
+ partition: partition,
115
117
  partition_key: partition_key,
116
118
  timestamp: create_time,
117
119
  headers: headers,
@@ -49,6 +49,12 @@ module Racecar
49
49
 
50
50
  def store_offset(message)
51
51
  current.store_offset(message)
52
+ rescue Rdkafka::RdkafkaError => e
53
+ if e.code == :state # -172
54
+ @logger.warn "Attempted to store_offset, but we're not subscribed to it: #{ErroneousStateError.new(e)}"
55
+ return
56
+ end
57
+ raise e
52
58
  end
53
59
 
54
60
  def commit
@@ -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
@@ -0,0 +1,34 @@
1
+ # `rd_kafka_offsets_store()` (et.al) returns an error for any
2
+ # partition that is not currently assigned (through `rd_kafka_*assign()`).
3
+ # This prevents a race condition where an application would store offsets
4
+ # after the assigned partitions had been revoked (which resets the stored
5
+ # offset), that could cause these old stored offsets to be committed later
6
+ # when the same partitions were assigned to this consumer again - effectively
7
+ # overwriting any committed offsets by any consumers that were assigned the
8
+ # same partitions previously. This would typically result in the offsets
9
+ # rewinding and messages to be reprocessed.
10
+ # As an extra effort to avoid this situation the stored offset is now
11
+ # also reset when partitions are assigned (through `rd_kafka_*assign()`).
12
+ module Racecar
13
+ class ErroneousStateError < StandardError
14
+ def initialize(rdkafka_error)
15
+ raise rdkafka_error unless rdkafka_error.is_a?(Rdkafka::RdkafkaError)
16
+
17
+ @rdkafka_error = rdkafka_error
18
+ end
19
+
20
+ attr_reader :rdkafka_error
21
+
22
+ def code
23
+ @rdkafka_error.code
24
+ end
25
+
26
+ def to_s
27
+ <<~EOM
28
+ Partition is no longer assigned to this consumer and the offset could not be stored for commit.
29
+ #{@rdkafka_error.to_s}
30
+ EOM
31
+ end
32
+
33
+ end
34
+ end
@@ -4,6 +4,7 @@ require "rdkafka"
4
4
  require "racecar/pause"
5
5
  require "racecar/message"
6
6
  require "racecar/message_delivery_error"
7
+ require "racecar/erroneous_state_error"
7
8
 
8
9
  module Racecar
9
10
  class Runner
@@ -92,6 +93,7 @@ module Racecar
92
93
  end
93
94
  ensure
94
95
  producer.close
96
+ Racecar::Datadog.close if Object.const_defined?("Racecar::Datadog")
95
97
  end
96
98
 
97
99
  def stop
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Racecar
4
- VERSION = "2.4.0"
4
+ VERSION = "2.8.2"
5
5
  end
data/racecar.gemspec CHANGED
@@ -20,16 +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.4'
23
+ spec.required_ruby_version = '>= 2.6'
24
24
 
25
25
  spec.add_runtime_dependency "king_konf", "~> 1.0.0"
26
- spec.add_runtime_dependency "rdkafka", "~> 0.10.0"
26
+ spec.add_runtime_dependency "rdkafka", "~> 0.12.0"
27
27
 
28
28
  spec.add_development_dependency "bundler", [">= 1.13", "< 3"]
29
29
  spec.add_development_dependency "pry"
30
30
  spec.add_development_dependency "rake", "> 10.0"
31
31
  spec.add_development_dependency "rspec", "~> 3.0"
32
32
  spec.add_development_dependency "timecop"
33
- 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"
34
34
  spec.add_development_dependency "activesupport", ">= 4.0", "< 6.1"
35
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.4.0
4
+ version: 2.8.2
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-20 00:00:00.000000000 Z
12
+ date: 2022-07-12 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.10.0
34
+ version: 0.12.0
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.10.0
41
+ version: 0.12.0
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
@@ -166,6 +166,7 @@ extensions: []
166
166
  extra_rdoc_files: []
167
167
  files:
168
168
  - ".circleci/config.yml"
169
+ - ".github/dependabot.yml"
169
170
  - ".github/workflows/ci.yml"
170
171
  - ".gitignore"
171
172
  - ".rspec"
@@ -199,6 +200,7 @@ files:
199
200
  - lib/racecar/ctl.rb
200
201
  - lib/racecar/daemon.rb
201
202
  - lib/racecar/datadog.rb
203
+ - lib/racecar/erroneous_state_error.rb
202
204
  - lib/racecar/heroku.rb
203
205
  - lib/racecar/instrumenter.rb
204
206
  - lib/racecar/message.rb
@@ -222,14 +224,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
222
224
  requirements:
223
225
  - - ">="
224
226
  - !ruby/object:Gem::Version
225
- version: '2.4'
227
+ version: '2.6'
226
228
  required_rubygems_version: !ruby/object:Gem::Requirement
227
229
  requirements:
228
230
  - - ">="
229
231
  - !ruby/object:Gem::Version
230
232
  version: '0'
231
233
  requirements: []
232
- rubygems_version: 3.1.2
234
+ rubygems_version: 3.0.3
233
235
  signing_key:
234
236
  specification_version: 4
235
237
  summary: A framework for running Kafka consumers