rdkafka 0.24.2-aarch64-linux-gnu → 0.25.1-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.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +18 -0
  3. data/Gemfile +8 -0
  4. data/Gemfile.lint +14 -0
  5. data/Gemfile.lint.lock +123 -0
  6. data/README.md +2 -1
  7. data/Rakefile +21 -21
  8. data/docker-compose-ssl.yml +1 -1
  9. data/docker-compose.yml +1 -1
  10. data/ext/librdkafka.so +0 -0
  11. data/lib/rdkafka/abstract_handle.rb +23 -5
  12. data/lib/rdkafka/admin/acl_binding_result.rb +5 -5
  13. data/lib/rdkafka/admin/config_resource_binding_result.rb +1 -0
  14. data/lib/rdkafka/admin/create_acl_handle.rb +7 -4
  15. data/lib/rdkafka/admin/create_acl_report.rb +3 -2
  16. data/lib/rdkafka/admin/create_partitions_handle.rb +8 -5
  17. data/lib/rdkafka/admin/create_partitions_report.rb +1 -0
  18. data/lib/rdkafka/admin/create_topic_handle.rb +8 -5
  19. data/lib/rdkafka/admin/create_topic_report.rb +3 -0
  20. data/lib/rdkafka/admin/delete_acl_handle.rb +9 -6
  21. data/lib/rdkafka/admin/delete_acl_report.rb +5 -3
  22. data/lib/rdkafka/admin/delete_groups_handle.rb +10 -5
  23. data/lib/rdkafka/admin/delete_groups_report.rb +3 -0
  24. data/lib/rdkafka/admin/delete_topic_handle.rb +8 -5
  25. data/lib/rdkafka/admin/delete_topic_report.rb +3 -0
  26. data/lib/rdkafka/admin/describe_acl_handle.rb +9 -6
  27. data/lib/rdkafka/admin/describe_acl_report.rb +5 -3
  28. data/lib/rdkafka/admin/describe_configs_handle.rb +7 -4
  29. data/lib/rdkafka/admin/describe_configs_report.rb +7 -1
  30. data/lib/rdkafka/admin/incremental_alter_configs_handle.rb +7 -4
  31. data/lib/rdkafka/admin/incremental_alter_configs_report.rb +7 -1
  32. data/lib/rdkafka/admin.rb +194 -132
  33. data/lib/rdkafka/bindings.rb +155 -107
  34. data/lib/rdkafka/callbacks.rb +81 -21
  35. data/lib/rdkafka/config.rb +36 -24
  36. data/lib/rdkafka/consumer/headers.rb +3 -2
  37. data/lib/rdkafka/consumer/message.rb +12 -11
  38. data/lib/rdkafka/consumer/partition.rb +8 -4
  39. data/lib/rdkafka/consumer/topic_partition_list.rb +18 -18
  40. data/lib/rdkafka/consumer.rb +247 -42
  41. data/lib/rdkafka/defaults.rb +106 -0
  42. data/lib/rdkafka/error.rb +28 -13
  43. data/lib/rdkafka/helpers/oauth.rb +11 -6
  44. data/lib/rdkafka/helpers/time.rb +5 -0
  45. data/lib/rdkafka/metadata.rb +45 -21
  46. data/lib/rdkafka/native_kafka.rb +89 -4
  47. data/lib/rdkafka/producer/delivery_handle.rb +5 -5
  48. data/lib/rdkafka/producer/delivery_report.rb +8 -4
  49. data/lib/rdkafka/producer/partitions_count_cache.rb +29 -19
  50. data/lib/rdkafka/producer.rb +165 -79
  51. data/lib/rdkafka/version.rb +6 -3
  52. data/lib/rdkafka.rb +1 -0
  53. data/package-lock.json +331 -0
  54. data/package.json +9 -0
  55. data/rdkafka.gemspec +39 -47
  56. data/renovate.json +22 -8
  57. metadata +7 -86
data/lib/rdkafka/admin.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Rdkafka
4
+ # Admin client for Kafka administrative operations
4
5
  class Admin
5
6
  include Helpers::OAuth
6
7
 
@@ -8,7 +9,7 @@ module Rdkafka
8
9
  # Allows us to retrieve librdkafka errors with descriptions
9
10
  # Useful for debugging and building UIs, etc.
10
11
  #
11
- # @return [Hash<Integer, Hash>] hash with errors mapped by code
12
+ # @return [Hash{Integer => Hash}] hash with errors mapped by code
12
13
  def describe_errors
13
14
  # Memory pointers for the array of structures and count
14
15
  p_error_descs = FFI::MemoryPointer.new(:pointer)
