@platformatic/rdkafka 4.0.1 → 4.1.0

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 (294) hide show
  1. package/README.md +5 -5
  2. package/bench/seed.sh +0 -0
  3. package/binding.gyp +8 -1
  4. package/ci/prepublish.js +0 -1
  5. package/config.d.ts +126 -10
  6. package/configure +0 -0
  7. package/deps/librdkafka/.semaphore/run-all-tests.yml +77 -0
  8. package/deps/librdkafka/.semaphore/semaphore-integration.yml +250 -0
  9. package/deps/librdkafka/.semaphore/semaphore.yml +67 -44
  10. package/deps/librdkafka/.semaphore/verify-linux-packages.yml +41 -0
  11. package/deps/librdkafka/CHANGELOG.md +471 -1
  12. package/deps/librdkafka/CONFIGURATION.md +29 -9
  13. package/deps/librdkafka/INTRODUCTION.md +909 -601
  14. package/deps/librdkafka/LICENSES.txt +592 -1
  15. package/deps/librdkafka/Makefile +2 -1
  16. package/deps/librdkafka/_mkltmpuuWEwa.c +13 -0
  17. package/deps/librdkafka/configure +0 -0
  18. package/deps/librdkafka/debian/rules +0 -0
  19. package/deps/librdkafka/dev-conf.sh +0 -0
  20. package/deps/librdkafka/examples/consumer.c +18 -8
  21. package/deps/librdkafka/examples/describe_consumer_groups.c +25 -6
  22. package/deps/librdkafka/examples/incremental_alter_configs.c +4 -5
  23. package/deps/librdkafka/examples/kafkatest_verifiable_client.cpp +26 -42
  24. package/deps/librdkafka/examples/openssl_engine_example.cpp +3 -4
  25. package/deps/librdkafka/examples/producer.cpp +2 -2
  26. package/deps/librdkafka/examples/user_scram.c +4 -5
  27. package/deps/librdkafka/examples/win_ssl_cert_store.cpp +4 -3
  28. package/deps/librdkafka/lds-gen.py +0 -0
  29. package/deps/librdkafka/mklove/Makefile.base +0 -0
  30. package/deps/librdkafka/packaging/RELEASE.md +8 -0
  31. package/deps/librdkafka/packaging/alpine/build-alpine.sh +0 -0
  32. package/deps/librdkafka/packaging/cp/README.md +4 -1
  33. package/deps/librdkafka/packaging/cp/check_features.c +12 -4
  34. package/deps/librdkafka/packaging/cp/verify-deb.sh +6 -6
  35. package/deps/librdkafka/packaging/cp/verify-packages.sh +52 -31
  36. package/deps/librdkafka/packaging/cp/verify-rpm.sh +6 -13
  37. package/deps/librdkafka/packaging/debian/rules +0 -0
  38. package/deps/librdkafka/packaging/get_version.py +0 -0
  39. package/deps/librdkafka/packaging/homebrew/brew-update-pr.sh +0 -0
  40. package/deps/librdkafka/packaging/mingw-w64/{travis-before-install.sh → export-variables.sh} +0 -7
  41. package/deps/librdkafka/packaging/mingw-w64/semaphoreci-build.sh +1 -1
  42. package/deps/librdkafka/packaging/nuget/artifact.py +0 -0
  43. package/deps/librdkafka/packaging/nuget/cleanup-s3.py +0 -0
  44. package/deps/librdkafka/packaging/nuget/nuget.sh +0 -0
  45. package/deps/librdkafka/packaging/nuget/packaging.py +0 -0
  46. package/deps/librdkafka/packaging/nuget/push-to-nuget.sh +0 -0
  47. package/deps/librdkafka/packaging/nuget/release.py +0 -0
  48. package/deps/librdkafka/packaging/nuget/requirements.txt +3 -3
  49. package/deps/librdkafka/packaging/rpm/mock-on-docker.sh +0 -0
  50. package/deps/librdkafka/packaging/rpm/tests/run-test.sh +0 -0
  51. package/deps/librdkafka/packaging/rpm/tests/test-on-docker.sh +0 -0
  52. package/deps/librdkafka/packaging/tools/build-configurations-checks.sh +3 -1
  53. package/deps/librdkafka/packaging/tools/build-deb-package.sh +0 -0
  54. package/deps/librdkafka/packaging/tools/build-debian.sh +0 -0
  55. package/deps/librdkafka/packaging/tools/build-manylinux.sh +0 -0
  56. package/deps/librdkafka/packaging/tools/build-release-artifacts.sh +0 -0
  57. package/deps/librdkafka/packaging/tools/distro-build.sh +0 -0
  58. package/deps/librdkafka/packaging/tools/gh-release-checksums.py +0 -0
  59. package/deps/librdkafka/packaging/tools/rdutcoverage.sh +0 -0
  60. package/deps/librdkafka/packaging/tools/run-in-docker.sh +28 -0
  61. package/deps/librdkafka/packaging/tools/run-integration-tests.sh +31 -0
  62. package/deps/librdkafka/packaging/tools/run-style-check.sh +4 -0
  63. package/deps/librdkafka/packaging/tools/style-format.sh +6 -5
  64. package/deps/librdkafka/packaging/tools/update_rpcs_max_versions.py +100 -0
  65. package/deps/librdkafka/service.yml +154 -0
  66. package/deps/librdkafka/src/generate_proto.sh +0 -0
  67. package/deps/librdkafka/src/rd.h +145 -2
  68. package/deps/librdkafka/src/rdaddr.h +6 -7
  69. package/deps/librdkafka/src/rdatomic.h +15 -11
  70. package/deps/librdkafka/src/rdavg.h +3 -2
  71. package/deps/librdkafka/src/rdbase64.c +33 -2
  72. package/deps/librdkafka/src/rdbase64.h +2 -0
  73. package/deps/librdkafka/src/rdendian.h +10 -9
  74. package/deps/librdkafka/src/rdhttp.c +418 -100
  75. package/deps/librdkafka/src/rdhttp.h +23 -5
  76. package/deps/librdkafka/src/rdkafka.c +299 -145
  77. package/deps/librdkafka/src/rdkafka.h +89 -6
  78. package/deps/librdkafka/src/rdkafka_admin.c +482 -105
  79. package/deps/librdkafka/src/rdkafka_admin.h +42 -0
  80. package/deps/librdkafka/src/rdkafka_broker.c +463 -312
  81. package/deps/librdkafka/src/rdkafka_broker.h +68 -10
  82. package/deps/librdkafka/src/rdkafka_buf.c +8 -5
  83. package/deps/librdkafka/src/rdkafka_buf.h +4 -3
  84. package/deps/librdkafka/src/rdkafka_cert.c +25 -1
  85. package/deps/librdkafka/src/rdkafka_cert.h +4 -3
  86. package/deps/librdkafka/src/rdkafka_cgrp.c +468 -143
  87. package/deps/librdkafka/src/rdkafka_cgrp.h +36 -2
  88. package/deps/librdkafka/src/rdkafka_conf.c +526 -102
  89. package/deps/librdkafka/src/rdkafka_conf.h +68 -4
  90. package/deps/librdkafka/src/rdkafka_feature.c +472 -35
  91. package/deps/librdkafka/src/rdkafka_feature.h +2 -0
  92. package/deps/librdkafka/src/rdkafka_fetcher.c +22 -2
  93. package/deps/librdkafka/src/rdkafka_fetcher.h +2 -2
  94. package/deps/librdkafka/src/rdkafka_int.h +84 -46
  95. package/deps/librdkafka/src/rdkafka_metadata.c +221 -136
  96. package/deps/librdkafka/src/rdkafka_metadata.h +15 -11
  97. package/deps/librdkafka/src/rdkafka_metadata_cache.c +279 -73
  98. package/deps/librdkafka/src/rdkafka_mock.c +795 -19
  99. package/deps/librdkafka/src/rdkafka_mock.h +119 -0
  100. package/deps/librdkafka/src/rdkafka_mock_cgrp.c +1298 -132
  101. package/deps/librdkafka/src/rdkafka_mock_handlers.c +345 -49
  102. package/deps/librdkafka/src/rdkafka_mock_int.h +180 -61
  103. package/deps/librdkafka/src/rdkafka_msg.c +35 -19
  104. package/deps/librdkafka/src/rdkafka_msg.h +3 -3
  105. package/deps/librdkafka/src/rdkafka_msgset_writer.c +14 -10
  106. package/deps/librdkafka/src/rdkafka_offset.c +33 -5
  107. package/deps/librdkafka/src/rdkafka_op.c +1 -1
  108. package/deps/librdkafka/src/rdkafka_op.h +45 -21
  109. package/deps/librdkafka/src/rdkafka_partition.c +118 -23
  110. package/deps/librdkafka/src/rdkafka_partition.h +16 -7
  111. package/deps/librdkafka/src/rdkafka_proto.h +4 -1
  112. package/deps/librdkafka/src/rdkafka_protocol.h +1 -0
  113. package/deps/librdkafka/src/rdkafka_queue.c +125 -48
  114. package/deps/librdkafka/src/rdkafka_queue.h +19 -0
  115. package/deps/librdkafka/src/rdkafka_range_assignor.c +1 -1
  116. package/deps/librdkafka/src/rdkafka_request.c +336 -64
  117. package/deps/librdkafka/src/rdkafka_request.h +24 -1
  118. package/deps/librdkafka/src/rdkafka_sasl.c +5 -3
  119. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer.c +14 -10
  120. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer_oidc.c +1166 -89
  121. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer_oidc.h +13 -3
  122. package/deps/librdkafka/src/rdkafka_sasl_plain.c +3 -3
  123. package/deps/librdkafka/src/rdkafka_sasl_scram.c +4 -3
  124. package/deps/librdkafka/src/rdkafka_ssl.c +306 -81
  125. package/deps/librdkafka/src/rdkafka_ssl.h +22 -0
  126. package/deps/librdkafka/src/rdkafka_sticky_assignor.c +4 -0
  127. package/deps/librdkafka/src/rdkafka_telemetry.c +80 -23
  128. package/deps/librdkafka/src/rdkafka_telemetry_encode.c +5 -1
  129. package/deps/librdkafka/src/rdkafka_telemetry_encode.h +20 -20
  130. package/deps/librdkafka/src/rdkafka_topic.c +220 -137
  131. package/deps/librdkafka/src/rdkafka_topic.h +14 -8
  132. package/deps/librdkafka/src/rdkafka_transport.c +59 -47
  133. package/deps/librdkafka/src/rdkafka_transport.h +5 -0
  134. package/deps/librdkafka/src/rdkafka_txnmgr.c +6 -1
  135. package/deps/librdkafka/src/rdmap.c +6 -1
  136. package/deps/librdkafka/src/rdrand.c +11 -1
  137. package/deps/librdkafka/src/rdtime.h +48 -17
  138. package/deps/librdkafka/src/rdunittest.c +42 -25
  139. package/deps/librdkafka/src/rdunittest.h +2 -0
  140. package/deps/librdkafka/src/rdwin32.h +1 -1
  141. package/deps/librdkafka/src/regexp.c +47 -42
  142. package/deps/librdkafka/src/tinycthread_extra.c +45 -21
  143. package/deps/librdkafka/src/tinycthread_extra.h +7 -3
  144. package/deps/librdkafka/src-cpp/rdkafkacpp.h +28 -2
  145. package/deps/librdkafka/tests/0001-multiobj.c +4 -0
  146. package/deps/librdkafka/tests/0004-conf.c +103 -36
  147. package/deps/librdkafka/tests/0009-mock_cluster.c +1 -0
  148. package/deps/librdkafka/tests/0011-produce_batch.c +2 -1
  149. package/deps/librdkafka/tests/0016-client_swname.c +18 -3
  150. package/deps/librdkafka/tests/0017-compression.c +6 -8
  151. package/deps/librdkafka/tests/0018-cgrp_term.c +8 -3
  152. package/deps/librdkafka/tests/0021-rkt_destroy.c +1 -0
  153. package/deps/librdkafka/tests/0022-consume_batch.c +4 -1
  154. package/deps/librdkafka/tests/0026-consume_pause.c +12 -14
  155. package/deps/librdkafka/tests/0028-long_topicnames.c +1 -1
  156. package/deps/librdkafka/tests/0029-assign_offset.c +6 -8
  157. package/deps/librdkafka/tests/0030-offset_commit.c +2 -2
  158. package/deps/librdkafka/tests/0033-regex_subscribe.c +33 -17
  159. package/deps/librdkafka/tests/0034-offset_reset.c +25 -4
  160. package/deps/librdkafka/tests/0036-partial_fetch.c +1 -0
  161. package/deps/librdkafka/tests/0038-performance.c +1 -0
  162. package/deps/librdkafka/tests/0040-io_event.c +11 -5
  163. package/deps/librdkafka/tests/0041-fetch_max_bytes.c +1 -0
  164. package/deps/librdkafka/tests/0044-partition_cnt.c +3 -2
  165. package/deps/librdkafka/tests/0045-subscribe_update.c +284 -20
  166. package/deps/librdkafka/tests/0047-partial_buf_tmout.c +1 -0
  167. package/deps/librdkafka/tests/0048-partitioner.c +1 -1
  168. package/deps/librdkafka/tests/0050-subscribe_adds.c +1 -0
  169. package/deps/librdkafka/tests/0051-assign_adds.c +1 -0
  170. package/deps/librdkafka/tests/0052-msg_timestamps.c +22 -4
  171. package/deps/librdkafka/tests/0053-stats_cb.cpp +12 -20
  172. package/deps/librdkafka/tests/0055-producer_latency.c +176 -3
  173. package/deps/librdkafka/tests/0056-balanced_group_mt.c +6 -2
  174. package/deps/librdkafka/tests/0058-log.cpp +3 -3
  175. package/deps/librdkafka/tests/0059-bsearch.cpp +8 -4
  176. package/deps/librdkafka/tests/0061-consumer_lag.cpp +25 -5
  177. package/deps/librdkafka/tests/0067-empty_topic.cpp +3 -0
  178. package/deps/librdkafka/tests/0068-produce_timeout.c +21 -23
  179. package/deps/librdkafka/tests/0069-consumer_add_parts.c +3 -7
  180. package/deps/librdkafka/tests/0075-retry.c +38 -1
  181. package/deps/librdkafka/tests/0076-produce_retry.c +2 -0
  182. package/deps/librdkafka/tests/0077-compaction.c +8 -2
  183. package/deps/librdkafka/tests/0080-admin_ut.c +34 -4
  184. package/deps/librdkafka/tests/0081-admin.c +455 -155
  185. package/deps/librdkafka/tests/0082-fetch_max_bytes.cpp +4 -0
  186. package/deps/librdkafka/tests/0083-cb_event.c +8 -3
  187. package/deps/librdkafka/tests/0084-destroy_flags.c +14 -18
  188. package/deps/librdkafka/tests/0085-headers.cpp +4 -0
  189. package/deps/librdkafka/tests/0086-purge.c +40 -7
  190. package/deps/librdkafka/tests/0088-produce_metadata_timeout.c +1 -1
  191. package/deps/librdkafka/tests/0089-max_poll_interval.c +12 -7
  192. package/deps/librdkafka/tests/0090-idempotence.c +1 -2
  193. package/deps/librdkafka/tests/0091-max_poll_interval_timeout.c +5 -7
  194. package/deps/librdkafka/tests/0092-mixed_msgver.c +6 -0
  195. package/deps/librdkafka/tests/0093-holb.c +8 -5
  196. package/deps/librdkafka/tests/0094-idempotence_msg_timeout.c +1 -0
  197. package/deps/librdkafka/tests/0097-ssl_verify.cpp +262 -70
  198. package/deps/librdkafka/tests/0098-consumer-txn.cpp +16 -16
  199. package/deps/librdkafka/tests/0099-commit_metadata.c +1 -1
  200. package/deps/librdkafka/tests/0101-fetch-from-follower.cpp +1 -1
  201. package/deps/librdkafka/tests/0102-static_group_rebalance.c +317 -16
  202. package/deps/librdkafka/tests/0103-transactions.c +7 -7
  203. package/deps/librdkafka/tests/0104-fetch_from_follower_mock.c +1 -0
  204. package/deps/librdkafka/tests/0105-transactions_mock.c +18 -11
  205. package/deps/librdkafka/tests/0106-cgrp_sess_timeout.c +35 -14
  206. package/deps/librdkafka/tests/0107-topic_recreate.c +2 -2
  207. package/deps/librdkafka/tests/0109-auto_create_topics.cpp +86 -26
  208. package/deps/librdkafka/tests/0110-batch_size.cpp +1 -2
  209. package/deps/librdkafka/tests/0112-assign_unknown_part.c +3 -14
  210. package/deps/librdkafka/tests/0113-cooperative_rebalance.cpp +248 -104
  211. package/deps/librdkafka/tests/0114-sticky_partitioning.cpp +3 -3
  212. package/deps/librdkafka/tests/0115-producer_auth.cpp +4 -1
  213. package/deps/librdkafka/tests/0116-kafkaconsumer_close.cpp +7 -5
  214. package/deps/librdkafka/tests/0117-mock_errors.c +15 -5
  215. package/deps/librdkafka/tests/0118-commit_rebalance.c +41 -8
  216. package/deps/librdkafka/tests/0119-consumer_auth.cpp +20 -1
  217. package/deps/librdkafka/tests/0120-asymmetric_subscription.c +8 -3
  218. package/deps/librdkafka/tests/0125-immediate_flush.c +1 -1
  219. package/deps/librdkafka/tests/0126-oauthbearer_oidc.c +323 -8
  220. package/deps/librdkafka/tests/0129-fetch_aborted_msgs.c +1 -0
  221. package/deps/librdkafka/tests/0132-strategy_ordering.c +12 -4
  222. package/deps/librdkafka/tests/0133-ssl_keys.c +28 -6
  223. package/deps/librdkafka/tests/0137-barrier_batch_consume.c +24 -14
  224. package/deps/librdkafka/tests/0139-offset_validation_mock.c +510 -2
  225. package/deps/librdkafka/tests/0140-commit_metadata.cpp +1 -1
  226. package/deps/librdkafka/tests/0142-reauthentication.c +37 -17
  227. package/deps/librdkafka/tests/0143-exponential_backoff_mock.c +39 -40
  228. package/deps/librdkafka/tests/0146-metadata_mock.c +76 -15
  229. package/deps/librdkafka/tests/0147-consumer_group_consumer_mock.c +952 -0
  230. package/deps/librdkafka/tests/0148-offset_fetch_commit_error_mock.c +563 -0
  231. package/deps/librdkafka/tests/0149-broker-same-host-port.c +140 -0
  232. package/deps/librdkafka/tests/0150-telemetry_mock.c +9 -6
  233. package/deps/librdkafka/tests/0151-purge-brokers.c +566 -0
  234. package/deps/librdkafka/tests/0152-rebootstrap.c +59 -0
  235. package/deps/librdkafka/tests/0153-memberid.c +128 -0
  236. package/deps/librdkafka/tests/CMakeLists.txt +6 -0
  237. package/deps/librdkafka/tests/LibrdkafkaTestApp.py +34 -9
  238. package/deps/librdkafka/tests/autotest.sh +0 -0
  239. package/deps/librdkafka/tests/broker_version_tests.py +0 -0
  240. package/deps/librdkafka/tests/buildbox.sh +0 -0
  241. package/deps/librdkafka/tests/cleanup-checker-tests.sh +0 -0
  242. package/deps/librdkafka/tests/cluster_testing.py +0 -0
  243. package/deps/librdkafka/tests/delete-test-topics.sh +0 -0
  244. package/deps/librdkafka/tests/fixtures/oauthbearer/jwt_assertion_template.json +10 -0
  245. package/deps/librdkafka/tests/fixtures/ssl/client.keystore.intermediate.p12 +0 -0
  246. package/deps/librdkafka/tests/fixtures/ssl/client.keystore.p12 +0 -0
  247. package/deps/librdkafka/tests/fixtures/ssl/client2.certificate.intermediate.pem +72 -0
  248. package/deps/librdkafka/tests/fixtures/ssl/client2.certificate.pem +42 -101
  249. package/deps/librdkafka/tests/fixtures/ssl/client2.intermediate.key +46 -0
  250. package/deps/librdkafka/tests/fixtures/ssl/client2.key +41 -29
  251. package/deps/librdkafka/tests/fixtures/ssl/create_keys.sh +112 -37
  252. package/deps/librdkafka/tests/gen-ssl-certs.sh +0 -0
  253. package/deps/librdkafka/tests/interactive_broker_version.py +0 -0
  254. package/deps/librdkafka/tests/java/Makefile +2 -1
  255. package/deps/librdkafka/tests/java/run-class.sh +0 -0
  256. package/deps/librdkafka/tests/lz4_manual_test.sh +0 -0
  257. package/deps/librdkafka/tests/multi-broker-version-test.sh +0 -0
  258. package/deps/librdkafka/tests/parse-refcnt.sh +0 -0
  259. package/deps/librdkafka/tests/performance_plot.py +0 -0
  260. package/deps/librdkafka/tests/requirements.txt +1 -1
  261. package/deps/librdkafka/tests/run-all-tests.sh +79 -0
  262. package/deps/librdkafka/tests/run-consumer-tests.sh +0 -0
  263. package/deps/librdkafka/tests/run-producer-tests.sh +0 -0
  264. package/deps/librdkafka/tests/run-test-batches.py +157 -0
  265. package/deps/librdkafka/tests/run-test.sh +0 -0
  266. package/deps/librdkafka/tests/sasl_test.py +0 -0
  267. package/deps/librdkafka/tests/test.c +478 -18
  268. package/deps/librdkafka/tests/test.h +62 -13
  269. package/deps/librdkafka/tests/testcpp.cpp +6 -1
  270. package/deps/librdkafka/tests/testcpp.h +30 -2
  271. package/deps/librdkafka/tests/testshared.h +16 -2
  272. package/deps/librdkafka/tests/tools/stats/graph.py +0 -0
  273. package/deps/librdkafka/tests/tools/stats/to_csv.py +1 -1
  274. package/deps/librdkafka/tests/trivup/trivup-0.14.0.tar.gz +0 -0
  275. package/deps/librdkafka/tests/until-fail.sh +0 -0
  276. package/deps/librdkafka/tests/xxxx-metadata.cpp +1 -1
  277. package/deps/librdkafka/vcpkg.json +1 -1
  278. package/deps/librdkafka/win32/setup-msys2.ps1 +24 -8
  279. package/deps/librdkafka/win32/setup-vcpkg.ps1 +28 -6
  280. package/deps/librdkafka/win32/tests/tests.vcxproj +6 -0
  281. package/deps/librdkafka/win32/wingetopt.h +5 -4
  282. package/errors.d.ts +27 -1
  283. package/lib/error.js +29 -3
  284. package/make_docs.sh +0 -0
  285. package/package.json +11 -11
  286. package/run_docker.sh +0 -0
  287. package/src/callbacks.cc +6 -9
  288. package/src/callbacks.h +1 -5
  289. package/test/kafka-consumer-worker.js +10 -7
  290. package/test/kafka-consumer.spec.js +32 -21
  291. package/ci/update-version.js +0 -123
  292. package/deps/librdkafka/.semaphore/project.yml +0 -43
  293. package/deps/librdkafka/.semaphore/project_public.yml +0 -20
  294. package/deps/librdkafka/win32/install-openssl.ps1 +0 -33
