karafka-rdkafka 0.17.1 → 0.17.2.rc1

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: c24a6e6092e6f39f66f81e4a1ab3e07fff2afb92df937232f5237e7602d1eea9
4
- data.tar.gz: 1fcda4b35822c4c89c9a3a92ee67de8f2cb1f059f4e84f23cc12462c74bbd701
3
+ metadata.gz: f9321c1841f24770f9e375013312c710058066384cdeef25a8e25d5b29d2b869
4
+ data.tar.gz: 944cd7539a70a2ed8400340e10a3705b34a0aec51d25a666def0f575069027de
5
5
  SHA512:
6
- metadata.gz: dfc563c4b071bf6ee6a2595fbc98122eff9758fdfa90f297cd27541b14a39ad71ffa11290d0ddc02687c5aa6cbbdf8cf7a26594582595403f6bb05de9ef25273
7
- data.tar.gz: 8d9644f980260d159cd26624fbbbb56360a3dd3e94cebabe0eb89775143379aeef1c46e96b8b5e82daa2e7a296c97b65cba821b48eb12f6b80c3e940ddaa04d6
6
+ metadata.gz: 04ae1810964a9ae6d96b402c1c52b8a6e506c8d4f7ff97299f5a35f79ce66a5f415aab2156ec037da1fce2e71b4302e72f1c7509acd6358fb52c2c360a0417c1
7
+ data.tar.gz: aef4f2144adfe02b54c449cfbdf84eabf8f50aab5df180a7afadb7aa7daa22b243ba00f8ce0686daa7da53441b5b0f81d450204f86cf941011014a0d76146edd
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # Rdkafka Changelog
2
2
 
3
+ ## 0.17.2 (2024-08-07)
4
+ - [Enhancement] Support returning `#details` for errors that do have topic/partition related extra info.
5
+
3
6
  ## 0.17.1 (2024-08-01)
4
7
  - [Enhancement] Support ability to release patches to librdkafka.
5
8
  - [Patch] Patch cooperative-sticky assignments in librdkafka.
data/lib/rdkafka/error.rb CHANGED
@@ -6,6 +6,9 @@ module Rdkafka
6
6
 
7
7
  # Error returned by the underlying rdkafka library.
8
8
  class RdkafkaError < BaseError
9
+ # Empty hash for details default allocation
10
+ EMPTY_HASH = {}.freeze
11
+
9
12
  # The underlying raw error response
10
13
  # @return [Integer]
11
14
  attr_reader :rdkafka_response
@@ -18,6 +21,10 @@ module Rdkafka
18
21
  # @return [String]
19
22
  attr_reader :broker_message
20
23
 
24
+ # Optional details hash specific to a given error or empty hash if none or not supported
25
+ # @return [Hash]
26
+ attr_reader :details
27
+
21
28
  class << self
22
29
  def build_from_c(response_ptr, message_prefix = nil, broker_message: nil)
23
30
  code = Rdkafka::Bindings.rd_kafka_error_code(response_ptr)
@@ -54,7 +61,21 @@ module Rdkafka
54
61
  message_prefix ||= response_ptr_or_code[:payload].read_string(response_ptr_or_code[:len])
55
62
  end
56
63
 
57
- new(response_ptr_or_code[:err], message_prefix, broker_message: broker_message)
64
+ details = if response_ptr_or_code[:rkt].null?
65
+ EMPTY_HASH
66
+ else
67
+ {
68
+ partition: response_ptr_or_code[:partition],
69
+ offset: response_ptr_or_code[:offset],
70
+ topic: Bindings.rd_kafka_topic_name(response_ptr_or_code[:rkt])
71
+ }.freeze
72
+ end
73
+ new(
74
+ response_ptr_or_code[:err],
75
+ message_prefix,
76
+ broker_message: broker_message,
77
+ details: details
78
+ )
58
79
  else
59
80
  build_from_c(response_ptr_or_code, message_prefix)
60
81
  end
