karafka-rdkafka 0.20.0.rc3-x86_64-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 (99) hide show
  1. checksums.yaml +7 -0
  2. data/.github/CODEOWNERS +3 -0
  3. data/.github/FUNDING.yml +1 -0
  4. data/.github/workflows/ci_linux_x86_64_gnu.yml +248 -0
  5. data/.github/workflows/ci_macos_arm64.yml +301 -0
  6. data/.github/workflows/push_linux_x86_64_gnu.yml +60 -0
  7. data/.github/workflows/push_ruby.yml +37 -0
  8. data/.github/workflows/verify-action-pins.yml +16 -0
  9. data/.gitignore +15 -0
  10. data/.rspec +2 -0
  11. data/.ruby-gemset +1 -0
  12. data/.ruby-version +1 -0
  13. data/.yardopts +2 -0
  14. data/CHANGELOG.md +323 -0
  15. data/Gemfile +5 -0
  16. data/MIT-LICENSE +22 -0
  17. data/README.md +177 -0
  18. data/Rakefile +96 -0
  19. data/docker-compose.yml +25 -0
  20. data/ext/README.md +19 -0
  21. data/ext/Rakefile +131 -0
  22. data/ext/build_common.sh +361 -0
  23. data/ext/build_linux_x86_64_gnu.sh +306 -0
  24. data/ext/build_macos_arm64.sh +550 -0
  25. data/ext/librdkafka.so +0 -0
  26. data/karafka-rdkafka.gemspec +61 -0
  27. data/lib/rdkafka/abstract_handle.rb +116 -0
  28. data/lib/rdkafka/admin/acl_binding_result.rb +51 -0
  29. data/lib/rdkafka/admin/config_binding_result.rb +30 -0
  30. data/lib/rdkafka/admin/config_resource_binding_result.rb +18 -0
  31. data/lib/rdkafka/admin/create_acl_handle.rb +28 -0
  32. data/lib/rdkafka/admin/create_acl_report.rb +24 -0
  33. data/lib/rdkafka/admin/create_partitions_handle.rb +30 -0
  34. data/lib/rdkafka/admin/create_partitions_report.rb +6 -0
  35. data/lib/rdkafka/admin/create_topic_handle.rb +32 -0
  36. data/lib/rdkafka/admin/create_topic_report.rb +24 -0
  37. data/lib/rdkafka/admin/delete_acl_handle.rb +30 -0
  38. data/lib/rdkafka/admin/delete_acl_report.rb +23 -0
  39. data/lib/rdkafka/admin/delete_groups_handle.rb +28 -0
  40. data/lib/rdkafka/admin/delete_groups_report.rb +24 -0
  41. data/lib/rdkafka/admin/delete_topic_handle.rb +32 -0
  42. data/lib/rdkafka/admin/delete_topic_report.rb +24 -0
  43. data/lib/rdkafka/admin/describe_acl_handle.rb +30 -0
  44. data/lib/rdkafka/admin/describe_acl_report.rb +24 -0
  45. data/lib/rdkafka/admin/describe_configs_handle.rb +33 -0
  46. data/lib/rdkafka/admin/describe_configs_report.rb +48 -0
  47. data/lib/rdkafka/admin/incremental_alter_configs_handle.rb +33 -0
  48. data/lib/rdkafka/admin/incremental_alter_configs_report.rb +48 -0
  49. data/lib/rdkafka/admin.rb +832 -0
  50. data/lib/rdkafka/bindings.rb +582 -0
  51. data/lib/rdkafka/callbacks.rb +415 -0
  52. data/lib/rdkafka/config.rb +398 -0
  53. data/lib/rdkafka/consumer/headers.rb +79 -0
  54. data/lib/rdkafka/consumer/message.rb +86 -0
  55. data/lib/rdkafka/consumer/partition.rb +57 -0
  56. data/lib/rdkafka/consumer/topic_partition_list.rb +190 -0
  57. data/lib/rdkafka/consumer.rb +663 -0
  58. data/lib/rdkafka/error.rb +201 -0
  59. data/lib/rdkafka/helpers/oauth.rb +58 -0
  60. data/lib/rdkafka/helpers/time.rb +14 -0
  61. data/lib/rdkafka/metadata.rb +115 -0
  62. data/lib/rdkafka/native_kafka.rb +139 -0
  63. data/lib/rdkafka/producer/delivery_handle.rb +48 -0
  64. data/lib/rdkafka/producer/delivery_report.rb +45 -0
  65. data/lib/rdkafka/producer/partitions_count_cache.rb +216 -0
  66. data/lib/rdkafka/producer.rb +492 -0
  67. data/lib/rdkafka/version.rb +7 -0
  68. data/lib/rdkafka.rb +54 -0
  69. data/renovate.json +92 -0
  70. data/spec/rdkafka/abstract_handle_spec.rb +117 -0
  71. data/spec/rdkafka/admin/create_acl_handle_spec.rb +56 -0
  72. data/spec/rdkafka/admin/create_acl_report_spec.rb +18 -0
  73. data/spec/rdkafka/admin/create_topic_handle_spec.rb +54 -0
  74. data/spec/rdkafka/admin/create_topic_report_spec.rb +16 -0
  75. data/spec/rdkafka/admin/delete_acl_handle_spec.rb +85 -0
  76. data/spec/rdkafka/admin/delete_acl_report_spec.rb +72 -0
  77. data/spec/rdkafka/admin/delete_topic_handle_spec.rb +54 -0
  78. data/spec/rdkafka/admin/delete_topic_report_spec.rb +16 -0
  79. data/spec/rdkafka/admin/describe_acl_handle_spec.rb +85 -0
  80. data/spec/rdkafka/admin/describe_acl_report_spec.rb +73 -0
  81. data/spec/rdkafka/admin_spec.rb +769 -0
  82. data/spec/rdkafka/bindings_spec.rb +222 -0
  83. data/spec/rdkafka/callbacks_spec.rb +20 -0
  84. data/spec/rdkafka/config_spec.rb +258 -0
  85. data/spec/rdkafka/consumer/headers_spec.rb +73 -0
  86. data/spec/rdkafka/consumer/message_spec.rb +139 -0
  87. data/spec/rdkafka/consumer/partition_spec.rb +57 -0
  88. data/spec/rdkafka/consumer/topic_partition_list_spec.rb +248 -0
  89. data/spec/rdkafka/consumer_spec.rb +1299 -0
  90. data/spec/rdkafka/error_spec.rb +95 -0
  91. data/spec/rdkafka/metadata_spec.rb +79 -0
  92. data/spec/rdkafka/native_kafka_spec.rb +130 -0
  93. data/spec/rdkafka/producer/delivery_handle_spec.rb +60 -0
  94. data/spec/rdkafka/producer/delivery_report_spec.rb +25 -0
  95. data/spec/rdkafka/producer/partitions_count_cache_spec.rb +359 -0
  96. data/spec/rdkafka/producer/partitions_count_spec.rb +359 -0
  97. data/spec/rdkafka/producer_spec.rb +1234 -0
  98. data/spec/spec_helper.rb +181 -0
  99. metadata +244 -0