@@ -35,8 +36,8 @@ module Rdkafka
35
36
  # Read values from the struct
36
37
  code = error_desc[:code]
37
38
 
38
- name = ''
39
- desc = ''
39
+ name = ""
40
+ desc = ""
40
41
 
41
42
  name = error_desc[:name].read_string unless error_desc[:name].null?
42
43
  desc = error_desc[:desc].read_string unless error_desc[:desc].null?
@@ -49,6 +50,7 @@ module Rdkafka
49
50
  end
50
51
 
51
52
  # @private
53
+ # @param native_kafka [NativeKafka] wrapper around the native Kafka handle
52
54
  def initialize(native_kafka)
53
55
  @native_kafka = native_kafka
54
56
 
@@ -69,6 +71,67 @@ module Rdkafka
69
71
  end
70
72
  end
71
73
 
74
+ # Enable IO event notifications for fiber scheduler integration
75
+ # When admin operations complete, librdkafka will write to your FD
76
+ #
77
+ # @param fd [Integer] file descriptor to signal (from IO.pipe or eventfd)
78
+ # @param payload [String] data to write to fd (default: "\x01")
79
+ # @return [nil]
80
+ # @raise [ClosedInnerError] when the admin client is closed
81
+ def enable_queue_io_events(fd, payload = "\x01")
82
+ @native_kafka.enable_main_queue_io_events(fd, payload)
83
+ end
84
+
85
+ # Enable IO event notifications for background events
86
+ # @param fd [Integer] file descriptor to signal (from IO.pipe or eventfd)
87
+ # @param payload [String] data to write to fd (default: "\x01")
88
+ # @return [nil]
89
+ # @raise [ClosedInnerError] when the admin client is closed
90
+ def enable_background_queue_io_events(fd, payload = "\x01")
91
+ @native_kafka.enable_background_queue_io_events(fd, payload)
92
+ end
93
+
94
+ # Polls for events in a non-blocking loop, yielding the count after each iteration.
95
+ #
96
+ # This method processes events (stats, errors, etc.) in a single GVL/mutex session,
97
+ # which is more efficient than repeated individual polls. It uses non-blocking polls
98
+ # internally (no GVL release between polls).
99
+ #
100
+ # Yields the count of events processed after each poll iteration, allowing the caller
101
+ # to implement timeout or other termination logic by returning `:stop`.
102
+ #
103
+ # @yield [count] Called after each poll iteration
104
+ # @yieldparam count [Integer] Number of events processed in this iteration
105
+ # @yieldreturn [Symbol, Object] Return `:stop` to break the loop, any other value continues
106
+ # @return [nil]
107
+ # @raise [Rdkafka::ClosedAdminError] if called on a closed admin client
108
+ #
109
+ # @note This method holds the inner lock until the queue is empty or `:stop` is returned.
110
+ # Other admin operations will wait until this method returns.
111
+ # @note This method is thread-safe as it uses @native_kafka.with_inner synchronization
112
+ #
113
+ # @example Drain all pending events
114
+ # admin.events_poll_nb_each { |_count| }
115
+ #
116
+ # @example With timeout control
117
+ # deadline = monotonic_now + timeout_ms
118
+ # admin.events_poll_nb_each do |_count|
119
+ # :stop if monotonic_now >= deadline
120
+ # end
121
+ def events_poll_nb_each
122
+ closed_admin_check(__method__)
123
+
124
+ @native_kafka.with_inner do |inner|
125
+ loop do
126
+ count = Rdkafka::Bindings.rd_kafka_poll_nb(inner, 0)
127
+ break if count.zero?
128
+ break if yield(count) == :stop
129
+ end
130
+ end
131
+ end
132
+
133
+ # @return [Proc] finalizer proc for closing the admin
134
+ # @private
72
135
  def finalizer
73
136
  ->(_) { close }
74
137
  end
@@ -78,7 +141,7 @@ module Rdkafka
78
141
  # @param topic_name [String, nil] metadat about particular topic or all if nil
79
142
  # @param timeout_ms [Integer] metadata request timeout
80
143
  # @return [Metadata] requested metadata
81
- def metadata(topic_name = nil, timeout_ms = 2_000)
144
+ def metadata(topic_name = nil, timeout_ms = Defaults::METADATA_TIMEOUT_MS)
82
145
  closed_admin_check(__method__)
83
146
 
84
147
  @native_kafka.with_inner do |inner|
@@ -100,13 +163,16 @@ module Rdkafka
100
163
 
101
164
  # Create a topic with the given partition count and replication factor
102
165
  #
