karafka-rdkafka 0.19.3 → 0.19.5

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2ef95cc0dbb2fcb8affb287632a70ab25edbeeddb62eec54089640d74298aa51
4
- data.tar.gz: dd0250226748dbcbfb235dfa61122cc01519941059eea4221acbd6063b08bfee
3
+ metadata.gz: e84a931a800cf4fb0e62f0d15de7f53e5c5845e8edfcd240f1939ec445050bdb
4
+ data.tar.gz: f12b221a26faa281f4c9c90b2a55ac8ebc623cf1aa882b0ce8e7ae274aa6a122
5
5
  SHA512:
6
- metadata.gz: 18e426c7c325280b3cb1e5d5325c1afc21a0ee12de4bf10bc6420ab55bc0c4d3aaf1f565167867ba0b218f2ad77d462a3bfb53d0cad8be94f129060d7fc80258
7
- data.tar.gz: c4bad87e64c15ee49fbccdad9b4e64808ac26465c83b15254e1f437233da2e9268838336477cfffcb380ad3ab8a9c14d06b1128c178206da90bf7ee8a24b6a64
6
+ metadata.gz: 225e690444b46ea2469f0a92beb7e27cd105c49b1649c022163996fb994ed67c9adac95573bfa96f23134732a3e4d41f5dbffc970bdffd699de664b4b1b89e73
7
+ data.tar.gz: 1fcb61fd0d7ca98537b59d15235fd84ab202e020828d36cab07b9ecf837eb845fafa7a6624eb760902c5b50050134a30361f16429f2442f43491f76c57bb4340
@@ -1,4 +1,4 @@
1
- name: ci
1
+ name: CI
2
2
 
3
3
  concurrency:
4
4
  group: ${{ github.workflow }}-${{ github.ref }}
@@ -51,7 +51,7 @@ jobs:
51
51
  docker compose up -d || (sleep 5 && docker compose up -d)
52
52
 
53
53
  - name: Set up Ruby
54
- uses: ruby/setup-ruby@84684c07c1965536eb4802c8daf1a77968df0cb1 # v1.239.0
54
+ uses: ruby/setup-ruby@13e7a03dc3ac6c3798f4570bfead2aed4d96abfb # v1.244.0
55
55
  with:
56
56
  ruby-version: ${{matrix.ruby}}
57
57
  bundler-cache: true
@@ -86,7 +86,7 @@ jobs:
86
86
  - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
87
87
 
88
88
  - name: Set up Ruby
89
- uses: ruby/setup-ruby@84684c07c1965536eb4802c8daf1a77968df0cb1 # v1.239.0
89
+ uses: ruby/setup-ruby@13e7a03dc3ac6c3798f4570bfead2aed4d96abfb # v1.244.0
90
90
  with:
91
91
  ruby-version: ${{matrix.ruby}}
92
92
  bundler-cache: false
@@ -0,0 +1,37 @@
1
+ name: Push Gem
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - v*
7
+
8
+ permissions:
9
+ contents: read
10
+
11
+ jobs:
12
+ push:
13
+ if: github.repository_owner == 'karafka'
14
+ runs-on: ubuntu-latest
15
+ environment: deployment
16
+
17
+ permissions:
18
+ contents: write
19
+ id-token: write
20
+
21
+ steps:
22
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
23
+ with:
24
+ fetch-depth: 0
25
+
26
+ - name: Set up Ruby
27
+ uses: ruby/setup-ruby@13e7a03dc3ac6c3798f4570bfead2aed4d96abfb # v1.244.0
28
+ with:
29
+ bundler-cache: false
30
+
31
+ - name: Build rdkafka-ruby
32
+ run: |
33
+ set -e
34
+ bundle install --jobs 4 --retry 3
35
+ cd ext && bundle exec rake
36
+
37
+ - uses: rubygems/release-gem@a25424ba2ba8b387abc8ef40807c2c85b96cbe32 # v1.1.1
data/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Rdkafka Changelog
2
2
 