@@ -0,0 +1,181 @@
1
+ # frozen_string_literal: true
2
+
3
+ unless ENV["CI"] == "true"
4
+ require "simplecov"
5
+ SimpleCov.start do
6
+ add_filter "/spec/"
7
+ end
8
+ end
9
+
10
+ require "pry"
11
+ require "rspec"
12
+ require "rdkafka"
13
+ require "timeout"
14
+ require "securerandom"
15
+
16
+ def rdkafka_base_config
17
+ {
18
+ :"api.version.request" => false,
19
+ :"broker.version.fallback" => "1.0",
20
+ :"bootstrap.servers" => "127.0.0.1:9092",
21
+ # Display statistics and refresh often just to cover those in specs
22
+ :'statistics.interval.ms' => 1_000,
23
+ :'topic.metadata.refresh.interval.ms' => 1_000
24
+ }
25
+ end
26
+
27
+ def rdkafka_config(config_overrides={})
28
+ # Generate the base config
29
+ config = rdkafka_base_config
30
+ # Merge overrides
31
+ config.merge!(config_overrides)
32
+ # Return it
33
+ Rdkafka::Config.new(config)
34
+ end
35
+
36
+ def rdkafka_consumer_config(config_overrides={})
37
+ # Generate the base config
38
+ config = rdkafka_base_config
39
+ # Add consumer specific fields to it
40
+ config[:"auto.offset.reset"] = "earliest"
41
+ config[:"enable.partition.eof"] = false
42
+ config[:"group.id"] = "ruby-test-#{SecureRandom.uuid}"
43
+ # Enable debug mode if required
44
+ if ENV["DEBUG_CONSUMER"]
45
+ config[:debug] = "cgrp,topic,fetch"
46
+ end
47
+ # Merge overrides
48
+ config.merge!(config_overrides)
49
+ # Return it
50
+ Rdkafka::Config.new(config)
51
+ end
52
+
53
+ def rdkafka_producer_config(config_overrides={})
54
+ # Generate the base config
55
+ config = rdkafka_base_config
56
+ # Enable debug mode if required
57
+ if ENV["DEBUG_PRODUCER"]
58
+ config[:debug] = "broker,topic,msg"
59
+ end
60
+ # Merge overrides
61
+ config.merge!(config_overrides)
62
+ # Return it
63
+ Rdkafka::Config.new(config)
64
+ end
65
+
66
+ def new_native_client
67
+ config = rdkafka_consumer_config
68
+ config.send(:native_kafka, config.send(:native_config), :rd_kafka_producer)
69
+ end
70
+
71
+ def new_native_topic(topic_name="topic_name", native_client: )
72
+ Rdkafka::Bindings.rd_kafka_topic_new(
73
+ native_client,
74
+ topic_name,
75
+ nil
76
+ )
77
+ end
78
+
79
+ def wait_for_message(topic:, delivery_report:, timeout_in_seconds: 30, consumer: nil)
80
+ new_consumer = consumer.nil?
81
+ consumer ||= rdkafka_consumer_config.consumer
82
+ consumer.subscribe(topic)
83
+ timeout = Time.now.to_i + timeout_in_seconds
84
+ loop do
85
+ if timeout <= Time.now.to_i
86
+ raise "Timeout of #{timeout_in_seconds} seconds reached in wait_for_message"
87
+ end
88
+ message = consumer.poll(100)
89
+ if message &&
90
+ message.partition == delivery_report.partition &&
91
+ message.offset == delivery_report.offset
92
+ return message
93
+ end
94
+ end
95
+ ensure
96
+ consumer.close if new_consumer
97
+ end
98
+
99
+ def wait_for_assignment(consumer)
100
+ 10.times do
101
+ break if !consumer.assignment.empty?
102
+ sleep 1
103
+ end
104
+ end
105
+
106
+ def wait_for_unassignment(consumer)
107
+ 10.times do
108
+ break if consumer.assignment.empty?
109
+ sleep 1
110
+ end
111
+ end
112
+
113
+ def notify_listener(listener, &block)
114
+ # 1. subscribe and poll
115
+ consumer.subscribe("consume_test_topic")
116
+ wait_for_assignment(consumer)
117
+ consumer.poll(100)
118
+
119
+ block.call if block
120
+
121
+ # 2. unsubscribe
122
+ consumer.unsubscribe
123
+ wait_for_unassignment(consumer)
124
+ consumer.close
125
+ end
126
+
127
+ RSpec.configure do |config|
128
+ config.filter_run focus: true
129
+ config.run_all_when_everything_filtered = true
130
+
131
+ config.before(:each) do
132
+ Rdkafka::Config.statistics_callback = nil
133
+ # We need to clear it so state does not leak between specs
134
+ Rdkafka::Producer.partitions_count_cache.to_h.clear
135
+ end
136
+
137
+ config.before(:suite) do
138
+ admin = rdkafka_config.admin
139
+ {
140
+ consume_test_topic: 3,
141
+ empty_test_topic: 3,
142
+ load_test_topic: 3,
143
+ produce_test_topic: 3,
144
+ rake_test_topic: 3,
145
+ watermarks_test_topic: 3,
146
+ partitioner_test_topic: 25,
147
+ example_topic: 1
148
+ }.each do |topic, partitions|
149
+ create_topic_handle = admin.create_topic(topic.to_s, partitions, 1)
150
+ begin
151
+ create_topic_handle.wait(max_wait_timeout: 1.0)
152
+ rescue Rdkafka::RdkafkaError => ex
153
+ raise unless ex.message.match?(/topic_already_exists/)
154
+ end
155
+ end
156
+ admin.close
157
+ end
158
+
159
+ config.around(:each) do |example|
160
+ # Timeout specs after a minute. If they take longer
161
+ # they are probably stuck
162
+ Timeout::timeout(60) do
163
+ example.run
164
+ end
165
+ end
166
+ end
167
+
168
+ class RdKafkaTestConsumer
169
+ def self.with
170
+ consumer = Rdkafka::Bindings.rd_kafka_new(
171
+ :rd_kafka_consumer,
172
+ nil,
173
+ nil,
174
+ 0
175
+ )
176
+ yield consumer
177
+ ensure
178
+ Rdkafka::Bindings.rd_kafka_consumer_close(consumer)
179
+ Rdkafka::Bindings.rd_kafka_destroy(consumer)
180
+ end
181
+ end
metadata ADDED
@@ -0,0 +1,244 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: karafka-rdkafka
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.20.0.rc3
5
+ platform: x86_64-linux-gnu
6
+ authors:
7
+ - Thijs Cadier
8
+ - Maciej Mensfeld
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 1980-01-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: ffi
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.15'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.15'
27
+ - !ruby/object:Gem::Dependency
28
+ name: mini_portile2
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.6'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2.6'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">"
46
+ - !ruby/object:Gem::Version
47
+ version: '12'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">"
53
+ - !ruby/object:Gem::Version
54
+ version: '12'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.5'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.5'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: simplecov
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: Modern Kafka client library for Ruby based on librdkafka
112
+ email:
113
+ - contact@karafka.io
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - ".github/CODEOWNERS"
119
+ - ".github/FUNDING.yml"
120
+ - ".github/workflows/ci_linux_x86_64_gnu.yml"
121
+ - ".github/workflows/ci_macos_arm64.yml"
122
+ - ".github/workflows/push_linux_x86_64_gnu.yml"
123
+ - ".github/workflows/push_ruby.yml"
124
+ - ".github/workflows/verify-action-pins.yml"
125
+ - ".gitignore"
126
+ - ".rspec"
127
+ - ".ruby-gemset"
128
+ - ".ruby-version"
129
+ - ".yardopts"
130
+ - CHANGELOG.md
131
+ - Gemfile
132
+ - MIT-LICENSE
133
+ - README.md
134
+ - Rakefile
135
+ - docker-compose.yml
136
+ - ext/README.md
137
+ - ext/Rakefile
138
+ - ext/build_common.sh
139
+ - ext/build_linux_x86_64_gnu.sh
140
+ - ext/build_macos_arm64.sh
141
+ - ext/librdkafka.so
142
+ - karafka-rdkafka.gemspec
143
+ - lib/rdkafka.rb
144
+ - lib/rdkafka/abstract_handle.rb
145
+ - lib/rdkafka/admin.rb
146
+ - lib/rdkafka/admin/acl_binding_result.rb
147
+ - lib/rdkafka/admin/config_binding_result.rb
148
+ - lib/rdkafka/admin/config_resource_binding_result.rb
149
+ - lib/rdkafka/admin/create_acl_handle.rb
150
+ - lib/rdkafka/admin/create_acl_report.rb
151
+ - lib/rdkafka/admin/create_partitions_handle.rb
152
+ - lib/rdkafka/admin/create_partitions_report.rb
153
+ - lib/rdkafka/admin/create_topic_handle.rb
154
+ - lib/rdkafka/admin/create_topic_report.rb
155
+ - lib/rdkafka/admin/delete_acl_handle.rb
156
+ - lib/rdkafka/admin/delete_acl_report.rb
157
+ - lib/rdkafka/admin/delete_groups_handle.rb
158
+ - lib/rdkafka/admin/delete_groups_report.rb
159
+ - lib/rdkafka/admin/delete_topic_handle.rb
160
+ - lib/rdkafka/admin/delete_topic_report.rb
161
+ - lib/rdkafka/admin/describe_acl_handle.rb
162
+ - lib/rdkafka/admin/describe_acl_report.rb
163
+ - lib/rdkafka/admin/describe_configs_handle.rb
164
+ - lib/rdkafka/admin/describe_configs_report.rb
165
+ - lib/rdkafka/admin/incremental_alter_configs_handle.rb
166
+ - lib/rdkafka/admin/incremental_alter_configs_report.rb
167
+ - lib/rdkafka/bindings.rb
168
+ - lib/rdkafka/callbacks.rb
169
+ - lib/rdkafka/config.rb
170
+ - lib/rdkafka/consumer.rb
171
+ - lib/rdkafka/consumer/headers.rb
172
+ - lib/rdkafka/consumer/message.rb
173
+ - lib/rdkafka/consumer/partition.rb
174
+ - lib/rdkafka/consumer/topic_partition_list.rb
175
+ - lib/rdkafka/error.rb
176
+ - lib/rdkafka/helpers/oauth.rb
177
+ - lib/rdkafka/helpers/time.rb
178
+ - lib/rdkafka/metadata.rb
179
+ - lib/rdkafka/native_kafka.rb
180
+ - lib/rdkafka/producer.rb
181
+ - lib/rdkafka/producer/delivery_handle.rb
182
+ - lib/rdkafka/producer/delivery_report.rb
183
+ - lib/rdkafka/producer/partitions_count_cache.rb
184
+ - lib/rdkafka/version.rb
185
+ - renovate.json
186
+ - spec/rdkafka/abstract_handle_spec.rb
187
+ - spec/rdkafka/admin/create_acl_handle_spec.rb
188
+ - spec/rdkafka/admin/create_acl_report_spec.rb
189
+ - spec/rdkafka/admin/create_topic_handle_spec.rb
190
+ - spec/rdkafka/admin/create_topic_report_spec.rb
191
+ - spec/rdkafka/admin/delete_acl_handle_spec.rb
192
+ - spec/rdkafka/admin/delete_acl_report_spec.rb
193
+ - spec/rdkafka/admin/delete_topic_handle_spec.rb
194
+ - spec/rdkafka/admin/delete_topic_report_spec.rb
195
+ - spec/rdkafka/admin/describe_acl_handle_spec.rb
196
+ - spec/rdkafka/admin/describe_acl_report_spec.rb
197
+ - spec/rdkafka/admin_spec.rb
198
+ - spec/rdkafka/bindings_spec.rb
199
+ - spec/rdkafka/callbacks_spec.rb
200
+ - spec/rdkafka/config_spec.rb
201
+ - spec/rdkafka/consumer/headers_spec.rb
202
+ - spec/rdkafka/consumer/message_spec.rb
203
+ - spec/rdkafka/consumer/partition_spec.rb
204
+ - spec/rdkafka/consumer/topic_partition_list_spec.rb
205
+ - spec/rdkafka/consumer_spec.rb
206
+ - spec/rdkafka/error_spec.rb
207
+ - spec/rdkafka/metadata_spec.rb
208
+ - spec/rdkafka/native_kafka_spec.rb
209
+ - spec/rdkafka/producer/delivery_handle_spec.rb
210
+ - spec/rdkafka/producer/delivery_report_spec.rb
211
+ - spec/rdkafka/producer/partitions_count_cache_spec.rb
212
+ - spec/rdkafka/producer/partitions_count_spec.rb
213
+ - spec/rdkafka/producer_spec.rb
214
+ - spec/spec_helper.rb
215
+ licenses:
216
+ - MIT
217
+ metadata:
218
+ funding_uri: https://karafka.io/#become-pro
219
+ homepage_uri: https://karafka.io
220
+ changelog_uri: https://karafka.io/docs/Changelog-Karafka-Rdkafka/
221
+ bug_tracker_uri: https://github.com/karafka/karafka-rdkafka/issues
222
+ source_code_uri: https://github.com/karafka/karafka-rdkafka
223
+ documentation_uri: https://karafka.io/docs
224
+ rubygems_mfa_required: 'true'
225
+ rdoc_options: []
226
+ require_paths:
227
+ - lib
228
+ required_ruby_version: !ruby/object:Gem::Requirement
229
+ requirements:
230
+ - - ">="
231
+ - !ruby/object:Gem::Version
232
+ version: '3.1'
233
+ required_rubygems_version: !ruby/object:Gem::Requirement
234
+ requirements:
235
+ - - ">="
236
+ - !ruby/object:Gem::Version
237
+ version: '0'
238
+ requirements: []
239
+ rubygems_version: 3.6.7
240
+ specification_version: 4
241
+ summary: The rdkafka gem is a modern Kafka client library for Ruby based on librdkafka.
242
+ It wraps the production-ready C client using the ffi gem and targets Kafka 1.0+
243
+ and Ruby 2.7+.
244
+ test_files: []