rdkafka 0.15.0 → 0.16.0.beta1

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.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/.github/workflows/ci.yml +4 -7
  4. data/.gitignore +2 -0
  5. data/.ruby-version +1 -1
  6. data/CHANGELOG.md +25 -1
  7. data/README.md +31 -9
  8. data/docker-compose.yml +1 -1
  9. data/ext/Rakefile +51 -26
  10. data/lib/rdkafka/abstract_handle.rb +44 -20
  11. data/lib/rdkafka/admin/acl_binding_result.rb +38 -24
  12. data/lib/rdkafka/admin/create_topic_report.rb +1 -1
  13. data/lib/rdkafka/admin/delete_groups_report.rb +1 -1
  14. data/lib/rdkafka/admin/delete_topic_report.rb +1 -1
  15. data/lib/rdkafka/admin.rb +15 -0
  16. data/lib/rdkafka/bindings.rb +44 -8
  17. data/lib/rdkafka/callbacks.rb +28 -12
  18. data/lib/rdkafka/config.rb +69 -15
  19. data/lib/rdkafka/consumer.rb +39 -17
  20. data/lib/rdkafka/helpers/oauth.rb +58 -0
  21. data/lib/rdkafka/native_kafka.rb +32 -19
  22. data/lib/rdkafka/producer/delivery_handle.rb +12 -1
  23. data/lib/rdkafka/producer/delivery_report.rb +16 -3
  24. data/lib/rdkafka/producer.rb +47 -10
  25. data/lib/rdkafka/version.rb +1 -1
  26. data/lib/rdkafka.rb +1 -0
  27. data/rdkafka.gemspec +2 -2
  28. data/spec/rdkafka/abstract_handle_spec.rb +34 -21
  29. data/spec/rdkafka/admin/delete_acl_report_spec.rb +1 -0
  30. data/spec/rdkafka/admin/describe_acl_report_spec.rb +1 -0
  31. data/spec/rdkafka/admin_spec.rb +53 -0
  32. data/spec/rdkafka/bindings_spec.rb +97 -0
  33. data/spec/rdkafka/config_spec.rb +53 -0
  34. data/spec/rdkafka/consumer_spec.rb +74 -0
  35. data/spec/rdkafka/native_kafka_spec.rb +8 -1
  36. data/spec/rdkafka/producer/delivery_report_spec.rb +4 -0
  37. data/spec/rdkafka/producer_spec.rb +69 -2
  38. data/spec/spec_helper.rb +16 -1
  39. data.tar.gz.sig +0 -0
  40. metadata +6 -4
  41. metadata.gz.sig +0 -0
@@ -14,6 +14,19 @@ describe Rdkafka::Producer do
14
14
  consumer.close
15
15
  end
16
16
 
17
+ describe 'producer without auto-start' do
18
+ let(:producer) { rdkafka_producer_config.producer(native_kafka_auto_start: false) }
19
+
20
+ it 'expect to be able to start it later and close' do
21
+ producer.start
22
+ producer.close
23
+ end
24
+
25
+ it 'expect to be able to close it without starting' do
26
+ producer.close
27
+ end
28
+ end
29
+
17
30
  describe '#name' do
18
31
  it { expect(producer.name).to include('rdkafka#producer-') }
19
32
  end
@@ -34,6 +47,7 @@ describe Rdkafka::Producer do
34
47
 
35
48
  producer.delivery_callback = lambda do |report|
36
49
  expect(report).not_to be_nil
50
+ expect(report.label).to eq "label"
37
51
  expect(report.partition).to eq 1
38
52
  expect(report.offset).to be >= 0
39
53
  expect(report.topic_name).to eq "produce_test_topic"
@@ -44,9 +58,12 @@ describe Rdkafka::Producer do
44
58
  handle = producer.produce(
45
59
  topic: "produce_test_topic",
46
60
  payload: "payload",
47
- key: "key"
61
+ key: "key",
62
+ label: "label"
48
63
  )
49
64
 
65
+ expect(handle.label).to eq "label"
66
+
50
67
  # Wait for it to be delivered
51
68
  handle.wait(max_wait_timeout: 15)
52
69
 
@@ -175,11 +192,13 @@ describe Rdkafka::Producer do
175
192
  handle = producer.produce(
176
193
  topic: "produce_test_topic",
177
194
  payload: "payload",
178
- key: "key"
195
+ key: "key",
196
+ label: "label"
179
197
  )
180
198
 
181
199
  # Should be pending at first
182
200
  expect(handle.pending?).to be true
201
+ expect(handle.label).to eq "label"
183
202
 
184
203
  # Check delivery handle and report
185
204
  report = handle.wait(max_wait_timeout: 5)
@@ -187,6 +206,7 @@ describe Rdkafka::Producer do
187
206
  expect(report).not_to be_nil
188
207
  expect(report.partition).to eq 1
189
208
  expect(report.offset).to be >= 0
209
+ expect(report.label).to eq "label"
190
210
 
191
211
  # Flush and close producer
192
212
  producer.flush
@@ -558,6 +578,23 @@ describe Rdkafka::Producer do
558
578
  end
559
579
  end
560
580
 
