racecar 2.1.1 → 2.2.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
2
  SHA256:
3
- metadata.gz: 6380c598cedfca4662aa4c0edf6c55b8a0641d972dad715e3b1e961ac06e4d4f
4
- data.tar.gz: 19a30f8515b82f9cbfa783319a76059688ef6096a4dd5e5a5673d6d0c101878c
3
+ metadata.gz: e2c32338556d27bfcbae35df0758163a457d2c6e3f520141206c5a9c0124cc68
4
+ data.tar.gz: 43d9c42d0d483c269b15d417ef59e2985da3ca3945d34d6772f8dd262ccbfaf6
5
5
  SHA512:
6
- metadata.gz: 66c6013d77d63a121673e7d4e49fb87b3b1520a3e80a9b564a116b284dbd262ead6fd5b570afa4fa55d77822ac6a6ab31a86917b08630aad2fc9af2f7c08d171
7
- data.tar.gz: ce9c89a671478a806dce62979bb695a2673cd598acfb3d2547194a9367a12c96d5f34d38c32f79a3ae809f9eb79303e5330aec4f5e0dc2a23f6f6ffc1e286817
6
+ metadata.gz: 0467ac1cdefb6cad9870dd73b92f4a5a943b9f685ff3fc876b3f183d109ae3d29d7c2c7dffea8f31bca7c7b18565e5aba04d4865c94f2448a7228be175855a5b
7
+ data.tar.gz: e4ab43eb180995af916d447b006438b4a48cb808b29aabec52b455e246541a083192d1b560a957fa6f3ab7d5412dd12ab74aac49acc0b606c3df87cec90b93b6
@@ -0,0 +1,61 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - '**'
7
+
8
+ jobs:
9
+ unit-specs:
10
+ runs-on: ubuntu-latest
11
+
12
+ strategy:
13
+ matrix:
14
+ ruby-version: ["2.5", "2.6"]
15
+
16
+ steps:
17
+ - uses: zendesk/checkout@v2
18
+ - name: Set up Ruby
19
+ uses: zendesk/setup-ruby@v1.58.0
20
+ with:
21
+ ruby-version: ${{ matrix.ruby-version }}
22
+ bundler-cache: true
23
+ - name: Build and test with RSpec
24
+ run: bundle exec rspec --format documentation --require spec_helper --color --exclude-pattern='spec/integration/*_spec.rb'
25
+
26
+ integration-specs:
27
+ runs-on: ubuntu-latest
28
+
29
+ services:
30
+ zookeeper:
31
+ image: confluentinc/cp-zookeeper
32
+ ports:
33
+ - 2181:2181
34
+ env:
35
+ ZOOKEEPER_CLIENT_PORT: 2181
36
+
37
+ kafka:
38
+ image: confluentinc/cp-kafka
39
+ ports:
40
+ - 9092:9092
41
+ - 29092:29092
42
+ options: --health-cmd "kafka-topics --list --bootstrap-server=localhost:9092" --health-interval 10s --health-timeout 5s --health-retries 5
43
+ env:
44
+ KAFKA_BROKER_ID: 1
45
+ KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
46
+ KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092
47
+ KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
48
+ KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
49
+ KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
50
+
51
+ steps:
52
+ - uses: zendesk/checkout@v2
53
+ - name: Set up Ruby
54
+ uses: zendesk/setup-ruby@v1.58.0
55
+ with:
56
+ ruby-version: 2.7
57
+ bundler-cache: true
58
+ - name: Build and test with RSpec
59
+ env:
60
+ RACECAR_BROKERS: localhost:9092
61
+ run: bundle exec rspec --format documentation --require spec_helper --color spec/integration/*_spec.rb
data/.gitignore CHANGED
@@ -1,10 +1,9 @@
1
1
  /.bundle/
2
2
  /.yardoc
3
- /Gemfile.lock
4
3
  /_yardoc/
5
4
  /coverage/
6
5
  /doc/
7
6
  /pkg/
8
7
  /spec/reports/
9
8
  /tmp/
10
- /vendor/bundle/
9
+ /vendor/bundle/
@@ -2,6 +2,10 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## racecar v2.2.0
6
+
7
+ * [Racecar::ConsumerSet] **breaking change** `Racecar::ConsumerSet`'s functions `poll` and `batch_pall` expect the max wait values to be given in milliseconds. The defaults were using `config.max_wait_time`, which is in seconds. If you do not directly use `Racecar::ConsumerSet`, or always call its `poll` and `batch_poll` functions by specfiying the max wait time (the first argument), then this breaking change does not affect you. ([#214](https://github.com/zendesk/racecar/pull/214))
8
+
5
9
  ## racecar v2.1.1
6
10
 
7
11
  * [Bugfix] Close RdKafka consumer in ConsumerSet#reset_current_consumer to prevent memory leak (#196)
@@ -0,0 +1,69 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ racecar (2.1.1)
5
+ king_konf (~> 1.0.0)
6
+ rdkafka (~> 0.8.0)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ activesupport (6.0.3.4)
12
+ concurrent-ruby (~> 1.0, >= 1.0.2)
13
+ i18n (>= 0.7, < 2)
14
+ minitest (~> 5.1)
15
+ tzinfo (~> 1.1)
16
+ zeitwerk (~> 2.2, >= 2.2.2)
17
+ coderay (1.1.3)
18
+ concurrent-ruby (1.1.7)
19
+ diff-lcs (1.4.4)
20
+ dogstatsd-ruby (4.8.2)
21
+ ffi (1.13.1)
22
+ i18n (1.8.5)
23
+ concurrent-ruby (~> 1.0)
24
+ king_konf (1.0.0)
25
+ method_source (1.0.0)
26
+ mini_portile2 (2.5.0)
27
+ minitest (5.14.2)
28
+ pry (0.13.1)
29
+ coderay (~> 1.1)
30
+ method_source (~> 1.0)
31
+ rake (13.0.1)
32
+ rdkafka (0.8.1)
33
+ ffi (~> 1.9)
34
+ mini_portile2 (~> 2.1)
35
+ rake (>= 12.3)
36
+ rspec (3.10.0)
37
+ rspec-core (~> 3.10.0)
38
+ rspec-expectations (~> 3.10.0)
39
+ rspec-mocks (~> 3.10.0)
40
+ rspec-core (3.10.0)
41
+ rspec-support (~> 3.10.0)
42
+ rspec-expectations (3.10.0)
43
+ diff-lcs (>= 1.2.0, < 2.0)
44
+ rspec-support (~> 3.10.0)
45
+ rspec-mocks (3.10.0)
46
+ diff-lcs (>= 1.2.0, < 2.0)
47
+ rspec-support (~> 3.10.0)
48
+ rspec-support (3.10.0)
49
+ thread_safe (0.3.6)
50
+ timecop (0.9.2)
51
+ tzinfo (1.2.8)
52
+ thread_safe (~> 0.1)
53
+ zeitwerk (2.4.2)
54
+
55
+ PLATFORMS
56
+ ruby
57
+
58
+ DEPENDENCIES
59
+ activesupport (>= 4.0, < 6.1)
60
+ bundler (>= 1.13, < 3)
61
+ dogstatsd-ruby (>= 4.0.0, < 5.0.0)
62
+ pry
63
+ racecar!
64
+ rake (> 10.0)
65
+ rspec (~> 3.0)
66
+ timecop
67
+
68
+ BUNDLED WITH
69
+ 2.1.4
@@ -54,7 +54,7 @@ module Racecar
54
54
  desc "How long to wait when trying to communicate with a Kafka broker"
55
55
  float :socket_timeout, default: 30
56
56
 
57
- desc "How long to allow the Kafka brokers to wait before returning messages"
57
+ desc "How long to allow the Kafka brokers to wait before returning messages (in seconds)"
58
58
  float :max_wait_time, default: 1
59
59
 
60
60
  desc "Maximum amount of data the broker shall return for a Fetch request"
@@ -17,7 +17,7 @@ module Racecar
17
17
  @last_poll_read_nil_message = false
18
18
  end
19
19
 
20
- def poll(max_wait_time_ms = @config.max_wait_time)
20
+ def poll(max_wait_time_ms = @config.max_wait_time_ms)
21
21
  batch_poll(max_wait_time_ms, 1).first
22
22
  end
23
23
 
@@ -31,7 +31,7 @@ module Racecar
31
31
  # Any errors during polling are retried in an exponential backoff fashion. If an error
32
32
  # occurs, but there is no time left for a backoff and retry, it will return the
33
33
  # already collected messages and only retry on the next call.
34
- def batch_poll(max_wait_time_ms = @config.max_wait_time, max_messages = @config.fetch_messages)
34
+ def batch_poll(max_wait_time_ms = @config.max_wait_time_ms, max_messages = @config.fetch_messages)
35
35
  started_at = Time.now
36
36
  remain_ms = max_wait_time_ms
37
37
  maybe_select_next_consumer
@@ -130,6 +130,9 @@ module Racecar
130
130
  @logger.debug "Capping #{wait_ms}ms to #{max_wait_time_ms-1}ms."
131
131
  sleep (max_wait_time_ms-1)/1000.0
132
132
  remain_ms = 1
133
+ elsif try == 0 && remain_ms == 0
134
+ @logger.debug "No time remains for polling messages. Will try on next call."
135
+ return nil
133
136
  elsif wait_ms >= remain_ms
134
137
  @logger.error "Only #{remain_ms}ms left, but want to wait for #{wait_ms}ms before poll. Will retry on next call."
135
138
  @previous_retries = try
@@ -6,8 +6,11 @@ module Racecar
6
6
  class Message
7
7
  extend Forwardable
8
8
 
9
- def initialize(rdkafka_message)
9
+ attr_reader :retries_count
10
+
11
+ def initialize(rdkafka_message, retries_count: nil)
10
12
  @rdkafka_message = rdkafka_message
13
+ @retries_count = retries_count
11
14
  end
12
15
 
13
16
  def_delegators :@rdkafka_message, :topic, :partition, :offset, :key, :headers
@@ -171,7 +171,7 @@ module Racecar
171
171
  with_pause(message.topic, message.partition, message.offset..message.offset) do |pause|
172
172
  begin
173
173
  @instrumenter.instrument("process_message", instrumentation_payload) do
174
- processor.process(Racecar::Message.new(message))
174
+ processor.process(Racecar::Message.new(message, retries_count: pause.pauses_count))
175
175
  processor.deliver!
176
176
  consumer.store_offset(message)
177
177
  end
@@ -199,7 +199,10 @@ module Racecar
199
199
  @instrumenter.instrument("process_batch", instrumentation_payload) do
200
200
  with_pause(first.topic, first.partition, first.offset..last.offset) do |pause|
201
201
  begin
202
- processor.process_batch(messages.map {|message| Racecar::Message.new(message) })
202
+ racecar_messages = messages.map do |message|
203
+ Racecar::Message.new(message, retries_count: pause.pauses_count)
204
+ end
205
+ processor.process_batch(racecar_messages)
203
206
  processor.deliver!
204
207
  consumer.store_offset(messages.last)
205
208
  rescue => e
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Racecar
4
- VERSION = "2.1.1"
4
+ VERSION = "2.2.0"
5
5
  end
@@ -20,7 +20,7 @@ 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.add_runtime_dependency "king_konf", "~> 0.3.7"
23
+ spec.add_runtime_dependency "king_konf", "~> 1.0.0"
24
24
  spec.add_runtime_dependency "rdkafka", "~> 0.8.0"
25
25
 
26
26
  spec.add_development_dependency "bundler", [">= 1.13", "< 3"]
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.1.1
4
+ version: 2.2.0
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: 2020-11-04 00:00:00.000000000 Z
12
+ date: 2021-01-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: king_konf
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: 0.3.7
20
+ version: 1.0.0
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: 0.3.7
27
+ version: 1.0.0
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: rdkafka
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -166,11 +166,12 @@ extensions: []
166
166
  extra_rdoc_files: []
167
167
  files:
168
168
  - ".circleci/config.yml"
169
- - ".github/workflows/rspec.yml"
169
+ - ".github/workflows/ci.yml"
170
170
  - ".gitignore"
171
171
  - ".rspec"
172
172
  - CHANGELOG.md
173
173
  - Gemfile
174
+ - Gemfile.lock
174
175
  - LICENSE.txt
175
176
  - Procfile
176
177
  - README.md
@@ -1,24 +0,0 @@
1
- name: Execute Specs
2
-
3
- on: [push]
4
-
5
- jobs:
6
- rspec:
7
-
8
- runs-on: ubuntu-latest
9
-
10
- strategy:
11
- matrix:
12
- ruby-version: ["2.5.x", "2.6.x"]
13
-
14
- steps:
15
- - uses: actions/checkout@v1
16
- - name: Set up Ruby 2.6
17
- uses: actions/setup-ruby@v1
18
- with:
19
- ruby-version: ${{ matrix.ruby-version }}
20
- - name: Build and test with RSpec
21
- run: |
22
- gem install bundler --no-document
23
- bundle install --jobs 4 --retry 3
24
- bundle exec rspec --format documentation --require spec_helper --color