166
+ # @param topic_name [String] name of the topic to create
167
+ # @param partition_count [Integer] number of partitions for the topic
168
+ # @param replication_factor [Integer] replication factor for the topic
169
+ # @param topic_config [Hash] optional topic configuration settings
103
170
  # @return [CreateTopicHandle] Create topic handle that can be used to wait for the result of
104
171
  # creating the topic
105
- #
106
172
  # @raise [ConfigError] When the partition count or replication factor are out of valid range
107
173
  # @raise [RdkafkaError] When the topic name is invalid or the topic already exists
108
174
  # @raise [RdkafkaError] When the topic configuration is invalid
109
- def create_topic(topic_name, partition_count, replication_factor, topic_config={})
175
+ def create_topic(topic_name, partition_count, replication_factor, topic_config = {})
110
176
  closed_admin_check(__method__)
111
177
 
112
178
  # Create a rd_kafka_NewTopic_t representing the new topic
@@ -122,14 +188,12 @@ module Rdkafka
122
188
  raise Rdkafka::Config::ConfigError.new(error_buffer.read_string)
123
189
  end
124
190
 
125
- unless topic_config.nil?
126
- topic_config.each do |key, value|
127
- Rdkafka::Bindings.rd_kafka_NewTopic_set_config(
128
- new_topic_ptr,
129
- key.to_s,
130
- value.to_s
131
- )
132
- end
191
+ topic_config&.each do |key, value|
192
+ Rdkafka::Bindings.rd_kafka_NewTopic_set_config(
193
+ new_topic_ptr,
194
+ key.to_s,
195
+ value.to_s
196
+ )
133
197
  end
134
198
 
135
199
  # Note that rd_kafka_CreateTopics can create more than one topic at a time
@@ -149,7 +213,7 @@ module Rdkafka
149
213
  # Create and register the handle we will return to the caller
150
214
  create_topic_handle = CreateTopicHandle.new
151
215
  create_topic_handle[:pending] = true
152
- create_topic_handle[:response] = -1
216
+ create_topic_handle[:response] = Rdkafka::Bindings::RD_KAFKA_PARTITION_UA
153
217
  CreateTopicHandle.register(create_topic_handle)
154
218
  admin_options_ptr = @native_kafka.with_inner do |inner|
155
219
  Rdkafka::Bindings.rd_kafka_AdminOptions_new(inner, Rdkafka::Bindings::RD_KAFKA_ADMIN_OP_CREATETOPICS)
@@ -178,6 +242,11 @@ module Rdkafka
178
242
  create_topic_handle
179
243
  end
180
244
 
245
+ # Deletes a consumer group
246
+ #
247
+ # @param group_id [String] the group id to delete
248
+ # @return [DeleteGroupsHandle] delete groups handle that can be used to wait for the result
249
+ # @raise [RdkafkaError] When deleting the group fails
181
250
  def delete_group(group_id)
182
251
  closed_admin_check(__method__)
183
252
 
@@ -202,7 +271,7 @@ module Rdkafka
202
271
  # Create and register the handle we will return to the caller
203
272
  delete_groups_handle = DeleteGroupsHandle.new
204
273
  delete_groups_handle[:pending] = true
205
- delete_groups_handle[:response] = -1
274
+ delete_groups_handle[:response] = Rdkafka::Bindings::RD_KAFKA_PARTITION_UA
206
275
  DeleteGroupsHandle.register(delete_groups_handle)
207
276
  admin_options_ptr = @native_kafka.with_inner do |inner|
208
277
  Rdkafka::Bindings.rd_kafka_AdminOptions_new(inner, Rdkafka::Bindings::RD_KAFKA_ADMIN_OP_DELETETOPICS)
@@ -233,6 +302,7 @@ module Rdkafka
233
302
 
234
303
  # Deletes the named topic
235
304
  #
305
+ # @param topic_name [String] name of the topic to delete
236
306
  # @return [DeleteTopicHandle] Delete topic handle that can be used to wait for the result of
237
307
  # deleting the topic
238
308
  # @raise [RdkafkaError] When the topic name is invalid or the topic does not exist
@@ -259,7 +329,7 @@ module Rdkafka
259
329
  # Create and register the handle we will return to the caller
260
330
  delete_topic_handle = DeleteTopicHandle.new
261
331
  delete_topic_handle[:pending] = true
262
- delete_topic_handle[:response] = -1
332
+ delete_topic_handle[:response] = Rdkafka::Bindings::RD_KAFKA_PARTITION_UA
263
333
  DeleteTopicHandle.register(delete_topic_handle)
264
334
  admin_options_ptr = @native_kafka.with_inner do |inner|
