karafka 2.2.5 → 2.2.6

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: 729320b972ba55fe500db0729aa651c6308e1975db33d3ebd4db8061561e38bc
4
- data.tar.gz: f26fa836af6b7777692c7fd36fad1c89ce22c7ab60ab243662df40993acd7bd4
3
+ metadata.gz: 36fe50a9b0a758b9b916ca668c862085629bf09bcf16f7c0e8a340a9b7333abb
4
+ data.tar.gz: 61d3f10df4e1545a1a4e0d8190eb6ee2a7b751636bb347cf2703a74149fc710c
5
5
  SHA512:
6
- metadata.gz: 86cecfe51fbdb21943f75a98a1ee8e755496f9777bf5c4445ad44ecff45fa5be34fc79c0ad6358ded3886a59ebde4f0cd47598fdcdda41f75c5152489cf5ca35
7
- data.tar.gz: fec15466a63fc6e49089f339d3f0d9bb3d4d308c7855adf17f23e93ef10e3e09daf6e8453296a53bf74a57d1004883fc2b144c4564342daec8b94b9a7288bd82
6
+ metadata.gz: f12fb91f2e8e4e7dba766fbf32c79b734f5cd9f6fa63a66f80863a819dfd6d442024a97a4095bea84ef87bb0cb645ff431ba6d2f04f46d72864c377d61fc76a6
7
+ data.tar.gz: 4235c1944c98f0bd6359b82b7eab68a69812d70665ab0436c9f67cc5011e4c8edfa2c194a6d65744a4d82f97710beca5ddb871b8671febf61e5c9f591a746bee
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # Karafka framework changelog
2
2
 
3
+ ## 2.2.6 (2023-09-26)
4
+ - [Enhancement] Retry `Karafka::Admin#read_watermark_offsets` fetching upon `not_leader_for_partition` that can occur mostly on newly created topics in KRaft and after crashes during leader selection.
5
+
3
6
  ## 2.2.5 (2023-09-25)
4
7
  - [Enhancement] Ensure, that when topic related operations end, the result is usable. There were few cases where admin operations on topics would finish successfully but internal Kafka caches would not report changes for a short period of time.
5
8
  - [Enhancement] Stabilize cooperative-sticky early shutdown procedure.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- karafka (2.2.5)
4
+ karafka (2.2.6)
5
5
  karafka-core (>= 2.2.2, < 2.3.0)
6
6
  thor (>= 0.20)
7
7
  waterdrop (>= 2.6.6, < 3.0.0)
data/lib/karafka/admin.rb CHANGED
@@ -142,7 +142,12 @@ module Karafka
142
142
  # @return [Array<Integer, Integer>] low watermark offset and high watermark offset
143
143
  def read_watermark_offsets(name, partition)
144
144
  with_consumer do |consumer|
145
- consumer.query_watermark_offsets(name, partition)
145
+ # For newly created topics or in cases where we're trying to get them but there is no
146
+ # leader, this can fail. It happens more often for new topics under KRaft, however we
147
+ # still want to make sure things operate as expected even then
148
+ with_rdkafka_retry(codes: %i[not_leader_for_partition]) do
149
+ consumer.query_watermark_offsets(name, partition)
150
+ end
146
151
  end
147
152
  end
148
153
 
@@ -228,6 +233,31 @@ module Karafka
228
233
  raise
229
234
  end
230
235
 
236
+ # Handles retries for rdkafka related errors that we specify in `:codes`.
237
+ #
238
+ # Some operations temporarily fail, especially for cases where we changed something fast
239
+ # like topic creation or repartitioning. In cases like this it is ok to retry operations that
240
+ # do not change the state as it will usually recover.
241
+ #
242
+ # @param codes [Array<Symbol>] librdkafka error codes on which we want to retry
243
+ # @param max_attempts [Integer] number of attempts (including initial) after which we should
244
+ # give up
245
+ #
246
+ # @note This code implements a simple backoff that increases with each attempt.
247
+ def with_rdkafka_retry(codes:, max_attempts: 5)
248
+ attempt ||= 0
249
+ attempt += 1
250
+
251
+ yield
252
+ rescue Rdkafka::RdkafkaError => e
253
+ raise unless codes.include?(e.code)
254
+ raise if attempt >= max_attempts
255
+
256
+ sleep(max_attempts)
257
+
258
+ retry
259
+ end
260
+
231
261
  # @param type [Symbol] type of config we want
232
262
  # @param settings [Hash] extra settings for config (if needed)
233
263
  # @return [::Rdkafka::Config] rdkafka config
@@ -3,5 +3,5 @@
3
3
  # Main module namespace
4
4
  module Karafka
5
5
  # Current Karafka version
6
- VERSION = '2.2.5'
6
+ VERSION = '2.2.6'
7
7
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: karafka
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.5
4
+ version: 2.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maciej Mensfeld
@@ -35,7 +35,7 @@ cert_chain:
35
35
  AnG1dJU+yL2BK7vaVytLTstJME5mepSZ46qqIJXMuWob/YPDmVaBF39TDSG9e34s
36
36
  msG3BiCqgOgHAnL23+CN3Rt8MsuRfEtoTKpJVcCfoEoNHOkc
37
37
  -----END CERTIFICATE-----
38
- date: 2023-09-25 00:00:00.000000000 Z
38
+ date: 2023-09-26 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: karafka-core
metadata.gz.sig CHANGED
Binary file