3
+ ## 0.19.5 (2025-05-30)
4
+ - [Enhancement] Allow for producing to non-existing topics with `key` and `partition_key` present.
5
+
6
+ ## 0.19.4 (2025-05-23)
7
+ - [Change] Move to trusted-publishers and remove signing since no longer needed.
8
+
3
9
  ## 0.19.3 (2025-05-23)
4
10
  - [Enhancement] Include broker message in the error full message if provided.
5
11
 
@@ -8,6 +14,7 @@
8
14
  - [Enhancement] Roll out experimental jruby support.
9
15
  - [Fix] Fix issue where post-closed producer C topics refs would not be cleaned.
10
16
  - [Fix] Fiber causes Segmentation Fault.
17
+ - [Change] Move to trusted-publishers and remove signing since no longer needed.
11
18
 
12
19
  ## 0.19.1 (2025-04-07)
13
20
  - [Enhancement] Support producing and consuming of headers with mulitple values (KIP-82).
data/Rakefile CHANGED
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Rakefile
4
-
5
3
  require 'bundler/gem_tasks'
6
4
  require "./lib/rdkafka"
7
5
 
@@ -17,11 +17,6 @@ Gem::Specification.new do |gem|
17
17
  gem.version = Rdkafka::VERSION
18
18
  gem.required_ruby_version = '>= 3.1'
19
19
  gem.extensions = %w(ext/Rakefile)
20
- gem.cert_chain = %w[certs/cert.pem]
21
-
22
- if $PROGRAM_NAME.end_with?('gem')
23
- gem.signing_key = File.expand_path('~/.ssh/gem-private_key.pem')
24
- end
25
20
 
26
21
  gem.add_dependency 'ffi', '~> 1.15'
27
22
  gem.add_dependency 'mini_portile2', '~> 2.6'
