karafka-rdkafka 0.17.2 → 0.17.3

Sign up to get free protection for your applications and to get access to all the features.
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