karafka-rdkafka 0.17.2 → 0.17.3

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: f5ecb2dbdfdc88a9167413058b211874672fe257976d4b183e77513020c4b3a8
4
- data.tar.gz: 77b4fecea4f415b7ab123b46e60c6008138c0ab6c50b93563ad498d450205012
3
+ metadata.gz: 9c8adc4477dceb9b8d347a515b83cd250334fc159a862ac2315a3747fab36a3f
4
+ data.tar.gz: 25aa5b86190b3cf23ad67aae7ff5d66a5032d0bd17c80e34a776cb2af517e3cc
5
5
  SHA512:
6
- metadata.gz: cdca2436c74a067065c064c9bf46300ee8ff58de81ee65d912534a6fe8a8244c75fbc1628f5a9ae71afd249603609b82e1f193ffee32df7b2c588df54b419da0
7
- data.tar.gz: 3b44316e071d3c1c78bb8b0bb47b32f6e36f27e14d7a053f43306a98fd795f4b95360066ca4781b2ee0048c17f5870caf0962e1bce8f117df61d23d73e66a594
6
+ metadata.gz: 80c5696125626d2acd2c9cffea4e54fef6cf92269b2e8fbbff3b653bff2598bf06b4948e8fdcaff5285d245569b2c77c45958d783913ae9af79b8a816526837f
7
+ data.tar.gz: bd309b7292041e5d369a9504f85bd0f2dd61bf2dc0006dc0c9f7d58d69f367e44dbe4fce800e5f8157277c0edb316a54d5396639040fc21292f85a9c289eccad
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # Rdkafka Changelog
2
2
 
3
+ ## 0.17.3 (2024-08-09)
4
+ - [Fix] Mitigate a case where FFI would not restart the background events callback dispatcher in forks.
5
+
3
6
  ## 0.17.2 (2024-08-07)
4
7
  - [Enhancement] Support returning `#details` for errors that do have topic/partition related extra info.
5
8
 
@@ -2,7 +2,6 @@
2
2
 
3
3
  module Rdkafka
4
4
  module Callbacks
5
-
6
5
  # Extracts attributes of a rd_kafka_topic_result_t
7
6
  #
8
7
  # @private
@@ -149,13 +148,6 @@ module Rdkafka
149
148
  end
150
149
  end
151
150
 
152
- # FFI Function used for Create Topic and Delete Topic callbacks
153
- BackgroundEventCallbackFunction = FFI::Function.new(
154
- :void, [:pointer, :pointer, :pointer]
155
- ) do |client_ptr, event_ptr, opaque_ptr|
156
- BackgroundEventCallback.call(client_ptr, event_ptr, opaque_ptr)
157
- end
158
-
159
151
  # @private
160
152
  class BackgroundEventCallback
161
153
  def self.call(_, event_ptr, _)
@@ -348,13 +340,6 @@ module Rdkafka
348
340
  end
349
341
  end
350
342
 
351
- # FFI Function used for Message Delivery callbacks
352
- DeliveryCallbackFunction = FFI::Function.new(
353
- :void, [:pointer, :pointer, :pointer]
354
- ) do |client_ptr, message_ptr, opaque_ptr|
355
- DeliveryCallback.call(client_ptr, message_ptr, opaque_ptr)
356
- end
357
-
358
343
  # @private
359
344
  class DeliveryCallback
360
345
  def self.call(_, message_ptr, opaque_ptr)
@@ -387,5 +372,44 @@ module Rdkafka
387
372
  end
388
373
  end
389
374
  end
375
+
376
+ @@mutex = Mutex.new
377
+ @@current_pid = nil
378
+
379
+ class << self
380
+ # Defines or recreates after fork callbacks that require FFI thread so the callback thread
381
+ # is always correctly initialized
382
+ #
383
+ # @see https://github.com/ffi/ffi/issues/1114
384
+ def ensure_ffi_running
385
+ @@mutex.synchronize do
386
+ return if @@current_pid == ::Process.pid
387
+
388
+ if const_defined?(:BackgroundEventCallbackFunction, false)
389
+ send(:remove_const, :BackgroundEventCallbackFunction)
390
+ send(:remove_const, :DeliveryCallbackFunction)
391
+ end
392
+
393
+ # FFI Function used for Create Topic and Delete Topic callbacks
394
+ background_event_callback_function = FFI::Function.new(
395
+ :void, [:pointer, :pointer, :pointer]
396
+ ) do |client_ptr, event_ptr, opaque_ptr|
397
+ BackgroundEventCallback.call(client_ptr, event_ptr, opaque_ptr)
398
+ end
399
+
400
+ # FFI Function used for Message Delivery callbacks
401
+ delivery_callback_function = FFI::Function.new(
402
+ :void, [:pointer, :pointer, :pointer]
403
+ ) do |client_ptr, message_ptr, opaque_ptr|
404
+ DeliveryCallback.call(client_ptr, message_ptr, opaque_ptr)
405
+ end
406
+
407
+ const_set(:BackgroundEventCallbackFunction, background_event_callback_function)
408
+ const_set(:DeliveryCallbackFunction, delivery_callback_function)
409
+
410
+ @@current_pid = ::Process.pid
411
+ end
412
+ end
413
+ end
390
414
  end
391
415
  end
@@ -146,6 +146,8 @@ module Rdkafka
146
146
  #
147
147
  # @return [Config]
148
148
  def initialize(config_hash = {})
149
+ Callbacks.ensure_ffi_running
150
+
149
151
  @config_hash = DEFAULT_CONFIG.merge(config_hash)
150
152
  @consumer_rebalance_listener = nil
151
153
  @consumer_poll_set = true
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Rdkafka
4
- VERSION = "0.17.2"
4
+ VERSION = "0.17.3"
5
5
  LIBRDKAFKA_VERSION = "2.5.0"
6
6
  LIBRDKAFKA_SOURCE_SHA256 = "3dc62de731fd516dfb1032861d9a580d4d0b5b0856beb0f185d06df8e6c26259"
7
7
  end
@@ -737,4 +737,18 @@ describe Rdkafka::Admin do
737
737
  end
738
738
  end
739
739
  end
740
+
741
+ context "when operating from a fork" do
742
+ # @see https://github.com/ffi/ffi/issues/1114
743
+ it 'expect to be able to create topics and run other admin operations without hanging' do
744
+ # If the FFI issue is not mitigated, this will hang forever
745
+ pid = fork do
746
+ admin
747
+ .create_topic(topic_name, topic_partition_count, topic_replication_factor)
748
+ .wait
749
+ end
750
+
751
+ Process.wait(pid)
752
+ end
753
+ end
740
754
  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.2
4
+ version: 0.17.3
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-07 00:00:00.000000000 Z
39
+ date: 2024-08-09 00:00:00.000000000 Z
40
40
  dependencies:
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: ffi
metadata.gz.sig CHANGED
Binary file