@@ -37,7 +32,7 @@ Gem::Specification.new do |gem|
37
32
  gem.metadata = {
38
33
  'funding_uri' => 'https://karafka.io/#become-pro',
39
34
  'homepage_uri' => 'https://karafka.io',
40
- 'changelog_uri' => 'https://github.com/karafka/karafka-rdkafka/blob/master/CHANGELOG.md',
35
+ 'changelog_uri' => 'https://karafka.io/docs/Changelog-Karafka-Rdkafka/',
41
36
  'bug_tracker_uri' => 'https://github.com/karafka/karafka-rdkafka/issues',
42
37
  'source_code_uri' => 'https://github.com/karafka/karafka-rdkafka',
43
38
  'documentation_uri' => 'https://karafka.io/docs',
@@ -301,6 +301,13 @@ module Rdkafka
301
301
 
302
302
  topic_metadata ? topic_metadata[:partition_count] : -1
303
303
  end
304
+ rescue Rdkafka::RdkafkaError => e
305
+ # If the topic does not exist, it will be created or if not allowed another error will be
306
+ # raised. We here return -1 so this can happen without early error happening on metadata
307
+ # discovery.
308
+ return -1 if e.code == :unknown_topic_or_part
309
+
310
+ raise(e)
304
311
  end
305
312
 
306
313
  # Produces a message to a Kafka topic. The message is added to rdkafka's queue, call {DeliveryHandle#wait wait} on the returned delivery handle to make sure it is delivered.
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Rdkafka
4
- VERSION = "0.19.3"
4
+ VERSION = "0.19.5"
5
5
  LIBRDKAFKA_VERSION = "2.8.0"
6
6
  LIBRDKAFKA_SOURCE_SHA256 = "5bd1c46f63265f31c6bfcedcde78703f77d28238eadf23821c2b43fc30be3e25"
7
7
  end
@@ -364,6 +364,48 @@ describe Rdkafka::Producer do
364
364
  expect(message.key).to eq "key utf8"
365
365
  end
366
366
 
367
+ it "should produce a message to a non-existing topic with key and partition key" do
368
+ new_topic = "it-#{SecureRandom.uuid}"
369
+
370
+ handle = producer.produce(
371
+ # Needs to be a new topic each time
372
+ topic: new_topic,
373
+ payload: "payload",
374
+ key: "key",
375
+ partition_key: "partition_key",
376
+ label: "label"
377
+ )
378
+
379
+ # Should be pending at first
380
+ expect(handle.pending?).to be true
381
+ expect(handle.label).to eq "label"
382
+
383
+ # Check delivery handle and report
384
+ report = handle.wait(max_wait_timeout: 5)
385
+ expect(handle.pending?).to be false
386
+ expect(report).not_to be_nil
387
+ expect(report.partition).to eq 0
388
+ expect(report.offset).to be >= 0
389
+ expect(report.label).to eq "label"
390
+
391
+ # Flush and close producer
392
+ producer.flush
393
+ producer.close
394
+
395
+ # Consume message and verify its content
396
+ message = wait_for_message(
397
+ topic: new_topic,
398
+ delivery_report: report,
399
+ consumer: consumer
400
+ )
401
+ expect(message.partition).to eq 0
402
+ expect(message.payload).to eq "payload"
403
+ expect(message.key).to eq "key"
404
+ # Since api.version.request is on by default we will get
405
+ # the message creation timestamp if it's not set.
406
+ expect(message.timestamp).to be_within(10).of(Time.now)
407
+ end
408
+
367
409
  context "timestamp" do
368
410
  it "should raise a type error if not nil, integer or time" do
369
411
  expect {
@@ -637,6 +679,25 @@ describe Rdkafka::Producer do
637
679
  end
638
680
  end
639
681
 
682
+ context "when topic does not exist and allow.auto.create.topics is false" do
683
+ let(:producer) do
684
+ rdkafka_producer_config(
685
+ "bootstrap.servers": "localhost:9092",
686
+ "message.timeout.ms": 100,
687
+ "allow.auto.create.topics": false
688
+ ).producer
689
+ end
690
+
691
+ it "should contain the error in the response when not deliverable" do
692
+ handler = producer.produce(topic: "it-#{SecureRandom.uuid}", payload: nil, label: 'na')
693
+ # Wait for the async callbacks and delivery registry to update
694
+ sleep(2)
695
+ expect(handler.create_result.error).to be_a(Rdkafka::RdkafkaError)
696
+ expect(handler.create_result.error.code).to eq(:msg_timed_out)
697
+ expect(handler.create_result.label).to eq('na')
698
+ end
699
+ end
700
+
640
701
  describe '#partition_count' do
641
702
  it { expect(producer.partition_count('example_topic')).to eq(1) }
642
703
 
metadata CHANGED
@@ -1,40 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: karafka-rdkafka
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.19.3
4
+ version: 0.19.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thijs Cadier
8
8
  - Maciej Mensfeld
9
9
  bindir: bin
10
- cert_chain:
11
- - |
12
- -----BEGIN CERTIFICATE-----
13
- MIIEcDCCAtigAwIBAgIBATANBgkqhkiG9w0BAQsFADA/MRAwDgYDVQQDDAdjb250
14
- YWN0MRcwFQYKCZImiZPyLGQBGRYHa2FyYWZrYTESMBAGCgmSJomT8ixkARkWAmlv
15
- MB4XDTI0MDgyMzEwMTkyMFoXDTQ5MDgxNzEwMTkyMFowPzEQMA4GA1UEAwwHY29u
16
- dGFjdDEXMBUGCgmSJomT8ixkARkWB2thcmFma2ExEjAQBgoJkiaJk/IsZAEZFgJp
17
- bzCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAKjLhLjQqUlNayxkXnO+
18
- PsmCDs/KFIzhrsYMfLZRZNaWmzV3ujljMOdDjd4snM2X06C41iVdQPWjpe3j8vVe
19
- ZXEWR/twSbOP6Eeg8WVH2wCOo0x5i7yhVn4UBLH4JpfEMCbemVcWQ9ry9OMg4WpH
20
- Uu4dRwxFV7hzCz3p0QfNLRI4miAxnGWcnlD98IJRjBAksTuR1Llj0vbOrDGsL9ZT
21
- JeXP2gdRLd8SqzAFJEWrbeTBCBU7gfSh3oMg5SVDLjaqf7Kz5wC/8bDZydzanOxB
22
- T6CDXPsCnllmvTNx2ei2T5rGYJOzJeNTmJLLK6hJWUlAvaQSvCwZRvFJ0tVGLEoS
23
- flqSr6uGyyl1eMUsNmsH4BqPEYcAV6P2PKTv2vUR8AP0raDvZ3xL1TKvfRb8xRpo
24
- vPopCGlY5XBWEc6QERHfVLTIVsjnls2/Ujj4h8/TSfqqYnaHKefIMLbuD/tquMjD
25
- iWQsW2qStBV0T+U7FijKxVfrfqZP7GxQmDAc9o1iiyAa3QIDAQABo3cwdTAJBgNV
26
- HRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU3O4dTXmvE7YpAkszGzR9DdL9
27
- sbEwHQYDVR0RBBYwFIESY29udGFjdEBrYXJhZmthLmlvMB0GA1UdEgQWMBSBEmNv
28
- bnRhY3RAa2FyYWZrYS5pbzANBgkqhkiG9w0BAQsFAAOCAYEAVKTfoLXn7mqdSxIR
29
- eqxcR6Huudg1jes81s1+X0uiRTR3hxxKZ3Y82cPsee9zYWyBrN8TA4KA0WILTru7
30
- Ygxvzha0SRPsSiaKLmgOJ+61ebI4+bOORzIJLpD6GxCxu1r7MI4+0r1u1xe0EWi8
31
- agkVo1k4Vi8cKMLm6Gl9b3wG9zQBw6fcgKwmpjKiNnOLP+OytzUANrIUJjoq6oal
32
- TC+f/Uc0TLaRqUaW/bejxzDWWHoM3SU6aoLPuerglzp9zZVzihXwx3jPLUVKDFpF
33
- Rl2lcBDxlpYGueGo0/oNzGJAAy6js8jhtHC9+19PD53vk7wHtFTZ/0ugDQYnwQ+x
34
- oml2fAAuVWpTBCgOVFe6XCQpMKopzoxQ1PjKztW2KYxgJdIBX87SnL3aWuBQmhRd
35
- i9zWxov0mr44TWegTVeypcWGd/0nxu1+QHVNHJrpqlPBRvwQsUm7fwmRInGpcaB8
36
- ap8wNYvryYzrzvzUxIVFBVM5PacgkFqRmolCa8I7tdKQN+R1
37
- -----END CERTIFICATE-----
10
+ cert_chain: []
38
11
  date: 1980-01-02 00:00:00.000000000 Z
39
12
  dependencies:
40
13
  - !ruby/object:Gem::Dependency
@@ -174,6 +147,7 @@ files:
174
147
  - ".github/CODEOWNERS"
175
148
  - ".github/FUNDING.yml"
176
149
  - ".github/workflows/ci.yml"
150
+ - ".github/workflows/push.yml"
177
151
  - ".github/workflows/verify-action-pins.yml"
178
152
  - ".gitignore"
179
153
  - ".rspec"
@@ -186,7 +160,6 @@ files:
186
160
  - MIT-LICENSE
187
161
  - README.md
188
162
  - Rakefile
189
- - certs/cert.pem
190
163
  - dist/librdkafka-2.8.0.tar.gz
191
164
  - dist/patches/rdkafka_global_init.patch
192
165
  - docker-compose.yml
@@ -270,7 +243,7 @@ licenses:
270
243
  metadata:
271
244
  funding_uri: https://karafka.io/#become-pro
272
245
  homepage_uri: https://karafka.io
273
- changelog_uri: https://github.com/karafka/karafka-rdkafka/blob/master/CHANGELOG.md
246
+ changelog_uri: https://karafka.io/docs/Changelog-Karafka-Rdkafka/
274
247
  bug_tracker_uri: https://github.com/karafka/karafka-rdkafka/issues
275
248
  source_code_uri: https://github.com/karafka/karafka-rdkafka
276
249
  documentation_uri: https://karafka.io/docs
@@ -289,7 +262,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
289
262
  - !ruby/object:Gem::Version
290
263
  version: '0'
291
264
  requirements: []
292
- rubygems_version: 3.6.9
265
+ rubygems_version: 3.6.7
293
266
  specification_version: 4
294
267
  summary: The rdkafka gem is a modern Kafka client library for Ruby based on librdkafka.
295
268
  It wraps the production-ready C client using the ffi gem and targets Kafka 1.0+
checksums.yaml.gz.sig DELETED
Binary file
data/certs/cert.pem DELETED
@@ -1,26 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIEcDCCAtigAwIBAgIBATANBgkqhkiG9w0BAQsFADA/MRAwDgYDVQQDDAdjb250
3
- YWN0MRcwFQYKCZImiZPyLGQBGRYHa2FyYWZrYTESMBAGCgmSJomT8ixkARkWAmlv
4
- MB4XDTI0MDgyMzEwMTkyMFoXDTQ5MDgxNzEwMTkyMFowPzEQMA4GA1UEAwwHY29u
5
- dGFjdDEXMBUGCgmSJomT8ixkARkWB2thcmFma2ExEjAQBgoJkiaJk/IsZAEZFgJp
6
- bzCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAKjLhLjQqUlNayxkXnO+
7
- PsmCDs/KFIzhrsYMfLZRZNaWmzV3ujljMOdDjd4snM2X06C41iVdQPWjpe3j8vVe
8
- ZXEWR/twSbOP6Eeg8WVH2wCOo0x5i7yhVn4UBLH4JpfEMCbemVcWQ9ry9OMg4WpH
9
- Uu4dRwxFV7hzCz3p0QfNLRI4miAxnGWcnlD98IJRjBAksTuR1Llj0vbOrDGsL9ZT
10
- JeXP2gdRLd8SqzAFJEWrbeTBCBU7gfSh3oMg5SVDLjaqf7Kz5wC/8bDZydzanOxB
11
- T6CDXPsCnllmvTNx2ei2T5rGYJOzJeNTmJLLK6hJWUlAvaQSvCwZRvFJ0tVGLEoS
12
- flqSr6uGyyl1eMUsNmsH4BqPEYcAV6P2PKTv2vUR8AP0raDvZ3xL1TKvfRb8xRpo
13
- vPopCGlY5XBWEc6QERHfVLTIVsjnls2/Ujj4h8/TSfqqYnaHKefIMLbuD/tquMjD
14
- iWQsW2qStBV0T+U7FijKxVfrfqZP7GxQmDAc9o1iiyAa3QIDAQABo3cwdTAJBgNV
15
- HRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU3O4dTXmvE7YpAkszGzR9DdL9
16
- sbEwHQYDVR0RBBYwFIESY29udGFjdEBrYXJhZmthLmlvMB0GA1UdEgQWMBSBEmNv
17
- bnRhY3RAa2FyYWZrYS5pbzANBgkqhkiG9w0BAQsFAAOCAYEAVKTfoLXn7mqdSxIR
18
- eqxcR6Huudg1jes81s1+X0uiRTR3hxxKZ3Y82cPsee9zYWyBrN8TA4KA0WILTru7
19
- Ygxvzha0SRPsSiaKLmgOJ+61ebI4+bOORzIJLpD6GxCxu1r7MI4+0r1u1xe0EWi8
20
- agkVo1k4Vi8cKMLm6Gl9b3wG9zQBw6fcgKwmpjKiNnOLP+OytzUANrIUJjoq6oal
21
- TC+f/Uc0TLaRqUaW/bejxzDWWHoM3SU6aoLPuerglzp9zZVzihXwx3jPLUVKDFpF
22
- Rl2lcBDxlpYGueGo0/oNzGJAAy6js8jhtHC9+19PD53vk7wHtFTZ/0ugDQYnwQ+x
23
- oml2fAAuVWpTBCgOVFe6XCQpMKopzoxQ1PjKztW2KYxgJdIBX87SnL3aWuBQmhRd
24
- i9zWxov0mr44TWegTVeypcWGd/0nxu1+QHVNHJrpqlPBRvwQsUm7fwmRInGpcaB8
25
- ap8wNYvryYzrzvzUxIVFBVM5PacgkFqRmolCa8I7tdKQN+R1
26
- -----END CERTIFICATE-----
data.tar.gz.sig DELETED
Binary file
metadata.gz.sig DELETED
Binary file