karafka-rdkafka 0.31.0-aarch64-linux-gnu → 0.32.0-aarch64-linux-gnu
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 +4 -4
- data/CHANGELOG.md +83 -35
- data/README.md +2 -1
- data/ext/librdkafka.so +0 -0
- data/karafka-rdkafka.gemspec +4 -3
- data/lib/rdkafka/admin/acl_binding_result.rb +4 -16
- data/lib/rdkafka/admin/alter_consumer_group_offsets_report.rb +2 -2
- data/lib/rdkafka/admin/create_acl_report.rb +1 -3
- data/lib/rdkafka/admin/create_topic_report.rb +2 -6
- data/lib/rdkafka/admin/delete_consumer_group_offsets_report.rb +2 -2
- data/lib/rdkafka/admin/delete_groups_report.rb +2 -6
- data/lib/rdkafka/admin/delete_topic_report.rb +2 -6
- data/lib/rdkafka/admin/describe_cluster_report.rb +3 -0
- data/lib/rdkafka/admin/list_consumer_group_offsets_handle.rb +31 -0
- data/lib/rdkafka/admin/list_consumer_group_offsets_report.rb +52 -0
- data/lib/rdkafka/admin.rb +180 -10
- data/lib/rdkafka/bindings/admin/configs.rb +1 -1
- data/lib/rdkafka/bindings/admin.rb +14 -0
- data/lib/rdkafka/bindings/callbacks.rb +13 -6
- data/lib/rdkafka/bindings/configuration.rb +3 -3
- data/lib/rdkafka/bindings/consumer.rb +44 -2
- data/lib/rdkafka/bindings/errors.rb +1 -1
- data/lib/rdkafka/bindings/handle.rb +1 -1
- data/lib/rdkafka/bindings.rb +3 -0
- data/lib/rdkafka/callbacks/list_consumer_group_offsets_handler.rb +62 -0
- data/lib/rdkafka/callbacks.rb +5 -6
- data/lib/rdkafka/config.rb +70 -0
- data/lib/rdkafka/consumer/allocator.rb +0 -2
- data/lib/rdkafka/consumer/topic_partition_list.rb +7 -7
- data/lib/rdkafka/consumer.rb +76 -36
- data/lib/rdkafka/defaults.rb +6 -4
- data/lib/rdkafka/native_kafka.rb +45 -31
- data/lib/rdkafka/producer/partitions_count_cache.rb +109 -26
- data/lib/rdkafka/producer.rb +141 -71
- data/lib/rdkafka/share_consumer.rb +64 -34
- data/lib/rdkafka/version.rb +1 -1
- data/lib/rdkafka.rb +4 -1
- data/package-lock.json +3 -3
- data/renovate.json +7 -0
- metadata +5 -30
|
@@ -96,13 +96,17 @@ module Rdkafka
|
|
|
96
96
|
# and after close or in a forked child, where the native handle must not be touched.
|
|
97
97
|
# librdkafka assigns the name at creation, so no broker connection is required.
|
|
98
98
|
@name = Rdkafka::Bindings.rd_kafka_name(Rdkafka::Bindings::NativeShareConsumer.new(native)[:rkshare_rk])
|
|
99
|
-
# Guards handle teardown against in-flight calls:
|
|
100
|
-
# close holds it while
|
|
99
|
+
# Guards handle teardown against in-flight calls: the operations in progress counter
|
|
100
|
+
# changes only under this mutex, and close holds it while destroying (mirrors NativeKafka)
|
|
101
101
|
@access_mutex = Mutex.new
|
|
102
|
-
#
|
|
103
|
-
#
|
|
104
|
-
|
|
105
|
-
|
|
102
|
+
# Signalled when `#close` ends and, only while `#close` waits, when the operations in
|
|
103
|
+
# progress counter reaches zero. `#close` waits on it with `@access_mutex` released, so calls
|
|
104
|
+
# that started before it can still decrement the counter.
|
|
105
|
+
@operations_done = ConditionVariable.new
|
|
106
|
+
# Set while `#close` runs, so no new call starts until it ends
|
|
107
|
+
@closing = false
|
|
108
|
+
# Number of calls currently using the native handle, changed only under `@access_mutex`, so
|
|
109
|
+
# no update is lost on Rubies without a GVL (JRuby)
|
|
106
110
|
@operations_in_progress = 0
|
|
107
111
|
|
|
108
112
|
ObjectSpace.define_finalizer(self, self.class.finalizer(@state))
|
|
@@ -541,31 +545,15 @@ module Rdkafka
|
|
|
541
545
|
return if closed?
|
|
542
546
|
|
|
543
547
|
@access_mutex.synchronize do
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
sleep(Defaults::NATIVE_KAFKA_SYNCHRONIZE_SLEEP_INTERVAL_MS / 1_000.0) until @operations_in_progress.zero?
|
|
548
|
+
@operations_done.wait(@access_mutex) while @closing
|
|
549
|
+
@closing = true
|
|
547
550
|
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
# librdkafka leaves the instance intact when close/destroy fail, and validate! raises
|
|
554
|
-
# before any reference (or the finalizer) is dropped, so the caller can retry close
|
|
555
|
-
# and the handle cannot leak silently.
|
|
556
|
-
#
|
|
557
|
-
# The close step is skipped when librdkafka already considers the consumer closed
|
|
558
|
-
# (e.g. a prior close attempt succeeded but its destroy failed and was retried).
|
|
559
|
-
if Rdkafka::Bindings.rd_kafka_share_consumer_closed(native).zero?
|
|
560
|
-
Rdkafka::RdkafkaError.validate!(Rdkafka::Bindings.rd_kafka_share_consumer_close(native))
|
|
551
|
+
begin
|
|
552
|
+
close_native
|
|
553
|
+
ensure
|
|
554
|
+
@closing = false
|
|
555
|
+
@operations_done.broadcast
|
|
561
556
|
end
|
|
562
|
-
|
|
563
|
-
Rdkafka::RdkafkaError.validate!(Rdkafka::Bindings.rd_kafka_share_destroy(native))
|
|
564
|
-
|
|
565
|
-
# The native handle is gone only now; drop all references and the finalizer
|
|
566
|
-
ObjectSpace.undefine_finalizer(self)
|
|
567
|
-
@state.native = nil
|
|
568
|
-
@state.ack_callback = nil
|
|
569
557
|
end
|
|
570
558
|
|
|
571
559
|
nil
|
|
@@ -573,10 +561,46 @@ module Rdkafka
|
|
|
573
561
|
|
|
574
562
|
private
|
|
575
563
|
|
|
564
|
+
# Destroys the native handle once no other thread uses it. Runs under `@access_mutex`, with
|
|
565
|
+
# `@closing` set so no new call starts.
|
|
566
|
+
#
|
|
567
|
+
# @return [nil]
|
|
568
|
+
# @raise [RdkafkaError] When closing or destroying reported an error
|
|
569
|
+
def close_native
|
|
570
|
+
# Wait for in-flight calls on other threads to finish using the handle. The wait releases
|
|
571
|
+
# `@access_mutex`, so those calls can decrement the counter, while `@closing` keeps new
|
|
572
|
+
# calls out.
|
|
573
|
+
@operations_done.wait(@access_mutex) until @operations_in_progress.zero?
|
|
574
|
+
|
|
575
|
+
native = @state.native
|
|
576
|
+
|
|
577
|
+
# Lost the race against a concurrent close that already finished
|
|
578
|
+
return if native.nil?
|
|
579
|
+
|
|
580
|
+
# librdkafka leaves the instance intact when close/destroy fail, and validate! raises
|
|
581
|
+
# before any reference (or the finalizer) is dropped, so the caller can retry close
|
|
582
|
+
# and the handle cannot leak silently.
|
|
583
|
+
#
|
|
584
|
+
# The close step is skipped when librdkafka already considers the consumer closed
|
|
585
|
+
# (e.g. a prior close attempt succeeded but its destroy failed and was retried).
|
|
586
|
+
if Rdkafka::Bindings.rd_kafka_share_consumer_closed(native).zero?
|
|
587
|
+
Rdkafka::RdkafkaError.validate!(Rdkafka::Bindings.rd_kafka_share_consumer_close(native))
|
|
588
|
+
end
|
|
589
|
+
|
|
590
|
+
Rdkafka::RdkafkaError.validate!(Rdkafka::Bindings.rd_kafka_share_destroy(native))
|
|
591
|
+
|
|
592
|
+
# The native handle is gone only now; drop all references and the finalizer
|
|
593
|
+
ObjectSpace.undefine_finalizer(self)
|
|
594
|
+
@state.native = nil
|
|
595
|
+
@state.ack_callback = nil
|
|
596
|
+
|
|
597
|
+
nil
|
|
598
|
+
end
|
|
599
|
+
|
|
576
600
|
# Executes a block with the native share handle while tracking the call so {#close} cannot
|
|
577
|
-
# tear the handle down mid-call from another thread.
|
|
578
|
-
#
|
|
579
|
-
#
|
|
601
|
+
# tear the handle down mid-call from another thread. New calls wait while close runs, so once
|
|
602
|
+
# close is draining no new call can slip in; librdkafka's own single-owner gate still rejects
|
|
603
|
+
# genuinely concurrent API calls.
|
|
580
604
|
#
|
|
581
605
|
# @param method [Symbol] public method name, used for the ClosedConsumerError
|
|
582
606
|
# @yield [FFI::Pointer] the native share handle
|
|
@@ -586,7 +610,10 @@ module Rdkafka
|
|
|
586
610
|
# (the only internal holder) - the handle is going away, so reject before tracking
|
|
587
611
|
raise Rdkafka::ClosedConsumerError.new(method) if @access_mutex.owned?
|
|
588
612
|
|
|
589
|
-
@access_mutex.synchronize
|
|
613
|
+
@access_mutex.synchronize do
|
|
614
|
+
@operations_done.wait(@access_mutex) while @closing
|
|
615
|
+
@operations_in_progress += 1
|
|
616
|
+
end
|
|
590
617
|
|
|
591
618
|
begin
|
|
592
619
|
native = @state.native
|
|
@@ -597,7 +624,10 @@ module Rdkafka
|
|
|
597
624
|
|
|
598
625
|
yield(native)
|
|
599
626
|
ensure
|
|
600
|
-
@
|
|
627
|
+
@access_mutex.synchronize do
|
|
628
|
+
@operations_in_progress -= 1
|
|
629
|
+
@operations_done.broadcast if @closing && @operations_in_progress.zero?
|
|
630
|
+
end
|
|
601
631
|
end
|
|
602
632
|
end
|
|
603
633
|
|
data/lib/rdkafka/version.rb
CHANGED
data/lib/rdkafka.rb
CHANGED
|
@@ -15,6 +15,8 @@ require "rdkafka/abstract_handle"
|
|
|
15
15
|
require "rdkafka/admin"
|
|
16
16
|
require "rdkafka/admin/alter_consumer_group_offsets_handle"
|
|
17
17
|
require "rdkafka/admin/alter_consumer_group_offsets_report"
|
|
18
|
+
require "rdkafka/admin/list_consumer_group_offsets_handle"
|
|
19
|
+
require "rdkafka/admin/list_consumer_group_offsets_report"
|
|
18
20
|
require "rdkafka/admin/delete_consumer_group_offsets_handle"
|
|
19
21
|
require "rdkafka/admin/delete_consumer_group_offsets_report"
|
|
20
22
|
require "rdkafka/admin/create_topic_handle"
|
|
@@ -51,6 +53,7 @@ require "rdkafka/admin/describe_consumer_groups_report"
|
|
|
51
53
|
require "rdkafka/admin/acl_binding_result"
|
|
52
54
|
require "rdkafka/admin/config_binding_result"
|
|
53
55
|
require "rdkafka/admin/config_resource_binding_result"
|
|
56
|
+
require "rdkafka/error"
|
|
54
57
|
require "rdkafka/bindings"
|
|
55
58
|
require "rdkafka/callbacks"
|
|
56
59
|
require "rdkafka/callbacks/base_handler"
|
|
@@ -58,6 +61,7 @@ require "rdkafka/callbacks/create_topic_handler"
|
|
|
58
61
|
require "rdkafka/callbacks/delete_topic_handler"
|
|
59
62
|
require "rdkafka/callbacks/create_partitions_handler"
|
|
60
63
|
require "rdkafka/callbacks/alter_consumer_group_offsets_handler"
|
|
64
|
+
require "rdkafka/callbacks/list_consumer_group_offsets_handler"
|
|
61
65
|
require "rdkafka/callbacks/delete_consumer_group_offsets_handler"
|
|
62
66
|
require "rdkafka/callbacks/delete_groups_handler"
|
|
63
67
|
require "rdkafka/callbacks/delete_records_handler"
|
|
@@ -80,7 +84,6 @@ require "rdkafka/consumer/allocator"
|
|
|
80
84
|
require "rdkafka/consumer/topic_partition_list"
|
|
81
85
|
require "rdkafka/share_consumer"
|
|
82
86
|
require "rdkafka/share_consumer/message"
|
|
83
|
-
require "rdkafka/error"
|
|
84
87
|
require "rdkafka/metadata"
|
|
85
88
|
require "rdkafka/native_kafka"
|
|
86
89
|
require "rdkafka/producer/partitions_count_cache"
|
data/package-lock.json
CHANGED
|
@@ -286,9 +286,9 @@
|
|
|
286
286
|
}
|
|
287
287
|
},
|
|
288
288
|
"node_modules/smol-toml": {
|
|
289
|
-
"version": "1.9.
|
|
290
|
-
"resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.9.
|
|
291
|
-
"integrity": "sha512-
|
|
289
|
+
"version": "1.9.1",
|
|
290
|
+
"resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.9.1.tgz",
|
|
291
|
+
"integrity": "sha512-j7WyPdf0CJoutMzMoPLF/bVXHtKZIT9Rb4eGeEbWw8X2t5oirjPgpL+OpaENZrILYaXqYwnVH+qgUwVbl+pUJQ==",
|
|
292
292
|
"dev": true,
|
|
293
293
|
"license": "BSD-3-Clause",
|
|
294
294
|
"engines": {
|
data/renovate.json
CHANGED
|
@@ -97,6 +97,13 @@
|
|
|
97
97
|
"ruby/setup-ruby"
|
|
98
98
|
],
|
|
99
99
|
"minimumReleaseAge": "5 days"
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"description": "Keep the ubuntu:22.04 build container of the precompiled gnu libraries; a newer Ubuntu raises their glibc floor",
|
|
103
|
+
"matchDatasources": ["docker"],
|
|
104
|
+
"matchPackageNames": ["ubuntu"],
|
|
105
|
+
"matchFileNames": [".github/workflows/**"],
|
|
106
|
+
"allowedVersions": "/^22\\.04$/"
|
|
100
107
|
}
|
|
101
108
|
],
|
|
102
109
|
"labels": [
|
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.
|
|
4
|
+
version: 0.32.0
|
|
5
5
|
platform: aarch64-linux-gnu
|
|
6
6
|
authors:
|
|
7
7
|
- Thijs Cadier
|
|
@@ -52,34 +52,6 @@ dependencies:
|
|
|
52
52
|
- - ">="
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
54
|
version: '0'
|
|
55
|
-
- !ruby/object:Gem::Dependency
|
|
56
|
-
name: mini_portile2
|
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
|
58
|
-
requirements:
|
|
59
|
-
- - "~>"
|
|
60
|
-
- !ruby/object:Gem::Version
|
|
61
|
-
version: '2.6'
|
|
62
|
-
type: :runtime
|
|
63
|
-
prerelease: false
|
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
-
requirements:
|
|
66
|
-
- - "~>"
|
|
67
|
-
- !ruby/object:Gem::Version
|
|
68
|
-
version: '2.6'
|
|
69
|
-
- !ruby/object:Gem::Dependency
|
|
70
|
-
name: rake
|
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
|
72
|
-
requirements:
|
|
73
|
-
- - ">"
|
|
74
|
-
- !ruby/object:Gem::Version
|
|
75
|
-
version: '12'
|
|
76
|
-
type: :runtime
|
|
77
|
-
prerelease: false
|
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
-
requirements:
|
|
80
|
-
- - ">"
|
|
81
|
-
- !ruby/object:Gem::Version
|
|
82
|
-
version: '12'
|
|
83
55
|
description: Modern Kafka client library for Ruby based on librdkafka
|
|
84
56
|
email:
|
|
85
57
|
- contact@karafka.io
|
|
@@ -133,6 +105,8 @@ files:
|
|
|
133
105
|
- lib/rdkafka/admin/describe_topics_report.rb
|
|
134
106
|
- lib/rdkafka/admin/incremental_alter_configs_handle.rb
|
|
135
107
|
- lib/rdkafka/admin/incremental_alter_configs_report.rb
|
|
108
|
+
- lib/rdkafka/admin/list_consumer_group_offsets_handle.rb
|
|
109
|
+
- lib/rdkafka/admin/list_consumer_group_offsets_report.rb
|
|
136
110
|
- lib/rdkafka/admin/list_consumer_groups_handle.rb
|
|
137
111
|
- lib/rdkafka/admin/list_consumer_groups_report.rb
|
|
138
112
|
- lib/rdkafka/admin/list_offsets_handle.rb
|
|
@@ -170,6 +144,7 @@ files:
|
|
|
170
144
|
- lib/rdkafka/callbacks/describe_consumer_groups_handler.rb
|
|
171
145
|
- lib/rdkafka/callbacks/describe_topics_handler.rb
|
|
172
146
|
- lib/rdkafka/callbacks/incremental_alter_configs_handler.rb
|
|
147
|
+
- lib/rdkafka/callbacks/list_consumer_group_offsets_handler.rb
|
|
173
148
|
- lib/rdkafka/callbacks/list_consumer_groups_handler.rb
|
|
174
149
|
- lib/rdkafka/callbacks/list_offsets_handler.rb
|
|
175
150
|
- lib/rdkafka/clients.rb
|
|
@@ -227,5 +202,5 @@ rubygems_version: 4.0.20
|
|
|
227
202
|
specification_version: 4
|
|
228
203
|
summary: The rdkafka gem is a modern Kafka client library for Ruby based on librdkafka.
|
|
229
204
|
It wraps the production-ready C client using the ffi gem and targets Kafka 1.0+
|
|
230
|
-
and Ruby
|
|
205
|
+
and Ruby 3.3+.
|
|
231
206
|
test_files: []
|