racecar 2.4.0 → 2.8.2

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