@platformatic/rdkafka 4.0.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 (767) hide show
  1. package/.editorconfig +5 -0
  2. package/.jshintignore +1 -0
  3. package/.jshintrc +23 -0
  4. package/CONTRIBUTING.md +237 -0
  5. package/LICENSE.txt +21 -0
  6. package/Makefile +94 -0
  7. package/README.md +630 -0
  8. package/bench/consumer-raw-rdkafka.js +76 -0
  9. package/bench/consumer-subscribe.js +77 -0
  10. package/bench/kafka-consumer-stream.js +100 -0
  11. package/bench/producer-raw-rdkafka.js +125 -0
  12. package/bench/producer-rdkafka.js +117 -0
  13. package/bench/seed.sh +38 -0
  14. package/binding.gyp +155 -0
  15. package/ci/checks/librdkafka-correct-version.js +67 -0
  16. package/ci/checks/librdkafka-exists.js +13 -0
  17. package/ci/librdkafka-defs-generator.js +193 -0
  18. package/ci/prepublish.js +3 -0
  19. package/config.d.ts +1132 -0
  20. package/configure +15 -0
  21. package/cpplint.py +6325 -0
  22. package/deploy.enc +0 -0
  23. package/deps/librdkafka/.clang-format +136 -0
  24. package/deps/librdkafka/.clang-format-cpp +103 -0
  25. package/deps/librdkafka/.dir-locals.el +10 -0
  26. package/deps/librdkafka/.formatignore +33 -0
  27. package/deps/librdkafka/.gdbmacros +19 -0
  28. package/deps/librdkafka/.semaphore/project.yml +43 -0
  29. package/deps/librdkafka/.semaphore/project_public.yml +20 -0
  30. package/deps/librdkafka/.semaphore/semaphore.yml +355 -0
  31. package/deps/librdkafka/CHANGELOG.md +1738 -0
  32. package/deps/librdkafka/CMakeLists.txt +291 -0
  33. package/deps/librdkafka/CODE_OF_CONDUCT.md +46 -0
  34. package/deps/librdkafka/CONFIGURATION.md +189 -0
  35. package/deps/librdkafka/CONTRIBUTING.md +431 -0
  36. package/deps/librdkafka/Doxyfile +2375 -0
  37. package/deps/librdkafka/INTRODUCTION.md +2173 -0
  38. package/deps/librdkafka/LICENSE +26 -0
  39. package/deps/librdkafka/LICENSE.cjson +22 -0
  40. package/deps/librdkafka/LICENSE.crc32c +28 -0
  41. package/deps/librdkafka/LICENSE.fnv1a +18 -0
  42. package/deps/librdkafka/LICENSE.hdrhistogram +27 -0
  43. package/deps/librdkafka/LICENSE.lz4 +26 -0
  44. package/deps/librdkafka/LICENSE.murmur2 +25 -0
  45. package/deps/librdkafka/LICENSE.nanopb +22 -0
  46. package/deps/librdkafka/LICENSE.opentelemetry +203 -0
  47. package/deps/librdkafka/LICENSE.pycrc +23 -0
  48. package/deps/librdkafka/LICENSE.queue +31 -0
  49. package/deps/librdkafka/LICENSE.regexp +5 -0
  50. package/deps/librdkafka/LICENSE.snappy +36 -0
  51. package/deps/librdkafka/LICENSE.tinycthread +26 -0
  52. package/deps/librdkafka/LICENSE.wingetopt +49 -0
  53. package/deps/librdkafka/LICENSES.txt +625 -0
  54. package/deps/librdkafka/Makefile +124 -0
  55. package/deps/librdkafka/README.md +199 -0
  56. package/deps/librdkafka/README.win32 +26 -0
  57. package/deps/librdkafka/STATISTICS.md +624 -0
  58. package/deps/librdkafka/configure +214 -0
  59. package/deps/librdkafka/configure.self +331 -0
  60. package/deps/librdkafka/debian/changelog +111 -0
  61. package/deps/librdkafka/debian/compat +1 -0
  62. package/deps/librdkafka/debian/control +71 -0
  63. package/deps/librdkafka/debian/copyright +99 -0
  64. package/deps/librdkafka/debian/gbp.conf +9 -0
  65. package/deps/librdkafka/debian/librdkafka++1.install +1 -0
  66. package/deps/librdkafka/debian/librdkafka-dev.examples +2 -0
  67. package/deps/librdkafka/debian/librdkafka-dev.install +9 -0
  68. package/deps/librdkafka/debian/librdkafka1.docs +5 -0
  69. package/deps/librdkafka/debian/librdkafka1.install +1 -0
  70. package/deps/librdkafka/debian/librdkafka1.symbols +135 -0
  71. package/deps/librdkafka/debian/rules +19 -0
  72. package/deps/librdkafka/debian/source/format +1 -0
  73. package/deps/librdkafka/debian/watch +2 -0
  74. package/deps/librdkafka/dev-conf.sh +123 -0
  75. package/deps/librdkafka/examples/CMakeLists.txt +79 -0
  76. package/deps/librdkafka/examples/Makefile +167 -0
  77. package/deps/librdkafka/examples/README.md +42 -0
  78. package/deps/librdkafka/examples/alter_consumer_group_offsets.c +338 -0
  79. package/deps/librdkafka/examples/consumer.c +261 -0
  80. package/deps/librdkafka/examples/delete_records.c +233 -0
  81. package/deps/librdkafka/examples/describe_cluster.c +322 -0
  82. package/deps/librdkafka/examples/describe_consumer_groups.c +436 -0
  83. package/deps/librdkafka/examples/describe_topics.c +427 -0
  84. package/deps/librdkafka/examples/elect_leaders.c +317 -0
  85. package/deps/librdkafka/examples/globals.json +11 -0
  86. package/deps/librdkafka/examples/idempotent_producer.c +344 -0
  87. package/deps/librdkafka/examples/incremental_alter_configs.c +348 -0
  88. package/deps/librdkafka/examples/kafkatest_verifiable_client.cpp +961 -0
  89. package/deps/librdkafka/examples/list_consumer_group_offsets.c +359 -0
  90. package/deps/librdkafka/examples/list_consumer_groups.c +365 -0
  91. package/deps/librdkafka/examples/list_offsets.c +327 -0
  92. package/deps/librdkafka/examples/misc.c +287 -0
  93. package/deps/librdkafka/examples/openssl_engine_example.cpp +249 -0
  94. package/deps/librdkafka/examples/producer.c +251 -0
  95. package/deps/librdkafka/examples/producer.cpp +228 -0
  96. package/deps/librdkafka/examples/rdkafka_complex_consumer_example.c +617 -0
  97. package/deps/librdkafka/examples/rdkafka_complex_consumer_example.cpp +467 -0
  98. package/deps/librdkafka/examples/rdkafka_consume_batch.cpp +264 -0
  99. package/deps/librdkafka/examples/rdkafka_example.c +853 -0
  100. package/deps/librdkafka/examples/rdkafka_example.cpp +679 -0
  101. package/deps/librdkafka/examples/rdkafka_performance.c +1781 -0
  102. package/deps/librdkafka/examples/transactions-older-broker.c +668 -0
  103. package/deps/librdkafka/examples/transactions.c +665 -0
  104. package/deps/librdkafka/examples/user_scram.c +492 -0
  105. package/deps/librdkafka/examples/win_ssl_cert_store.cpp +395 -0
  106. package/deps/librdkafka/lds-gen.py +73 -0
  107. package/deps/librdkafka/mainpage.doxy +40 -0
  108. package/deps/librdkafka/mklove/Makefile.base +329 -0
  109. package/deps/librdkafka/mklove/modules/configure.atomics +144 -0
  110. package/deps/librdkafka/mklove/modules/configure.base +2484 -0
  111. package/deps/librdkafka/mklove/modules/configure.builtin +70 -0
  112. package/deps/librdkafka/mklove/modules/configure.cc +186 -0
  113. package/deps/librdkafka/mklove/modules/configure.cxx +8 -0
  114. package/deps/librdkafka/mklove/modules/configure.fileversion +65 -0
  115. package/deps/librdkafka/mklove/modules/configure.gitversion +29 -0
  116. package/deps/librdkafka/mklove/modules/configure.good_cflags +18 -0
  117. package/deps/librdkafka/mklove/modules/configure.host +132 -0
  118. package/deps/librdkafka/mklove/modules/configure.lib +49 -0
  119. package/deps/librdkafka/mklove/modules/configure.libcurl +99 -0
  120. package/deps/librdkafka/mklove/modules/configure.libsasl2 +36 -0
  121. package/deps/librdkafka/mklove/modules/configure.libssl +147 -0
  122. package/deps/librdkafka/mklove/modules/configure.libzstd +58 -0
  123. package/deps/librdkafka/mklove/modules/configure.parseversion +95 -0
  124. package/deps/librdkafka/mklove/modules/configure.pic +16 -0
  125. package/deps/librdkafka/mklove/modules/configure.socket +20 -0
  126. package/deps/librdkafka/mklove/modules/configure.zlib +61 -0
  127. package/deps/librdkafka/mklove/modules/patches/README.md +8 -0
  128. package/deps/librdkafka/mklove/modules/patches/libcurl.0000-no-runtime-linking-check.patch +11 -0
  129. package/deps/librdkafka/mklove/modules/patches/libssl.0000-osx-rand-include-fix-OpenSSL-PR16409.patch +56 -0
  130. package/deps/librdkafka/packaging/RELEASE.md +311 -0
  131. package/deps/librdkafka/packaging/alpine/build-alpine.sh +38 -0
  132. package/deps/librdkafka/packaging/archlinux/PKGBUILD +30 -0
  133. package/deps/librdkafka/packaging/cmake/Config.cmake.in +37 -0
  134. package/deps/librdkafka/packaging/cmake/Modules/FindLZ4.cmake +38 -0
  135. package/deps/librdkafka/packaging/cmake/Modules/FindZSTD.cmake +27 -0
  136. package/deps/librdkafka/packaging/cmake/Modules/LICENSE.FindZstd +178 -0
  137. package/deps/librdkafka/packaging/cmake/README.md +38 -0
  138. package/deps/librdkafka/packaging/cmake/config.h.in +52 -0
  139. package/deps/librdkafka/packaging/cmake/parseversion.cmake +60 -0
  140. package/deps/librdkafka/packaging/cmake/rdkafka.pc.in +12 -0
  141. package/deps/librdkafka/packaging/cmake/try_compile/atomic_32_test.c +8 -0
  142. package/deps/librdkafka/packaging/cmake/try_compile/atomic_64_test.c +8 -0
  143. package/deps/librdkafka/packaging/cmake/try_compile/c11threads_test.c +14 -0
  144. package/deps/librdkafka/packaging/cmake/try_compile/crc32c_hw_test.c +27 -0
  145. package/deps/librdkafka/packaging/cmake/try_compile/dlopen_test.c +11 -0
  146. package/deps/librdkafka/packaging/cmake/try_compile/libsasl2_test.c +7 -0
  147. package/deps/librdkafka/packaging/cmake/try_compile/pthread_setname_darwin_test.c +6 -0
  148. package/deps/librdkafka/packaging/cmake/try_compile/pthread_setname_freebsd_test.c +7 -0
  149. package/deps/librdkafka/packaging/cmake/try_compile/pthread_setname_gnu_test.c +5 -0
  150. package/deps/librdkafka/packaging/cmake/try_compile/rand_r_test.c +7 -0
  151. package/deps/librdkafka/packaging/cmake/try_compile/rdkafka_setup.cmake +122 -0
  152. package/deps/librdkafka/packaging/cmake/try_compile/regex_test.c +10 -0
  153. package/deps/librdkafka/packaging/cmake/try_compile/strndup_test.c +5 -0
  154. package/deps/librdkafka/packaging/cmake/try_compile/sync_32_test.c +8 -0
  155. package/deps/librdkafka/packaging/cmake/try_compile/sync_64_test.c +8 -0
  156. package/deps/librdkafka/packaging/cp/README.md +13 -0
  157. package/deps/librdkafka/packaging/cp/check_features.c +64 -0
  158. package/deps/librdkafka/packaging/cp/verify-deb.sh +33 -0
  159. package/deps/librdkafka/packaging/cp/verify-packages.sh +48 -0
  160. package/deps/librdkafka/packaging/cp/verify-rpm.sh +39 -0
  161. package/deps/librdkafka/packaging/debian/changelog +66 -0
  162. package/deps/librdkafka/packaging/debian/compat +1 -0
  163. package/deps/librdkafka/packaging/debian/control +49 -0
  164. package/deps/librdkafka/packaging/debian/copyright +84 -0
  165. package/deps/librdkafka/packaging/debian/gbp.conf +9 -0
  166. package/deps/librdkafka/packaging/debian/librdkafka-dev.dirs +2 -0
  167. package/deps/librdkafka/packaging/debian/librdkafka-dev.examples +2 -0
  168. package/deps/librdkafka/packaging/debian/librdkafka-dev.install +6 -0
  169. package/deps/librdkafka/packaging/debian/librdkafka-dev.substvars +1 -0
  170. package/deps/librdkafka/packaging/debian/librdkafka.dsc +16 -0
  171. package/deps/librdkafka/packaging/debian/librdkafka1-dbg.substvars +1 -0
  172. package/deps/librdkafka/packaging/debian/librdkafka1.dirs +1 -0
  173. package/deps/librdkafka/packaging/debian/librdkafka1.install +2 -0
  174. package/deps/librdkafka/packaging/debian/librdkafka1.postinst.debhelper +5 -0
  175. package/deps/librdkafka/packaging/debian/librdkafka1.postrm.debhelper +5 -0
  176. package/deps/librdkafka/packaging/debian/librdkafka1.symbols +64 -0
  177. package/deps/librdkafka/packaging/debian/rules +19 -0
  178. package/deps/librdkafka/packaging/debian/source/format +1 -0
  179. package/deps/librdkafka/packaging/debian/watch +2 -0
  180. package/deps/librdkafka/packaging/get_version.py +21 -0
  181. package/deps/librdkafka/packaging/homebrew/README.md +15 -0
  182. package/deps/librdkafka/packaging/homebrew/brew-update-pr.sh +31 -0
  183. package/deps/librdkafka/packaging/mingw-w64/configure-build-msys2-mingw-static.sh +52 -0
  184. package/deps/librdkafka/packaging/mingw-w64/configure-build-msys2-mingw.sh +21 -0
  185. package/deps/librdkafka/packaging/mingw-w64/run-tests.sh +6 -0
  186. package/deps/librdkafka/packaging/mingw-w64/semaphoreci-build.sh +38 -0
  187. package/deps/librdkafka/packaging/mingw-w64/travis-before-install.sh +20 -0
  188. package/deps/librdkafka/packaging/nuget/README.md +84 -0
  189. package/deps/librdkafka/packaging/nuget/artifact.py +177 -0
  190. package/deps/librdkafka/packaging/nuget/cleanup-s3.py +143 -0
  191. package/deps/librdkafka/packaging/nuget/common/p-common__plat-windows__arch-win32__bldtype-Release/msvcr120.zip +0 -0
  192. package/deps/librdkafka/packaging/nuget/common/p-common__plat-windows__arch-win32__bldtype-Release/msvcr140.zip +0 -0
  193. package/deps/librdkafka/packaging/nuget/common/p-common__plat-windows__arch-x64__bldtype-Release/msvcr120.zip +0 -0
  194. package/deps/librdkafka/packaging/nuget/common/p-common__plat-windows__arch-x64__bldtype-Release/msvcr140.zip +0 -0
  195. package/deps/librdkafka/packaging/nuget/nuget.sh +21 -0
  196. package/deps/librdkafka/packaging/nuget/nugetpackage.py +278 -0
  197. package/deps/librdkafka/packaging/nuget/packaging.py +448 -0
  198. package/deps/librdkafka/packaging/nuget/push-to-nuget.sh +21 -0
  199. package/deps/librdkafka/packaging/nuget/release.py +167 -0
  200. package/deps/librdkafka/packaging/nuget/requirements.txt +3 -0
  201. package/deps/librdkafka/packaging/nuget/staticpackage.py +178 -0
  202. package/deps/librdkafka/packaging/nuget/templates/librdkafka.redist.nuspec +21 -0
  203. package/deps/librdkafka/packaging/nuget/templates/librdkafka.redist.props +18 -0
  204. package/deps/librdkafka/packaging/nuget/templates/librdkafka.redist.targets +19 -0
  205. package/deps/librdkafka/packaging/nuget/zfile/__init__.py +0 -0
  206. package/deps/librdkafka/packaging/nuget/zfile/zfile.py +98 -0
  207. package/deps/librdkafka/packaging/rpm/Makefile +92 -0
  208. package/deps/librdkafka/packaging/rpm/README.md +23 -0
  209. package/deps/librdkafka/packaging/rpm/el7-x86_64.cfg +40 -0
  210. package/deps/librdkafka/packaging/rpm/librdkafka.spec +118 -0
  211. package/deps/librdkafka/packaging/rpm/mock-on-docker.sh +96 -0
  212. package/deps/librdkafka/packaging/rpm/tests/Makefile +25 -0
  213. package/deps/librdkafka/packaging/rpm/tests/README.md +8 -0
  214. package/deps/librdkafka/packaging/rpm/tests/run-test.sh +42 -0
  215. package/deps/librdkafka/packaging/rpm/tests/test-on-docker.sh +56 -0
  216. package/deps/librdkafka/packaging/rpm/tests/test.c +77 -0
  217. package/deps/librdkafka/packaging/rpm/tests/test.cpp +34 -0
  218. package/deps/librdkafka/packaging/tools/build-configurations-checks.sh +10 -0
  219. package/deps/librdkafka/packaging/tools/build-deb-package.sh +64 -0
  220. package/deps/librdkafka/packaging/tools/build-debian.sh +65 -0
  221. package/deps/librdkafka/packaging/tools/build-manylinux.sh +68 -0
  222. package/deps/librdkafka/packaging/tools/build-release-artifacts.sh +139 -0
  223. package/deps/librdkafka/packaging/tools/distro-build.sh +38 -0
  224. package/deps/librdkafka/packaging/tools/gh-release-checksums.py +39 -0
  225. package/deps/librdkafka/packaging/tools/rdutcoverage.sh +25 -0
  226. package/deps/librdkafka/packaging/tools/requirements.txt +2 -0
  227. package/deps/librdkafka/packaging/tools/style-format.sh +148 -0
  228. package/deps/librdkafka/service.yml +18 -0
  229. package/deps/librdkafka/src/CMakeLists.txt +374 -0
  230. package/deps/librdkafka/src/Makefile +103 -0
  231. package/deps/librdkafka/src/README.lz4.md +30 -0
  232. package/deps/librdkafka/src/cJSON.c +2834 -0
  233. package/deps/librdkafka/src/cJSON.h +398 -0
  234. package/deps/librdkafka/src/crc32c.c +430 -0
  235. package/deps/librdkafka/src/crc32c.h +38 -0
  236. package/deps/librdkafka/src/generate_proto.sh +66 -0
  237. package/deps/librdkafka/src/librdkafka_cgrp_synch.png +0 -0
  238. package/deps/librdkafka/src/lz4.c +2727 -0
  239. package/deps/librdkafka/src/lz4.h +842 -0
  240. package/deps/librdkafka/src/lz4frame.c +2078 -0
  241. package/deps/librdkafka/src/lz4frame.h +692 -0
  242. package/deps/librdkafka/src/lz4frame_static.h +47 -0
  243. package/deps/librdkafka/src/lz4hc.c +1631 -0
  244. package/deps/librdkafka/src/lz4hc.h +413 -0
  245. package/deps/librdkafka/src/nanopb/pb.h +917 -0
  246. package/deps/librdkafka/src/nanopb/pb_common.c +388 -0
  247. package/deps/librdkafka/src/nanopb/pb_common.h +49 -0
  248. package/deps/librdkafka/src/nanopb/pb_decode.c +1727 -0
  249. package/deps/librdkafka/src/nanopb/pb_decode.h +193 -0
  250. package/deps/librdkafka/src/nanopb/pb_encode.c +1000 -0
  251. package/deps/librdkafka/src/nanopb/pb_encode.h +185 -0
  252. package/deps/librdkafka/src/opentelemetry/common.pb.c +32 -0
  253. package/deps/librdkafka/src/opentelemetry/common.pb.h +170 -0
  254. package/deps/librdkafka/src/opentelemetry/metrics.options +2 -0
  255. package/deps/librdkafka/src/opentelemetry/metrics.pb.c +67 -0
  256. package/deps/librdkafka/src/opentelemetry/metrics.pb.h +966 -0
  257. package/deps/librdkafka/src/opentelemetry/resource.pb.c +12 -0
  258. package/deps/librdkafka/src/opentelemetry/resource.pb.h +58 -0
  259. package/deps/librdkafka/src/queue.h +850 -0
  260. package/deps/librdkafka/src/rd.h +441 -0
  261. package/deps/librdkafka/src/rdaddr.c +255 -0
  262. package/deps/librdkafka/src/rdaddr.h +203 -0
  263. package/deps/librdkafka/src/rdatomic.h +226 -0
  264. package/deps/librdkafka/src/rdavg.h +259 -0
  265. package/deps/librdkafka/src/rdavl.c +210 -0
  266. package/deps/librdkafka/src/rdavl.h +250 -0
  267. package/deps/librdkafka/src/rdbase64.c +169 -0
  268. package/deps/librdkafka/src/rdbase64.h +41 -0
  269. package/deps/librdkafka/src/rdbuf.c +1884 -0
  270. package/deps/librdkafka/src/rdbuf.h +375 -0
  271. package/deps/librdkafka/src/rdcrc32.c +114 -0
  272. package/deps/librdkafka/src/rdcrc32.h +170 -0
  273. package/deps/librdkafka/src/rddl.c +179 -0
  274. package/deps/librdkafka/src/rddl.h +43 -0
  275. package/deps/librdkafka/src/rdendian.h +174 -0
  276. package/deps/librdkafka/src/rdfloat.h +67 -0
  277. package/deps/librdkafka/src/rdfnv1a.c +113 -0
  278. package/deps/librdkafka/src/rdfnv1a.h +35 -0
  279. package/deps/librdkafka/src/rdgz.c +120 -0
  280. package/deps/librdkafka/src/rdgz.h +46 -0
  281. package/deps/librdkafka/src/rdhdrhistogram.c +721 -0
  282. package/deps/librdkafka/src/rdhdrhistogram.h +87 -0
  283. package/deps/librdkafka/src/rdhttp.c +512 -0
  284. package/deps/librdkafka/src/rdhttp.h +83 -0
  285. package/deps/librdkafka/src/rdinterval.h +177 -0
  286. package/deps/librdkafka/src/rdkafka.c +5351 -0
  287. package/deps/librdkafka/src/rdkafka.h +10603 -0
  288. package/deps/librdkafka/src/rdkafka_admin.c +9417 -0
  289. package/deps/librdkafka/src/rdkafka_admin.h +619 -0
  290. package/deps/librdkafka/src/rdkafka_assignment.c +1010 -0
  291. package/deps/librdkafka/src/rdkafka_assignment.h +73 -0
  292. package/deps/librdkafka/src/rdkafka_assignor.c +1786 -0
  293. package/deps/librdkafka/src/rdkafka_assignor.h +402 -0
  294. package/deps/librdkafka/src/rdkafka_aux.c +409 -0
  295. package/deps/librdkafka/src/rdkafka_aux.h +174 -0
  296. package/deps/librdkafka/src/rdkafka_background.c +221 -0
  297. package/deps/librdkafka/src/rdkafka_broker.c +6186 -0
  298. package/deps/librdkafka/src/rdkafka_broker.h +686 -0
  299. package/deps/librdkafka/src/rdkafka_buf.c +540 -0
  300. package/deps/librdkafka/src/rdkafka_buf.h +1524 -0
  301. package/deps/librdkafka/src/rdkafka_cert.c +552 -0
  302. package/deps/librdkafka/src/rdkafka_cert.h +61 -0
  303. package/deps/librdkafka/src/rdkafka_cgrp.c +7262 -0
  304. package/deps/librdkafka/src/rdkafka_cgrp.h +443 -0
  305. package/deps/librdkafka/src/rdkafka_conf.c +4456 -0
  306. package/deps/librdkafka/src/rdkafka_conf.h +668 -0
  307. package/deps/librdkafka/src/rdkafka_confval.h +97 -0
  308. package/deps/librdkafka/src/rdkafka_coord.c +623 -0
  309. package/deps/librdkafka/src/rdkafka_coord.h +132 -0
  310. package/deps/librdkafka/src/rdkafka_error.c +228 -0
  311. package/deps/librdkafka/src/rdkafka_error.h +80 -0
  312. package/deps/librdkafka/src/rdkafka_event.c +502 -0
  313. package/deps/librdkafka/src/rdkafka_event.h +126 -0
  314. package/deps/librdkafka/src/rdkafka_feature.c +461 -0
  315. package/deps/librdkafka/src/rdkafka_feature.h +102 -0
  316. package/deps/librdkafka/src/rdkafka_fetcher.c +1402 -0
  317. package/deps/librdkafka/src/rdkafka_fetcher.h +44 -0
  318. package/deps/librdkafka/src/rdkafka_header.c +220 -0
  319. package/deps/librdkafka/src/rdkafka_header.h +76 -0
  320. package/deps/librdkafka/src/rdkafka_idempotence.c +807 -0
  321. package/deps/librdkafka/src/rdkafka_idempotence.h +144 -0
  322. package/deps/librdkafka/src/rdkafka_int.h +1222 -0
  323. package/deps/librdkafka/src/rdkafka_interceptor.c +819 -0
  324. package/deps/librdkafka/src/rdkafka_interceptor.h +104 -0
  325. package/deps/librdkafka/src/rdkafka_lz4.c +450 -0
  326. package/deps/librdkafka/src/rdkafka_lz4.h +49 -0
  327. package/deps/librdkafka/src/rdkafka_metadata.c +2124 -0
  328. package/deps/librdkafka/src/rdkafka_metadata.h +341 -0
  329. package/deps/librdkafka/src/rdkafka_metadata_cache.c +977 -0
  330. package/deps/librdkafka/src/rdkafka_mock.c +2885 -0
  331. package/deps/librdkafka/src/rdkafka_mock.h +491 -0
  332. package/deps/librdkafka/src/rdkafka_mock_cgrp.c +710 -0
  333. package/deps/librdkafka/src/rdkafka_mock_handlers.c +2817 -0
  334. package/deps/librdkafka/src/rdkafka_mock_int.h +591 -0
  335. package/deps/librdkafka/src/rdkafka_msg.c +2573 -0
  336. package/deps/librdkafka/src/rdkafka_msg.h +614 -0
  337. package/deps/librdkafka/src/rdkafka_msgbatch.h +62 -0
  338. package/deps/librdkafka/src/rdkafka_msgset.h +98 -0
  339. package/deps/librdkafka/src/rdkafka_msgset_reader.c +1806 -0
  340. package/deps/librdkafka/src/rdkafka_msgset_writer.c +1470 -0
  341. package/deps/librdkafka/src/rdkafka_offset.c +1537 -0
  342. package/deps/librdkafka/src/rdkafka_offset.h +150 -0
  343. package/deps/librdkafka/src/rdkafka_op.c +997 -0
  344. package/deps/librdkafka/src/rdkafka_op.h +834 -0
  345. package/deps/librdkafka/src/rdkafka_partition.c +4801 -0
  346. package/deps/librdkafka/src/rdkafka_partition.h +1173 -0
  347. package/deps/librdkafka/src/rdkafka_pattern.c +228 -0
  348. package/deps/librdkafka/src/rdkafka_pattern.h +70 -0
  349. package/deps/librdkafka/src/rdkafka_plugin.c +213 -0
  350. package/deps/librdkafka/src/rdkafka_plugin.h +41 -0
  351. package/deps/librdkafka/src/rdkafka_proto.h +733 -0
  352. package/deps/librdkafka/src/rdkafka_protocol.h +127 -0
  353. package/deps/librdkafka/src/rdkafka_queue.c +1153 -0
  354. package/deps/librdkafka/src/rdkafka_queue.h +1201 -0
  355. package/deps/librdkafka/src/rdkafka_range_assignor.c +1748 -0
  356. package/deps/librdkafka/src/rdkafka_request.c +6817 -0
  357. package/deps/librdkafka/src/rdkafka_request.h +709 -0
  358. package/deps/librdkafka/src/rdkafka_roundrobin_assignor.c +123 -0
  359. package/deps/librdkafka/src/rdkafka_sasl.c +528 -0
  360. package/deps/librdkafka/src/rdkafka_sasl.h +63 -0
  361. package/deps/librdkafka/src/rdkafka_sasl_cyrus.c +722 -0
  362. package/deps/librdkafka/src/rdkafka_sasl_int.h +89 -0
  363. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer.c +1829 -0
  364. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer.h +52 -0
  365. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer_oidc.c +589 -0
  366. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer_oidc.h +37 -0
  367. package/deps/librdkafka/src/rdkafka_sasl_plain.c +142 -0
  368. package/deps/librdkafka/src/rdkafka_sasl_scram.c +857 -0
  369. package/deps/librdkafka/src/rdkafka_sasl_win32.c +550 -0
  370. package/deps/librdkafka/src/rdkafka_ssl.c +1904 -0
  371. package/deps/librdkafka/src/rdkafka_ssl.h +64 -0
  372. package/deps/librdkafka/src/rdkafka_sticky_assignor.c +4781 -0
  373. package/deps/librdkafka/src/rdkafka_subscription.c +278 -0
  374. package/deps/librdkafka/src/rdkafka_telemetry.c +703 -0
  375. package/deps/librdkafka/src/rdkafka_telemetry.h +52 -0
  376. package/deps/librdkafka/src/rdkafka_telemetry_decode.c +1053 -0
  377. package/deps/librdkafka/src/rdkafka_telemetry_decode.h +59 -0
  378. package/deps/librdkafka/src/rdkafka_telemetry_encode.c +993 -0
  379. package/deps/librdkafka/src/rdkafka_telemetry_encode.h +301 -0
  380. package/deps/librdkafka/src/rdkafka_timer.c +402 -0
  381. package/deps/librdkafka/src/rdkafka_timer.h +117 -0
  382. package/deps/librdkafka/src/rdkafka_topic.c +2078 -0
  383. package/deps/librdkafka/src/rdkafka_topic.h +328 -0
  384. package/deps/librdkafka/src/rdkafka_transport.c +1297 -0
  385. package/deps/librdkafka/src/rdkafka_transport.h +94 -0
  386. package/deps/librdkafka/src/rdkafka_transport_int.h +100 -0
  387. package/deps/librdkafka/src/rdkafka_txnmgr.c +3251 -0
  388. package/deps/librdkafka/src/rdkafka_txnmgr.h +171 -0
  389. package/deps/librdkafka/src/rdkafka_zstd.c +226 -0
  390. package/deps/librdkafka/src/rdkafka_zstd.h +57 -0
  391. package/deps/librdkafka/src/rdlist.c +576 -0
  392. package/deps/librdkafka/src/rdlist.h +434 -0
  393. package/deps/librdkafka/src/rdlog.c +89 -0
  394. package/deps/librdkafka/src/rdlog.h +41 -0
  395. package/deps/librdkafka/src/rdmap.c +503 -0
  396. package/deps/librdkafka/src/rdmap.h +492 -0
  397. package/deps/librdkafka/src/rdmurmur2.c +167 -0
  398. package/deps/librdkafka/src/rdmurmur2.h +35 -0
  399. package/deps/librdkafka/src/rdports.c +61 -0
  400. package/deps/librdkafka/src/rdports.h +38 -0
  401. package/deps/librdkafka/src/rdposix.h +250 -0
  402. package/deps/librdkafka/src/rdrand.c +70 -0
  403. package/deps/librdkafka/src/rdrand.h +43 -0
  404. package/deps/librdkafka/src/rdregex.c +156 -0
  405. package/deps/librdkafka/src/rdregex.h +43 -0
  406. package/deps/librdkafka/src/rdsignal.h +57 -0
  407. package/deps/librdkafka/src/rdstring.c +645 -0
  408. package/deps/librdkafka/src/rdstring.h +98 -0
  409. package/deps/librdkafka/src/rdsysqueue.h +404 -0
  410. package/deps/librdkafka/src/rdtime.h +325 -0
  411. package/deps/librdkafka/src/rdtypes.h +86 -0
  412. package/deps/librdkafka/src/rdunittest.c +532 -0
  413. package/deps/librdkafka/src/rdunittest.h +230 -0
  414. package/deps/librdkafka/src/rdvarint.c +134 -0
  415. package/deps/librdkafka/src/rdvarint.h +165 -0
  416. package/deps/librdkafka/src/rdwin32.h +382 -0
  417. package/deps/librdkafka/src/rdxxhash.c +1030 -0
  418. package/deps/librdkafka/src/rdxxhash.h +328 -0
  419. package/deps/librdkafka/src/regexp.c +1347 -0
  420. package/deps/librdkafka/src/regexp.h +41 -0
  421. package/deps/librdkafka/src/snappy.c +1866 -0
  422. package/deps/librdkafka/src/snappy.h +62 -0
  423. package/deps/librdkafka/src/snappy_compat.h +138 -0
  424. package/deps/librdkafka/src/statistics_schema.json +444 -0
  425. package/deps/librdkafka/src/tinycthread.c +932 -0
  426. package/deps/librdkafka/src/tinycthread.h +503 -0
  427. package/deps/librdkafka/src/tinycthread_extra.c +175 -0
  428. package/deps/librdkafka/src/tinycthread_extra.h +208 -0
  429. package/deps/librdkafka/src/win32_config.h +58 -0
  430. package/deps/librdkafka/src-cpp/CMakeLists.txt +90 -0
  431. package/deps/librdkafka/src-cpp/ConfImpl.cpp +84 -0
  432. package/deps/librdkafka/src-cpp/ConsumerImpl.cpp +244 -0
  433. package/deps/librdkafka/src-cpp/HandleImpl.cpp +436 -0
  434. package/deps/librdkafka/src-cpp/HeadersImpl.cpp +48 -0
  435. package/deps/librdkafka/src-cpp/KafkaConsumerImpl.cpp +296 -0
  436. package/deps/librdkafka/src-cpp/Makefile +55 -0
  437. package/deps/librdkafka/src-cpp/MessageImpl.cpp +38 -0
  438. package/deps/librdkafka/src-cpp/MetadataImpl.cpp +170 -0
  439. package/deps/librdkafka/src-cpp/ProducerImpl.cpp +197 -0
  440. package/deps/librdkafka/src-cpp/QueueImpl.cpp +70 -0
  441. package/deps/librdkafka/src-cpp/README.md +16 -0
  442. package/deps/librdkafka/src-cpp/RdKafka.cpp +59 -0
  443. package/deps/librdkafka/src-cpp/TopicImpl.cpp +124 -0
  444. package/deps/librdkafka/src-cpp/TopicPartitionImpl.cpp +57 -0
  445. package/deps/librdkafka/src-cpp/rdkafkacpp.h +3771 -0
  446. package/deps/librdkafka/src-cpp/rdkafkacpp_int.h +1641 -0
  447. package/deps/librdkafka/tests/0000-unittests.c +72 -0
  448. package/deps/librdkafka/tests/0001-multiobj.c +98 -0
  449. package/deps/librdkafka/tests/0002-unkpart.c +244 -0
  450. package/deps/librdkafka/tests/0003-msgmaxsize.c +173 -0
  451. package/deps/librdkafka/tests/0004-conf.c +867 -0
  452. package/deps/librdkafka/tests/0005-order.c +133 -0
  453. package/deps/librdkafka/tests/0006-symbols.c +163 -0
  454. package/deps/librdkafka/tests/0007-autotopic.c +136 -0
  455. package/deps/librdkafka/tests/0008-reqacks.c +179 -0
  456. package/deps/librdkafka/tests/0009-mock_cluster.c +96 -0
  457. package/deps/librdkafka/tests/0011-produce_batch.c +752 -0
  458. package/deps/librdkafka/tests/0012-produce_consume.c +537 -0
  459. package/deps/librdkafka/tests/0013-null-msgs.c +473 -0
  460. package/deps/librdkafka/tests/0014-reconsume-191.c +512 -0
  461. package/deps/librdkafka/tests/0015-offset_seeks.c +172 -0
  462. package/deps/librdkafka/tests/0016-client_swname.c +166 -0
  463. package/deps/librdkafka/tests/0017-compression.c +142 -0
  464. package/deps/librdkafka/tests/0018-cgrp_term.c +333 -0
  465. package/deps/librdkafka/tests/0019-list_groups.c +289 -0
  466. package/deps/librdkafka/tests/0020-destroy_hang.c +162 -0
  467. package/deps/librdkafka/tests/0021-rkt_destroy.c +71 -0
  468. package/deps/librdkafka/tests/0022-consume_batch.c +276 -0
  469. package/deps/librdkafka/tests/0025-timers.c +147 -0
  470. package/deps/librdkafka/tests/0026-consume_pause.c +549 -0
  471. package/deps/librdkafka/tests/0028-long_topicnames.c +79 -0
  472. package/deps/librdkafka/tests/0029-assign_offset.c +204 -0
  473. package/deps/librdkafka/tests/0030-offset_commit.c +589 -0
  474. package/deps/librdkafka/tests/0031-get_offsets.c +235 -0
  475. package/deps/librdkafka/tests/0033-regex_subscribe.c +520 -0
  476. package/deps/librdkafka/tests/0034-offset_reset.c +377 -0
  477. package/deps/librdkafka/tests/0035-api_version.c +73 -0
  478. package/deps/librdkafka/tests/0036-partial_fetch.c +86 -0
  479. package/deps/librdkafka/tests/0037-destroy_hang_local.c +85 -0
  480. package/deps/librdkafka/tests/0038-performance.c +120 -0
  481. package/deps/librdkafka/tests/0039-event.c +284 -0
  482. package/deps/librdkafka/tests/0040-io_event.c +251 -0
  483. package/deps/librdkafka/tests/0041-fetch_max_bytes.c +96 -0
  484. package/deps/librdkafka/tests/0042-many_topics.c +252 -0
  485. package/deps/librdkafka/tests/0043-no_connection.c +77 -0
  486. package/deps/librdkafka/tests/0044-partition_cnt.c +93 -0
  487. package/deps/librdkafka/tests/0045-subscribe_update.c +746 -0
  488. package/deps/librdkafka/tests/0046-rkt_cache.c +65 -0
  489. package/deps/librdkafka/tests/0047-partial_buf_tmout.c +97 -0
  490. package/deps/librdkafka/tests/0048-partitioner.c +283 -0
  491. package/deps/librdkafka/tests/0049-consume_conn_close.c +162 -0
  492. package/deps/librdkafka/tests/0050-subscribe_adds.c +144 -0
  493. package/deps/librdkafka/tests/0051-assign_adds.c +125 -0
  494. package/deps/librdkafka/tests/0052-msg_timestamps.c +220 -0
  495. package/deps/librdkafka/tests/0053-stats_cb.cpp +535 -0
  496. package/deps/librdkafka/tests/0054-offset_time.cpp +236 -0
  497. package/deps/librdkafka/tests/0055-producer_latency.c +366 -0
  498. package/deps/librdkafka/tests/0056-balanced_group_mt.c +311 -0
  499. package/deps/librdkafka/tests/0057-invalid_topic.cpp +112 -0
  500. package/deps/librdkafka/tests/0058-log.cpp +123 -0
  501. package/deps/librdkafka/tests/0059-bsearch.cpp +237 -0
  502. package/deps/librdkafka/tests/0060-op_prio.cpp +163 -0
  503. package/deps/librdkafka/tests/0061-consumer_lag.cpp +275 -0
  504. package/deps/librdkafka/tests/0062-stats_event.c +126 -0
  505. package/deps/librdkafka/tests/0063-clusterid.cpp +180 -0
  506. package/deps/librdkafka/tests/0064-interceptors.c +481 -0
  507. package/deps/librdkafka/tests/0065-yield.cpp +140 -0
  508. package/deps/librdkafka/tests/0066-plugins.cpp +129 -0
  509. package/deps/librdkafka/tests/0067-empty_topic.cpp +148 -0
  510. package/deps/librdkafka/tests/0068-produce_timeout.c +138 -0
  511. package/deps/librdkafka/tests/0069-consumer_add_parts.c +123 -0
  512. package/deps/librdkafka/tests/0070-null_empty.cpp +197 -0
  513. package/deps/librdkafka/tests/0072-headers_ut.c +448 -0
  514. package/deps/librdkafka/tests/0073-headers.c +381 -0
  515. package/deps/librdkafka/tests/0074-producev.c +87 -0
  516. package/deps/librdkafka/tests/0075-retry.c +253 -0
  517. package/deps/librdkafka/tests/0076-produce_retry.c +450 -0
  518. package/deps/librdkafka/tests/0077-compaction.c +357 -0
  519. package/deps/librdkafka/tests/0078-c_from_cpp.cpp +96 -0
  520. package/deps/librdkafka/tests/0079-fork.c +93 -0
  521. package/deps/librdkafka/tests/0080-admin_ut.c +3065 -0
  522. package/deps/librdkafka/tests/0081-admin.c +5333 -0
  523. package/deps/librdkafka/tests/0082-fetch_max_bytes.cpp +133 -0
  524. package/deps/librdkafka/tests/0083-cb_event.c +228 -0
  525. package/deps/librdkafka/tests/0084-destroy_flags.c +212 -0
  526. package/deps/librdkafka/tests/0085-headers.cpp +388 -0
  527. package/deps/librdkafka/tests/0086-purge.c +335 -0
  528. package/deps/librdkafka/tests/0088-produce_metadata_timeout.c +162 -0
  529. package/deps/librdkafka/tests/0089-max_poll_interval.c +506 -0
  530. package/deps/librdkafka/tests/0090-idempotence.c +172 -0
  531. package/deps/librdkafka/tests/0091-max_poll_interval_timeout.c +297 -0
  532. package/deps/librdkafka/tests/0092-mixed_msgver.c +97 -0
  533. package/deps/librdkafka/tests/0093-holb.c +197 -0
  534. package/deps/librdkafka/tests/0094-idempotence_msg_timeout.c +230 -0
  535. package/deps/librdkafka/tests/0095-all_brokers_down.cpp +122 -0
  536. package/deps/librdkafka/tests/0097-ssl_verify.cpp +466 -0
  537. package/deps/librdkafka/tests/0098-consumer-txn.cpp +1218 -0
  538. package/deps/librdkafka/tests/0099-commit_metadata.c +194 -0
  539. package/deps/librdkafka/tests/0100-thread_interceptors.cpp +195 -0
  540. package/deps/librdkafka/tests/0101-fetch-from-follower.cpp +446 -0
  541. package/deps/librdkafka/tests/0102-static_group_rebalance.c +535 -0
  542. package/deps/librdkafka/tests/0103-transactions.c +1383 -0
  543. package/deps/librdkafka/tests/0104-fetch_from_follower_mock.c +624 -0
  544. package/deps/librdkafka/tests/0105-transactions_mock.c +3923 -0
  545. package/deps/librdkafka/tests/0106-cgrp_sess_timeout.c +297 -0
  546. package/deps/librdkafka/tests/0107-topic_recreate.c +259 -0
  547. package/deps/librdkafka/tests/0109-auto_create_topics.cpp +218 -0
  548. package/deps/librdkafka/tests/0110-batch_size.cpp +183 -0
  549. package/deps/librdkafka/tests/0111-delay_create_topics.cpp +127 -0
  550. package/deps/librdkafka/tests/0112-assign_unknown_part.c +98 -0
  551. package/deps/librdkafka/tests/0113-cooperative_rebalance.cpp +3329 -0
  552. package/deps/librdkafka/tests/0114-sticky_partitioning.cpp +176 -0
  553. package/deps/librdkafka/tests/0115-producer_auth.cpp +179 -0
  554. package/deps/librdkafka/tests/0116-kafkaconsumer_close.cpp +214 -0
  555. package/deps/librdkafka/tests/0117-mock_errors.c +321 -0
  556. package/deps/librdkafka/tests/0118-commit_rebalance.c +121 -0
  557. package/deps/librdkafka/tests/0119-consumer_auth.cpp +148 -0
  558. package/deps/librdkafka/tests/0120-asymmetric_subscription.c +180 -0
  559. package/deps/librdkafka/tests/0121-clusterid.c +115 -0
  560. package/deps/librdkafka/tests/0122-buffer_cleaning_after_rebalance.c +227 -0
  561. package/deps/librdkafka/tests/0123-connections_max_idle.c +98 -0
  562. package/deps/librdkafka/tests/0124-openssl_invalid_engine.c +69 -0
  563. package/deps/librdkafka/tests/0125-immediate_flush.c +144 -0
  564. package/deps/librdkafka/tests/0126-oauthbearer_oidc.c +213 -0
  565. package/deps/librdkafka/tests/0127-fetch_queue_backoff.cpp +165 -0
  566. package/deps/librdkafka/tests/0128-sasl_callback_queue.cpp +125 -0
  567. package/deps/librdkafka/tests/0129-fetch_aborted_msgs.c +78 -0
  568. package/deps/librdkafka/tests/0130-store_offsets.c +178 -0
  569. package/deps/librdkafka/tests/0131-connect_timeout.c +81 -0
  570. package/deps/librdkafka/tests/0132-strategy_ordering.c +171 -0
  571. package/deps/librdkafka/tests/0133-ssl_keys.c +128 -0
  572. package/deps/librdkafka/tests/0134-ssl_provider.c +92 -0
  573. package/deps/librdkafka/tests/0135-sasl_credentials.cpp +143 -0
  574. package/deps/librdkafka/tests/0136-resolve_cb.c +181 -0
  575. package/deps/librdkafka/tests/0137-barrier_batch_consume.c +609 -0
  576. package/deps/librdkafka/tests/0138-admin_mock.c +281 -0
  577. package/deps/librdkafka/tests/0139-offset_validation_mock.c +442 -0
  578. package/deps/librdkafka/tests/0140-commit_metadata.cpp +108 -0
  579. package/deps/librdkafka/tests/0142-reauthentication.c +495 -0
  580. package/deps/librdkafka/tests/0143-exponential_backoff_mock.c +553 -0
  581. package/deps/librdkafka/tests/0144-idempotence_mock.c +373 -0
  582. package/deps/librdkafka/tests/0145-pause_resume_mock.c +119 -0
  583. package/deps/librdkafka/tests/0146-metadata_mock.c +444 -0
  584. package/deps/librdkafka/tests/0150-telemetry_mock.c +648 -0
  585. package/deps/librdkafka/tests/1000-unktopic.c +164 -0
  586. package/deps/librdkafka/tests/8000-idle.cpp +60 -0
  587. package/deps/librdkafka/tests/8001-fetch_from_follower_mock_manual.c +113 -0
  588. package/deps/librdkafka/tests/CMakeLists.txt +164 -0
  589. package/deps/librdkafka/tests/LibrdkafkaTestApp.py +266 -0
  590. package/deps/librdkafka/tests/Makefile +182 -0
  591. package/deps/librdkafka/tests/README.md +509 -0
  592. package/deps/librdkafka/tests/autotest.sh +33 -0
  593. package/deps/librdkafka/tests/backtrace.gdb +30 -0
  594. package/deps/librdkafka/tests/broker_version_tests.py +315 -0
  595. package/deps/librdkafka/tests/buildbox.sh +17 -0
  596. package/deps/librdkafka/tests/cleanup-checker-tests.sh +20 -0
  597. package/deps/librdkafka/tests/cluster_testing.py +191 -0
  598. package/deps/librdkafka/tests/delete-test-topics.sh +56 -0
  599. package/deps/librdkafka/tests/fixtures/ssl/Makefile +8 -0
  600. package/deps/librdkafka/tests/fixtures/ssl/README.md +13 -0
  601. package/deps/librdkafka/tests/fixtures/ssl/client.keystore.p12 +0 -0
  602. package/deps/librdkafka/tests/fixtures/ssl/client2.certificate.pem +109 -0
  603. package/deps/librdkafka/tests/fixtures/ssl/client2.key +34 -0
  604. package/deps/librdkafka/tests/fixtures/ssl/create_keys.sh +93 -0
  605. package/deps/librdkafka/tests/fuzzers/Makefile +12 -0
  606. package/deps/librdkafka/tests/fuzzers/README.md +31 -0
  607. package/deps/librdkafka/tests/fuzzers/fuzz_regex.c +74 -0
  608. package/deps/librdkafka/tests/fuzzers/helpers.h +90 -0
  609. package/deps/librdkafka/tests/gen-ssl-certs.sh +165 -0
  610. package/deps/librdkafka/tests/interactive_broker_version.py +170 -0
  611. package/deps/librdkafka/tests/interceptor_test/CMakeLists.txt +16 -0
  612. package/deps/librdkafka/tests/interceptor_test/Makefile +22 -0
  613. package/deps/librdkafka/tests/interceptor_test/interceptor_test.c +314 -0
  614. package/deps/librdkafka/tests/interceptor_test/interceptor_test.h +54 -0
  615. package/deps/librdkafka/tests/java/IncrementalRebalanceCli.java +97 -0
  616. package/deps/librdkafka/tests/java/Makefile +12 -0
  617. package/deps/librdkafka/tests/java/Murmur2Cli.java +46 -0
  618. package/deps/librdkafka/tests/java/README.md +14 -0
  619. package/deps/librdkafka/tests/java/TransactionProducerCli.java +162 -0
  620. package/deps/librdkafka/tests/java/run-class.sh +11 -0
  621. package/deps/librdkafka/tests/librdkafka.suppressions +483 -0
  622. package/deps/librdkafka/tests/lz4_manual_test.sh +59 -0
  623. package/deps/librdkafka/tests/multi-broker-version-test.sh +50 -0
  624. package/deps/librdkafka/tests/parse-refcnt.sh +43 -0
  625. package/deps/librdkafka/tests/performance_plot.py +115 -0
  626. package/deps/librdkafka/tests/plugin_test/Makefile +19 -0
  627. package/deps/librdkafka/tests/plugin_test/plugin_test.c +58 -0
  628. package/deps/librdkafka/tests/requirements.txt +2 -0
  629. package/deps/librdkafka/tests/run-consumer-tests.sh +16 -0
  630. package/deps/librdkafka/tests/run-producer-tests.sh +16 -0
  631. package/deps/librdkafka/tests/run-test.sh +140 -0
  632. package/deps/librdkafka/tests/rusage.c +249 -0
  633. package/deps/librdkafka/tests/sasl_test.py +289 -0
  634. package/deps/librdkafka/tests/scenarios/README.md +6 -0
  635. package/deps/librdkafka/tests/scenarios/ak23.json +6 -0
  636. package/deps/librdkafka/tests/scenarios/default.json +5 -0
  637. package/deps/librdkafka/tests/scenarios/noautocreate.json +5 -0
  638. package/deps/librdkafka/tests/sockem.c +801 -0
  639. package/deps/librdkafka/tests/sockem.h +85 -0
  640. package/deps/librdkafka/tests/sockem_ctrl.c +145 -0
  641. package/deps/librdkafka/tests/sockem_ctrl.h +61 -0
  642. package/deps/librdkafka/tests/test.c +7318 -0
  643. package/deps/librdkafka/tests/test.conf.example +27 -0
  644. package/deps/librdkafka/tests/test.h +979 -0
  645. package/deps/librdkafka/tests/testcpp.cpp +126 -0
  646. package/deps/librdkafka/tests/testcpp.h +360 -0
  647. package/deps/librdkafka/tests/testshared.h +402 -0
  648. package/deps/librdkafka/tests/tools/README.md +4 -0
  649. package/deps/librdkafka/tests/tools/stats/README.md +21 -0
  650. package/deps/librdkafka/tests/tools/stats/filter.jq +42 -0
  651. package/deps/librdkafka/tests/tools/stats/graph.py +150 -0
  652. package/deps/librdkafka/tests/tools/stats/requirements.txt +3 -0
  653. package/deps/librdkafka/tests/tools/stats/to_csv.py +124 -0
  654. package/deps/librdkafka/tests/until-fail.sh +87 -0
  655. package/deps/librdkafka/tests/xxxx-assign_partition.c +122 -0
  656. package/deps/librdkafka/tests/xxxx-metadata.cpp +159 -0
  657. package/deps/librdkafka/vcpkg.json +23 -0
  658. package/deps/librdkafka/win32/README.md +5 -0
  659. package/deps/librdkafka/win32/build-package.bat +3 -0
  660. package/deps/librdkafka/win32/build.bat +19 -0
  661. package/deps/librdkafka/win32/common.vcxproj +84 -0
  662. package/deps/librdkafka/win32/install-openssl.ps1 +33 -0
  663. package/deps/librdkafka/win32/interceptor_test/interceptor_test.vcxproj +87 -0
  664. package/deps/librdkafka/win32/librdkafka.autopkg.template +54 -0
  665. package/deps/librdkafka/win32/librdkafka.master.testing.targets +13 -0
  666. package/deps/librdkafka/win32/librdkafka.sln +226 -0
  667. package/deps/librdkafka/win32/librdkafka.vcxproj +276 -0
  668. package/deps/librdkafka/win32/librdkafkacpp/librdkafkacpp.vcxproj +104 -0
  669. package/deps/librdkafka/win32/msbuild.ps1 +15 -0
  670. package/deps/librdkafka/win32/openssl_engine_example/openssl_engine_example.vcxproj +132 -0
  671. package/deps/librdkafka/win32/package-zip.ps1 +46 -0
  672. package/deps/librdkafka/win32/packages/repositories.config +4 -0
  673. package/deps/librdkafka/win32/push-package.bat +4 -0
  674. package/deps/librdkafka/win32/rdkafka_complex_consumer_example_cpp/rdkafka_complex_consumer_example_cpp.vcxproj +67 -0
  675. package/deps/librdkafka/win32/rdkafka_example/rdkafka_example.vcxproj +97 -0
  676. package/deps/librdkafka/win32/rdkafka_performance/rdkafka_performance.vcxproj +97 -0
  677. package/deps/librdkafka/win32/setup-msys2.ps1 +31 -0
  678. package/deps/librdkafka/win32/setup-vcpkg.ps1 +12 -0
  679. package/deps/librdkafka/win32/tests/test.conf.example +25 -0
  680. package/deps/librdkafka/win32/tests/tests.vcxproj +247 -0
  681. package/deps/librdkafka/win32/win_ssl_cert_store/win_ssl_cert_store.vcxproj +132 -0
  682. package/deps/librdkafka/win32/wingetopt.c +564 -0
  683. package/deps/librdkafka/win32/wingetopt.h +100 -0
  684. package/deps/librdkafka/win32/wintime.h +33 -0
  685. package/deps/librdkafka.gyp +62 -0
  686. package/deps/windows-install.py +73 -0
  687. package/docker-compose.yml +23 -0
  688. package/e2e/admin.spec.js +187 -0
  689. package/e2e/both.spec.js +726 -0
  690. package/e2e/consumer.spec.js +386 -0
  691. package/e2e/groups.spec.js +132 -0
  692. package/e2e/listener.js +51 -0
  693. package/e2e/producer-transaction.spec.js +333 -0
  694. package/e2e/producer.spec.js +283 -0
  695. package/errors.d.ts +347 -0
  696. package/examples/consumer-flow.md +76 -0
  697. package/examples/consumer.md +45 -0
  698. package/examples/docker-alpine.md +30 -0
  699. package/examples/high-level-producer.md +32 -0
  700. package/examples/metadata.md +27 -0
  701. package/examples/oauthbearer-default-flow.md +80 -0
  702. package/examples/producer-cluster.md +103 -0
  703. package/examples/producer.md +73 -0
  704. package/index.d.ts +357 -0
  705. package/lib/admin.js +233 -0
  706. package/lib/client.js +578 -0
  707. package/lib/error.js +472 -0
  708. package/lib/index.js +34 -0
  709. package/lib/kafka-consumer-stream.js +397 -0
  710. package/lib/kafka-consumer.js +698 -0
  711. package/lib/producer/high-level-producer.js +323 -0
  712. package/lib/producer-stream.js +307 -0
  713. package/lib/producer.js +375 -0
  714. package/lib/tools/ref-counter.js +52 -0
  715. package/lib/topic-partition.js +88 -0
  716. package/lib/topic.js +42 -0
  717. package/lib/util.js +29 -0
  718. package/librdkafka.js +12 -0
  719. package/make_docs.sh +59 -0
  720. package/package.json +53 -0
  721. package/renovate.json +30 -0
  722. package/run_docker.sh +42 -0
  723. package/src/admin.cc +624 -0
  724. package/src/admin.h +78 -0
  725. package/src/binding.cc +73 -0
  726. package/src/binding.h +25 -0
  727. package/src/callbacks.cc +614 -0
  728. package/src/callbacks.h +265 -0
  729. package/src/common.cc +582 -0
  730. package/src/common.h +134 -0
  731. package/src/config.cc +167 -0
  732. package/src/config.h +45 -0
  733. package/src/connection.cc +482 -0
  734. package/src/connection.h +108 -0
  735. package/src/errors.cc +96 -0
  736. package/src/errors.h +53 -0
  737. package/src/kafka-consumer.cc +1457 -0
  738. package/src/kafka-consumer.h +136 -0
  739. package/src/per-isolate-data.cc +57 -0
  740. package/src/per-isolate-data.h +39 -0
  741. package/src/producer.cc +873 -0
  742. package/src/producer.h +125 -0
  743. package/src/topic.cc +180 -0
  744. package/src/topic.h +56 -0
  745. package/src/workers.cc +1245 -0
  746. package/src/workers.h +511 -0
  747. package/test/binding.spec.js +66 -0
  748. package/test/consumer.spec.js +91 -0
  749. package/test/error.spec.js +8 -0
  750. package/test/index.spec.js +8 -0
  751. package/test/kafka-consumer-stream.spec.js +298 -0
  752. package/test/kafka-consumer-worker.js +51 -0
  753. package/test/kafka-consumer.spec.js +86 -0
  754. package/test/mocha.opts +1 -0
  755. package/test/mock.js +55 -0
  756. package/test/producer/high-level-producer.spec.js +496 -0
  757. package/test/producer-stream.spec.js +723 -0
  758. package/test/producer-worker.js +53 -0
  759. package/test/producer.spec.js +120 -0
  760. package/test/tools/ref-counter.spec.js +53 -0
  761. package/test/topic-partition.spec.js +104 -0
  762. package/test/util.spec.js +46 -0
  763. package/util/configure.js +30 -0
  764. package/util/get-env.js +6 -0
  765. package/util/test-compile.js +11 -0
  766. package/util/test-producer-delivery.js +100 -0
  767. package/win_install.ps1 +2 -0