581
+ context "when not being able to deliver the message" do
582
+ let(:producer) do
583
+ rdkafka_producer_config(
584
+ "bootstrap.servers": "localhost:9093",
585
+ "message.timeout.ms": 100
586
+ ).producer
587
+ end
588
+
589
+ it "should contain the error in the response when not deliverable" do
590
+ handler = producer.produce(topic: 'produce_test_topic', payload: nil, label: 'na')
591
+ # Wait for the async callbacks and delivery registry to update
592
+ sleep(2)
593
+ expect(handler.create_result.error).to be_a(Rdkafka::RdkafkaError)
594
+ expect(handler.create_result.label).to eq('na')
595
+ end
596
+ end
597
+
561
598
  describe '#partition_count' do
562
599
  it { expect(producer.partition_count('consume_test_topic')).to eq(3) }
563
600
 
@@ -710,4 +747,34 @@ describe Rdkafka::Producer do
710
747
  end
711
748
  end
712
749
  end
750
+
751
+ describe '#oauthbearer_set_token' do
752
+ context 'when sasl not configured' do
753
+ it 'should return RD_KAFKA_RESP_ERR__STATE' do
754
+ response = producer.oauthbearer_set_token(
755
+ token: "foo",
756
+ lifetime_ms: Time.now.to_i*1000 + 900 * 1000,
757
+ principal_name: "kafka-cluster"
758
+ )
759
+ expect(response).to eq(Rdkafka::Bindings::RD_KAFKA_RESP_ERR__STATE)
760
+ end
761
+ end
762
+
763
+ context 'when sasl configured' do
764
+ it 'should succeed' do
765
+ producer_sasl = rdkafka_producer_config(
766
+ {
767
+ "security.protocol": "sasl_ssl",
768
+ "sasl.mechanisms": 'OAUTHBEARER'
769
+ }
770
+ ).producer
771
+ response = producer_sasl.oauthbearer_set_token(
772
+ token: "foo",
773
+ lifetime_ms: Time.now.to_i*1000 + 900 * 1000,
774
+ principal_name: "kafka-cluster"
775
+ )
776
+ expect(response).to eq(0)
777
+ end
778
+ end
779
+ end
713
780
  end
data/spec/spec_helper.rb CHANGED
@@ -139,7 +139,7 @@ RSpec.configure do |config|
139
139
  }.each do |topic, partitions|
140
140
  create_topic_handle = admin.create_topic(topic.to_s, partitions, 1)
141
141
  begin
142
- create_topic_handle.wait(max_wait_timeout: 15)
142
+ create_topic_handle.wait(max_wait_timeout: 1.0)
143
143
  rescue Rdkafka::RdkafkaError => ex
144
144
  raise unless ex.message.match?(/topic_already_exists/)
145
145
  end
@@ -155,3 +155,18 @@ RSpec.configure do |config|
155
155
  end
156
156
  end
157
157
  end
158
+
159
+ class RdKafkaTestConsumer
160
+ def self.with
161
+ consumer = Rdkafka::Bindings.rd_kafka_new(
162
+ :rd_kafka_consumer,
163
+ nil,
164
+ nil,
165
+ 0
166
+ )
167
+ yield consumer
168
+ ensure
169
+ Rdkafka::Bindings.rd_kafka_consumer_close(consumer)
170
+ Rdkafka::Bindings.rd_kafka_destroy(consumer)
171
+ end
172
+ end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,10 +1,11 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rdkafka
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.0
4
+ version: 0.16.0.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thijs Cadier
8
+ - Maciej Mensfeld
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain:
@@ -35,7 +36,7 @@ cert_chain:
35
36
  AnG1dJU+yL2BK7vaVytLTstJME5mepSZ46qqIJXMuWob/YPDmVaBF39TDSG9e34s
36
37
  msG3BiCqgOgHAnL23+CN3Rt8MsuRfEtoTKpJVcCfoEoNHOkc
37
38
  -----END CERTIFICATE-----
38
- date: 2023-12-03 00:00:00.000000000 Z
39
+ date: 2024-04-29 00:00:00.000000000 Z
39
40
  dependencies:
40
41
  - !ruby/object:Gem::Dependency
41
42
  name: ffi
@@ -215,6 +216,7 @@ files:
215
216
  - lib/rdkafka/consumer/partition.rb
216
217
  - lib/rdkafka/consumer/topic_partition_list.rb
217
218
  - lib/rdkafka/error.rb
219
+ - lib/rdkafka/helpers/oauth.rb
218
220
  - lib/rdkafka/helpers/time.rb
219
221
  - lib/rdkafka/metadata.rb
220
222
  - lib/rdkafka/native_kafka.rb
@@ -277,12 +279,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
277
279
  - !ruby/object:Gem::Version
278
280
  version: '0'
279
281
  requirements: []
280
- rubygems_version: 3.4.19
282
+ rubygems_version: 3.5.9
281
283
  signing_key:
282
284
  specification_version: 4
283
285
  summary: The rdkafka gem is a modern Kafka client library for Ruby based on librdkafka.
284
286
  It wraps the production-ready C client using the ffi gem and targets Kafka 1.0+
285
- and Ruby 2.4+.
287
+ and Ruby 2.7+.
286
288
  test_files:
287
289
  - spec/rdkafka/abstract_handle_spec.rb
288
290
  - spec/rdkafka/admin/create_acl_handle_spec.rb
metadata.gz.sig CHANGED
Binary file