@@ -51,7 +51,6 @@ typedef enum {
51
51
  /* Any state >= STATE_UP means the Kafka protocol layer
52
52
  * is operational (to some degree). */
53
53
  RD_KAFKA_BROKER_STATE_UP,
54
- RD_KAFKA_BROKER_STATE_UPDATE,
55
54
  RD_KAFKA_BROKER_STATE_APIVERSION_QUERY,
56
55
  RD_KAFKA_BROKER_STATE_AUTH_HANDSHAKE,
57
56
  RD_KAFKA_BROKER_STATE_AUTH_REQ,
@@ -82,8 +81,7 @@ typedef struct rd_kafka_broker_monitor_s {
82
81
  struct rd_kafka_broker_s { /* rd_kafka_broker_t */
83
82
  TAILQ_ENTRY(rd_kafka_broker_s) rkb_link;
84
83
 
85
- int32_t rkb_nodeid; /**< Broker Node Id.
86
- * @locks rkb_lock */
84
+ int32_t rkb_nodeid; /**< Broker Node Id, read only. */
87
85
  #define RD_KAFKA_NODEID_UA -1
88
86
 
89
87
  rd_sockaddr_list_t *rkb_rsal;
@@ -189,8 +187,27 @@ struct rd_kafka_broker_s { /* rd_kafka_broker_t */
189
187
  rd_atomic64_t reqtype[RD_KAFKAP__NUM]; /**< Per request-type
190
188
  * counter */
191
189
 
192
- rd_atomic64_t ts_send; /**< Timestamp of last send */
193
- rd_atomic64_t ts_recv; /**< Timestamp of last receive */
190
+ rd_atomic64_t ts_send; /**< Timestamp of last send */
191
+ rd_atomic64_t ts_recv; /**< Timestamp of last receive */
192
+ rd_bool_t skip_broker_down; /**< Avoid reporting the
193
+ * broker down on next
194
+ * state change.
195
+ * Useful for a planned
196
+ * disconnection to avoid
197
+ * reaching the all
198
+ * brokers down state. */
199
+ int connections_max_idle_ms; /**< Maximum idle time
200
+ * for this broker connections.
201
+ * jitter is different for
202
+ * each broker to avoid the
203
+ * ALL_BROKERS_DOWN error.
204
+ * Initial value is `-1` as
205
+ * `connections.max.idle.ms=0`
206
+ * means disabled, but must
207
+ * never be used when
208
+ * `connections.max.idle.ms=0`
209
+ * for the same reason
210
+ * (an assert is present). */
194
211
  } rkb_c;
195
212
 
196
213
  struct {
@@ -333,7 +350,9 @@ struct rd_kafka_broker_s { /* rd_kafka_broker_t */
333
350
 
334
351
  rd_kafka_secproto_t rkb_proto;
335
352
 
336
- int rkb_down_reported; /* Down event reported */
353
+ /** Down event was reported for this broker
354
+ * after last connection to any broker. */
355
+ rd_atomic32_t rkb_down_reported;
337
356
  #if WITH_SASL_CYRUS
338
357
  rd_kafka_timer_t rkb_sasl_kinit_refresh_tmr;
339
358
  #endif
@@ -365,6 +384,9 @@ struct rd_kafka_broker_s { /* rd_kafka_broker_t */
365
384
 
366
385
 
367
386
  rd_kafka_timer_t rkb_sasl_reauth_tmr;
387
+
388
+ /** > 0 if this broker thread is terminating */
389
+ rd_atomic32_t termination_in_progress;
368
390
  };
369
391
 
370
392
  #define rd_kafka_broker_keep(rkb) rd_refcnt_add(&(rkb)->rkb_refcnt)
@@ -392,12 +414,28 @@ rd_kafka_broker_get_state(rd_kafka_broker_t *rkb) {
392
414
 
393
415
 
394
416
  /**
395
- * @returns true if the broker state is UP or UPDATE
417
+ * @returns true if the broker state is UP
396
418
  */
397
- #define rd_kafka_broker_state_is_up(state) \
398
- ((state) == RD_KAFKA_BROKER_STATE_UP || \
399
- (state) == RD_KAFKA_BROKER_STATE_UPDATE)
419
+ #define rd_kafka_broker_state_is_up(state) ((state) == RD_KAFKA_BROKER_STATE_UP)
400
420
 
421
+ /**
422
+ * @returns true if the broker state is DOWN
423
+ */
424
+ #define rd_kafka_broker_state_is_down(state) \
425
+ ((state) == RD_KAFKA_BROKER_STATE_DOWN)
426
+
427
+ /**
428
+ * @returns true if the error is a broker destroy error, because of
429
+ * termination or because of decommissioning.
430
+ */
431
+ #define rd_kafka_broker_is_any_err_destroy(err) \
432
+ ((err) == RD_KAFKA_RESP_ERR__DESTROY || \
433
+ (err) == RD_KAFKA_RESP_ERR__DESTROY_BROKER)
434
+
435
+
436
+ #define rd_kafka_broker_or_instance_terminating(rkb) \
437
+ (rd_kafka_broker_termination_in_progress(rkb) || \
438
+ rd_kafka_terminating((rkb)->rkb_rk))
401
439
 
402
440
  /**
403
441
  * @returns true if the broker connection is up, else false.
@@ -410,6 +448,14 @@ rd_kafka_broker_is_up(rd_kafka_broker_t *rkb) {
410
448
  return rd_kafka_broker_state_is_up(state);
411
449
  }
412
450
 
451
+ /**
452
+ * @returns true if the broker needs a persistent connection
453
+ * @locality any
454
+ */
455
+ static RD_UNUSED RD_INLINE rd_bool_t
456
+ rd_kafka_broker_termination_in_progress(rd_kafka_broker_t *rkb) {
457
+ return rd_atomic32_get(&rkb->termination_in_progress) > 0;
458
+ }
413
459
 
414
460
  /**
415
461
  * @brief Broker comparator
@@ -452,6 +498,14 @@ int16_t rd_kafka_broker_ApiVersion_supported0(rd_kafka_broker_t *rkb,
452
498
  int *featuresp,
453
499
  rd_bool_t do_lock);
454
500
 
501
+ rd_bool_t rd_kafka_broker_ApiVersion_at_least(rd_kafka_broker_t *rkb,
502
+ int16_t ApiKey,
503
+ int16_t minver);
504
+
505
+ rd_bool_t rd_kafka_broker_ApiVersion_at_least_no_lock(rd_kafka_broker_t *rkb,
506
+ int16_t ApiKey,
507
+ int16_t minver);
508
+
455
509
  rd_kafka_broker_t *rd_kafka_broker_find_by_nodeid0_fl(const char *func,
456
510
  int line,
457
511
  rd_kafka_t *rk,
@@ -681,6 +735,10 @@ void rd_kafka_broker_start_reauth_timer(rd_kafka_broker_t *rkb,
681
735
 
682
736
  void rd_kafka_broker_start_reauth_cb(rd_kafka_timers_t *rkts, void *rkb);
683
737
 
738
+ void rd_kafka_broker_decommission(rd_kafka_t *rk,
739
+ rd_kafka_broker_t *rkb,
740
+ rd_list_t *wait_thrds);
741
+
684
742
  int unittest_broker(void);
685
743
 
686
744
  #endif /* _RDKAFKA_BROKER_H_ */
@@ -42,9 +42,6 @@ void rd_kafka_buf_destroy_final(rd_kafka_buf_t *rkbuf) {
42
42
  rd_list_destroy(rkbuf->rkbuf_u.Metadata.topic_ids);
43
43
  if (rkbuf->rkbuf_u.Metadata.reason)
44
44
  rd_free(rkbuf->rkbuf_u.Metadata.reason);
45
- if (rkbuf->rkbuf_u.Metadata.rko)
46
- rd_kafka_op_reply(rkbuf->rkbuf_u.Metadata.rko,
47
- RD_KAFKA_RESP_ERR__DESTROY);
48
45
  if (rkbuf->rkbuf_u.Metadata.decr) {
49
46
  /* Decrease metadata cache's full_.._sent state. */
50
47
  mtx_lock(rkbuf->rkbuf_u.Metadata.decr_lock);
@@ -244,6 +241,12 @@ void rd_kafka_bufq_init(rd_kafka_bufq_t *rkbufq) {
244
241
  rd_atomic32_init(&rkbufq->rkbq_msg_cnt, 0);
245
242
  }
246
243
 
244
+ static void rd_kafka_bufq_reset(rd_kafka_bufq_t *rkbufq) {
245
+ TAILQ_INIT(&rkbufq->rkbq_bufs);
246
+ rd_atomic32_set(&rkbufq->rkbq_cnt, 0);
247
+ rd_atomic32_set(&rkbufq->rkbq_msg_cnt, 0);
248
+ }
249
+
247
250
  /**
248
251
  * Concat all buffers from 'src' to tail of 'dst'
249
252
  */
@@ -252,7 +255,7 @@ void rd_kafka_bufq_concat(rd_kafka_bufq_t *dst, rd_kafka_bufq_t *src) {
252
255
  (void)rd_atomic32_add(&dst->rkbq_cnt, rd_atomic32_get(&src->rkbq_cnt));
253
256
  (void)rd_atomic32_add(&dst->rkbq_msg_cnt,
254
257
  rd_atomic32_get(&src->rkbq_msg_cnt));
255
- rd_kafka_bufq_init(src);
258
+ rd_kafka_bufq_reset(src);
256
259
  }
257
260
 
258
261
  /**
@@ -393,7 +396,7 @@ int rd_kafka_buf_retry(rd_kafka_broker_t *rkb, rd_kafka_buf_t *rkbuf) {
393
396
  rd_assert(rd_buf_len(&rkbuf->rkbuf_buf) > 0);
394
397
 
395
398
  if (unlikely(!rkb || rkb->rkb_source == RD_KAFKA_INTERNAL ||
396
- rd_kafka_terminating(rkb->rkb_rk) ||
399
+ rd_kafka_broker_or_instance_terminating(rkb) ||
397
400
  rkbuf->rkbuf_retries + incr_retry >
398
401
  rkbuf->rkbuf_max_retries))
399
402
  return 0;
@@ -379,11 +379,12 @@ struct rd_kafka_buf_s { /* rd_kafka_buf_t */
379
379
  rd_list_t *
380
380
  topic_ids; /* Requested topic ids rd_kafka_Uuid_t */
381
381
  char *reason; /* Textual reason */
382
- rd_kafka_op_t *rko; /* Originating rko with replyq
383
- * (if any) */
384
382
  rd_bool_t all_topics; /**< Full/All topics requested */
385
383
  rd_bool_t cgrp_update; /**< Update cgrp with topic
386
384
  * status from response. */
385
+ int32_t cgrp_subscription_version;
386
+ /**< Consumer group subscription version, to
387
+ * check before updating cgrp state. */
387
388
  rd_bool_t force_racks; /**< Force the returned metadata
388
389
  * to contain partition to
389
390
  * rack mapping. */
@@ -524,7 +525,7 @@ struct rd_kafka_buf_s { /* rd_kafka_buf_t */
524
525
  #define rd_kafka_buf_skip_to(rkbuf, pos) \
525
526
  do { \
526
527
  size_t __len1 = \
527
- (size_t)(pos)-rd_slice_offset(&(rkbuf)->rkbuf_reader); \
528
+ (size_t)(pos) - rd_slice_offset(&(rkbuf)->rkbuf_reader); \
528
529
  if (__len1 && \
529
530
  !rd_slice_read(&(rkbuf)->rkbuf_reader, NULL, __len1)) \
530
531
  rd_kafka_buf_check_len(rkbuf, __len1); \
@@ -78,6 +78,8 @@ static void rd_kafka_cert_destroy(rd_kafka_cert_t *cert) {
78
78
 
79
79
  if (cert->x509)
80
80
  X509_free(cert->x509);
81
+ if (cert->chain)
82
+ sk_X509_pop_free(cert->chain, X509_free);
81
83
  if (cert->pkey)
82
84
  EVP_PKEY_free(cert->pkey);
83
85
  if (cert->store)
@@ -314,10 +316,11 @@ static rd_kafka_cert_t *rd_kafka_cert_new(const rd_kafka_conf_t *conf,
314
316
  switch (encoding) {
315
317
  case RD_KAFKA_CERT_ENC_PKCS12: {
316
318
  EVP_PKEY *ign_pkey;
319
+ STACK_OF(X509) *ca = NULL;
317
320
 
318
321
  action = "parse PKCS#12";
319
322
  if (!PKCS12_parse(p12, conf->ssl.key_password,
320
- &ign_pkey, &cert->x509, NULL))
323
+ &ign_pkey, &cert->x509, &ca))
321
324
  goto fail;
322
325
 
323
326
  EVP_PKEY_free(ign_pkey);
@@ -325,6 +328,13 @@ static rd_kafka_cert_t *rd_kafka_cert_new(const rd_kafka_conf_t *conf,
325
328
  action = "retrieve public key";
326
329
  if (!cert->x509)
327
330
  goto fail;
331
+
332
+ if (ca) {
333
+ if (sk_X509_num(ca) > 0)
334
+ cert->chain = ca;
335
+ else
336
+ sk_X509_pop_free(ca, X509_free);
337
+ }
328
338
  } break;
329
339
 
330
340
  case RD_KAFKA_CERT_ENC_DER:
@@ -341,6 +351,20 @@ static rd_kafka_cert_t *rd_kafka_cert_new(const rd_kafka_conf_t *conf,
341
351
  (void *)conf);
342
352
  if (!cert->x509)
343
353
  goto fail;
354
+
355
+ cert->chain = sk_X509_new_null();
356
+ if (rd_kafka_ssl_read_cert_chain_from_BIO(
357
+ bio, cert->chain, rd_kafka_conf_ssl_passwd_cb,
358
+ (void *)conf) != 0) {
359
+ sk_X509_pop_free(cert->chain, X509_free);
360
+ cert->chain = NULL;
361
+ goto fail;
362
+ }
363
+
364
+ if (sk_X509_num(cert->chain) == 0) {
365
+ sk_X509_pop_free(cert->chain, X509_free);
366
+ cert->chain = NULL;
367
+ }
344
368
  break;
345
369
 
346
370
  default:
@@ -43,9 +43,10 @@ typedef struct rd_kafka_cert_s {
43
43
  rd_kafka_cert_enc_t encoding;
44
44
  rd_refcnt_t refcnt;
45
45
  #if WITH_SSL
46
- X509 *x509; /**< Certificate (public key) */
47
- EVP_PKEY *pkey; /**< Private key */
48
- X509_STORE *store; /**< CA certificate chain store */
46
+ X509 *x509; /**< Certificate (public key) */
47
+ STACK_OF(X509) * chain; /**< Certificate chain (public key) */
48
+ EVP_PKEY *pkey; /**< Private key */
49
+ X509_STORE *store; /**< CA trusted certificates */
49
50
  #endif
50
51
  } rd_kafka_cert_t;
51
52