265
335
  Rdkafka::Bindings.rd_kafka_AdminOptions_new(inner, Rdkafka::Bindings::RD_KAFKA_ADMIN_OP_DELETETOPICS)
@@ -290,14 +360,12 @@ module Rdkafka
290
360
 
291
361
  # Creates extra partitions for a given topic
292
362
  #
293
- # @param topic_name [String]
363
+ # @param topic_name [String] name of the topic
294
364
  # @param partition_count [Integer] how many partitions we want to end up with for given topic
295
- #
365
+ # @return [CreatePartitionsHandle] Create partitions handle that can be used to wait for the result
296
366
  # @raise [ConfigError] When the partition count or replication factor are out of valid range
297
367
  # @raise [RdkafkaError] When the topic name is invalid or the topic already exists
298
368
  # @raise [RdkafkaError] When the topic configuration is invalid
299
- #
300
- # @return [CreateTopicHandle] Create topic handle that can be used to wait for the result of creating the topic
301
369
  def create_partitions(topic_name, partition_count)
302
370
  closed_admin_check(__method__)
303
371
 
@@ -327,7 +395,7 @@ module Rdkafka
327
395
  # Create and register the handle we will return to the caller
328
396
  create_partitions_handle = CreatePartitionsHandle.new
329
397
  create_partitions_handle[:pending] = true
330
- create_partitions_handle[:response] = -1
398
+ create_partitions_handle[:response] = Rdkafka::Bindings::RD_KAFKA_PARTITION_UA
331
399
  CreatePartitionsHandle.register(create_partitions_handle)
332
400
  admin_options_ptr = Rdkafka::Bindings.rd_kafka_AdminOptions_new(inner, Rdkafka::Bindings::RD_KAFKA_ADMIN_OP_CREATEPARTITIONS)
333
401
  Rdkafka::Bindings.rd_kafka_AdminOptions_set_opaque(admin_options_ptr, create_partitions_handle.to_ptr)
@@ -354,40 +422,36 @@ module Rdkafka
354
422
  end
355
423
 
356
424
  # Create acl
357
- # @param resource_type - values of type rd_kafka_ResourceType_t
358
- # https://github.com/confluentinc/librdkafka/blob/292d2a66b9921b783f08147807992e603c7af059/src/rdkafka.h#L7307
359
- # valid values are:
360
- # RD_KAFKA_RESOURCE_TOPIC = 2
361
- # RD_KAFKA_RESOURCE_GROUP = 3
362
- # RD_KAFKA_RESOURCE_BROKER = 4
363
- # @param resource_pattern_type - values of type rd_kafka_ResourcePatternType_t
364
- # https://github.com/confluentinc/librdkafka/blob/292d2a66b9921b783f08147807992e603c7af059/src/rdkafka.h#L7320
365
- # valid values are:
366
- # RD_KAFKA_RESOURCE_PATTERN_MATCH = 2
367
- # RD_KAFKA_RESOURCE_PATTERN_LITERAL = 3
368
- # RD_KAFKA_RESOURCE_PATTERN_PREFIXED = 4
369
- # @param operation - values of type rd_kafka_AclOperation_t
370
- # https://github.com/confluentinc/librdkafka/blob/292d2a66b9921b783f08147807992e603c7af059/src/rdkafka.h#L8403
371
- # valid values are:
372
- # RD_KAFKA_ACL_OPERATION_ALL = 2
373
- # RD_KAFKA_ACL_OPERATION_READ = 3
374
- # RD_KAFKA_ACL_OPERATION_WRITE = 4
375
- # RD_KAFKA_ACL_OPERATION_CREATE = 5
376
- # RD_KAFKA_ACL_OPERATION_DELETE = 6
377
- # RD_KAFKA_ACL_OPERATION_ALTER = 7
378
- # RD_KAFKA_ACL_OPERATION_DESCRIBE = 8
379
- # RD_KAFKA_ACL_OPERATION_CLUSTER_ACTION = 9
380
- # RD_KAFKA_ACL_OPERATION_DESCRIBE_CONFIGS = 10
381
- # RD_KAFKA_ACL_OPERATION_ALTER_CONFIGS = 11
382
- # RD_KAFKA_ACL_OPERATION_IDEMPOTENT_WRITE = 12
383
- # @param permission_type - values of type rd_kafka_AclPermissionType_t
384
- # https://github.com/confluentinc/librdkafka/blob/292d2a66b9921b783f08147807992e603c7af059/src/rdkafka.h#L8435
385
- # valid values are:
386
- # RD_KAFKA_ACL_PERMISSION_TYPE_DENY = 2
387
- # RD_KAFKA_ACL_PERMISSION_TYPE_ALLOW = 3
388
425
  #
