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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +3 -0
- data/lib/rdkafka/error.rb +25 -2
- data/lib/rdkafka/version.rb +1 -1
- data/spec/rdkafka/consumer_spec.rb +35 -0
- data/spec/rdkafka/error_spec.rb +6 -0
- data.tar.gz.sig +0 -0
- metadata +2 -2
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f9321c1841f24770f9e375013312c710058066384cdeef25a8e25d5b29d2b869
|
4
|
+
data.tar.gz: 944cd7539a70a2ed8400340e10a3705b34a0aec51d25a666def0f575069027de
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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`.
|
data/lib/rdkafka/version.rb
CHANGED
@@ -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
|
data/spec/rdkafka/error_spec.rb
CHANGED
@@ -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.
|
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-
|
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
|