@@ -73,7 +94,8 @@ module Rdkafka
73
94
  broker_message: nil,
74
95
  fatal: false,
75
96
  retryable: false,
76
- abortable: false
97
+ abortable: false,
98
+ details: EMPTY_HASH
77
99
  )
78
100
  raise TypeError.new("Response has to be an integer") unless response.is_a? Integer
79
101
  @rdkafka_response = response
@@ -82,6 +104,7 @@ module Rdkafka
82
104
  @fatal = fatal
83
105
  @retryable = retryable
84
106
  @abortable = abortable
107
+ @details = details
85
108
  end
86
109
 
87
110
  # This error's code, for example `:partition_eof`, `:msg_size_too_large`.
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Rdkafka
4
- VERSION = "0.17.1"
4
+ VERSION = "0.17.2.rc1"
5
5
  LIBRDKAFKA_VERSION = "2.5.0"
6
6
  LIBRDKAFKA_SOURCE_SHA256 = "3dc62de731fd516dfb1032861d9a580d4d0b5b0856beb0f185d06df8e6c26259"
7
7
  end
@@ -1467,4 +1467,39 @@ describe Rdkafka::Consumer do
1467
1467
  end
1468
1468
  end
1469
1469
  end
1470
+
1471
+ describe "when reaching eof on a topic and eof reporting enabled" do
1472
+ let(:consumer) { rdkafka_consumer_config(:"enable.partition.eof" => true).consumer }
1473
+
1474
+ it "should return proper details" do
1475
+ (0..2).each do |i|
1476
+ producer.produce(
1477
+ topic: "consume_test_topic",
1478
+ key: "key lag #{i}",
1479
+ partition: i
1480
+ ).wait
1481
+ end
1482
+
1483
+ # Consume to the end
1484
+ consumer.subscribe("consume_test_topic")
1485
+ eof_count = 0
1486
+ eof_error = nil
1487
+
1488
+ loop do
1489
+ begin
1490
+ consumer.poll(100)
1491
+ rescue Rdkafka::RdkafkaError => error
1492
+ if error.is_partition_eof?
1493
+ eof_error = error
1494
+ end
1495
+ break if eof_error
1496
+ end
1497
+ end
1498
+
1499
+ expect(eof_error.code).to eq(:partition_eof)
1500
+ expect(eof_error.details[:topic]).to eq('consume_test_topic')
1501
+ expect(eof_error.details[:partition]).to be_a(Integer)
1502
+ expect(eof_error.details[:offset]).to be_a(Integer)
1503
+ end
1504
+ end
1470
1505
  end
@@ -11,6 +11,12 @@ describe Rdkafka::RdkafkaError do
11
11
  expect(Rdkafka::RdkafkaError.new(10, "message prefix").message_prefix).to eq "message prefix"
12
12
  end
13
13
 
14
+ it "should have empty frozen details by default" do
15
+ error = Rdkafka::RdkafkaError.new(10, "message prefix")
16
+ expect(error.details).to eq({})
17
+ expect(error.details).to be_frozen
18
+ end
19
+
14
20
  it "should create an error with a broker message" do
15
21
  expect(Rdkafka::RdkafkaError.new(10, broker_message: "broker message").broker_message).to eq "broker message"
16
22
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: karafka-rdkafka
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.1
4
+ version: 0.17.2.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thijs Cadier
@@ -36,7 +36,7 @@ cert_chain:
36
36
  AnG1dJU+yL2BK7vaVytLTstJME5mepSZ46qqIJXMuWob/YPDmVaBF39TDSG9e34s
37
37
  msG3BiCqgOgHAnL23+CN3Rt8MsuRfEtoTKpJVcCfoEoNHOkc
38
38
  -----END CERTIFICATE-----
39
- date: 2024-08-01 00:00:00.000000000 Z
39
+ date: 2024-08-07 00:00:00.000000000 Z
40
40
  dependencies:
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: ffi
metadata.gz.sig CHANGED
Binary file