rdkafka 0.24.1 → 0.24.2

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: bf34fd0a321b2959bcd104964ae0190e9ec1fef93da9ffe23413bf3c7629a075
4
- data.tar.gz: c892e8018d5af535a44b2dd31fb4d62ca11961b85b8dbf3f746e5a3687fa89c2
3
+ metadata.gz: 5b0467e6f670f137f458bb1cb856f812ba2292c45a4c2a4b19477531fd59a3b7
4
+ data.tar.gz: 9e18e607e5114b7ed31266565c308517729890e643a68b8535d19fb8df4f8256
5
5
  SHA512:
6
- metadata.gz: c530255e19804794568df6c1aaec81da86d65825e2e235dfabfffcde52d84d232593e1a51533c0d60d5e1697c0e107fdf6f6b88917b9058ac1e5dba5c6b936c2
7
- data.tar.gz: 01cadafb8bd0a1a97fd28267b5f8c4d668538db8bda2793d3d6e9b12af206f9647d9ba2eb92266a9ff8900014e47e1c0ac720e9e539687c02d587c58b6975e8e
6
+ metadata.gz: d90b9aff5f184ec165c37451773845f66c71cfa47dc4dbf62d4764c009711ac28ab40fe4b3ecc083c2b599043f3906d552b52a1296fcbee089a8024a03c16e9e
7
+ data.tar.gz: 91db6ebb4e3dde0d98395c1714205bae0a5027b31f4d1a1fa435171873d81998efa56c76bdb2c8a410f3cbb3d4348ae847d564d8c2348884d0a7ee080877e7a4
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Rdkafka Changelog
2
2
 
3
+ ## 0.24.2 (2025-10-31)
4
+ - [Enhancement] Force lock FFI to 1.17.1 or higher to include critical bug fixes around GCC, write barriers, and thread restarts for forks.
5
+ - [Fix] Fix for Core dump when providing extensions to oauthbearer_set_token (dssjoblom)
6
+
3
7
  ## 0.24.1 (2025-10-10)
4
8
  - [Fix] Fix Github Action Ruby reference preventing non-compiled releases.
5
9
 
@@ -12,7 +16,7 @@
12
16
  - [Fix] Disable OpenSSL Heartbeats during compilation.
13
17
 
14
18
  ## 0.23.0 (2025-09-04)
15
- - **[Breaking]** Drop support for Ruby 3.1 to move forward with the fiber scheduler work.
19
+ - **[EOL]** Drop support for Ruby 3.1 to move forward with the fiber scheduler work.
16
20
  - [Enhancement] Bump librdkafka to `2.11.0`
17
21
  - [Enhancement] Support explicit Debian testing due to lib issues.
18
22
  - [Enhancement] Support ARM64 Gnu precompilation.
@@ -59,7 +63,7 @@
59
63
  - [Patch] Retire no longer needed cooperative-sticky patch.
60
64
 
61
65
  ## 0.19.0 (2024-10-01)
62
- - **[Breaking]** Drop Ruby 3.0 support
66
+ - **[EOL]** Drop Ruby 3.0 support
63
67
  - [Enhancement] Update `librdkafka` to `2.5.3`
64
68
  - [Enhancement] Use default oauth callback if none is passed (bachmanity1)
65
69
  - [Fix] Fix incorrectly behaving CI on failures.
@@ -83,7 +87,7 @@
83
87
  - [Fix] Switch to local release of librdkafka to mitigate its unavailability.
84
88
 
85
89
  ## 0.16.0 (2024-06-13)
86
- - **[Breaking]** Retire support for Ruby 2.7.
90
+ - **[EOL]** Retire support for Ruby 2.7.
87
91
  - **[Breaking]** Messages without headers returned by `#poll` contain frozen empty hash.
88
92
  - **[Breaking]** `HashWithSymbolKeysTreatedLikeStrings` has been removed so headers are regular hashes with string keys.
89
93
  - **[Feature]** Support incremental config describe + alter API.
@@ -144,7 +148,7 @@
144
148
  - [Fix] Reference to Opaque is not released when Admin, Consumer or Producer is closed (mensfeld)
145
149
  - [Fix] Trigger `#poll` on native kafka creation to handle oauthbearer cb (mensfeld)
146
150
  - [Fix] `#flush` does not handle the timeouts errors by making it return `true` if all flushed or `false` if failed. We do **not** raise an exception here to keep it backwards compatible (mensfeld)
147
- - [Change] Remove support for Ruby 2.6 due to it being EOL and WeakMap incompatibilities (mensfeld)
151
+ - **[EOL]** Remove support for Ruby 2.6 due to it being EOL and WeakMap incompatibilities (mensfeld)
148
152
  - [Change] Update Kafka Docker with Confluent KRaft (mensfeld)
149
153
  - [Change] Update librdkafka repo reference from edenhill to confluentinc (mensfeld)
150
154
 
@@ -1,7 +1,7 @@
1
1
  services:
2
2
  kafka:
3
3
  container_name: kafka
4
- image: confluentinc/cp-kafka:8.0.1
4
+ image: confluentinc/cp-kafka:8.1.0
5
5
  ports:
6
6
  - 9092:9092 # Support PLAINTEXT so we can run one docker setup for SSL and PLAINTEXT
7
7
  - 9093:9093
data/docker-compose.yml CHANGED
@@ -1,7 +1,7 @@
1
1
  services:
2
2
  kafka:
3
3
  container_name: kafka
4
- image: confluentinc/cp-kafka:8.0.1
4
+ image: confluentinc/cp-kafka:8.1.0
5
5
 
6
6
  ports:
7
7
  - 9092:9092
@@ -12,12 +12,18 @@ module Rdkafka
12
12
  # @return [Integer] 0 on success
13
13
  def oauthbearer_set_token(token:, lifetime_ms:, principal_name:, extensions: nil)
14
14
  error_buffer = FFI::MemoryPointer.from_string(" " * 256)
15
+ extensions_ptr, extensions_str_ptrs = map_extensions(extensions)
15
16
 
16
- response = @native_kafka.with_inner do |inner|
17
- Rdkafka::Bindings.rd_kafka_oauthbearer_set_token(
18
- inner, token, lifetime_ms, principal_name,
19
- flatten_extensions(extensions), extension_size(extensions), error_buffer, 256
20
- )
17
+ begin
18
+ response = @native_kafka.with_inner do |inner|
19
+ Rdkafka::Bindings.rd_kafka_oauthbearer_set_token(
20
+ inner, token, lifetime_ms, principal_name,
21
+ extensions_ptr, extension_size(extensions), error_buffer, 256
22
+ )
23
+ end
24
+ ensure
25
+ extensions_str_ptrs&.each { |ptr| ptr.free }
26
+ extensions_ptr&.free
21
27
  end
22
28
 
23
29
  return response if response.zero?
@@ -41,10 +47,31 @@ module Rdkafka
41
47
 
42
48
  private
43
49
 
44
- # Flatten the extensions hash into a string according to the spec, https://datatracker.ietf.org/doc/html/rfc7628#section-3.1
45
- def flatten_extensions(extensions)
46
- return nil unless extensions
47
- "\x01#{extensions.map { |e| e.join("=") }.join("\x01")}"
50
+ # Convert extensions hash to FFI::MemoryPointer (const char **).
51
+ # Note: the returned pointers must be freed manually (autorelease = false).
52
+ def map_extensions(extensions)
53
+ return [nil, nil] if extensions.nil? || extensions.empty?
54
+
55
+ # https://github.com/confluentinc/librdkafka/blob/master/src/rdkafka_sasl_oauthbearer.c#L327-L347
56
+
57
+ # The method argument is const char **
58
+ array_ptr = FFI::MemoryPointer.new(:pointer, extension_size(extensions))
59
+ array_ptr.autorelease = false
60
+ str_ptrs = []
61
+
62
+ # Element i is the key, i + 1 is the value.
63
+ extensions.each_with_index do |(k, v), i|
64
+ k_ptr = FFI::MemoryPointer.from_string(k.to_s)
65
+ k_ptr.autorelease = false
66
+ str_ptrs << k_ptr
67
+ v_ptr = FFI::MemoryPointer.from_string(v.to_s)
68
+ v_ptr.autorelease = false
69
+ str_ptrs << v_ptr
70
+ array_ptr[i * 2].put_pointer(0, k_ptr)
71
+ array_ptr[i * 2 + 1].put_pointer(0, v_ptr)
72
+ end
73
+
74
+ [array_ptr, str_ptrs]
48
75
  end
49
76
 
50
77
  # extension_size is the number of keys + values which should be a non-negative even number
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Rdkafka
4
- VERSION = "0.24.1"
4
+ VERSION = "0.24.2"
5
5
  LIBRDKAFKA_VERSION = "2.11.1"
6
6
  LIBRDKAFKA_SOURCE_SHA256 = "a2c87186b081e2705bb7d5338d5a01bc88d43273619b372ccb7bb0d264d0ca9f"
7
7
  end
data/rdkafka.gemspec CHANGED
@@ -67,7 +67,7 @@ Gem::Specification.new do |gem|
67
67
  gem.extensions = %w(ext/Rakefile)
68
68
  end
69
69
 
70
- gem.add_dependency 'ffi', '~> 1.15'
70
+ gem.add_dependency 'ffi', '~> 1.17.1'
71
71
  gem.add_dependency 'json', '> 2.0'
72
72
  gem.add_dependency 'logger'
73
73
  gem.add_dependency 'mini_portile2', '~> 2.6'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rdkafka
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.24.1
4
+ version: 0.24.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thijs Cadier
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.15'
19
+ version: 1.17.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.15'
26
+ version: 1.17.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: json
29
29
  requirement: !ruby/object:Gem::Requirement