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