@platformatic/rdkafka 4.0.1 → 4.1.0-alpha.1

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 (292) 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 +4 -4
  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/configure +0 -0
  17. package/deps/librdkafka/debian/rules +0 -0
  18. package/deps/librdkafka/dev-conf.sh +0 -0
  19. package/deps/librdkafka/examples/consumer.c +18 -8
  20. package/deps/librdkafka/examples/describe_consumer_groups.c +25 -6
  21. package/deps/librdkafka/examples/incremental_alter_configs.c +4 -5
  22. package/deps/librdkafka/examples/kafkatest_verifiable_client.cpp +26 -42
  23. package/deps/librdkafka/examples/openssl_engine_example.cpp +3 -4
  24. package/deps/librdkafka/examples/producer.cpp +2 -2
  25. package/deps/librdkafka/examples/user_scram.c +4 -5
  26. package/deps/librdkafka/examples/win_ssl_cert_store.cpp +4 -3
  27. package/deps/librdkafka/lds-gen.py +0 -0
  28. package/deps/librdkafka/mklove/Makefile.base +0 -0
  29. package/deps/librdkafka/packaging/RELEASE.md +8 -0
  30. package/deps/librdkafka/packaging/alpine/build-alpine.sh +0 -0
  31. package/deps/librdkafka/packaging/cp/README.md +4 -1
  32. package/deps/librdkafka/packaging/cp/check_features.c +12 -4
  33. package/deps/librdkafka/packaging/cp/verify-deb.sh +6 -6
  34. package/deps/librdkafka/packaging/cp/verify-packages.sh +52 -31
  35. package/deps/librdkafka/packaging/cp/verify-rpm.sh +6 -13
  36. package/deps/librdkafka/packaging/debian/rules +0 -0
  37. package/deps/librdkafka/packaging/get_version.py +0 -0
  38. package/deps/librdkafka/packaging/homebrew/brew-update-pr.sh +0 -0
  39. package/deps/librdkafka/packaging/mingw-w64/{travis-before-install.sh → export-variables.sh} +0 -7
  40. package/deps/librdkafka/packaging/mingw-w64/semaphoreci-build.sh +1 -1
  41. package/deps/librdkafka/packaging/nuget/artifact.py +0 -0
  42. package/deps/librdkafka/packaging/nuget/cleanup-s3.py +0 -0
  43. package/deps/librdkafka/packaging/nuget/nuget.sh +0 -0
  44. package/deps/librdkafka/packaging/nuget/packaging.py +0 -0
  45. package/deps/librdkafka/packaging/nuget/push-to-nuget.sh +0 -0
  46. package/deps/librdkafka/packaging/nuget/release.py +0 -0
  47. package/deps/librdkafka/packaging/nuget/requirements.txt +3 -3
  48. package/deps/librdkafka/packaging/rpm/mock-on-docker.sh +0 -0
  49. package/deps/librdkafka/packaging/rpm/tests/run-test.sh +0 -0
  50. package/deps/librdkafka/packaging/rpm/tests/test-on-docker.sh +0 -0
  51. package/deps/librdkafka/packaging/tools/build-configurations-checks.sh +3 -1
  52. package/deps/librdkafka/packaging/tools/build-deb-package.sh +0 -0
  53. package/deps/librdkafka/packaging/tools/build-debian.sh +0 -0
  54. package/deps/librdkafka/packaging/tools/build-manylinux.sh +0 -0
  55. package/deps/librdkafka/packaging/tools/build-release-artifacts.sh +0 -0
  56. package/deps/librdkafka/packaging/tools/distro-build.sh +0 -0
  57. package/deps/librdkafka/packaging/tools/gh-release-checksums.py +0 -0
  58. package/deps/librdkafka/packaging/tools/rdutcoverage.sh +0 -0
  59. package/deps/librdkafka/packaging/tools/run-in-docker.sh +28 -0
  60. package/deps/librdkafka/packaging/tools/run-integration-tests.sh +31 -0
  61. package/deps/librdkafka/packaging/tools/run-style-check.sh +4 -0
  62. package/deps/librdkafka/packaging/tools/style-format.sh +6 -5
  63. package/deps/librdkafka/packaging/tools/update_rpcs_max_versions.py +100 -0
  64. package/deps/librdkafka/service.yml +154 -0
  65. package/deps/librdkafka/src/generate_proto.sh +0 -0
  66. package/deps/librdkafka/src/rd.h +145 -2
  67. package/deps/librdkafka/src/rdaddr.h +6 -7
  68. package/deps/librdkafka/src/rdatomic.h +15 -11
  69. package/deps/librdkafka/src/rdavg.h +3 -2
  70. package/deps/librdkafka/src/rdbase64.c +33 -2
  71. package/deps/librdkafka/src/rdbase64.h +2 -0
  72. package/deps/librdkafka/src/rdendian.h +10 -9
  73. package/deps/librdkafka/src/rdhttp.c +418 -100
  74. package/deps/librdkafka/src/rdhttp.h +23 -5
  75. package/deps/librdkafka/src/rdkafka.c +299 -145
  76. package/deps/librdkafka/src/rdkafka.h +89 -6
  77. package/deps/librdkafka/src/rdkafka_admin.c +482 -105
  78. package/deps/librdkafka/src/rdkafka_admin.h +42 -0
  79. package/deps/librdkafka/src/rdkafka_broker.c +463 -312
  80. package/deps/librdkafka/src/rdkafka_broker.h +68 -10
  81. package/deps/librdkafka/src/rdkafka_buf.c +8 -5
  82. package/deps/librdkafka/src/rdkafka_buf.h +4 -3
  83. package/deps/librdkafka/src/rdkafka_cert.c +25 -1
  84. package/deps/librdkafka/src/rdkafka_cert.h +4 -3
  85. package/deps/librdkafka/src/rdkafka_cgrp.c +468 -143
  86. package/deps/librdkafka/src/rdkafka_cgrp.h +36 -2
  87. package/deps/librdkafka/src/rdkafka_conf.c +526 -102
  88. package/deps/librdkafka/src/rdkafka_conf.h +68 -4
  89. package/deps/librdkafka/src/rdkafka_feature.c +472 -35
  90. package/deps/librdkafka/src/rdkafka_feature.h +2 -0
  91. package/deps/librdkafka/src/rdkafka_fetcher.c +22 -2
  92. package/deps/librdkafka/src/rdkafka_fetcher.h +2 -2
  93. package/deps/librdkafka/src/rdkafka_int.h +84 -46
  94. package/deps/librdkafka/src/rdkafka_metadata.c +221 -136
  95. package/deps/librdkafka/src/rdkafka_metadata.h +15 -11
  96. package/deps/librdkafka/src/rdkafka_metadata_cache.c +279 -73
  97. package/deps/librdkafka/src/rdkafka_mock.c +795 -19
  98. package/deps/librdkafka/src/rdkafka_mock.h +119 -0
  99. package/deps/librdkafka/src/rdkafka_mock_cgrp.c +1298 -132
  100. package/deps/librdkafka/src/rdkafka_mock_handlers.c +345 -49
  101. package/deps/librdkafka/src/rdkafka_mock_int.h +180 -61
  102. package/deps/librdkafka/src/rdkafka_msg.c +35 -19
  103. package/deps/librdkafka/src/rdkafka_msg.h +3 -3
  104. package/deps/librdkafka/src/rdkafka_msgset_writer.c +14 -10
  105. package/deps/librdkafka/src/rdkafka_offset.c +33 -5
  106. package/deps/librdkafka/src/rdkafka_op.c +1 -1
  107. package/deps/librdkafka/src/rdkafka_op.h +45 -21
  108. package/deps/librdkafka/src/rdkafka_partition.c +118 -23
  109. package/deps/librdkafka/src/rdkafka_partition.h +16 -7
  110. package/deps/librdkafka/src/rdkafka_proto.h +4 -1
  111. package/deps/librdkafka/src/rdkafka_protocol.h +1 -0
  112. package/deps/librdkafka/src/rdkafka_queue.c +125 -48
  113. package/deps/librdkafka/src/rdkafka_queue.h +19 -0
  114. package/deps/librdkafka/src/rdkafka_range_assignor.c +1 -1
  115. package/deps/librdkafka/src/rdkafka_request.c +336 -64
  116. package/deps/librdkafka/src/rdkafka_request.h +24 -1
  117. package/deps/librdkafka/src/rdkafka_sasl.c +5 -3
  118. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer.c +14 -10
  119. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer_oidc.c +1166 -89
  120. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer_oidc.h +13 -3
  121. package/deps/librdkafka/src/rdkafka_sasl_plain.c +3 -3
  122. package/deps/librdkafka/src/rdkafka_sasl_scram.c +4 -3
  123. package/deps/librdkafka/src/rdkafka_ssl.c +306 -81
  124. package/deps/librdkafka/src/rdkafka_ssl.h +22 -0
  125. package/deps/librdkafka/src/rdkafka_sticky_assignor.c +4 -0
  126. package/deps/librdkafka/src/rdkafka_telemetry.c +80 -23
  127. package/deps/librdkafka/src/rdkafka_telemetry_encode.c +5 -1
  128. package/deps/librdkafka/src/rdkafka_telemetry_encode.h +20 -20
  129. package/deps/librdkafka/src/rdkafka_topic.c +220 -137
  130. package/deps/librdkafka/src/rdkafka_topic.h +14 -8
  131. package/deps/librdkafka/src/rdkafka_transport.c +59 -47
  132. package/deps/librdkafka/src/rdkafka_transport.h +5 -0
  133. package/deps/librdkafka/src/rdkafka_txnmgr.c +6 -1
  134. package/deps/librdkafka/src/rdmap.c +6 -1
  135. package/deps/librdkafka/src/rdrand.c +11 -1
  136. package/deps/librdkafka/src/rdtime.h +48 -17
  137. package/deps/librdkafka/src/rdunittest.c +42 -25
  138. package/deps/librdkafka/src/rdunittest.h +2 -0
  139. package/deps/librdkafka/src/rdwin32.h +1 -1
  140. package/deps/librdkafka/src/regexp.c +47 -42
  141. package/deps/librdkafka/src/tinycthread_extra.c +45 -21
  142. package/deps/librdkafka/src/tinycthread_extra.h +7 -3
  143. package/deps/librdkafka/src-cpp/rdkafkacpp.h +28 -2
  144. package/deps/librdkafka/tests/0001-multiobj.c +4 -0
  145. package/deps/librdkafka/tests/0004-conf.c +103 -36
  146. package/deps/librdkafka/tests/0009-mock_cluster.c +1 -0
  147. package/deps/librdkafka/tests/0011-produce_batch.c +2 -1
  148. package/deps/librdkafka/tests/0016-client_swname.c +18 -3
  149. package/deps/librdkafka/tests/0017-compression.c +6 -8
  150. package/deps/librdkafka/tests/0018-cgrp_term.c +8 -3
  151. package/deps/librdkafka/tests/0021-rkt_destroy.c +1 -0
  152. package/deps/librdkafka/tests/0022-consume_batch.c +4 -1
  153. package/deps/librdkafka/tests/0026-consume_pause.c +12 -14
  154. package/deps/librdkafka/tests/0028-long_topicnames.c +1 -1
  155. package/deps/librdkafka/tests/0029-assign_offset.c +6 -8
  156. package/deps/librdkafka/tests/0030-offset_commit.c +2 -2
  157. package/deps/librdkafka/tests/0033-regex_subscribe.c +33 -17
  158. package/deps/librdkafka/tests/0034-offset_reset.c +25 -4
  159. package/deps/librdkafka/tests/0036-partial_fetch.c +1 -0
  160. package/deps/librdkafka/tests/0038-performance.c +1 -0
  161. package/deps/librdkafka/tests/0040-io_event.c +11 -5
  162. package/deps/librdkafka/tests/0041-fetch_max_bytes.c +1 -0
  163. package/deps/librdkafka/tests/0044-partition_cnt.c +3 -2
  164. package/deps/librdkafka/tests/0045-subscribe_update.c +284 -20
  165. package/deps/librdkafka/tests/0047-partial_buf_tmout.c +1 -0
  166. package/deps/librdkafka/tests/0048-partitioner.c +1 -1
  167. package/deps/librdkafka/tests/0050-subscribe_adds.c +1 -0
  168. package/deps/librdkafka/tests/0051-assign_adds.c +1 -0
  169. package/deps/librdkafka/tests/0052-msg_timestamps.c +22 -4
  170. package/deps/librdkafka/tests/0053-stats_cb.cpp +12 -20
  171. package/deps/librdkafka/tests/0055-producer_latency.c +176 -3
  172. package/deps/librdkafka/tests/0056-balanced_group_mt.c +6 -2
  173. package/deps/librdkafka/tests/0058-log.cpp +3 -3
  174. package/deps/librdkafka/tests/0059-bsearch.cpp +8 -4
  175. package/deps/librdkafka/tests/0061-consumer_lag.cpp +25 -5
  176. package/deps/librdkafka/tests/0067-empty_topic.cpp +3 -0
  177. package/deps/librdkafka/tests/0068-produce_timeout.c +21 -23
  178. package/deps/librdkafka/tests/0069-consumer_add_parts.c +3 -7
  179. package/deps/librdkafka/tests/0075-retry.c +38 -1
  180. package/deps/librdkafka/tests/0076-produce_retry.c +2 -0
  181. package/deps/librdkafka/tests/0077-compaction.c +8 -2
  182. package/deps/librdkafka/tests/0080-admin_ut.c +34 -4
  183. package/deps/librdkafka/tests/0081-admin.c +455 -155
  184. package/deps/librdkafka/tests/0082-fetch_max_bytes.cpp +4 -0
  185. package/deps/librdkafka/tests/0083-cb_event.c +8 -3
  186. package/deps/librdkafka/tests/0084-destroy_flags.c +14 -18
  187. package/deps/librdkafka/tests/0085-headers.cpp +4 -0
  188. package/deps/librdkafka/tests/0086-purge.c +40 -7
  189. package/deps/librdkafka/tests/0088-produce_metadata_timeout.c +1 -1
  190. package/deps/librdkafka/tests/0089-max_poll_interval.c +12 -7
  191. package/deps/librdkafka/tests/0090-idempotence.c +1 -2
  192. package/deps/librdkafka/tests/0091-max_poll_interval_timeout.c +5 -7
  193. package/deps/librdkafka/tests/0092-mixed_msgver.c +6 -0
  194. package/deps/librdkafka/tests/0093-holb.c +8 -5
  195. package/deps/librdkafka/tests/0094-idempotence_msg_timeout.c +1 -0
  196. package/deps/librdkafka/tests/0097-ssl_verify.cpp +262 -70
  197. package/deps/librdkafka/tests/0098-consumer-txn.cpp +16 -16
  198. package/deps/librdkafka/tests/0099-commit_metadata.c +1 -1
  199. package/deps/librdkafka/tests/0101-fetch-from-follower.cpp +1 -1
  200. package/deps/librdkafka/tests/0102-static_group_rebalance.c +317 -16
  201. package/deps/librdkafka/tests/0103-transactions.c +7 -7
  202. package/deps/librdkafka/tests/0104-fetch_from_follower_mock.c +1 -0
  203. package/deps/librdkafka/tests/0105-transactions_mock.c +18 -11
  204. package/deps/librdkafka/tests/0106-cgrp_sess_timeout.c +35 -14
  205. package/deps/librdkafka/tests/0107-topic_recreate.c +2 -2
  206. package/deps/librdkafka/tests/0109-auto_create_topics.cpp +86 -26
  207. package/deps/librdkafka/tests/0110-batch_size.cpp +1 -2
  208. package/deps/librdkafka/tests/0112-assign_unknown_part.c +3 -14
  209. package/deps/librdkafka/tests/0113-cooperative_rebalance.cpp +248 -104
  210. package/deps/librdkafka/tests/0114-sticky_partitioning.cpp +3 -3
  211. package/deps/librdkafka/tests/0115-producer_auth.cpp +4 -1
  212. package/deps/librdkafka/tests/0116-kafkaconsumer_close.cpp +7 -5
  213. package/deps/librdkafka/tests/0117-mock_errors.c +15 -5
  214. package/deps/librdkafka/tests/0118-commit_rebalance.c +41 -8
  215. package/deps/librdkafka/tests/0119-consumer_auth.cpp +20 -1
  216. package/deps/librdkafka/tests/0120-asymmetric_subscription.c +8 -3
  217. package/deps/librdkafka/tests/0125-immediate_flush.c +1 -1
  218. package/deps/librdkafka/tests/0126-oauthbearer_oidc.c +323 -8
  219. package/deps/librdkafka/tests/0129-fetch_aborted_msgs.c +1 -0
  220. package/deps/librdkafka/tests/0132-strategy_ordering.c +12 -4
  221. package/deps/librdkafka/tests/0133-ssl_keys.c +28 -6
  222. package/deps/librdkafka/tests/0137-barrier_batch_consume.c +24 -14
  223. package/deps/librdkafka/tests/0139-offset_validation_mock.c +510 -2
  224. package/deps/librdkafka/tests/0140-commit_metadata.cpp +1 -1
  225. package/deps/librdkafka/tests/0142-reauthentication.c +37 -17
  226. package/deps/librdkafka/tests/0143-exponential_backoff_mock.c +39 -40
  227. package/deps/librdkafka/tests/0146-metadata_mock.c +76 -15
  228. package/deps/librdkafka/tests/0147-consumer_group_consumer_mock.c +952 -0
  229. package/deps/librdkafka/tests/0148-offset_fetch_commit_error_mock.c +563 -0
  230. package/deps/librdkafka/tests/0149-broker-same-host-port.c +140 -0
  231. package/deps/librdkafka/tests/0150-telemetry_mock.c +9 -6
  232. package/deps/librdkafka/tests/0151-purge-brokers.c +566 -0
  233. package/deps/librdkafka/tests/0152-rebootstrap.c +59 -0
  234. package/deps/librdkafka/tests/0153-memberid.c +128 -0
  235. package/deps/librdkafka/tests/CMakeLists.txt +6 -0
  236. package/deps/librdkafka/tests/LibrdkafkaTestApp.py +34 -9
  237. package/deps/librdkafka/tests/autotest.sh +0 -0
  238. package/deps/librdkafka/tests/broker_version_tests.py +0 -0
  239. package/deps/librdkafka/tests/buildbox.sh +0 -0
  240. package/deps/librdkafka/tests/cleanup-checker-tests.sh +0 -0
  241. package/deps/librdkafka/tests/cluster_testing.py +0 -0
  242. package/deps/librdkafka/tests/delete-test-topics.sh +0 -0
  243. package/deps/librdkafka/tests/fixtures/oauthbearer/jwt_assertion_template.json +10 -0
  244. package/deps/librdkafka/tests/fixtures/ssl/client.keystore.intermediate.p12 +0 -0
  245. package/deps/librdkafka/tests/fixtures/ssl/client.keystore.p12 +0 -0
  246. package/deps/librdkafka/tests/fixtures/ssl/client2.certificate.intermediate.pem +72 -0
  247. package/deps/librdkafka/tests/fixtures/ssl/client2.certificate.pem +42 -101
  248. package/deps/librdkafka/tests/fixtures/ssl/client2.intermediate.key +46 -0
  249. package/deps/librdkafka/tests/fixtures/ssl/client2.key +41 -29
  250. package/deps/librdkafka/tests/fixtures/ssl/create_keys.sh +112 -37
  251. package/deps/librdkafka/tests/gen-ssl-certs.sh +0 -0
  252. package/deps/librdkafka/tests/interactive_broker_version.py +0 -0
  253. package/deps/librdkafka/tests/java/Makefile +2 -1
  254. package/deps/librdkafka/tests/java/run-class.sh +0 -0
  255. package/deps/librdkafka/tests/lz4_manual_test.sh +0 -0
  256. package/deps/librdkafka/tests/multi-broker-version-test.sh +0 -0
  257. package/deps/librdkafka/tests/parse-refcnt.sh +0 -0
  258. package/deps/librdkafka/tests/performance_plot.py +0 -0
  259. package/deps/librdkafka/tests/requirements.txt +1 -1
  260. package/deps/librdkafka/tests/run-all-tests.sh +79 -0
  261. package/deps/librdkafka/tests/run-consumer-tests.sh +0 -0
  262. package/deps/librdkafka/tests/run-producer-tests.sh +0 -0
  263. package/deps/librdkafka/tests/run-test-batches.py +157 -0
  264. package/deps/librdkafka/tests/run-test.sh +0 -0
  265. package/deps/librdkafka/tests/sasl_test.py +0 -0
  266. package/deps/librdkafka/tests/test.c +478 -18
  267. package/deps/librdkafka/tests/test.h +62 -13
  268. package/deps/librdkafka/tests/testcpp.cpp +6 -1
  269. package/deps/librdkafka/tests/testcpp.h +30 -2
  270. package/deps/librdkafka/tests/testshared.h +16 -2
  271. package/deps/librdkafka/tests/tools/stats/graph.py +0 -0
  272. package/deps/librdkafka/tests/tools/stats/to_csv.py +1 -1
  273. package/deps/librdkafka/tests/trivup/trivup-0.14.0.tar.gz +0 -0
  274. package/deps/librdkafka/tests/until-fail.sh +0 -0
  275. package/deps/librdkafka/tests/xxxx-metadata.cpp +1 -1
  276. package/deps/librdkafka/vcpkg.json +1 -1
  277. package/deps/librdkafka/win32/setup-msys2.ps1 +24 -8
  278. package/deps/librdkafka/win32/setup-vcpkg.ps1 +28 -6
  279. package/deps/librdkafka/win32/tests/tests.vcxproj +6 -0
  280. package/deps/librdkafka/win32/wingetopt.h +5 -4
  281. package/errors.d.ts +27 -1
  282. package/lib/error.js +29 -3
  283. package/make_docs.sh +0 -0
  284. package/package.json +10 -11
  285. package/run_docker.sh +0 -0
  286. package/src/callbacks.cc +6 -9
  287. package/src/callbacks.h +1 -5
  288. package/test/kafka-consumer-worker.js +10 -7
  289. package/test/kafka-consumer.spec.js +32 -21
  290. package/deps/librdkafka/.semaphore/project.yml +0 -43
  291. package/deps/librdkafka/.semaphore/project_public.yml +0 -20
  292. package/deps/librdkafka/win32/install-openssl.ps1 +0 -33