426
+ # @param resource_type [Integer] rd_kafka_ResourceType_t value:
427
+ # - RD_KAFKA_RESOURCE_TOPIC = 2
428
+ # - RD_KAFKA_RESOURCE_GROUP = 3
429
+ # - RD_KAFKA_RESOURCE_BROKER = 4
430
+ # @param resource_name [String] name of the resource
431
+ # @param resource_pattern_type [Integer] rd_kafka_ResourcePatternType_t value:
432
+ # - RD_KAFKA_RESOURCE_PATTERN_UNKNOWN = 0
433
+ # - RD_KAFKA_RESOURCE_PATTERN_ANY = 1
434
+ # - RD_KAFKA_RESOURCE_PATTERN_MATCH = 2
435
+ # - RD_KAFKA_RESOURCE_PATTERN_LITERAL = 3
436
+ # - RD_KAFKA_RESOURCE_PATTERN_PREFIXED = 4
437
+ # @param principal [String] principal (e.g., "User:alice")
438
+ # @param host [String] host address
439
+ # @param operation [Integer] rd_kafka_AclOperation_t value:
440
+ # - RD_KAFKA_ACL_OPERATION_ALL = 2
441
+ # - RD_KAFKA_ACL_OPERATION_READ = 3
442
+ # - RD_KAFKA_ACL_OPERATION_WRITE = 4
443
+ # - RD_KAFKA_ACL_OPERATION_CREATE = 5
444
+ # - RD_KAFKA_ACL_OPERATION_DELETE = 6
445
+ # - RD_KAFKA_ACL_OPERATION_ALTER = 7
446
+ # - RD_KAFKA_ACL_OPERATION_DESCRIBE = 8
447
+ # - RD_KAFKA_ACL_OPERATION_CLUSTER_ACTION = 9
448
+ # - RD_KAFKA_ACL_OPERATION_DESCRIBE_CONFIGS = 10
449
+ # - RD_KAFKA_ACL_OPERATION_ALTER_CONFIGS = 11
450
+ # - RD_KAFKA_ACL_OPERATION_IDEMPOTENT_WRITE = 12
451
+ # @param permission_type [Integer] rd_kafka_AclPermissionType_t value:
452
+ # - RD_KAFKA_ACL_PERMISSION_TYPE_DENY = 2
453
+ # - RD_KAFKA_ACL_PERMISSION_TYPE_ALLOW = 3
389
454
  # @return [CreateAclHandle] Create acl handle that can be used to wait for the result of creating the acl
390
- #
391
455
  # @raise [RdkafkaError]
392
456
  def create_acl(resource_type:, resource_name:, resource_pattern_type:, principal:, host:, operation:, permission_type:)
393
457
  closed_admin_check(__method__)
@@ -427,7 +491,7 @@ module Rdkafka
427
491
  # Create and register the handle that we will return to the caller
428
492
  create_acl_handle = CreateAclHandle.new
429
493
  create_acl_handle[:pending] = true
430
- create_acl_handle[:response] = -1
494
+ create_acl_handle[:response] = Rdkafka::Bindings::RD_KAFKA_PARTITION_UA
431
495
  CreateAclHandle.register(create_acl_handle)
432
496
 
433
497
  admin_options_ptr = @native_kafka.with_inner do |inner|
@@ -460,39 +524,35 @@ module Rdkafka
460
524
 
461
525
  # Delete acl
462
526
  #
