rdkafka 0.13.0.beta.1 → 0.13.0.beta.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -1
- data/lib/rdkafka/bindings.rb +14 -3
- data/lib/rdkafka/consumer/headers.rb +22 -7
- data/lib/rdkafka/consumer/message.rb +1 -1
- data/lib/rdkafka/consumer.rb +1 -1
- data/lib/rdkafka/version.rb +1 -1
- data/spec/rdkafka/consumer/headers_spec.rb +62 -0
- data/spec/rdkafka/consumer_spec.rb +74 -15
- data/spec/rdkafka/producer_spec.rb +15 -14
- data/spec/spec_helper.rb +14 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eac016dc712d56e178c77a62f8af4e422319a783e80acbd7528453bfca6ca260
|
4
|
+
data.tar.gz: 8a4ed8df1339e0e74c96b259431012465c499ae9e9c8c6db8ff751497e1e5c43
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e3167de231aaabdfa512cabef13a4ffaabcc94757a2b7d0f360ed27a9005a40da5bbb262dffc49bda03d11557eef63dcf6b9c010fb944cf41fcb06bb7531c3ee
|
7
|
+
data.tar.gz: 8db04d46686505a9b1fef79c8544f3c27056ae5ff9e9eede9343d4f5cef4c63c844b9798011a5339ebbdf2cab883d1c3fd5df61842ea90c4862fa0d03dd88610
|
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,7 @@
|
|
1
1
|
# 0.13.0
|
2
|
+
* Support cooperative sticky partition assignment in the rebalance callback (methodmissing)
|
3
|
+
* Support both string and symbol header keys (ColinDKelley)
|
4
|
+
* Handle tombstone messages properly (kgalieva)
|
2
5
|
* Add topic name to delivery report (maeve)
|
3
6
|
* Allow string partitioner config (mollyegibson)
|
4
7
|
* Fix documented type for DeliveryReport#error (jimmydo)
|
@@ -6,7 +9,7 @@
|
|
6
9
|
* Use finalizers to cleanly exit producer and admin (thijsc)
|
7
10
|
|
8
11
|
# 0.12.0
|
9
|
-
*
|
12
|
+
* Bumps librdkafka to 1.9.0
|
10
13
|
* Fix crash on empty partition key (mensfeld)
|
11
14
|
* Pass the delivery handle to the callback (gvisokinskas)
|
12
15
|
|
data/lib/rdkafka/bindings.rb
CHANGED
@@ -17,7 +17,7 @@ module Rdkafka
|
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
-
ffi_lib File.join(
|
20
|
+
ffi_lib File.join(__dir__, "../../ext/librdkafka.#{lib_extension}")
|
21
21
|
|
22
22
|
RD_KAFKA_RESP_ERR__ASSIGN_PARTITIONS = -175
|
23
23
|
RD_KAFKA_RESP_ERR__REVOKE_PARTITIONS = -174
|
@@ -113,6 +113,7 @@ module Rdkafka
|
|
113
113
|
attach_function :rd_kafka_conf_set_stats_cb, [:pointer, :stats_cb], :void
|
114
114
|
callback :error_cb, [:pointer, :int, :string, :pointer], :void
|
115
115
|
attach_function :rd_kafka_conf_set_error_cb, [:pointer, :error_cb], :void
|
116
|
+
attach_function :rd_kafka_rebalance_protocol, [:pointer], :string
|
116
117
|
|
117
118
|
# Log queue
|
118
119
|
attach_function :rd_kafka_set_log_queue, [:pointer, :pointer], :void
|
@@ -176,6 +177,8 @@ module Rdkafka
|
|
176
177
|
attach_function :rd_kafka_unsubscribe, [:pointer], :int
|
177
178
|
attach_function :rd_kafka_subscription, [:pointer, :pointer], :int
|
178
179
|
attach_function :rd_kafka_assign, [:pointer, :pointer], :int
|
180
|
+
attach_function :rd_kafka_incremental_assign, [:pointer, :pointer], :int
|
181
|
+
attach_function :rd_kafka_incremental_unassign, [:pointer, :pointer], :int
|
179
182
|
attach_function :rd_kafka_assignment, [:pointer, :pointer], :int
|
180
183
|
attach_function :rd_kafka_committed, [:pointer, :pointer, :int], :int
|
181
184
|
attach_function :rd_kafka_commit, [:pointer, :pointer, :bool], :int, blocking: true
|
@@ -201,9 +204,17 @@ module Rdkafka
|
|
201
204
|
) do |client_ptr, code, partitions_ptr, opaque_ptr|
|
202
205
|
case code
|
203
206
|
when RD_KAFKA_RESP_ERR__ASSIGN_PARTITIONS
|
204
|
-
Rdkafka::Bindings.
|
207
|
+
if Rdkafka::Bindings.rd_kafka_rebalance_protocol(client_ptr) == "COOPERATIVE"
|
208
|
+
Rdkafka::Bindings.rd_kafka_incremental_assign(client_ptr, partitions_ptr)
|
209
|
+
else
|
210
|
+
Rdkafka::Bindings.rd_kafka_assign(client_ptr, partitions_ptr)
|
211
|
+
end
|
205
212
|
else # RD_KAFKA_RESP_ERR__REVOKE_PARTITIONS or errors
|
206
|
-
Rdkafka::Bindings.
|
213
|
+
if Rdkafka::Bindings.rd_kafka_rebalance_protocol(client_ptr) == "COOPERATIVE"
|
214
|
+
Rdkafka::Bindings.rd_kafka_incremental_unassign(client_ptr, partitions_ptr)
|
215
|
+
else
|
216
|
+
Rdkafka::Bindings.rd_kafka_assign(client_ptr, FFI::Pointer::NULL)
|
217
|
+
end
|
207
218
|
end
|
208
219
|
|
209
220
|
opaque = Rdkafka::Config.opaques[opaque_ptr.to_i]
|
@@ -2,11 +2,25 @@
|
|
2
2
|
|
3
3
|
module Rdkafka
|
4
4
|
class Consumer
|
5
|
-
#
|
6
|
-
|
7
|
-
|
5
|
+
# Interface to return headers for a consumer message
|
6
|
+
module Headers
|
7
|
+
class HashWithSymbolKeysTreatedLikeStrings < Hash
|
8
|
+
def [](key)
|
9
|
+
if key.is_a?(Symbol)
|
10
|
+
Kernel.warn("rdkafka deprecation warning: header access with Symbol key #{key.inspect} treated as a String. " \
|
11
|
+
"Please change your code to use String keys to avoid this warning. Symbol keys will break in version 1.")
|
12
|
+
super(key.to_s)
|
13
|
+
else
|
14
|
+
super
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
# Reads a librdkafka native message's headers and returns them as a Ruby Hash
|
20
|
+
#
|
21
|
+
# @param [librdkakfa message] native_message
|
8
22
|
#
|
9
|
-
# @return [Hash<String, String>]
|
23
|
+
# @return [Hash<String, String>] headers Hash for the native_message
|
10
24
|
#
|
11
25
|
# @raise [Rdkafka::RdkafkaError] when fail to read headers
|
12
26
|
#
|
@@ -26,7 +40,8 @@ module Rdkafka
|
|
26
40
|
name_ptrptr = FFI::MemoryPointer.new(:pointer)
|
27
41
|
value_ptrptr = FFI::MemoryPointer.new(:pointer)
|
28
42
|
size_ptr = Rdkafka::Bindings::SizePtr.new
|
29
|
-
|
43
|
+
|
44
|
+
headers = HashWithSymbolKeysTreatedLikeStrings.new
|
30
45
|
|
31
46
|
idx = 0
|
32
47
|
loop do
|
@@ -53,12 +68,12 @@ module Rdkafka
|
|
53
68
|
|
54
69
|
value = value_ptr.read_string(size)
|
55
70
|
|
56
|
-
headers[name
|
71
|
+
headers[name] = value
|
57
72
|
|
58
73
|
idx += 1
|
59
74
|
end
|
60
75
|
|
61
|
-
headers
|
76
|
+
headers.freeze
|
62
77
|
end
|
63
78
|
end
|
64
79
|
end
|
data/lib/rdkafka/consumer.rb
CHANGED
@@ -550,7 +550,7 @@ module Rdkafka
|
|
550
550
|
end
|
551
551
|
if message
|
552
552
|
slice << message
|
553
|
-
bytes += message.payload.bytesize
|
553
|
+
bytes += message.payload.bytesize if message.payload
|
554
554
|
end
|
555
555
|
if slice.size == max_items || bytes >= bytes_threshold || monotonic_now >= end_time - 0.001
|
556
556
|
yield slice.dup, nil
|
data/lib/rdkafka/version.rb
CHANGED
@@ -0,0 +1,62 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
|
5
|
+
describe Rdkafka::Consumer::Headers do
|
6
|
+
let(:headers) do
|
7
|
+
{ # Note String keys!
|
8
|
+
"version" => "2.1.3",
|
9
|
+
"type" => "String"
|
10
|
+
}
|
11
|
+
end
|
12
|
+
let(:native_message) { double('native message') }
|
13
|
+
let(:headers_ptr) { double('headers pointer') }
|
14
|
+
|
15
|
+
describe '.from_native' do
|
16
|
+
before do
|
17
|
+
expect(Rdkafka::Bindings).to receive(:rd_kafka_message_headers).with(native_message, anything) do |_, headers_ptrptr|
|
18
|
+
expect(headers_ptrptr).to receive(:read_pointer).and_return(headers_ptr)
|
19
|
+
Rdkafka::Bindings::RD_KAFKA_RESP_ERR_NO_ERROR
|
20
|
+
end
|
21
|
+
|
22
|
+
expect(Rdkafka::Bindings).to \
|
23
|
+
receive(:rd_kafka_header_get_all)
|
24
|
+
.with(headers_ptr, 0, anything, anything, anything) do |_, _, name_ptrptr, value_ptrptr, size_ptr|
|
25
|
+
expect(name_ptrptr).to receive(:read_pointer).and_return(double("pointer 0", read_string_to_null: headers.keys[0]))
|
26
|
+
expect(size_ptr).to receive(:[]).with(:value).and_return(headers.keys[0].size)
|
27
|
+
expect(value_ptrptr).to receive(:read_pointer).and_return(double("value pointer 0", read_string: headers.values[0]))
|
28
|
+
Rdkafka::Bindings::RD_KAFKA_RESP_ERR_NO_ERROR
|
29
|
+
end
|
30
|
+
|
31
|
+
expect(Rdkafka::Bindings).to \
|
32
|
+
receive(:rd_kafka_header_get_all)
|
33
|
+
.with(headers_ptr, 1, anything, anything, anything) do |_, _, name_ptrptr, value_ptrptr, size_ptr|
|
34
|
+
expect(name_ptrptr).to receive(:read_pointer).and_return(double("pointer 1", read_string_to_null: headers.keys[1]))
|
35
|
+
expect(size_ptr).to receive(:[]).with(:value).and_return(headers.keys[1].size)
|
36
|
+
expect(value_ptrptr).to receive(:read_pointer).and_return(double("value pointer 1", read_string: headers.values[1]))
|
37
|
+
Rdkafka::Bindings::RD_KAFKA_RESP_ERR_NO_ERROR
|
38
|
+
end
|
39
|
+
|
40
|
+
expect(Rdkafka::Bindings).to \
|
41
|
+
receive(:rd_kafka_header_get_all)
|
42
|
+
.with(headers_ptr, 2, anything, anything, anything)
|
43
|
+
.and_return(Rdkafka::Bindings::RD_KAFKA_RESP_ERR__NOENT)
|
44
|
+
end
|
45
|
+
|
46
|
+
subject { described_class.from_native(native_message) }
|
47
|
+
|
48
|
+
it { is_expected.to eq(headers) }
|
49
|
+
it { is_expected.to be_frozen }
|
50
|
+
|
51
|
+
it 'allows String key' do
|
52
|
+
expect(subject['version']).to eq("2.1.3")
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'allows Symbol key, but warns' do
|
56
|
+
expect(Kernel).to \
|
57
|
+
receive(:warn).with("rdkafka deprecation warning: header access with Symbol key :version treated as a String. " \
|
58
|
+
"Please change your code to use String keys to avoid this warning. Symbol keys will break in version 1.")
|
59
|
+
expect(subject[:version]).to eq("2.1.3")
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -595,7 +595,7 @@ describe Rdkafka::Consumer do
|
|
595
595
|
end
|
596
596
|
|
597
597
|
describe "#poll with headers" do
|
598
|
-
it "should return message with headers" do
|
598
|
+
it "should return message with headers using string keys (when produced with symbol keys)" do
|
599
599
|
report = producer.produce(
|
600
600
|
topic: "consume_test_topic",
|
601
601
|
key: "key headers",
|
@@ -605,7 +605,20 @@ describe Rdkafka::Consumer do
|
|
605
605
|
message = wait_for_message(topic: "consume_test_topic", consumer: consumer, delivery_report: report)
|
606
606
|
expect(message).to be
|
607
607
|
expect(message.key).to eq('key headers')
|
608
|
-
expect(message.headers).to include(foo
|
608
|
+
expect(message.headers).to include('foo' => 'bar')
|
609
|
+
end
|
610
|
+
|
611
|
+
it "should return message with headers using string keys (when produced with string keys)" do
|
612
|
+
report = producer.produce(
|
613
|
+
topic: "consume_test_topic",
|
614
|
+
key: "key headers",
|
615
|
+
headers: { 'foo' => 'bar' }
|
616
|
+
).wait
|
617
|
+
|
618
|
+
message = wait_for_message(topic: "consume_test_topic", consumer: consumer, delivery_report: report)
|
619
|
+
expect(message).to be
|
620
|
+
expect(message.key).to eq('key headers')
|
621
|
+
expect(message.headers).to include('foo' => 'bar')
|
609
622
|
end
|
610
623
|
|
611
624
|
it "should return message with no headers" do
|
@@ -700,7 +713,7 @@ describe Rdkafka::Consumer do
|
|
700
713
|
n.times do |i|
|
701
714
|
handles << producer.produce(
|
702
715
|
topic: topic_name,
|
703
|
-
payload: Time.new.to_f.to_s,
|
716
|
+
payload: i % 10 == 0 ? nil : Time.new.to_f.to_s,
|
704
717
|
key: i.to_s,
|
705
718
|
partition: 0
|
706
719
|
)
|
@@ -964,18 +977,6 @@ describe Rdkafka::Consumer do
|
|
964
977
|
expect(listener.queue).to eq([:assigned, :revoked])
|
965
978
|
end
|
966
979
|
end
|
967
|
-
|
968
|
-
def notify_listener(listener)
|
969
|
-
# 1. subscribe and poll
|
970
|
-
consumer.subscribe("consume_test_topic")
|
971
|
-
wait_for_assignment(consumer)
|
972
|
-
consumer.poll(100)
|
973
|
-
|
974
|
-
# 2. unsubscribe
|
975
|
-
consumer.unsubscribe
|
976
|
-
wait_for_unassignment(consumer)
|
977
|
-
consumer.close
|
978
|
-
end
|
979
980
|
end
|
980
981
|
|
981
982
|
context "methods that should not be called after a consumer has been closed" do
|
@@ -1015,4 +1016,62 @@ describe Rdkafka::Consumer do
|
|
1015
1016
|
|
1016
1017
|
expect(consumer.closed?).to eq(true)
|
1017
1018
|
end
|
1019
|
+
|
1020
|
+
context "when the rebalance protocol is cooperative" do
|
1021
|
+
let(:consumer) do
|
1022
|
+
config = rdkafka_consumer_config(
|
1023
|
+
{
|
1024
|
+
:"partition.assignment.strategy" => "cooperative-sticky",
|
1025
|
+
:"debug" => "consumer",
|
1026
|
+
}
|
1027
|
+
)
|
1028
|
+
config.consumer_rebalance_listener = listener
|
1029
|
+
config.consumer
|
1030
|
+
end
|
1031
|
+
|
1032
|
+
let(:listener) do
|
1033
|
+
Struct.new(:queue) do
|
1034
|
+
def on_partitions_assigned(consumer, list)
|
1035
|
+
collect(:assign, list)
|
1036
|
+
end
|
1037
|
+
|
1038
|
+
def on_partitions_revoked(consumer, list)
|
1039
|
+
collect(:revoke, list)
|
1040
|
+
end
|
1041
|
+
|
1042
|
+
def collect(name, list)
|
1043
|
+
partitions = list.to_h.map { |key, values| [key, values.map(&:partition)] }.flatten
|
1044
|
+
queue << ([name] + partitions)
|
1045
|
+
end
|
1046
|
+
end.new([])
|
1047
|
+
end
|
1048
|
+
|
1049
|
+
it "should be able to assign and unassign partitions using the cooperative partition assignment APIs" do
|
1050
|
+
notify_listener(listener) do
|
1051
|
+
handles = []
|
1052
|
+
10.times do
|
1053
|
+
handles << producer.produce(
|
1054
|
+
topic: "consume_test_topic",
|
1055
|
+
payload: "payload 1",
|
1056
|
+
key: "key 1",
|
1057
|
+
partition: 0
|
1058
|
+
)
|
1059
|
+
end
|
1060
|
+
handles.each(&:wait)
|
1061
|
+
|
1062
|
+
consumer.subscribe("consume_test_topic")
|
1063
|
+
# Check the first 10 messages. Then close the consumer, which
|
1064
|
+
# should break the each loop.
|
1065
|
+
consumer.each_with_index do |message, i|
|
1066
|
+
expect(message).to be_a Rdkafka::Consumer::Message
|
1067
|
+
break if i == 10
|
1068
|
+
end
|
1069
|
+
end
|
1070
|
+
|
1071
|
+
expect(listener.queue).to eq([
|
1072
|
+
[:assign, "consume_test_topic", 0, 1, 2],
|
1073
|
+
[:revoke, "consume_test_topic", 0, 1, 2]
|
1074
|
+
])
|
1075
|
+
end
|
1076
|
+
end
|
1018
1077
|
end
|
@@ -9,7 +9,8 @@ describe Rdkafka::Producer do
|
|
9
9
|
|
10
10
|
after do
|
11
11
|
# Registry should always end up being empty
|
12
|
-
|
12
|
+
registry = Rdkafka::Producer::DeliveryHandle::REGISTRY
|
13
|
+
expect(registry).to be_empty, registry.inspect
|
13
14
|
producer.close
|
14
15
|
consumer.close
|
15
16
|
end
|
@@ -187,7 +188,7 @@ describe Rdkafka::Producer do
|
|
187
188
|
# Close producer
|
188
189
|
producer.close
|
189
190
|
|
190
|
-
# Consume message and verify
|
191
|
+
# Consume message and verify its content
|
191
192
|
message = wait_for_message(
|
192
193
|
topic: "produce_test_topic",
|
193
194
|
delivery_report: report,
|
@@ -211,7 +212,7 @@ describe Rdkafka::Producer do
|
|
211
212
|
)
|
212
213
|
report = handle.wait(max_wait_timeout: 5)
|
213
214
|
|
214
|
-
# Consume message and verify
|
215
|
+
# Consume message and verify its content
|
215
216
|
message = wait_for_message(
|
216
217
|
topic: "produce_test_topic",
|
217
218
|
delivery_report: report,
|
@@ -285,7 +286,7 @@ describe Rdkafka::Producer do
|
|
285
286
|
)
|
286
287
|
report = handle.wait(max_wait_timeout: 5)
|
287
288
|
|
288
|
-
# Consume message and verify
|
289
|
+
# Consume message and verify its content
|
289
290
|
message = wait_for_message(
|
290
291
|
topic: "produce_test_topic",
|
291
292
|
delivery_report: report,
|
@@ -318,7 +319,7 @@ describe Rdkafka::Producer do
|
|
318
319
|
)
|
319
320
|
report = handle.wait(max_wait_timeout: 5)
|
320
321
|
|
321
|
-
# Consume message and verify
|
322
|
+
# Consume message and verify its content
|
322
323
|
message = wait_for_message(
|
323
324
|
topic: "produce_test_topic",
|
324
325
|
delivery_report: report,
|
@@ -339,7 +340,7 @@ describe Rdkafka::Producer do
|
|
339
340
|
)
|
340
341
|
report = handle.wait(max_wait_timeout: 5)
|
341
342
|
|
342
|
-
# Consume message and verify
|
343
|
+
# Consume message and verify its content
|
343
344
|
message = wait_for_message(
|
344
345
|
topic: "produce_test_topic",
|
345
346
|
delivery_report: report,
|
@@ -359,7 +360,7 @@ describe Rdkafka::Producer do
|
|
359
360
|
)
|
360
361
|
report = handle.wait(max_wait_timeout: 5)
|
361
362
|
|
362
|
-
# Consume message and verify
|
363
|
+
# Consume message and verify its content
|
363
364
|
message = wait_for_message(
|
364
365
|
topic: "produce_test_topic",
|
365
366
|
delivery_report: report,
|
@@ -377,7 +378,7 @@ describe Rdkafka::Producer do
|
|
377
378
|
)
|
378
379
|
report = handle.wait(max_wait_timeout: 5)
|
379
380
|
|
380
|
-
# Consume message and verify
|
381
|
+
# Consume message and verify its content
|
381
382
|
message = wait_for_message(
|
382
383
|
topic: "produce_test_topic",
|
383
384
|
delivery_report: report,
|
@@ -397,7 +398,7 @@ describe Rdkafka::Producer do
|
|
397
398
|
)
|
398
399
|
report = handle.wait(max_wait_timeout: 5)
|
399
400
|
|
400
|
-
# Consume message and verify
|
401
|
+
# Consume message and verify its content
|
401
402
|
message = wait_for_message(
|
402
403
|
topic: "produce_test_topic",
|
403
404
|
delivery_report: report,
|
@@ -406,9 +407,9 @@ describe Rdkafka::Producer do
|
|
406
407
|
|
407
408
|
expect(message.payload).to eq "payload headers"
|
408
409
|
expect(message.key).to eq "key headers"
|
409
|
-
expect(message.headers[
|
410
|
-
expect(message.headers[
|
411
|
-
expect(message.headers[
|
410
|
+
expect(message.headers["foo"]).to eq "bar"
|
411
|
+
expect(message.headers["baz"]).to eq "foobar"
|
412
|
+
expect(message.headers["foobar"]).to be_nil
|
412
413
|
end
|
413
414
|
|
414
415
|
it "should produce a message with empty headers" do
|
@@ -420,7 +421,7 @@ describe Rdkafka::Producer do
|
|
420
421
|
)
|
421
422
|
report = handle.wait(max_wait_timeout: 5)
|
422
423
|
|
423
|
-
# Consume message and verify
|
424
|
+
# Consume message and verify its content
|
424
425
|
message = wait_for_message(
|
425
426
|
topic: "produce_test_topic",
|
426
427
|
delivery_report: report,
|
@@ -493,7 +494,7 @@ describe Rdkafka::Producer do
|
|
493
494
|
|
494
495
|
reader.close
|
495
496
|
|
496
|
-
# Consume message and verify
|
497
|
+
# Consume message and verify its content
|
497
498
|
message = wait_for_message(
|
498
499
|
topic: "produce_test_topic",
|
499
500
|
delivery_report: report,
|
data/spec/spec_helper.rb
CHANGED
@@ -106,6 +106,20 @@ def wait_for_unassignment(consumer)
|
|
106
106
|
end
|
107
107
|
end
|
108
108
|
|
109
|
+
def notify_listener(listener, &block)
|
110
|
+
# 1. subscribe and poll
|
111
|
+
consumer.subscribe("consume_test_topic")
|
112
|
+
wait_for_assignment(consumer)
|
113
|
+
consumer.poll(100)
|
114
|
+
|
115
|
+
block.call if block
|
116
|
+
|
117
|
+
# 2. unsubscribe
|
118
|
+
consumer.unsubscribe
|
119
|
+
wait_for_unassignment(consumer)
|
120
|
+
consumer.close
|
121
|
+
end
|
122
|
+
|
109
123
|
RSpec.configure do |config|
|
110
124
|
config.filter_run focus: true
|
111
125
|
config.run_all_when_everything_filtered = true
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rdkafka
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.13.0.beta.
|
4
|
+
version: 0.13.0.beta.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thijs Cadier
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-10-
|
11
|
+
date: 2022-10-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|
@@ -191,6 +191,7 @@ files:
|
|
191
191
|
- spec/rdkafka/bindings_spec.rb
|
192
192
|
- spec/rdkafka/callbacks_spec.rb
|
193
193
|
- spec/rdkafka/config_spec.rb
|
194
|
+
- spec/rdkafka/consumer/headers_spec.rb
|
194
195
|
- spec/rdkafka/consumer/message_spec.rb
|
195
196
|
- spec/rdkafka/consumer/partition_spec.rb
|
196
197
|
- spec/rdkafka/consumer/topic_partition_list_spec.rb
|
@@ -221,7 +222,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
221
222
|
- !ruby/object:Gem::Version
|
222
223
|
version: 1.3.1
|
223
224
|
requirements: []
|
224
|
-
rubygems_version: 3.3.
|
225
|
+
rubygems_version: 3.3.13
|
225
226
|
signing_key:
|
226
227
|
specification_version: 4
|
227
228
|
summary: The rdkafka gem is a modern Kafka client library for Ruby based on librdkafka.
|
@@ -237,6 +238,7 @@ test_files:
|
|
237
238
|
- spec/rdkafka/bindings_spec.rb
|
238
239
|
- spec/rdkafka/callbacks_spec.rb
|
239
240
|
- spec/rdkafka/config_spec.rb
|
241
|
+
- spec/rdkafka/consumer/headers_spec.rb
|
240
242
|
- spec/rdkafka/consumer/message_spec.rb
|
241
243
|
- spec/rdkafka/consumer/partition_spec.rb
|
242
244
|
- spec/rdkafka/consumer/topic_partition_list_spec.rb
|