@@ -290,17 +290,29 @@ struct rd_kafka_s {
290
290
  TAILQ_HEAD(, rd_kafka_broker_s) rk_brokers;
291
291
  rd_list_t rk_broker_by_id; /* Fast id lookups. */
292
292
  rd_atomic32_t rk_broker_cnt;
293
- /**< Number of brokers in state >= UP */
293
+ /** Logical brokers count.
294
+ * Used for calculating ERR__ALL_BROKERS_DOWN. */
295
+ rd_atomic32_t rk_logical_broker_cnt;
296
+ /** Number of configured or learned brokers in state >= UP */
294
297
  rd_atomic32_t rk_broker_up_cnt;
295
- /**< Number of logical brokers in state >= UP, this is a sub-set
296
- * of rk_broker_up_cnt. */
297
- rd_atomic32_t rk_logical_broker_up_cnt;
298
- /**< Number of brokers that are down, only includes brokers
299
- * that have had at least one connection attempt. */
298
+ /** Number of brokers that are down, only includes brokers
299
+ * that have had at least one connection attempt
300
+ * and are configured or learned. */
300
301
  rd_atomic32_t rk_broker_down_cnt;
301
- /**< Logical brokers currently without an address.
302
- * Used for calculating ERR__ALL_BROKERS_DOWN. */
303
- rd_atomic32_t rk_broker_addrless_cnt;
302
+ /** Set to 1 when there's a re-bootstrap in progress.
303
+ * Set to 0 when the re-bootstrap is done.
304
+ * Accessed from the main thread and the broker threads. */
305
+ rd_atomic32_t rk_rebootstrap_in_progress;
306
+
307
+ /**< Additional bootstrap servers list.
308
+ * contains all brokers added through rd_kafka_brokers_add().
309
+ * Doesn't contain the initially configured bootstrap brokers. */
310
+ rd_list_t additional_brokerlists;
311
+
312
+ /** Decommissioned threads to await */
313
+ rd_list_t wait_decommissioned_thrds;
314
+ /** Decommissioned brokers to await */
315
+ rd_list_t wait_decommissioned_brokers;
304
316
 
305
317
  mtx_t rk_internal_rkb_lock;
306
318
  rd_kafka_broker_t *rk_internal_rkb;
@@ -384,16 +396,7 @@ struct rd_kafka_s {
384
396
  * to avoid reaching
385
397
  * max.poll.interval.ms. during that time
386
398
  * frame. Only relevant for consumer. */
387
- rd_ts_t rk_ts_last_poll_start; /**< Timestamp of last application
388
- * consumer_poll() call start
389
- * Only relevant for consumer.
390
- * Not an atomic as Kafka consumer
391
- * isn't thread safe. */
392
- rd_ts_t rk_ts_last_poll_end; /**< Timestamp of last application
393
- * consumer_poll() call end
394
- * Only relevant for consumer.
395
- * Not an atomic as Kafka consumer
396
- * isn't thread safe. */
399
+
397
400
  /* First fatal error. */
398
401
  struct {
399
402
  rd_atomic32_t err; /**< rd_kafka_resp_err_t */
@@ -409,18 +412,20 @@ struct rd_kafka_s {
409
412
  rd_ts_t rk_ts_metadata; /* Timestamp of most recent
410
413
  * metadata. */
411
414
 
412
- rd_kafka_metadata_internal_t
413
- *rk_full_metadata; /* Last full metadata. */
414
- rd_ts_t rk_ts_full_metadata; /* Timestamp of .. */
415
+ rd_ts_t rk_ts_full_metadata; /* Timestamp of most
416
+ * recent full
417
+ * metadata */
415
418
  struct rd_kafka_metadata_cache rk_metadata_cache; /* Metadata cache */
416
419
 
417
420
  char *rk_clusterid; /* ClusterId from metadata */
418
421
  int32_t rk_controllerid; /* ControllerId from metadata */
419
422
 
420
423
  /**< Producer: Delivery report mode */
421
- enum { RD_KAFKA_DR_MODE_NONE, /**< No delivery reports */
422
- RD_KAFKA_DR_MODE_CB, /**< Delivery reports through callback */
423
- RD_KAFKA_DR_MODE_EVENT, /**< Delivery reports through event API*/
424
+ enum {
425
+ RD_KAFKA_DR_MODE_NONE, /**< No delivery reports */
426
+ RD_KAFKA_DR_MODE_CB, /**< Delivery reports through callback */
427
+ RD_KAFKA_DR_MODE_EVENT, /**< Delivery reports through event
428
+ API*/
424
429
  } rk_drmode;
425
430
 
426
431
  /* Simple consumer count:
@@ -608,6 +613,16 @@ struct rd_kafka_s {
608
613
  } rk_curr_msgs;
609
614
 
610
615
  rd_kafka_timers_t rk_timers;
616
+
617
+ /** Metadata refresh timer */
618
+ rd_kafka_timer_t metadata_refresh_tmr;
619
+ /** 1s interval timer */
620
+ rd_kafka_timer_t one_s_tmr;
621
+ /** Rebootstrap timer.
622
+ * Will add bootstrap brokers again
623
+ * when it's fired. */
624
+ rd_kafka_timer_t rebootstrap_tmr;
625
+
611
626
  thrd_t rk_thread;
612
627
 
613
628
  int rk_initialized; /**< Will be > 0 when the rd_kafka_t
@@ -652,6 +667,12 @@ struct rd_kafka_s {
652
667
  * Use 10 < reconnect.backoff.jitter.ms / 2 < 1000.
653
668
  */
654
669
  rd_interval_t sparse_connect_random;
670
+
671
+ /** Sparse connection timer: fires after remaining time of
672
+ * `sparse_connect_random` interval + 1ms.
673
+ */
674
+ rd_kafka_timer_t sparse_connect_random_tmr;
675
+
655
676
  /**< Lock for sparse_connect_random */
656
677
  mtx_t sparse_connect_lock;
657
678
 
@@ -877,15 +898,13 @@ rd_kafka_curr_msgs_wait_zero(rd_kafka_t *rk,
877
898
  int timeout_ms,
878
899
  unsigned int *curr_msgsp) {
879
900
  unsigned int cnt;
880
- struct timespec tspec;
881
-
882
- rd_timeout_init_timespec(&tspec, timeout_ms);
901
+ rd_ts_t abs_timeout = rd_timeout_init(timeout_ms);
883
902
 
884
903
  mtx_lock(&rk->rk_curr_msgs.lock);
885
904
  while ((cnt = rk->rk_curr_msgs.cnt) > 0) {
886
905
  if (cnd_timedwait_abs(&rk->rk_curr_msgs.cnd,
887
906
  &rk->rk_curr_msgs.lock,
888
- &tspec) == thrd_timedout)
907
+ abs_timeout) == thrd_timedout)
889
908
  break;
890
909
  }
891
910
  mtx_unlock(&rk->rk_curr_msgs.lock);
@@ -894,6 +913,9 @@ rd_kafka_curr_msgs_wait_zero(rd_kafka_t *rk,
894
913
  return cnt == 0;
895
914
  }
896
915
 
916
+ void rd_kafka_decommissioned_broker_thread_join(rd_kafka_t *rk,
917
+ void *rkb_decommissioned);
918
+
897
919
  void rd_kafka_destroy_final(rd_kafka_t *rk);
898
920
 
899
921
  void rd_kafka_global_init(void);
@@ -1070,6 +1092,14 @@ int rd_kafka_set_fatal_error0(rd_kafka_t *rk,
1070
1092
 
1071
1093
  rd_kafka_error_t *rd_kafka_get_fatal_error(rd_kafka_t *rk);
1072
1094
 
1095
+ #define rd_kafka_producer_can_have_fatal_errors(rk) \
1096
+ (rk->rk_type == RD_KAFKA_PRODUCER && rk->rk_conf.eos.idempotence)
1097
+
1098
+ #define rd_kafka_consumer_can_have_fatal_errors(rk) \
1099
+ (rk->rk_type == RD_KAFKA_CONSUMER && \
1100
+ (rk->rk_conf.group_instance_id || \
1101
+ rk->rk_conf.group_protocol == RD_KAFKA_GROUP_PROTOCOL_CONSUMER))
1102
+
1073
1103
  static RD_INLINE RD_UNUSED rd_kafka_resp_err_t
1074
1104
  rd_kafka_fatal_error_code(rd_kafka_t *rk) {
1075
1105
  /* This is an optimization to avoid an atomic read which are costly
@@ -1079,10 +1109,8 @@ rd_kafka_fatal_error_code(rd_kafka_t *rk) {
1079
1109
  * 2) static consumers (group.instance.id)
1080
1110
  * 3) Group using consumer protocol (Introduced in KIP-848). See exact
1081
1111
  * errors in rd_kafka_cgrp_handle_ConsumerGroupHeartbeat() */
1082
- if ((rk->rk_type == RD_KAFKA_PRODUCER && rk->rk_conf.eos.idempotence) ||
1083
- (rk->rk_type == RD_KAFKA_CONSUMER &&
1084
- (rk->rk_conf.group_instance_id ||
1085
- rk->rk_conf.group_protocol == RD_KAFKA_GROUP_PROTOCOL_CONSUMER)))
1112
+ if (rd_kafka_producer_can_have_fatal_errors(rk) ||
1113
+ rd_kafka_consumer_can_have_fatal_errors(rk))
1086
1114
  return rd_atomic32_get(&rk->rk_fatal.err);
1087
1115
 
1088
1116
  return RD_KAFKA_RESP_ERR_NO_ERROR;
@@ -1152,8 +1180,10 @@ static RD_INLINE RD_UNUSED int rd_kafka_max_poll_exceeded(rd_kafka_t *rk) {
1152
1180
  * @locality any
1153
1181
  * @locks none
1154
1182
  */
1155
- static RD_INLINE RD_UNUSED void
1156
- rd_kafka_app_poll_start(rd_kafka_t *rk, rd_ts_t now, rd_bool_t is_blocking) {
1183
+ static RD_INLINE RD_UNUSED void rd_kafka_app_poll_start(rd_kafka_t *rk,
1184
+ rd_kafka_q_t *rkq,
1185
+ rd_ts_t now,
1186
+ rd_bool_t is_blocking) {
1157
1187
  if (rk->rk_type != RD_KAFKA_CONSUMER)
1158
1188
  return;
1159
1189
 
@@ -1161,20 +1191,20 @@ rd_kafka_app_poll_start(rd_kafka_t *rk, rd_ts_t now, rd_bool_t is_blocking) {
1161
1191
  now = rd_clock();
1162
1192
  if (is_blocking)
1163
1193
  rd_atomic64_set(&rk->rk_ts_last_poll, INT64_MAX);
1164
- if (rk->rk_ts_last_poll_end) {
1194
+ if (rkq->rkq_ts_last_poll_end) {
1165
1195
  int64_t poll_idle_ratio = 0;
1166
- rd_ts_t poll_interval = now - rk->rk_ts_last_poll_start;
1196
+ rd_ts_t poll_interval = now - rkq->rkq_ts_last_poll_start;
1167
1197
  if (poll_interval) {
1168
- rd_ts_t idle_interval =
1169
- rk->rk_ts_last_poll_end - rk->rk_ts_last_poll_start;
1198
+ rd_ts_t idle_interval = rkq->rkq_ts_last_poll_end -
1199
+ rkq->rkq_ts_last_poll_start;
1170
1200
  poll_idle_ratio =
1171
1201
  idle_interval * 1000000 / poll_interval;
1172
1202
  }
1173
1203
  rd_avg_add(
1174
1204
  &rk->rk_telemetry.rd_avg_current.rk_avg_poll_idle_ratio,
1175
1205
  poll_idle_ratio);
1176
- rk->rk_ts_last_poll_start = now;
1177
- rk->rk_ts_last_poll_end = 0;
1206
+ rkq->rkq_ts_last_poll_start = now;
1207
+ rkq->rkq_ts_last_poll_end = 0;
1178
1208
  }
1179
1209
  }
1180
1210
 
@@ -1186,7 +1216,8 @@ rd_kafka_app_poll_start(rd_kafka_t *rk, rd_ts_t now, rd_bool_t is_blocking) {
1186
1216
  * @locality any
1187
1217
  * @locks none
1188
1218
  */
1189
- static RD_INLINE RD_UNUSED void rd_kafka_app_polled(rd_kafka_t *rk) {
1219
+ static RD_INLINE RD_UNUSED void rd_kafka_app_polled(rd_kafka_t *rk,
1220
+ rd_kafka_q_t *rkq) {
1190
1221
  if (rk->rk_type == RD_KAFKA_CONSUMER) {
1191
1222
  rd_ts_t now = rd_clock();
1192
1223
  rd_atomic64_set(&rk->rk_ts_last_poll, now);
@@ -1199,10 +1230,10 @@ static RD_INLINE RD_UNUSED void rd_kafka_app_polled(rd_kafka_t *rk) {
1199
1230
  rk->rk_cgrp,
1200
1231
  "app polled after poll interval exceeded");
1201
1232
  }
1202
- if (!rk->rk_ts_last_poll_end)
1203
- rk->rk_ts_last_poll_end = now;
1204
- rd_dassert(rk->rk_ts_last_poll_end >=
1205
- rk->rk_ts_last_poll_start);
1233
+ if (!rkq->rkq_ts_last_poll_end)
1234
+ rkq->rkq_ts_last_poll_end = now;
1235
+ rd_dassert(rkq->rkq_ts_last_poll_end >=
1236
+ rkq->rkq_ts_last_poll_start);
1206
1237
  }
1207
1238
  }
1208
1239
 
@@ -1218,5 +1249,12 @@ rd_kafka_resp_err_t rd_kafka_background_thread_create(rd_kafka_t *rk,
1218
1249
  char *errstr,
1219
1250
  size_t errstr_size);
1220
1251
 
1252
+ void rd_kafka_rebootstrap(rd_kafka_t *rk);
1253
+
1254
+ void rd_kafka_rebootstrap_tmr_start_maybe(rd_kafka_t *rk);
1255
+
1256
+ int rd_kafka_rebootstrap_tmr_stop(rd_kafka_t *rk);
1257
+
1258
+ void rd_kafka_reset_any_broker_down_reported(rd_kafka_t *rk);
1221
1259
 
1222
1260
  #endif /* _RDKAFKA_INT_H_ */