463
- # @param resource_type - values of type rd_kafka_ResourceType_t
464
- # https://github.com/confluentinc/librdkafka/blob/292d2a66b9921b783f08147807992e603c7af059/src/rdkafka.h#L7307
465
- # valid values are:
466
- # RD_KAFKA_RESOURCE_TOPIC = 2
467
- # RD_KAFKA_RESOURCE_GROUP = 3
468
- # RD_KAFKA_RESOURCE_BROKER = 4
469
- # @param resource_pattern_type - values of type rd_kafka_ResourcePatternType_t
470
- # https://github.com/confluentinc/librdkafka/blob/292d2a66b9921b783f08147807992e603c7af059/src/rdkafka.h#L7320
471
- # valid values are:
472
- # RD_KAFKA_RESOURCE_PATTERN_MATCH = 2
473
- # RD_KAFKA_RESOURCE_PATTERN_LITERAL = 3
474
- # RD_KAFKA_RESOURCE_PATTERN_PREFIXED = 4
475
- # @param operation - values of type rd_kafka_AclOperation_t
476
- # https://github.com/confluentinc/librdkafka/blob/292d2a66b9921b783f08147807992e603c7af059/src/rdkafka.h#L8403
477
- # valid values are:
478
- # RD_KAFKA_ACL_OPERATION_ALL = 2
479
- # RD_KAFKA_ACL_OPERATION_READ = 3
480
- # RD_KAFKA_ACL_OPERATION_WRITE = 4
481
- # RD_KAFKA_ACL_OPERATION_CREATE = 5
482
- # RD_KAFKA_ACL_OPERATION_DELETE = 6
483
- # RD_KAFKA_ACL_OPERATION_ALTER = 7
484
- # RD_KAFKA_ACL_OPERATION_DESCRIBE = 8
485
- # RD_KAFKA_ACL_OPERATION_CLUSTER_ACTION = 9
486
- # RD_KAFKA_ACL_OPERATION_DESCRIBE_CONFIGS = 10
487
- # RD_KAFKA_ACL_OPERATION_ALTER_CONFIGS = 11
488
- # RD_KAFKA_ACL_OPERATION_IDEMPOTENT_WRITE = 12
489
- # @param permission_type - values of type rd_kafka_AclPermissionType_t
490
- # https://github.com/confluentinc/librdkafka/blob/292d2a66b9921b783f08147807992e603c7af059/src/rdkafka.h#L8435
491
- # valid values are:
492
- # RD_KAFKA_ACL_PERMISSION_TYPE_DENY = 2
493
- # RD_KAFKA_ACL_PERMISSION_TYPE_ALLOW = 3
527
+ # @param resource_type [Integer] rd_kafka_ResourceType_t value:
528
+ # - RD_KAFKA_RESOURCE_TOPIC = 2
529
+ # - RD_KAFKA_RESOURCE_GROUP = 3
530
+ # - RD_KAFKA_RESOURCE_BROKER = 4
531
+ # @param resource_name [String, nil] name of the resource or nil for any
532
+ # @param resource_pattern_type [Integer] rd_kafka_ResourcePatternType_t value:
533
+ # - RD_KAFKA_RESOURCE_PATTERN_UNKNOWN = 0
534
+ # - RD_KAFKA_RESOURCE_PATTERN_ANY = 1
535
+ # - RD_KAFKA_RESOURCE_PATTERN_MATCH = 2
536
+ # - RD_KAFKA_RESOURCE_PATTERN_LITERAL = 3
537
+ # - RD_KAFKA_RESOURCE_PATTERN_PREFIXED = 4
538
+ # @param principal [String, nil] principal (e.g., "User:alice") or nil for any
539
+ # @param host [String, nil] host address or nil for any
540
+ # @param operation [Integer] rd_kafka_AclOperation_t value:
541
+ # - RD_KAFKA_ACL_OPERATION_ALL = 2
542
+ # - RD_KAFKA_ACL_OPERATION_READ = 3
543
+ # - RD_KAFKA_ACL_OPERATION_WRITE = 4
544
+ # - RD_KAFKA_ACL_OPERATION_CREATE = 5
545
+ # - RD_KAFKA_ACL_OPERATION_DELETE = 6
546
+ # - RD_KAFKA_ACL_OPERATION_ALTER = 7
547
+ # - RD_KAFKA_ACL_OPERATION_DESCRIBE = 8
548
+ # - RD_KAFKA_ACL_OPERATION_CLUSTER_ACTION = 9
549
+ # - RD_KAFKA_ACL_OPERATION_DESCRIBE_CONFIGS = 10
550
+ # - RD_KAFKA_ACL_OPERATION_ALTER_CONFIGS = 11
551
+ # - RD_KAFKA_ACL_OPERATION_IDEMPOTENT_WRITE = 12
552
+ # @param permission_type [Integer] rd_kafka_AclPermissionType_t value:
553
+ # - RD_KAFKA_ACL_PERMISSION_TYPE_DENY = 2
554
+ # - RD_KAFKA_ACL_PERMISSION_TYPE_ALLOW = 3
494
555
  # @return [DeleteAclHandle] Delete acl handle that can be used to wait for the result of deleting the acl
495
- #
496
556
  # @raise [RdkafkaError]
497
557
  def delete_acl(resource_type:, resource_name:, resource_pattern_type:, principal:, host:, operation:, permission_type:)
498
558
  closed_admin_check(__method__)
@@ -534,7 +594,7 @@ module Rdkafka
534
594
  # Create and register the handle that we will return to the caller
535
595
  delete_acl_handle = DeleteAclHandle.new
536
596
  delete_acl_handle[:pending] = true
537
- delete_acl_handle[:response] = -1
597
+ delete_acl_handle[:response] = Rdkafka::Bindings::RD_KAFKA_PARTITION_UA
538
598
  DeleteAclHandle.register(delete_acl_handle)