@@ -0,0 +1,1222 @@
1
+ /*
2
+ * librdkafka - Apache Kafka C library
3
+ *
4
+ * Copyright (c) 2012-2022, Magnus Edenhill
5
+ * 2023, Confluent Inc.
6
+ * All rights reserved.
7
+ *
8
+ * Redistribution and use in source and binary forms, with or without
9
+ * modification, are permitted provided that the following conditions are met:
10
+ *
11
+ * 1. Redistributions of source code must retain the above copyright notice,
12
+ * this list of conditions and the following disclaimer.
13
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
14
+ * this list of conditions and the following disclaimer in the documentation
15
+ * and/or other materials provided with the distribution.
16
+ *
17
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
+ * POSSIBILITY OF SUCH DAMAGE.
28
+ */
29
+
30
+ #ifndef _RDKAFKA_INT_H_
31
+ #define _RDKAFKA_INT_H_
32
+
33
+ #ifndef _WIN32
34
+ #define _GNU_SOURCE /* for strndup() */
35
+ #endif
36
+
37
+ #ifdef _MSC_VER
38
+ typedef int mode_t;
39
+ #endif
40
+
41
+ #include <fcntl.h>
42
+
43
+
44
+ #include "rdsysqueue.h"
45
+
46
+ #include "rdkafka.h"
47
+ #include "rd.h"
48
+ #include "rdlog.h"
49
+ #include "rdtime.h"
50
+ #include "rdaddr.h"
51
+ #include "rdinterval.h"
52
+ #include "rdavg.h"
53
+ #include "rdlist.h"
54
+
55
+ #if WITH_SSL
56
+ #include <openssl/ssl.h>
57
+ #endif
58
+
59
+
60
+
61
+ #define rd_kafka_assert(rk, cond) \
62
+ do { \
63
+ if (unlikely(!(cond))) \
64
+ rd_kafka_crash(__FILE__, __LINE__, __FUNCTION__, (rk), \
65
+ "assert: " #cond); \
66
+ } while (0)
67
+
68
+
69
+ void RD_NORETURN rd_kafka_crash(const char *file,
70
+ int line,
71
+ const char *function,
72
+ rd_kafka_t *rk,
73
+ const char *reason);
74
+
75
+
76
+ /* Forward declarations */
77
+ struct rd_kafka_s;
78
+ struct rd_kafka_topic_s;
79
+ struct rd_kafka_msg_s;
80
+ struct rd_kafka_broker_s;
81
+ struct rd_kafka_toppar_s;
82
+ typedef struct rd_kafka_metadata_internal_s rd_kafka_metadata_internal_t;
83
+ typedef struct rd_kafka_toppar_s rd_kafka_toppar_t;
84
+ typedef struct rd_kafka_lwtopic_s rd_kafka_lwtopic_t;
85
+
86
+
87
+ /**
88
+ * Protocol level sanity
89
+ */
90
+ #define RD_KAFKAP_BROKERS_MAX 10000
91
+ #define RD_KAFKAP_TOPICS_MAX 1000000
92
+ #define RD_KAFKAP_PARTITIONS_MAX 100000
93
+
94
+
95
+ #define RD_KAFKA_OFFSET_IS_LOGICAL(OFF) ((OFF) < 0)
96
+
97
+
98
+ /**
99
+ * @struct Represents a fetch position:
100
+ * an offset and an partition leader epoch (if known, else -1).
101
+ */
102
+ typedef struct rd_kafka_fetch_pos_s {
103
+ int64_t offset;
104
+ int32_t leader_epoch;
105
+ rd_bool_t validated;
106
+ } rd_kafka_fetch_pos_t;
107
+
108
+
109
+
110
+ #include "rdkafka_op.h"
111
+ #include "rdkafka_queue.h"
112
+ #include "rdkafka_msg.h"
113
+ #include "rdkafka_proto.h"
114
+ #include "rdkafka_buf.h"
115
+ #include "rdkafka_pattern.h"
116
+ #include "rdkafka_conf.h"
117
+ #include "rdkafka_transport.h"
118
+ #include "rdkafka_timer.h"
119
+ #include "rdkafka_assignor.h"
120
+ #include "rdkafka_metadata.h"
121
+ #include "rdkafka_mock.h"
122
+ #include "rdkafka_partition.h"
123
+ #include "rdkafka_assignment.h"
124
+ #include "rdkafka_coord.h"
125
+ #include "rdkafka_mock.h"
126
+
127
+ /**
128
+ * Protocol level sanity
129
+ */
130
+ #define RD_KAFKAP_BROKERS_MAX 10000
131
+ #define RD_KAFKAP_TOPICS_MAX 1000000
132
+ #define RD_KAFKAP_PARTITIONS_MAX 100000
133
+ #define RD_KAFKAP_GROUPS_MAX 100000
134
+ #define RD_KAFKAP_CONFIGS_MAX 10000
135
+ #define RD_KAFKAP_ABORTED_TRANSACTIONS_MAX 1000000
136
+
137
+ #define RD_KAFKA_OFFSET_IS_LOGICAL(OFF) ((OFF) < 0)
138
+
139
+
140
+
141
+ /**
142
+ * @enum Idempotent Producer state
143
+ */
144
+ typedef enum {
145
+ RD_KAFKA_IDEMP_STATE_INIT, /**< Initial state */
146
+ RD_KAFKA_IDEMP_STATE_TERM, /**< Instance is terminating */
147
+ RD_KAFKA_IDEMP_STATE_FATAL_ERROR, /**< A fatal error has been raised */
148
+ RD_KAFKA_IDEMP_STATE_REQ_PID, /**< Request new PID */
149
+ RD_KAFKA_IDEMP_STATE_WAIT_TRANSPORT, /**< Waiting for coordinator to
150
+ * become available. */
151
+ RD_KAFKA_IDEMP_STATE_WAIT_PID, /**< PID requested, waiting for reply */
152
+ RD_KAFKA_IDEMP_STATE_ASSIGNED, /**< New PID assigned */
153
+ RD_KAFKA_IDEMP_STATE_DRAIN_RESET, /**< Wait for outstanding
154
+ * ProduceRequests to finish
155
+ * before resetting and
156
+ * re-requesting a new PID. */
157
+ RD_KAFKA_IDEMP_STATE_DRAIN_BUMP, /**< Wait for outstanding
158
+ * ProduceRequests to finish
159
+ * before bumping the current
160
+ * epoch. */
161
+ RD_KAFKA_IDEMP_STATE_WAIT_TXN_ABORT, /**< Wait for transaction abort
162
+ * to finish and trigger a
163
+ * drain and reset or bump. */
164
+ } rd_kafka_idemp_state_t;
165
+
166
+ /**
167
+ * @returns the idemp_state_t string representation
168
+ */
169
+ static RD_UNUSED const char *
170
+ rd_kafka_idemp_state2str(rd_kafka_idemp_state_t state) {
171
+ static const char *names[] = {
172
+ "Init", "Terminate", "FatalError", "RequestPID", "WaitTransport",
173
+ "WaitPID", "Assigned", "DrainReset", "DrainBump", "WaitTxnAbort"};
174
+ return names[state];
175
+ }
176
+
177
+
178
+
179
+ /**
180
+ * @enum Transactional Producer state
181
+ */
182
+ typedef enum {
183
+ /**< Initial state */
184
+ RD_KAFKA_TXN_STATE_INIT,
185
+ /**< Awaiting PID to be acquired by rdkafka_idempotence.c */
186
+ RD_KAFKA_TXN_STATE_WAIT_PID,
187
+ /**< PID acquired, but application has not made a successful
188
+ * init_transactions() call. */
189
+ RD_KAFKA_TXN_STATE_READY_NOT_ACKED,
190
+ /**< PID acquired, no active transaction. */
191
+ RD_KAFKA_TXN_STATE_READY,
192
+ /**< begin_transaction() has been called. */
193
+ RD_KAFKA_TXN_STATE_IN_TRANSACTION,
194
+ /**< commit_transaction() has been called. */
195
+ RD_KAFKA_TXN_STATE_BEGIN_COMMIT,
196
+ /**< commit_transaction() has been called and all outstanding
197
+ * messages, partitions, and offsets have been sent. */
198
+ RD_KAFKA_TXN_STATE_COMMITTING_TRANSACTION,
199
+ /**< Transaction successfully committed but application has not made
200
+ * a successful commit_transaction() call yet. */
201
+ RD_KAFKA_TXN_STATE_COMMIT_NOT_ACKED,
202
+ /**< begin_transaction() has been called. */
203
+ RD_KAFKA_TXN_STATE_BEGIN_ABORT,
204
+ /**< abort_transaction() has been called. */
205
+ RD_KAFKA_TXN_STATE_ABORTING_TRANSACTION,
206
+ /**< Transaction successfully aborted but application has not made
207
+ * a successful abort_transaction() call yet. */
208
+ RD_KAFKA_TXN_STATE_ABORT_NOT_ACKED,
209
+ /**< An abortable error has occurred. */
210
+ RD_KAFKA_TXN_STATE_ABORTABLE_ERROR,
211
+ /* A fatal error has occured. */
212
+ RD_KAFKA_TXN_STATE_FATAL_ERROR
213
+ } rd_kafka_txn_state_t;
214
+
215
+
216
+ /**
217
+ * @returns the txn_state_t string representation
218
+ */
219
+ static RD_UNUSED const char *
220
+ rd_kafka_txn_state2str(rd_kafka_txn_state_t state) {
221
+ static const char *names[] = {"Init",
222
+ "WaitPID",
223
+ "ReadyNotAcked",
224
+ "Ready",
225
+ "InTransaction",
226
+ "BeginCommit",
227
+ "CommittingTransaction",
228
+ "CommitNotAcked",
229
+ "BeginAbort",
230
+ "AbortingTransaction",
231
+ "AbortedNotAcked",
232
+ "AbortableError",
233
+ "FatalError"};
234
+ return names[state];
235
+ }
236
+
237
+ /**
238
+ * @enum Telemetry States
239
+ */
240
+ typedef enum {
241
+ /** Initial state, awaiting telemetry broker to be assigned */
242
+ RD_KAFKA_TELEMETRY_AWAIT_BROKER,
243
+ /** Telemetry broker assigned and GetSubscriptions scheduled */
244
+ RD_KAFKA_TELEMETRY_GET_SUBSCRIPTIONS_SCHEDULED,
245
+ /** GetSubscriptions request sent to the assigned broker */
246
+ RD_KAFKA_TELEMETRY_GET_SUBSCRIPTIONS_SENT,
247
+ /** PushTelemetry scheduled to send */
248
+ RD_KAFKA_TELEMETRY_PUSH_SCHEDULED,
249
+ /** PushTelemetry sent to the assigned broker */
250
+ RD_KAFKA_TELEMETRY_PUSH_SENT,
251
+ /** Client is being terminated and last PushTelemetry is scheduled to
252
+ * send */
253
+ RD_KAFKA_TELEMETRY_TERMINATING_PUSH_SCHEDULED,
254
+ /** Client is being terminated and last PushTelemetry is sent */
255
+ RD_KAFKA_TELEMETRY_TERMINATING_PUSH_SENT,
256
+ /** Telemetry is terminated */
257
+ RD_KAFKA_TELEMETRY_TERMINATED,
258
+ } rd_kafka_telemetry_state_t;
259
+
260
+
261
+ static RD_UNUSED const char *
262
+ rd_kafka_telemetry_state2str(rd_kafka_telemetry_state_t state) {
263
+ static const char *names[] = {"AwaitBroker",
264
+ "GetSubscriptionsScheduled",
265
+ "GetSubscriptionsSent",
266
+ "PushScheduled",
267
+ "PushSent",
268
+ "TerminatingPushScheduled",
269
+ "TerminatingPushSent",
270
+ "Terminated"};
271
+ return names[state];
272
+ }
273
+
274
+ static RD_UNUSED const char *rd_kafka_type2str(rd_kafka_type_t type) {
275
+ static const char *types[] = {
276
+ [RD_KAFKA_PRODUCER] = "producer",
277
+ [RD_KAFKA_CONSUMER] = "consumer",
278
+ };
279
+ return types[type];
280
+ }
281
+
282
+ /**
283
+ * Kafka handle, internal representation of the application's rd_kafka_t.
284
+ */
285
+
286
+ struct rd_kafka_s {
287
+ rd_kafka_q_t *rk_rep; /* kafka -> application reply queue */
288
+ rd_kafka_q_t *rk_ops; /* any -> rdkafka main thread ops */
289
+
290
+ TAILQ_HEAD(, rd_kafka_broker_s) rk_brokers;
291
+ rd_list_t rk_broker_by_id; /* Fast id lookups. */
292
+ rd_atomic32_t rk_broker_cnt;
293
+ /**< Number of brokers in state >= UP */
294
+ 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. */
300
+ 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;
304
+
305
+ mtx_t rk_internal_rkb_lock;
306
+ rd_kafka_broker_t *rk_internal_rkb;
307
+
308
+ /* Broadcasting of broker state changes to wake up
309
+ * functions waiting for a state change. */
310
+ cnd_t rk_broker_state_change_cnd;
311
+ mtx_t rk_broker_state_change_lock;
312
+ int rk_broker_state_change_version;
313
+ /* List of (rd_kafka_enq_once_t*) objects waiting for broker
314
+ * state changes. Protected by rk_broker_state_change_lock. */
315
+ rd_list_t rk_broker_state_change_waiters; /**< (rd_kafka_enq_once_t*) */
316
+
317
+ TAILQ_HEAD(, rd_kafka_topic_s) rk_topics;
318
+ int rk_topic_cnt;
319
+
320
+ struct rd_kafka_cgrp_s *rk_cgrp;
321
+
322
+ rd_kafka_conf_t rk_conf;
323
+ rd_kafka_q_t *rk_logq; /* Log queue if `log.queue` set */
324
+ char rk_name[128];
325
+ rd_kafkap_str_t *rk_client_id;
326
+ rd_kafkap_str_t *rk_group_id; /* Consumer group id */
327
+
328
+ rd_atomic32_t rk_terminate; /**< Set to RD_KAFKA_DESTROY_F_..
329
+ * flags instance
330
+ * is being destroyed.
331
+ * The value set is the
332
+ * destroy flags from
333
+ * rd_kafka_destroy*() and
334
+ * the two internal flags shown
335
+ * below.
336
+ *
337
+ * Order:
338
+ * 1. user_flags | .._F_DESTROY_CALLED
339
+ * is set in rd_kafka_destroy*().
340
+ * 2. consumer_close() is called
341
+ * for consumers.
342
+ * 3. .._F_TERMINATE is set to
343
+ * signal all background threads
344
+ * to terminate.
345
+ */
346
+
347
+ #define RD_KAFKA_DESTROY_F_TERMINATE \
348
+ 0x1 /**< Internal flag to make sure \
349
+ * rk_terminate is set to non-zero \
350
+ * value even if user passed \
351
+ * no destroy flags. */
352
+ #define RD_KAFKA_DESTROY_F_DESTROY_CALLED \
353
+ 0x2 /**< Application has called \
354
+ * ..destroy*() and we've \
355
+ * begun the termination \
356
+ * process. \
357
+ * This flag is needed to avoid \
358
+ * rk_terminate from being \
359
+ * 0 when destroy_flags() \
360
+ * is called with flags=0 \
361
+ * and prior to _F_TERMINATE \
362
+ * has been set. */
363
+ #define RD_KAFKA_DESTROY_F_IMMEDIATE \
364
+ 0x4 /**< Immediate non-blocking \
365
+ * destruction without waiting \
366
+ * for all resources \
367
+ * to be cleaned up. \
368
+ * WARNING: Memory and resource \
369
+ * leaks possible. \
370
+ * This flag automatically sets \
371
+ * .._NO_CONSUMER_CLOSE. */
372
+
373
+
374
+ rwlock_t rk_lock;
375
+ rd_kafka_type_t rk_type;
376
+ struct timeval rk_tv_state_change;
377
+
378
+ rd_atomic64_t rk_ts_last_poll; /**< Timestamp of last application
379
+ * consumer_poll() call
380
+ * (or equivalent).
381
+ * Used to enforce
382
+ * max.poll.interval.ms.
383
+ * Set to INT64_MAX while polling
384
+ * to avoid reaching
385
+ * max.poll.interval.ms. during that time
386
+ * 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. */
397
+ /* First fatal error. */
398
+ struct {
399
+ rd_atomic32_t err; /**< rd_kafka_resp_err_t */
400
+ char *errstr; /**< Protected by rk_lock */
401
+ int cnt; /**< Number of errors raised, only
402
+ * the first one is stored. */
403
+ } rk_fatal;
404
+
405
+ rd_atomic32_t rk_last_throttle; /* Last throttle_time_ms value
406
+ * from broker. */
407
+
408
+ /* Locks: rd_kafka_*lock() */
409
+ rd_ts_t rk_ts_metadata; /* Timestamp of most recent
410
+ * metadata. */
411
+
412
+ rd_kafka_metadata_internal_t
413
+ *rk_full_metadata; /* Last full metadata. */
414
+ rd_ts_t rk_ts_full_metadata; /* Timestamp of .. */
415
+ struct rd_kafka_metadata_cache rk_metadata_cache; /* Metadata cache */
416
+
417
+ char *rk_clusterid; /* ClusterId from metadata */
418
+ int32_t rk_controllerid; /* ControllerId from metadata */
419
+
420
+ /**< 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
+ } rk_drmode;
425
+
426
+ /* Simple consumer count:
427
+ * >0: Running in legacy / Simple Consumer mode,
428
+ * 0: No consumers running
429
+ * <0: Running in High level consumer mode */
430
+ rd_atomic32_t rk_simple_cnt;
431
+
432
+ /**
433
+ * Exactly Once Semantics and Idempotent Producer
434
+ *
435
+ * @locks rk_lock
436
+ */
437
+ struct {
438
+ /*
439
+ * Idempotence
440
+ */
441
+ rd_kafka_idemp_state_t idemp_state; /**< Idempotent Producer
442
+ * state */
443
+ rd_ts_t ts_idemp_state; /**< Last state change */
444
+ rd_kafka_pid_t pid; /**< Current Producer ID and Epoch */
445
+ int epoch_cnt; /**< Number of times pid/epoch changed */
446
+ rd_atomic32_t inflight_toppar_cnt; /**< Current number of
447
+ * toppars with inflight
448
+ * requests. */
449
+ rd_kafka_timer_t pid_tmr; /**< PID FSM timer */
450
+
451
+ /*
452
+ * Transactions
453
+ *
454
+ * All field access is from the rdkafka main thread,
455
+ * unless a specific lock is mentioned in the doc string.
456
+ *
457
+ */
458
+ rd_atomic32_t txn_may_enq; /**< Transaction state allows
459
+ * application to enqueue
460
+ * (produce) messages. */
461
+
462
+ rd_kafkap_str_t *transactional_id; /**< transactional.id */
463
+ rd_kafka_txn_state_t txn_state; /**< Transactional state.
464
+ * @locks rk_lock */
465
+ rd_ts_t ts_txn_state; /**< Last state change.
466
+ * @locks rk_lock */
467
+ rd_kafka_broker_t *txn_coord; /**< Transaction coordinator,
468
+ * this is a logical broker.*/
469
+ rd_kafka_broker_t *txn_curr_coord; /**< Current actual coord
470
+ * broker.
471
+ * This is only used to
472
+ * check if the coord
473
+ * changes. */
474
+ rd_kafka_broker_monitor_t txn_coord_mon; /**< Monitor for
475
+ * coordinator to
476
+ * take action when
477
+ * the broker state
478
+ * changes. */
479
+ rd_bool_t txn_requires_epoch_bump; /**< Coordinator epoch bump
480
+ * required to recover from
481
+ * idempotent producer
482
+ * fatal error. */
483
+
484
+ /**< Blocking transactional API application call
485
+ * currently being handled, its state, reply queue and how
486
+ * to handle timeout.
487
+ * Only one transactional API call is allowed at any time.
488
+ * Protected by the rk_lock. */
489
+ struct {
490
+ char name[64]; /**< API name, e.g.,
491
+ * send_offsets_to_transaction.
492
+ * This is used to make sure
493
+ * conflicting APIs are not
494
+ * called simultaneously. */
495
+ rd_bool_t calling; /**< API is being actively called.
496
+ * I.e., application is blocking
497
+ * on a txn API call.
498
+ * This is used to make sure
499
+ * no concurrent API calls are
500
+ * being made. */
501
+ rd_kafka_error_t *error; /**< Last error from background
502
+ * processing. This is only
503
+ * set if the application's
504
+ * API call timed out.
505
+ * It will be returned on
506
+ * the next call. */
507
+ rd_bool_t has_result; /**< Indicates whether an API
508
+ * result (possibly
509
+ * intermediate) has been set.
510
+ */
511
+ cnd_t cnd; /**< Application thread will
512
+ * block on this cnd waiting
513
+ * for a result to be set. */
514
+ mtx_t lock; /**< Protects all fields of
515
+ * txn_curr_api. */
516
+ } txn_curr_api;
517
+
518
+
519
+ int txn_req_cnt; /**< Number of transaction
520
+ * requests sent.
521
+ * This is incremented when a
522
+ * AddPartitionsToTxn or
523
+ * AddOffsetsToTxn request
524
+ * has been sent for the
525
+ * current transaction,
526
+ * to keep track of
527
+ * whether the broker is
528
+ * aware of the current
529
+ * transaction and thus
530
+ * requires an EndTxn request
531
+ * on abort or not. */
532
+
533
+ /**< Timer to trigger registration of pending partitions */
534
+ rd_kafka_timer_t txn_register_parts_tmr;
535
+
536
+ /**< Lock for txn_pending_rktps and txn_waitresp_rktps */
537
+ mtx_t txn_pending_lock;
538
+
539
+ /**< Partitions pending being added to transaction. */
540
+ rd_kafka_toppar_tqhead_t txn_pending_rktps;
541
+
542
+ /**< Partitions in-flight added to transaction. */
543
+ rd_kafka_toppar_tqhead_t txn_waitresp_rktps;
544
+
545
+ /**< Partitions added and registered to transaction. */
546
+ rd_kafka_toppar_tqhead_t txn_rktps;
547
+
548
+ /**< Number of messages that failed delivery.
549
+ * If this number is >0 on transaction_commit then an
550
+ * abortable transaction error will be raised.
551
+ * Is reset to zero on each begin_transaction(). */
552
+ rd_atomic64_t txn_dr_fails;
553
+
554
+ /**< Current transaction error. */
555
+ rd_kafka_resp_err_t txn_err;
556
+
557
+ /**< Current transaction error string, if any. */
558
+ char *txn_errstr;
559
+
560
+ /**< Last InitProducerIdRequest error. */
561
+ rd_kafka_resp_err_t txn_init_err;
562
+
563
+ /**< Waiting for transaction coordinator query response */
564
+ rd_bool_t txn_wait_coord;
565
+
566
+ /**< Transaction coordinator query timer */
567
+ rd_kafka_timer_t txn_coord_tmr;
568
+ } rk_eos;
569
+
570
+ rd_atomic32_t rk_flushing; /**< Application is calling flush(). */
571
+
572
+ /**
573
+ * Consumer state
574
+ *
575
+ * @locality rdkafka main thread
576
+ * @locks_required none
577
+ */
578
+ struct {
579
+ /** Application consumer queue for messages, events and errors.
580
+ * (typically points to rkcg_q) */
581
+ rd_kafka_q_t *q;
582
+ /** Current assigned partitions through assign() et.al. */
583
+ rd_kafka_assignment_t assignment;
584
+ /** Waiting for this number of commits to finish. */
585
+ int wait_commit_cnt;
586
+ } rk_consumer;
587
+
588
+ /**<
589
+ * Coordinator cache.
590
+ *
591
+ * @locks none
592
+ * @locality rdkafka main thread
593
+ */
594
+ rd_kafka_coord_cache_t rk_coord_cache; /**< Coordinator cache */
595
+
596
+ TAILQ_HEAD(, rd_kafka_coord_req_s)
597
+ rk_coord_reqs; /**< Coordinator
598
+ * requests */
599
+
600
+
601
+ struct {
602
+ mtx_t lock; /* Protects acces to this struct */
603
+ cnd_t cnd; /* For waking up blocking injectors */
604
+ unsigned int cnt; /* Current message count */
605
+ size_t size; /* Current message size sum */
606
+ unsigned int max_cnt; /* Max limit */
607
+ size_t max_size; /* Max limit */
608
+ } rk_curr_msgs;
609
+
610
+ rd_kafka_timers_t rk_timers;
611
+ thrd_t rk_thread;
612
+
613
+ int rk_initialized; /**< Will be > 0 when the rd_kafka_t
614
+ * instance has been fully initialized. */
615
+
616
+ int rk_init_wait_cnt; /**< Number of background threads that
617
+ * need to finish initialization. */
618
+ cnd_t rk_init_cnd; /**< Cond-var used to wait for main thread
619
+ * to finish its initialization before
620
+ * before rd_kafka_new() returns. */
621
+ mtx_t rk_init_lock; /**< Lock for rk_init_wait and _cmd */
622
+
623
+ rd_ts_t rk_ts_created; /**< Timestamp (monotonic clock) of
624
+ * rd_kafka_t creation. */
625
+
626
+ /**
627
+ * Background thread and queue,
628
+ * enabled by setting `background_event_cb()`.
629
+ */
630
+ struct {
631
+ rd_kafka_q_t *q; /**< Queue served by background thread. */
632
+ thrd_t thread; /**< Background thread. */
633
+ int calling; /**< Indicates whether the event callback
634
+ * is being called, reset back to 0
635
+ * when the callback returns.
636
+ * This can be used for troubleshooting
637
+ * purposes. */
638
+ } rk_background;
639
+
640
+
641
+ /*
642
+ * Logs, events or actions to rate limit / suppress
643
+ */
644
+ struct {
645
+ /**< Log: No brokers support Idempotent Producer */
646
+ rd_interval_t no_idemp_brokers;
647
+
648
+ /**< Sparse connections: randomly select broker
649
+ * to bring up. This interval should allow
650
+ * for a previous connection to be established,
651
+ * which varies between different environments:
652
+ * Use 10 < reconnect.backoff.jitter.ms / 2 < 1000.
653
+ */
654
+ rd_interval_t sparse_connect_random;
655
+ /**< Lock for sparse_connect_random */
656
+ mtx_t sparse_connect_lock;
657
+
658
+ /**< Broker metadata refresh interval:
659
+ * this is rate-limiting the number of topic-less
660
+ * broker/cluster metadata refreshes when there are no
661
+ * topics to refresh.
662
+ * Will be refreshed every topic.metadata.refresh.interval.ms
663
+ * but no more often than every 10s.
664
+ * No locks: only accessed by rdkafka main thread. */
665
+ rd_interval_t broker_metadata_refresh;
666
+
667
+ /**< Suppression for allow.auto.create.topics=false not being
668
+ * supported by the broker. */
669
+ rd_interval_t allow_auto_create_topics;
670
+ } rk_suppress;
671
+
672
+ struct {
673
+ void *handle; /**< Provider-specific handle struct pointer.
674
+ * Typically assigned in provider's .init() */
675
+ rd_kafka_q_t *callback_q; /**< SASL callback queue, if any. */
676
+ } rk_sasl;
677
+
678
+ struct {
679
+ /* Fields for the control flow - unless guarded by lock, only
680
+ * accessed from main thread. */
681
+ /**< Current state of the telemetry state machine. */
682
+ rd_kafka_telemetry_state_t state;
683
+ /**< Preferred broker for sending telemetry (Lock protected). */
684
+ rd_kafka_broker_t *preferred_broker;
685
+ /**< Timer for all the requests we schedule. */
686
+ rd_kafka_timer_t request_timer;
687
+ /**< Lock for preferred telemetry broker and state. */
688
+ mtx_t lock;
689
+ /**< Used to wait for termination (Lock protected). */
690
+ cnd_t termination_cnd;
691
+
692
+ /* Fields obtained from broker as a result of GetSubscriptions -
693
+ * only accessed from main thread.
694
+ */
695
+ rd_kafka_Uuid_t client_instance_id;
696
+ int32_t subscription_id;
697
+ rd_kafka_compression_t *accepted_compression_types;
698
+ size_t accepted_compression_types_cnt;
699
+ int32_t push_interval_ms;
700
+ int32_t telemetry_max_bytes;
701
+ rd_bool_t delta_temporality;
702
+ char **requested_metrics;
703
+ size_t requested_metrics_cnt;
704
+ /* TODO: Use rd_list_t to store the metrics */
705
+ int *matched_metrics;
706
+ size_t matched_metrics_cnt;
707
+
708
+ struct {
709
+ rd_ts_t ts_last; /**< Timestamp of last push */
710
+ rd_ts_t ts_start; /**< Timestamp from when collection
711
+ * started */
712
+ /** Total rebalance latency (ms) up to previous push */
713
+ uint64_t rebalance_latency_total;
714
+ } rk_historic_c;
715
+
716
+ struct {
717
+ rd_avg_t rk_avg_poll_idle_ratio;
718
+ rd_avg_t rk_avg_commit_latency; /**< Current commit
719
+ * latency avg */
720
+ rd_avg_t
721
+ rk_avg_rebalance_latency; /**< Current rebalance
722
+ * latency avg */
723
+ } rd_avg_current;
724
+
725
+ struct {
726
+ rd_avg_t rk_avg_poll_idle_ratio;
727
+ rd_avg_t rk_avg_commit_latency; /**< Rolled over commit
728
+ * latency avg */
729
+ rd_avg_t
730
+ rk_avg_rebalance_latency; /**< Rolled over rebalance
731
+ * latency avg */
732
+ } rd_avg_rollover;
733
+
734
+ } rk_telemetry;
735
+
736
+ /* Test mocks */
737
+ struct {
738
+ rd_kafka_mock_cluster_t *cluster; /**< Mock cluster, created
739
+ * by test.mock.num.brokers
740
+ */
741
+ rd_atomic32_t cluster_cnt; /**< Total number of mock
742
+ * clusters, created either
743
+ * through
744
+ * test.mock.num.brokers
745
+ * or mock_cluster_new().
746
+ */
747
+
748
+ } rk_mock;
749
+ };
750
+
751
+ #define rd_kafka_wrlock(rk) rwlock_wrlock(&(rk)->rk_lock)
752
+ #define rd_kafka_rdlock(rk) rwlock_rdlock(&(rk)->rk_lock)
753
+ #define rd_kafka_rdunlock(rk) rwlock_rdunlock(&(rk)->rk_lock)
754
+ #define rd_kafka_wrunlock(rk) rwlock_wrunlock(&(rk)->rk_lock)
755
+
756
+
757
+ /**
758
+ * @brief Add \p cnt messages and of total size \p size bytes to the
759
+ * internal bookkeeping of current message counts.
760
+ * If the total message count or size after add would exceed the
761
+ * configured limits \c queue.buffering.max.messages and
762
+ * \c queue.buffering.max.kbytes then depending on the value of
763
+ * \p block the function either blocks until enough space is available
764
+ * if \p block is 1, else immediately returns
765
+ * RD_KAFKA_RESP_ERR__QUEUE_FULL.
766
+ *
767
+ * @param rdmtx If non-null and \p block is set and blocking is to ensue,
768
+ * then unlock this mutex for the duration of the blocking
769
+ * and then reacquire with a read-lock.
770
+ */
771
+ static RD_INLINE RD_UNUSED rd_kafka_resp_err_t
772
+ rd_kafka_curr_msgs_add(rd_kafka_t *rk,
773
+ unsigned int cnt,
774
+ size_t size,
775
+ int block,
776
+ rwlock_t *rdlock) {
777
+
778
+ if (rk->rk_type != RD_KAFKA_PRODUCER)
779
+ return RD_KAFKA_RESP_ERR_NO_ERROR;
780
+
781
+ mtx_lock(&rk->rk_curr_msgs.lock);
782
+ while (
783
+ unlikely((rk->rk_curr_msgs.max_cnt > 0 &&
784
+ rk->rk_curr_msgs.cnt + cnt > rk->rk_curr_msgs.max_cnt) ||
785
+ (unsigned long long)(rk->rk_curr_msgs.size + size) >
786
+ (unsigned long long)rk->rk_curr_msgs.max_size)) {
787
+ if (!block) {
788
+ mtx_unlock(&rk->rk_curr_msgs.lock);
789
+ return RD_KAFKA_RESP_ERR__QUEUE_FULL;
790
+ }
791
+
792
+ if (rdlock)
793
+ rwlock_rdunlock(rdlock);
794
+
795
+ cnd_wait(&rk->rk_curr_msgs.cnd, &rk->rk_curr_msgs.lock);
796
+
797
+ if (rdlock)
798
+ rwlock_rdlock(rdlock);
799
+ }
800
+
801
+ rk->rk_curr_msgs.cnt += cnt;
802
+ rk->rk_curr_msgs.size += size;
803
+ mtx_unlock(&rk->rk_curr_msgs.lock);
804
+
805
+ return RD_KAFKA_RESP_ERR_NO_ERROR;
806
+ }
807
+
808
+
809
+ /**
810
+ * @brief Subtract \p cnt messages of total size \p size from the
811
+ * current bookkeeping and broadcast a wakeup on the condvar
812
+ * for any waiting & blocking threads.
813
+ */
814
+ static RD_INLINE RD_UNUSED void
815
+ rd_kafka_curr_msgs_sub(rd_kafka_t *rk, unsigned int cnt, size_t size) {
816
+ int broadcast = 0;
817
+
818
+ if (rk->rk_type != RD_KAFKA_PRODUCER)
819
+ return;
820
+
821
+ mtx_lock(&rk->rk_curr_msgs.lock);
822
+ rd_kafka_assert(NULL, rk->rk_curr_msgs.cnt >= cnt &&
823
+ rk->rk_curr_msgs.size >= size);
824
+
825
+ /* If the subtraction would pass one of the thresholds
826
+ * broadcast a wake-up to any waiting listeners. */
827
+ if ((rk->rk_curr_msgs.cnt - cnt == 0) ||
828
+ (rk->rk_curr_msgs.cnt >= rk->rk_curr_msgs.max_cnt &&
829
+ rk->rk_curr_msgs.cnt - cnt < rk->rk_curr_msgs.max_cnt) ||
830
+ (rk->rk_curr_msgs.size >= rk->rk_curr_msgs.max_size &&
831
+ rk->rk_curr_msgs.size - size < rk->rk_curr_msgs.max_size))
832
+ broadcast = 1;
833
+
834
+ rk->rk_curr_msgs.cnt -= cnt;
835
+ rk->rk_curr_msgs.size -= size;
836
+
837
+ if (unlikely(broadcast))
838
+ cnd_broadcast(&rk->rk_curr_msgs.cnd);
839
+
840
+ mtx_unlock(&rk->rk_curr_msgs.lock);
841
+ }
842
+
843
+ static RD_INLINE RD_UNUSED void
844
+ rd_kafka_curr_msgs_get(rd_kafka_t *rk, unsigned int *cntp, size_t *sizep) {
845
+ if (rk->rk_type != RD_KAFKA_PRODUCER) {
846
+ *cntp = 0;
847
+ *sizep = 0;
848
+ return;
849
+ }
850
+
851
+ mtx_lock(&rk->rk_curr_msgs.lock);
852
+ *cntp = rk->rk_curr_msgs.cnt;
853
+ *sizep = rk->rk_curr_msgs.size;
854
+ mtx_unlock(&rk->rk_curr_msgs.lock);
855
+ }
856
+
857
+ static RD_INLINE RD_UNUSED int rd_kafka_curr_msgs_cnt(rd_kafka_t *rk) {
858
+ int cnt;
859
+ if (rk->rk_type != RD_KAFKA_PRODUCER)
860
+ return 0;
861
+
862
+ mtx_lock(&rk->rk_curr_msgs.lock);
863
+ cnt = rk->rk_curr_msgs.cnt;
864
+ mtx_unlock(&rk->rk_curr_msgs.lock);
865
+
866
+ return cnt;
867
+ }
868
+
869
+ /**
870
+ * @brief Wait until \p tspec for curr_msgs to reach 0.
871
+ *
872
+ * @returns rd_true if zero is reached, or rd_false on timeout.
873
+ * The remaining messages are returned in \p *curr_msgsp
874
+ */
875
+ static RD_INLINE RD_UNUSED rd_bool_t
876
+ rd_kafka_curr_msgs_wait_zero(rd_kafka_t *rk,
877
+ int timeout_ms,
878
+ unsigned int *curr_msgsp) {
879
+ unsigned int cnt;
880
+ struct timespec tspec;
881
+
882
+ rd_timeout_init_timespec(&tspec, timeout_ms);
883
+
884
+ mtx_lock(&rk->rk_curr_msgs.lock);
885
+ while ((cnt = rk->rk_curr_msgs.cnt) > 0) {
886
+ if (cnd_timedwait_abs(&rk->rk_curr_msgs.cnd,
887
+ &rk->rk_curr_msgs.lock,
888
+ &tspec) == thrd_timedout)
889
+ break;
890
+ }
891
+ mtx_unlock(&rk->rk_curr_msgs.lock);
892
+
893
+ *curr_msgsp = cnt;
894
+ return cnt == 0;
895
+ }
896
+
897
+ void rd_kafka_destroy_final(rd_kafka_t *rk);
898
+
899
+ void rd_kafka_global_init(void);
900
+
901
+ /**
902
+ * @returns true if \p rk handle is terminating.
903
+ *
904
+ * @remark If consumer_close() is called from destroy*() it will be
905
+ * called prior to _F_TERMINATE being set and will thus not
906
+ * be able to use rd_kafka_terminating() to know it is shutting down.
907
+ * That code should instead just check that rk_terminate is non-zero
908
+ * (the _F_DESTROY_CALLED flag will be set).
909
+ */
910
+ #define rd_kafka_terminating(rk) \
911
+ (rd_atomic32_get(&(rk)->rk_terminate) & RD_KAFKA_DESTROY_F_TERMINATE)
912
+
913
+ /**
914
+ * @returns the destroy flags set matching \p flags, which might be
915
+ * a subset of the flags.
916
+ */
917
+ #define rd_kafka_destroy_flags_check(rk, flags) \
918
+ (rd_atomic32_get(&(rk)->rk_terminate) & (flags))
919
+
920
+ /**
921
+ * @returns true if no consumer callbacks, or standard consumer_close
922
+ * behaviour, should be triggered. */
923
+ #define rd_kafka_destroy_flags_no_consumer_close(rk) \
924
+ rd_kafka_destroy_flags_check(rk, RD_KAFKA_DESTROY_F_NO_CONSUMER_CLOSE)
925
+
926
+ #define rd_kafka_is_simple_consumer(rk) \
927
+ (rd_atomic32_get(&(rk)->rk_simple_cnt) > 0)
928
+ int rd_kafka_simple_consumer_add(rd_kafka_t *rk);
929
+
930
+
931
+ /**
932
+ * @returns true if idempotency is enabled (producer only).
933
+ */
934
+ #define rd_kafka_is_idempotent(rk) ((rk)->rk_conf.eos.idempotence)
935
+
936
+ /**
937
+ * @returns true if the producer is transactional (producer only).
938
+ */
939
+ #define rd_kafka_is_transactional(rk) \
940
+ ((rk)->rk_conf.eos.transactional_id != NULL)
941
+
942
+
943
+ #define RD_KAFKA_PURGE_F_ABORT_TXN \
944
+ 0x100 /**< Internal flag used when \
945
+ * aborting transaction */
946
+ #define RD_KAFKA_PURGE_F_MASK 0x107
947
+ const char *rd_kafka_purge_flags2str(int flags);
948
+
949
+
950
+ #include "rdkafka_topic.h"
951
+ #include "rdkafka_partition.h"
952
+
953
+
954
+
955
+ /**
956
+ * Debug contexts
957
+ */
958
+ #define RD_KAFKA_DBG_GENERIC 0x1
959
+ #define RD_KAFKA_DBG_BROKER 0x2
960
+ #define RD_KAFKA_DBG_TOPIC 0x4
961
+ #define RD_KAFKA_DBG_METADATA 0x8
962
+ #define RD_KAFKA_DBG_FEATURE 0x10
963
+ #define RD_KAFKA_DBG_QUEUE 0x20
964
+ #define RD_KAFKA_DBG_MSG 0x40
965
+ #define RD_KAFKA_DBG_PROTOCOL 0x80
966
+ #define RD_KAFKA_DBG_CGRP 0x100
967
+ #define RD_KAFKA_DBG_SECURITY 0x200
968
+ #define RD_KAFKA_DBG_FETCH 0x400
969
+ #define RD_KAFKA_DBG_INTERCEPTOR 0x800
970
+ #define RD_KAFKA_DBG_PLUGIN 0x1000
971
+ #define RD_KAFKA_DBG_CONSUMER 0x2000
972
+ #define RD_KAFKA_DBG_ADMIN 0x4000
973
+ #define RD_KAFKA_DBG_EOS 0x8000
974
+ #define RD_KAFKA_DBG_MOCK 0x10000
975
+ #define RD_KAFKA_DBG_ASSIGNOR 0x20000
976
+ #define RD_KAFKA_DBG_CONF 0x40000
977
+ #define RD_KAFKA_DBG_TELEMETRY 0x80000
978
+ #define RD_KAFKA_DBG_ALL 0xfffff
979
+ #define RD_KAFKA_DBG_NONE 0x0
980
+
981
+ /* Jitter Percent for exponential retry backoff */
982
+ #define RD_KAFKA_RETRY_JITTER_PERCENT 20
983
+
984
+ void rd_kafka_log0(const rd_kafka_conf_t *conf,
985
+ const rd_kafka_t *rk,
986
+ const char *extra,
987
+ int level,
988
+ int ctx,
989
+ const char *fac,
990
+ const char *fmt,
991
+ ...) RD_FORMAT(printf, 7, 8);
992
+
993
+ #define rd_kafka_log(rk, level, fac, ...) \
994
+ rd_kafka_log0(&rk->rk_conf, rk, NULL, level, RD_KAFKA_DBG_NONE, fac, \
995
+ __VA_ARGS__)
996
+
997
+ #define rd_kafka_conf_is_dbg(conf, ctx) \
998
+ unlikely((conf).debug &(RD_KAFKA_DBG_##ctx))
999
+
1000
+ #define rd_kafka_is_dbg(rk, ctx) (rd_kafka_conf_is_dbg(rk->rk_conf, ctx))
1001
+
1002
+ #define rd_kafka_dbg(rk, ctx, fac, ...) \
1003
+ do { \
1004
+ if (rd_kafka_is_dbg(rk, ctx)) \
1005
+ rd_kafka_log0(&rk->rk_conf, rk, NULL, LOG_DEBUG, \
1006
+ (RD_KAFKA_DBG_##ctx), fac, __VA_ARGS__); \
1007
+ } while (0)
1008
+
1009
+ /* dbg() not requiring an rk, just the conf object, for early logging */
1010
+ #define rd_kafka_dbg0(conf, ctx, fac, ...) \
1011
+ do { \
1012
+ if (rd_kafka_conf_is_dbg(*conf, ctx)) \
1013
+ rd_kafka_log0(conf, NULL, NULL, LOG_DEBUG, \
1014
+ (RD_KAFKA_DBG_##ctx), fac, __VA_ARGS__); \
1015
+ } while (0)
1016
+
1017
+ /* NOTE: The local copy of _logname is needed due rkb_logname_lock lock-ordering
1018
+ * when logging another broker's name in the message. */
1019
+ #define rd_rkb_log0(rkb, level, ctx, fac, ...) \
1020
+ do { \
1021
+ char _logname[RD_KAFKA_NODENAME_SIZE]; \
1022
+ mtx_lock(&(rkb)->rkb_logname_lock); \
1023
+ rd_strlcpy(_logname, rkb->rkb_logname, sizeof(_logname)); \
1024
+ mtx_unlock(&(rkb)->rkb_logname_lock); \
1025
+ rd_kafka_log0(&(rkb)->rkb_rk->rk_conf, (rkb)->rkb_rk, \
1026
+ _logname, level, ctx, fac, __VA_ARGS__); \
1027
+ } while (0)
1028
+
1029
+ #define rd_rkb_log(rkb, level, fac, ...) \
1030
+ rd_rkb_log0(rkb, level, RD_KAFKA_DBG_NONE, fac, __VA_ARGS__)
1031
+
1032
+ #define rd_rkb_is_dbg(rkb, ctx) rd_kafka_is_dbg((rkb)->rkb_rk, ctx)
1033
+
1034
+ #define rd_rkb_dbg(rkb, ctx, fac, ...) \
1035
+ do { \
1036
+ if (rd_rkb_is_dbg(rkb, ctx)) { \
1037
+ rd_rkb_log0(rkb, LOG_DEBUG, (RD_KAFKA_DBG_##ctx), fac, \
1038
+ __VA_ARGS__); \
1039
+ } \
1040
+ } while (0)
1041
+
1042
+
1043
+
1044
+ extern rd_kafka_resp_err_t RD_TLS rd_kafka_last_error_code;
1045
+
1046
+ static RD_UNUSED RD_INLINE rd_kafka_resp_err_t
1047
+ rd_kafka_set_last_error(rd_kafka_resp_err_t err, int errnox) {
1048
+ if (errnox) {
1049
+ /* MSVC:
1050
+ * This is the correct way to set errno on Windows,
1051
+ * but it is still pointless due to different errnos in
1052
+ * in different runtimes:
1053
+ * https://social.msdn.microsoft.com/Forums/vstudio/en-US/b4500c0d-1b69-40c7-9ef5-08da1025b5bf/setting-errno-from-within-a-dll?forum=vclanguage/
1054
+ * errno is thus highly deprecated, and buggy, on Windows
1055
+ * when using librdkafka as a dynamically loaded DLL. */
1056
+ rd_set_errno(errnox);
1057
+ }
1058
+ rd_kafka_last_error_code = err;
1059
+ return err;
1060
+ }
1061
+
1062
+
1063
+ int rd_kafka_set_fatal_error0(rd_kafka_t *rk,
1064
+ rd_dolock_t do_lock,
1065
+ rd_kafka_resp_err_t err,
1066
+ const char *fmt,
1067
+ ...) RD_FORMAT(printf, 4, 5);
1068
+ #define rd_kafka_set_fatal_error(rk, err, fmt, ...) \
1069
+ rd_kafka_set_fatal_error0(rk, RD_DO_LOCK, err, fmt, __VA_ARGS__)
1070
+
1071
+ rd_kafka_error_t *rd_kafka_get_fatal_error(rd_kafka_t *rk);
1072
+
1073
+ static RD_INLINE RD_UNUSED rd_kafka_resp_err_t
1074
+ rd_kafka_fatal_error_code(rd_kafka_t *rk) {
1075
+ /* This is an optimization to avoid an atomic read which are costly
1076
+ * on some platforms:
1077
+ * Fatal errors are currently raised by:
1078
+ * 1) the idempotent producer
1079
+ * 2) static consumers (group.instance.id)
1080
+ * 3) Group using consumer protocol (Introduced in KIP-848). See exact
1081
+ * 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)))
1086
+ return rd_atomic32_get(&rk->rk_fatal.err);
1087
+
1088
+ return RD_KAFKA_RESP_ERR_NO_ERROR;
1089
+ }
1090
+
1091
+
1092
+ extern rd_atomic32_t rd_kafka_thread_cnt_curr;
1093
+ extern char RD_TLS rd_kafka_thread_name[64];
1094
+
1095
+ void rd_kafka_set_thread_name(const char *fmt, ...) RD_FORMAT(printf, 1, 2);
1096
+ void rd_kafka_set_thread_sysname(const char *fmt, ...) RD_FORMAT(printf, 1, 2);
1097
+
1098
+ int rd_kafka_path_is_dir(const char *path);
1099
+ rd_bool_t rd_kafka_dir_is_empty(const char *path);
1100
+
1101
+ rd_kafka_op_res_t rd_kafka_poll_cb(rd_kafka_t *rk,
1102
+ rd_kafka_q_t *rkq,
1103
+ rd_kafka_op_t *rko,
1104
+ rd_kafka_q_cb_type_t cb_type,
1105
+ void *opaque);
1106
+
1107
+ rd_kafka_resp_err_t rd_kafka_subscribe_rkt(rd_kafka_topic_t *rkt);
1108
+
1109
+
1110
+ /**
1111
+ * @returns the number of milliseconds the maximum poll interval
1112
+ * was exceeded, or 0 if not exceeded.
1113
+ *
1114
+ * @remark Only relevant for high-level consumer.
1115
+ *
1116
+ * @locality any
1117
+ * @locks none
1118
+ */
1119
+ static RD_INLINE RD_UNUSED int rd_kafka_max_poll_exceeded(rd_kafka_t *rk) {
1120
+ rd_ts_t last_poll;
1121
+ int exceeded;
1122
+
1123
+ if (rk->rk_type != RD_KAFKA_CONSUMER)
1124
+ return 0;
1125
+
1126
+ last_poll = rd_atomic64_get(&rk->rk_ts_last_poll);
1127
+
1128
+ /* Application is blocked in librdkafka function, see
1129
+ * rd_kafka_app_poll_start(). */
1130
+ if (last_poll == INT64_MAX)
1131
+ return 0;
1132
+
1133
+ exceeded = (int)((rd_clock() - last_poll) / 1000ll) -
1134
+ rk->rk_conf.max_poll_interval_ms;
1135
+
1136
+ if (unlikely(exceeded > 0))
1137
+ return exceeded;
1138
+
1139
+ return 0;
1140
+ }
1141
+
1142
+ /**
1143
+ * @brief Call on entry to blocking polling function to indicate
1144
+ * that the application is blocked waiting for librdkafka
1145
+ * and that max.poll.interval.ms should not be enforced.
1146
+ *
1147
+ * Call app_polled() Upon return from the function calling
1148
+ * this function to register the application's last time of poll.
1149
+ *
1150
+ * @remark Only relevant for high-level consumer.
1151
+ *
1152
+ * @locality any
1153
+ * @locks none
1154
+ */
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) {
1157
+ if (rk->rk_type != RD_KAFKA_CONSUMER)
1158
+ return;
1159
+
1160
+ if (!now)
1161
+ now = rd_clock();
1162
+ if (is_blocking)
1163
+ rd_atomic64_set(&rk->rk_ts_last_poll, INT64_MAX);
1164
+ if (rk->rk_ts_last_poll_end) {
1165
+ int64_t poll_idle_ratio = 0;
1166
+ rd_ts_t poll_interval = now - rk->rk_ts_last_poll_start;
1167
+ if (poll_interval) {
1168
+ rd_ts_t idle_interval =
1169
+ rk->rk_ts_last_poll_end - rk->rk_ts_last_poll_start;
1170
+ poll_idle_ratio =
1171
+ idle_interval * 1000000 / poll_interval;
1172
+ }
1173
+ rd_avg_add(
1174
+ &rk->rk_telemetry.rd_avg_current.rk_avg_poll_idle_ratio,
1175
+ poll_idle_ratio);
1176
+ rk->rk_ts_last_poll_start = now;
1177
+ rk->rk_ts_last_poll_end = 0;
1178
+ }
1179
+ }
1180
+
1181
+ /**
1182
+ * @brief Set the last application poll time to now.
1183
+ *
1184
+ * @remark Only relevant for high-level consumer.
1185
+ *
1186
+ * @locality any
1187
+ * @locks none
1188
+ */
1189
+ static RD_INLINE RD_UNUSED void rd_kafka_app_polled(rd_kafka_t *rk) {
1190
+ if (rk->rk_type == RD_KAFKA_CONSUMER) {
1191
+ rd_ts_t now = rd_clock();
1192
+ rd_atomic64_set(&rk->rk_ts_last_poll, now);
1193
+ if (unlikely(rk->rk_cgrp &&
1194
+ rk->rk_cgrp->rkcg_group_protocol ==
1195
+ RD_KAFKA_GROUP_PROTOCOL_CONSUMER &&
1196
+ rk->rk_cgrp->rkcg_flags &
1197
+ RD_KAFKA_CGRP_F_MAX_POLL_EXCEEDED)) {
1198
+ rd_kafka_cgrp_consumer_expedite_next_heartbeat(
1199
+ rk->rk_cgrp,
1200
+ "app polled after poll interval exceeded");
1201
+ }
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);
1206
+ }
1207
+ }
1208
+
1209
+
1210
+
1211
+ void rd_kafka_term_sig_handler(int sig);
1212
+
1213
+ /**
1214
+ * rdkafka_background.c
1215
+ */
1216
+ int rd_kafka_background_thread_main(void *arg);
1217
+ rd_kafka_resp_err_t rd_kafka_background_thread_create(rd_kafka_t *rk,
1218
+ char *errstr,
1219
+ size_t errstr_size);
1220
+
1221
+
1222
+ #endif /* _RDKAFKA_INT_H_ */