539
599
 
540
600
  admin_options_ptr = @native_kafka.with_inner do |inner|
@@ -567,39 +627,35 @@ module Rdkafka
567
627
 
568
628
  # Describe acls
569
629
  #
570
- # @param resource_type - values of type rd_kafka_ResourceType_t
571
- # https://github.com/confluentinc/librdkafka/blob/292d2a66b9921b783f08147807992e603c7af059/src/rdkafka.h#L7307
572
- # valid values are:
573
- # RD_KAFKA_RESOURCE_TOPIC = 2
574
- # RD_KAFKA_RESOURCE_GROUP = 3
575
- # RD_KAFKA_RESOURCE_BROKER = 4
576
- # @param resource_pattern_type - values of type rd_kafka_ResourcePatternType_t
577
- # https://github.com/confluentinc/librdkafka/blob/292d2a66b9921b783f08147807992e603c7af059/src/rdkafka.h#L7320
578
- # valid values are:
579
- # RD_KAFKA_RESOURCE_PATTERN_MATCH = 2
580
- # RD_KAFKA_RESOURCE_PATTERN_LITERAL = 3
581
- # RD_KAFKA_RESOURCE_PATTERN_PREFIXED = 4
582
- # @param operation - values of type rd_kafka_AclOperation_t
583
- # https://github.com/confluentinc/librdkafka/blob/292d2a66b9921b783f08147807992e603c7af059/src/rdkafka.h#L8403
584
- # valid values are:
585
- # RD_KAFKA_ACL_OPERATION_ALL = 2
586
- # RD_KAFKA_ACL_OPERATION_READ = 3
587
- # RD_KAFKA_ACL_OPERATION_WRITE = 4
588
- # RD_KAFKA_ACL_OPERATION_CREATE = 5
589
- # RD_KAFKA_ACL_OPERATION_DELETE = 6
590
- # RD_KAFKA_ACL_OPERATION_ALTER = 7
591
- # RD_KAFKA_ACL_OPERATION_DESCRIBE = 8
592
- # RD_KAFKA_ACL_OPERATION_CLUSTER_ACTION = 9
593
- # RD_KAFKA_ACL_OPERATION_DESCRIBE_CONFIGS = 10
594
- # RD_KAFKA_ACL_OPERATION_ALTER_CONFIGS = 11
595
- # RD_KAFKA_ACL_OPERATION_IDEMPOTENT_WRITE = 12
596
- # @param permission_type - values of type rd_kafka_AclPermissionType_t
597
- # https://github.com/confluentinc/librdkafka/blob/292d2a66b9921b783f08147807992e603c7af059/src/rdkafka.h#L8435
598
- # valid values are:
599
- # RD_KAFKA_ACL_PERMISSION_TYPE_DENY = 2
600
- # RD_KAFKA_ACL_PERMISSION_TYPE_ALLOW = 3
630
+ # @param resource_type [Integer] rd_kafka_ResourceType_t value:
631
+ # - RD_KAFKA_RESOURCE_TOPIC = 2
632
+ # - RD_KAFKA_RESOURCE_GROUP = 3
633
+ # - RD_KAFKA_RESOURCE_BROKER = 4
634
+ # @param resource_name [String, nil] name of the resource or nil for any
635
+ # @param resource_pattern_type [Integer] rd_kafka_ResourcePatternType_t value:
636
+ # - RD_KAFKA_RESOURCE_PATTERN_UNKNOWN = 0
637
+ # - RD_KAFKA_RESOURCE_PATTERN_ANY = 1
638
+ # - RD_KAFKA_RESOURCE_PATTERN_MATCH = 2
639
+ # - RD_KAFKA_RESOURCE_PATTERN_LITERAL = 3
640
+ # - RD_KAFKA_RESOURCE_PATTERN_PREFIXED = 4
641
+ # @param principal [String, nil] principal (e.g., "User:alice") or nil for any
642
+ # @param host [String, nil] host address or nil for any
643
+ # @param operation [Integer] rd_kafka_AclOperation_t value:
644
+ # - RD_KAFKA_ACL_OPERATION_ALL = 2
645
+ # - RD_KAFKA_ACL_OPERATION_READ = 3
646
+ # - RD_KAFKA_ACL_OPERATION_WRITE = 4
647
+ # - RD_KAFKA_ACL_OPERATION_CREATE = 5
648
+ # - RD_KAFKA_ACL_OPERATION_DELETE = 6
649
+ # - RD_KAFKA_ACL_OPERATION_ALTER = 7
650
+ # - RD_KAFKA_ACL_OPERATION_DESCRIBE = 8
651
+ # - RD_KAFKA_ACL_OPERATION_CLUSTER_ACTION = 9
652
+ # - RD_KAFKA_ACL_OPERATION_DESCRIBE_CONFIGS = 10
653
+ # - RD_KAFKA_ACL_OPERATION_ALTER_CONFIGS = 11
654
+ # - RD_KAFKA_ACL_OPERATION_IDEMPOTENT_WRITE = 12
655
+ # @param permission_type [Integer] rd_kafka_AclPermissionType_t value:
656
+ # - RD_KAFKA_ACL_PERMISSION_TYPE_DENY = 2
657
+ # - RD_KAFKA_ACL_PERMISSION_TYPE_ALLOW = 3
601
658
  # @return [DescribeAclHandle] Describe acl handle that can be used to wait for the result of fetching acls
602
- #
603
659
  # @raise [RdkafkaError]
604
660
  def describe_acl(resource_type:, resource_name:, resource_pattern_type:, principal:, host:, operation:, permission_type:)
605
661
  closed_admin_check(__method__)
@@ -634,7 +690,7 @@ module Rdkafka
634
690
  # Create and register the handle that we will return to the caller
635
691
  describe_acl_handle = DescribeAclHandle.new
636
692
  describe_acl_handle[:pending] = true
637
- describe_acl_handle[:response] = -1
693
+ describe_acl_handle[:response] = Rdkafka::Bindings::RD_KAFKA_PARTITION_UA
638
694
  DescribeAclHandle.register(describe_acl_handle)
639
695
 
640
696
  admin_options_ptr = @native_kafka.with_inner do |inner|
@@ -680,7 +736,7 @@ module Rdkafka
680
736
 
681
737
  handle = DescribeConfigsHandle.new
682
738
  handle[:pending] = true
683
- handle[:response] = -1
739
+ handle[:response] = Rdkafka::Bindings::RD_KAFKA_PARTITION_UA
684
740
 
685
741
  queue_ptr = @native_kafka.with_inner do |inner|
686
742
  Rdkafka::Bindings.rd_kafka_queue_get_background(inner)
@@ -727,10 +783,12 @@ module Rdkafka
727
783
 
728
784
  raise
729
785
  ensure
730
- Rdkafka::Bindings.rd_kafka_ConfigResource_destroy_array(
731
- configs_array_ptr,
732
- pointer_array.size
733
- ) if configs_array_ptr
786
+ if configs_array_ptr
787
+ Rdkafka::Bindings.rd_kafka_ConfigResource_destroy_array(
788
+ configs_array_ptr,
789
+ pointer_array.size
790
+ )
791
+ end
734
792
  end
735
793
 
736
794
  handle
@@ -753,7 +811,7 @@ module Rdkafka
753
811
 
754
812
  handle = IncrementalAlterConfigsHandle.new
755
813
  handle[:pending] = true
756
- handle[:response] = -1
814
+ handle[:response] = Rdkafka::Bindings::RD_KAFKA_PARTITION_UA
757
815
 
758
816
  queue_ptr = @native_kafka.with_inner do |inner|
759
817
  Rdkafka::Bindings.rd_kafka_queue_get_background(inner)
@@ -798,7 +856,6 @@ module Rdkafka
798
856
  configs_array_ptr = FFI::MemoryPointer.new(:pointer, pointer_array.size)
799
857
  configs_array_ptr.write_array_of_pointer(pointer_array)
800
858
 
801
-
802
859
  begin
803
860
  @native_kafka.with_inner do |inner|
804
861
  Rdkafka::Bindings.rd_kafka_IncrementalAlterConfigs(
@@ -814,10 +871,12 @@ module Rdkafka
814
871
 
815
872
  raise
816
873
  ensure
817
- Rdkafka::Bindings.rd_kafka_ConfigResource_destroy_array(
818
- configs_array_ptr,
819
- pointer_array.size
820
- ) if configs_array_ptr
874
+ if configs_array_ptr
875
+ Rdkafka::Bindings.rd_kafka_ConfigResource_destroy_array(
876
+ configs_array_ptr,
877
+ pointer_array.size
878
+ )
879
+ end
821
880
  end
822
881
 
823
882
  handle
@@ -825,6 +884,9 @@ module Rdkafka
825
884
 
826
885
  private
827
886
 
887
+ # Checks if the admin is closed and raises an error if so
888
+ # @param method [Symbol] name of the calling method for error context
889
+ # @raise [ClosedAdminError] when the admin is closed
828
890
  def closed_admin_check(method)
829
891
  raise Rdkafka::ClosedAdminError.new(method) if closed?
830
892
  end