@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,760 @@
1
+ /*
2
+ * librdkafka - Apache Kafka C library
3
+ *
4
+ * Copyright (c) 2023, Confluent Inc.
5
+ * All rights reserved.
6
+ *
7
+ * Redistribution and use in source and binary forms, with or without
8
+ * modification, are permitted provided that the following conditions are met:
9
+ *
10
+ * 1. Redistributions of source code must retain the above copyright notice,
11
+ * this list of conditions and the following disclaimer.
12
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
13
+ * this list of conditions and the following disclaimer in the documentation
14
+ * and/or other materials provided with the distribution.
15
+ *
16
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
20
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26
+ * POSSIBILITY OF SUCH DAMAGE.
27
+ */
28
+
29
+ #include "rdkafka_telemetry.h"
30
+ #include "rdkafka_msgset.h"
31
+ #include "rdkafka_telemetry_encode.h"
32
+ #include "rdkafka_request.h"
33
+ #include "nanopb/pb.h"
34
+ #include "rdkafka_lz4.h"
35
+ #include "snappy.h"
36
+ #include "rdunittest.h"
37
+
38
+ #if WITH_ZSTD
39
+ #include "rdkafka_zstd.h"
40
+ #endif
41
+
42
+
43
+ #define RD_KAFKA_TELEMETRY_PUSH_JITTER 20
44
+
45
+ /**
46
+ * @brief Filters broker by availability of GetTelemetrySubscription.
47
+ *
48
+ * @return 0 if GetTelemetrySubscription is supported, 1 otherwise.
49
+ *
50
+ * @locks rd_kafka_broker_lock()
51
+ */
52
+ static int
53
+ rd_kafka_filter_broker_by_GetTelemetrySubscription(rd_kafka_broker_t *rkb,
54
+ void *opaque) {
55
+ if (rd_kafka_broker_ApiVersion_at_least_no_lock(
56
+ rkb, RD_KAFKAP_GetTelemetrySubscriptions, 0))
57
+ return 0;
58
+ return 1;
59
+ }
60
+
61
+ /**
62
+ * @brief Returns the preferred metrics broker or NULL if unavailable.
63
+ *
64
+ * @locks none
65
+ * @locks_acquired rk_telemetry.lock, rd_kafka_wrlock()
66
+ * @locality main thread
67
+ */
68
+ static rd_kafka_broker_t *rd_kafka_get_preferred_broker(rd_kafka_t *rk) {
69
+ rd_kafka_broker_t *rkb = NULL;
70
+
71
+ mtx_lock(&rk->rk_telemetry.lock);
72
+ if (rk->rk_telemetry.preferred_broker)
73
+ rkb = rk->rk_telemetry.preferred_broker;
74
+ else {
75
+ /* If there is no preferred broker, that means that our previous
76
+ * one failed. Iterate through all available brokers to find
77
+ * one. */
78
+ rd_kafka_wrlock(rk);
79
+ rkb = rd_kafka_broker_random_up(
80
+ rk, rd_kafka_filter_broker_by_GetTelemetrySubscription,
81
+ NULL);
82
+ rd_kafka_wrunlock(rk);
83
+
84
+ /* No need to increase refcnt as broker_random_up does it
85
+ * already. */
86
+ rk->rk_telemetry.preferred_broker = rkb;
87
+
88
+ rd_kafka_dbg(rk, TELEMETRY, "SETBROKER",
89
+ "Lost preferred broker, switching to new "
90
+ "preferred broker %" PRId32 "\n",
91
+ rkb ? rd_kafka_broker_id(rkb) : -1);
92
+ }
93
+ mtx_unlock(&rk->rk_telemetry.lock);
94
+
95
+ return rkb;
96
+ }
97
+
98
+ /**
99
+ * @brief Cleans up the rk.rk_telemetry struct and frees any allocations.
100
+ *
101
+ * @param clear_control_flow_fields This determines if the control flow fields
102
+ * need to be cleared. This should only be set
103
+ * to true if the rk is terminating.
104
+ * @locality main thread
105
+ * @locks none
106
+ * @locks_acquired rk_telemetry.lock
107
+ */
108
+ void rd_kafka_telemetry_clear(rd_kafka_t *rk,
109
+ rd_bool_t clear_control_flow_fields) {
110
+ if (clear_control_flow_fields) {
111
+ mtx_lock(&rk->rk_telemetry.lock);
112
+ if (rk->rk_telemetry.preferred_broker) {
113
+ rd_kafka_broker_destroy(
114
+ rk->rk_telemetry.preferred_broker);
115
+ rk->rk_telemetry.preferred_broker = NULL;
116
+ }
117
+ mtx_unlock(&rk->rk_telemetry.lock);
118
+ mtx_destroy(&rk->rk_telemetry.lock);
119
+ cnd_destroy(&rk->rk_telemetry.termination_cnd);
120
+ }
121
+
122
+ if (rk->rk_telemetry.accepted_compression_types_cnt) {
123
+ rd_free(rk->rk_telemetry.accepted_compression_types);
124
+ rk->rk_telemetry.accepted_compression_types = NULL;
125
+ rk->rk_telemetry.accepted_compression_types_cnt = 0;
126
+ }
127
+
128
+ if (rk->rk_telemetry.requested_metrics_cnt) {
129
+ size_t i;
130
+ for (i = 0; i < rk->rk_telemetry.requested_metrics_cnt; i++)
131
+ rd_free(rk->rk_telemetry.requested_metrics[i]);
132
+ rd_free(rk->rk_telemetry.requested_metrics);
133
+ rd_free(rk->rk_telemetry.matched_metrics);
134
+ rk->rk_telemetry.requested_metrics = NULL;
135
+ rk->rk_telemetry.requested_metrics_cnt = 0;
136
+ rk->rk_telemetry.matched_metrics = NULL;
137
+ rk->rk_telemetry.matched_metrics_cnt = 0;
138
+ }
139
+ rk->rk_telemetry.telemetry_max_bytes = 0;
140
+ }
141
+
142
+ /**
143
+ * @brief Sets the telemetry state to TERMINATED and signals the conditional
144
+ * variable
145
+ *
146
+ * @locality main thread
147
+ * @locks none
148
+ * @locks_acquired rk_telemetry.lock
149
+ */
150
+ static void rd_kafka_telemetry_set_terminated(rd_kafka_t *rk) {
151
+ rd_dassert(thrd_is_current(rk->rk_thread));
152
+
153
+ rd_kafka_dbg(rk, TELEMETRY, "TERM",
154
+ "Setting state to TERMINATED and signalling");
155
+
156
+ rk->rk_telemetry.state = RD_KAFKA_TELEMETRY_TERMINATED;
157
+ rd_kafka_timer_stop(&rk->rk_timers, &rk->rk_telemetry.request_timer,
158
+ 1 /*lock*/);
159
+ mtx_lock(&rk->rk_telemetry.lock);
160
+ cnd_signal(&rk->rk_telemetry.termination_cnd);
161
+ mtx_unlock(&rk->rk_telemetry.lock);
162
+ }
163
+
164
+ static void update_matched_metrics(rd_kafka_t *rk, size_t j) {
165
+ rk->rk_telemetry.matched_metrics_cnt++;
166
+ rk->rk_telemetry.matched_metrics =
167
+ rd_realloc(rk->rk_telemetry.matched_metrics,
168
+ sizeof(int) * rk->rk_telemetry.matched_metrics_cnt);
169
+ rk->rk_telemetry
170
+ .matched_metrics[rk->rk_telemetry.matched_metrics_cnt - 1] = j;
171
+ }
172
+
173
+ static void rd_kafka_match_requested_metrics(rd_kafka_t *rk) {
174
+ size_t metrics_cnt = RD_KAFKA_TELEMETRY_METRIC_CNT(rk), i;
175
+ rd_bool_t is_metric_included[RD_MAX(
176
+ (int)RD_KAFKA_TELEMETRY_PRODUCER_METRIC__CNT,
177
+ (int)RD_KAFKA_TELEMETRY_CONSUMER_METRIC__CNT)] = {0};
178
+ const rd_kafka_telemetry_metric_info_t *info =
179
+ RD_KAFKA_TELEMETRY_METRIC_INFO(rk);
180
+
181
+ if (rk->rk_telemetry.requested_metrics_cnt == 1 &&
182
+ !strcmp(rk->rk_telemetry.requested_metrics[0],
183
+ RD_KAFKA_TELEMETRY_METRICS_ALL_METRICS_SUBSCRIPTION)) {
184
+ size_t j;
185
+ rd_kafka_dbg(rk, TELEMETRY, "GETSUBSCRIPTIONS",
186
+ "All metrics subscribed");
187
+
188
+ for (j = 0; j < metrics_cnt; j++)
189
+ update_matched_metrics(rk, j);
190
+ return;
191
+ }
192
+
193
+ for (i = 0; i < rk->rk_telemetry.requested_metrics_cnt; i++) {
194
+ size_t name_len = strlen(rk->rk_telemetry.requested_metrics[i]),
195
+ j;
196
+
197
+ for (j = 0; j < metrics_cnt; j++) {
198
+ if (is_metric_included[j])
199
+ continue;
200
+
201
+ /* Prefix matching the requested metrics with the
202
+ * available metrics. */
203
+ char full_metric_name
204
+ [RD_KAFKA_TELEMETRY_METRIC_NAME_MAX_LEN];
205
+ rd_snprintf(full_metric_name, sizeof(full_metric_name),
206
+ "%s%s", RD_KAFKA_TELEMETRY_METRIC_PREFIX,
207
+ info[j].name);
208
+ bool name_matches =
209
+ strncmp(full_metric_name,
210
+ rk->rk_telemetry.requested_metrics[i],
211
+ name_len) == 0;
212
+
213
+ if (name_matches) {
214
+ update_matched_metrics(rk, j);
215
+ is_metric_included[j] = rd_true;
216
+ }
217
+ }
218
+ }
219
+
220
+ rd_kafka_dbg(rk, TELEMETRY, "GETSUBSCRIPTIONS",
221
+ "Matched metrics: %" PRIusz,
222
+ rk->rk_telemetry.matched_metrics_cnt);
223
+ }
224
+
225
+ /**
226
+ * @brief Enqueues a GetTelemetrySubscriptionsRequest.
227
+ *
228
+ * @locks none
229
+ * @locks_acquired none
230
+ * @locality main thread
231
+ */
232
+ static void rd_kafka_send_get_telemetry_subscriptions(rd_kafka_t *rk,
233
+ rd_kafka_broker_t *rkb) {
234
+ /* Clear out the telemetry struct, free anything that is malloc'd. */
235
+ rd_kafka_telemetry_clear(rk, rd_false /* clear_control_flow_fields */);
236
+
237
+ /* Enqueue on broker transmit queue.
238
+ * The preferred broker might change in the meanwhile but let it fail.
239
+ */
240
+ rd_kafka_dbg(rk, TELEMETRY, "GETSUBSCRIPTIONS",
241
+ "Sending GetTelemetryRequest");
242
+ rd_kafka_GetTelemetrySubscriptionsRequest(
243
+ rkb, NULL, 0, RD_KAFKA_REPLYQ(rk->rk_ops, 0),
244
+ rd_kafka_handle_GetTelemetrySubscriptions, NULL);
245
+
246
+ /* Change state */
247
+ rk->rk_telemetry.state = RD_KAFKA_TELEMETRY_GET_SUBSCRIPTIONS_SENT;
248
+ }
249
+
250
+ /**
251
+ * @brief Compresses the telemetry payload using the available compression
252
+ * types.
253
+ *
254
+ * @param rk The rdkafka instance.
255
+ * @param rkb The broker to which the payload is being sent.
256
+ * @param payload The payload to be compressed.
257
+ * @param compressed_payload The compressed payload.
258
+ * @param compressed_payload_size The size of the compressed payload.
259
+ *
260
+ * @return The compression type used.
261
+ *
262
+ * @locks none
263
+ * @locks_acquired none
264
+ * @locality main thread
265
+ */
266
+ static rd_kafka_compression_t
267
+ rd_kafka_push_telemetry_payload_compress(rd_kafka_t *rk,
268
+ rd_kafka_broker_t *rkb,
269
+ rd_buf_t *payload,
270
+ void **compressed_payload,
271
+ size_t *compressed_payload_size) {
272
+ rd_kafka_compression_t compression_used = RD_KAFKA_COMPRESSION_NONE;
273
+ rd_slice_t payload_slice;
274
+ size_t i;
275
+ rd_kafka_resp_err_t r = RD_KAFKA_RESP_ERR_NO_ERROR;
276
+
277
+ if (payload->rbuf_len == 0) {
278
+ /* We can only initialize the slice to compress
279
+ * if not empty. */
280
+ rd_kafka_dbg(rk, TELEMETRY, "PUSH",
281
+ "Empty payload. "
282
+ "Sending uncompressed payload");
283
+
284
+ /* It's not important the payload isn't actually a segment
285
+ * inside the buffer, as size is 0, we can send any allocated
286
+ * memory here, but we chose the buffer because it's
287
+ * freed like the other COMPRESSION_NONE case, without
288
+ * memory leaks. */
289
+ *compressed_payload = payload;
290
+ *compressed_payload_size = 0;
291
+ return RD_KAFKA_COMPRESSION_NONE;
292
+ }
293
+
294
+ rd_slice_init_full(&payload_slice, payload);
295
+ for (i = 0; i < rk->rk_telemetry.accepted_compression_types_cnt; i++) {
296
+ rd_kafka_compression_t compression_type =
297
+ rk->rk_telemetry.accepted_compression_types[i];
298
+ switch (compression_type) {
299
+ #if WITH_ZLIB
300
+ case RD_KAFKA_COMPRESSION_GZIP:
301
+ /* TODO: Using 0 for compression level for now. */
302
+ r = rd_kafka_gzip_compress(rkb, 0, &payload_slice,
303
+ compressed_payload,
304
+ compressed_payload_size);
305
+ compression_used = RD_KAFKA_COMPRESSION_GZIP;
306
+ break;
307
+ #endif
308
+ case RD_KAFKA_COMPRESSION_LZ4:
309
+ /* TODO: Using 0 for compression level for now. */
310
+ r = rd_kafka_lz4_compress(
311
+ rkb, rd_true, 0, &payload_slice, compressed_payload,
312
+ compressed_payload_size);
313
+ compression_used = RD_KAFKA_COMPRESSION_LZ4;
314
+ break;
315
+ #if WITH_ZSTD
316
+ case RD_KAFKA_COMPRESSION_ZSTD:
317
+ /* TODO: Using 0 for compression level for now. */
318
+ r = rd_kafka_zstd_compress(rkb, 0, &payload_slice,
319
+ compressed_payload,
320
+ compressed_payload_size);
321
+ compression_used = RD_KAFKA_COMPRESSION_ZSTD;
322
+ break;
323
+ #endif
324
+ #if WITH_SNAPPY
325
+ case RD_KAFKA_COMPRESSION_SNAPPY:
326
+ r = rd_kafka_snappy_compress_slice(
327
+ rkb, &payload_slice, compressed_payload,
328
+ compressed_payload_size);
329
+ compression_used = RD_KAFKA_COMPRESSION_SNAPPY;
330
+ break;
331
+ #endif
332
+ default:
333
+ break;
334
+ }
335
+ if (compression_used != RD_KAFKA_COMPRESSION_NONE &&
336
+ r == RD_KAFKA_RESP_ERR_NO_ERROR) {
337
+ rd_kafka_dbg(
338
+ rk, TELEMETRY, "PUSH",
339
+ "Compressed payload of size %" PRIusz " to %" PRIusz
340
+ " using compression type "
341
+ "%s",
342
+ payload->rbuf_size, *compressed_payload_size,
343
+ rd_kafka_compression2str(compression_used));
344
+ return compression_used;
345
+ }
346
+ }
347
+ if (compression_used != RD_KAFKA_COMPRESSION_NONE &&
348
+ r != RD_KAFKA_RESP_ERR_NO_ERROR) {
349
+ rd_kafka_dbg(rk, TELEMETRY, "PUSH",
350
+ "Failed to compress payload with available "
351
+ "compression types");
352
+ }
353
+ rd_kafka_dbg(rk, TELEMETRY, "PUSH", "Sending uncompressed payload");
354
+ *compressed_payload = payload->rbuf_wpos->seg_p;
355
+ *compressed_payload_size = payload->rbuf_wpos->seg_of;
356
+ return RD_KAFKA_COMPRESSION_NONE;
357
+ }
358
+
359
+ /**
360
+ * @brief Enqueues a PushTelemetryRequest.
361
+ *
362
+ * @locks none
363
+ * @locks_acquired none
364
+ * @locality main thread
365
+ */
366
+ static void rd_kafka_send_push_telemetry(rd_kafka_t *rk,
367
+ rd_kafka_broker_t *rkb,
368
+ rd_bool_t terminating) {
369
+
370
+ rd_buf_t *metrics_payload = rd_kafka_telemetry_encode_metrics(rk);
371
+ size_t compressed_metrics_payload_size = 0;
372
+ void *compressed_metrics_payload = NULL;
373
+ rd_kafka_compression_t compression_used = RD_KAFKA_COMPRESSION_NONE;
374
+ if (metrics_payload) {
375
+ compression_used = rd_kafka_push_telemetry_payload_compress(
376
+ rk, rkb, metrics_payload, &compressed_metrics_payload,
377
+ &compressed_metrics_payload_size);
378
+ if (compressed_metrics_payload_size >
379
+ (size_t)rk->rk_telemetry.telemetry_max_bytes) {
380
+ rd_kafka_log(rk, LOG_WARNING, "TELEMETRY",
381
+ "Metrics payload size %" PRIusz
382
+ " exceeds telemetry_max_bytes %" PRId32
383
+ "specified by the broker.",
384
+ compressed_metrics_payload_size,
385
+ rk->rk_telemetry.telemetry_max_bytes);
386
+ }
387
+
388
+ rd_kafka_dbg(
389
+ rk, TELEMETRY, "PUSH",
390
+ "Sending PushTelemetryRequest with terminating = %s",
391
+ RD_STR_ToF(terminating));
392
+ rd_kafka_PushTelemetryRequest(
393
+ rkb, &rk->rk_telemetry.client_instance_id,
394
+ rk->rk_telemetry.subscription_id, terminating,
395
+ compression_used, compressed_metrics_payload,
396
+ compressed_metrics_payload_size, NULL, 0,
397
+ RD_KAFKA_REPLYQ(rk->rk_ops, 0),
398
+ rd_kafka_handle_PushTelemetry, NULL);
399
+ } else {
400
+ rd_kafka_log(rk, LOG_WARNING, "PUSH",
401
+ "Telemetry metrics encode error, not sending "
402
+ "metrics");
403
+ }
404
+
405
+ if (metrics_payload)
406
+ rd_buf_destroy_free(metrics_payload);
407
+ if (compression_used != RD_KAFKA_COMPRESSION_NONE)
408
+ rd_free(compressed_metrics_payload);
409
+
410
+ rk->rk_telemetry.state = terminating
411
+ ? RD_KAFKA_TELEMETRY_TERMINATING_PUSH_SENT
412
+ : RD_KAFKA_TELEMETRY_PUSH_SENT;
413
+ }
414
+
415
+ /**
416
+ * @brief Progress the telemetry state machine.
417
+ *
418
+ * @locks none
419
+ * @locks_acquired rd_kafka_rdlock()
420
+ * @locality main thread
421
+ */
422
+ static void rd_kafka_telemetry_fsm(rd_kafka_t *rk) {
423
+ rd_kafka_broker_t *preferred_broker = NULL;
424
+
425
+ rd_dassert(rk);
426
+ rd_dassert(thrd_is_current(rk->rk_thread));
427
+
428
+ switch (rk->rk_telemetry.state) {
429
+ case RD_KAFKA_TELEMETRY_AWAIT_BROKER:
430
+ rd_dassert(!*"Should never be awaiting a broker when the telemetry fsm is called.");
431
+ break;
432
+
433
+ case RD_KAFKA_TELEMETRY_GET_SUBSCRIPTIONS_SCHEDULED:
434
+ preferred_broker = rd_kafka_get_preferred_broker(rk);
435
+ if (!preferred_broker) {
436
+ rk->rk_telemetry.state =
437
+ RD_KAFKA_TELEMETRY_AWAIT_BROKER;
438
+ break;
439
+ }
440
+ rd_kafka_send_get_telemetry_subscriptions(rk, preferred_broker);
441
+ break;
442
+
443
+ case RD_KAFKA_TELEMETRY_PUSH_SCHEDULED:
444
+ preferred_broker = rd_kafka_get_preferred_broker(rk);
445
+ if (!preferred_broker) {
446
+ rk->rk_telemetry.state =
447
+ RD_KAFKA_TELEMETRY_AWAIT_BROKER;
448
+ break;
449
+ }
450
+ rd_kafka_send_push_telemetry(rk, preferred_broker, rd_false);
451
+ break;
452
+
453
+ case RD_KAFKA_TELEMETRY_PUSH_SENT:
454
+ case RD_KAFKA_TELEMETRY_GET_SUBSCRIPTIONS_SENT:
455
+ case RD_KAFKA_TELEMETRY_TERMINATING_PUSH_SENT:
456
+ rd_dassert(!*"Should never be awaiting response when the telemetry fsm is called.");
457
+ break;
458
+
459
+ case RD_KAFKA_TELEMETRY_TERMINATING_PUSH_SCHEDULED:
460
+ preferred_broker = rd_kafka_get_preferred_broker(rk);
461
+ if (!preferred_broker) {
462
+ /* If there's no preferred broker, set state to
463
+ * terminated immediately to stop the app thread from
464
+ * waiting indefinitely. */
465
+ rd_kafka_telemetry_set_terminated(rk);
466
+ break;
467
+ }
468
+ rd_kafka_send_push_telemetry(rk, preferred_broker, rd_true);
469
+ break;
470
+
471
+ case RD_KAFKA_TELEMETRY_TERMINATED:
472
+ rd_dassert(!*"Should not be terminated when the telemetry fsm is called.");
473
+ break;
474
+
475
+ default:
476
+ rd_assert(!*"Unknown state");
477
+ }
478
+ }
479
+
480
+ /**
481
+ * @brief Callback for FSM timer.
482
+ *
483
+ * @locks none
484
+ * @locks_acquired none
485
+ * @locality main thread
486
+ */
487
+ void rd_kafka_telemetry_fsm_tmr_cb(rd_kafka_timers_t *rkts, void *rk) {
488
+ rd_kafka_telemetry_fsm(rk);
489
+ }
490
+
491
+ /**
492
+ * @brief Handles parsed GetTelemetrySubscriptions response.
493
+ *
494
+ * @locks none
495
+ * @locks_acquired rd_kafka_rdlock()
496
+ * @locality main thread
497
+ */
498
+ void rd_kafka_handle_get_telemetry_subscriptions(rd_kafka_t *rk,
499
+ rd_kafka_resp_err_t err) {
500
+ rd_ts_t next_scheduled;
501
+ double jitter_multiplier =
502
+ rd_jitter(100 - RD_KAFKA_TELEMETRY_PUSH_JITTER,
503
+ 100 + RD_KAFKA_TELEMETRY_PUSH_JITTER) /
504
+ 100.0;
505
+ rd_ts_t now_ns = rd_uclock() * 1000;
506
+ rd_kafka_broker_t *rkb = NULL;
507
+
508
+ if (err != RD_KAFKA_RESP_ERR_NO_ERROR) {
509
+ rd_kafka_dbg(rk, TELEMETRY, "GETSUBSCRIPTIONS",
510
+ "GetTelemetrySubscriptionsRequest failed: %s",
511
+ rd_kafka_err2str(err));
512
+ if (rk->rk_telemetry.push_interval_ms == 0) {
513
+ rk->rk_telemetry.push_interval_ms =
514
+ 30000; /* Default: 5min */
515
+ }
516
+ }
517
+
518
+ if (err == RD_KAFKA_RESP_ERR_NO_ERROR &&
519
+ rk->rk_telemetry.requested_metrics_cnt) {
520
+ rd_kafka_match_requested_metrics(rk);
521
+
522
+ /* Some metrics are requested. Start the timer accordingly */
523
+ next_scheduled = (int)(jitter_multiplier * 1000 *
524
+ rk->rk_telemetry.push_interval_ms);
525
+
526
+ rk->rk_telemetry.state = RD_KAFKA_TELEMETRY_PUSH_SCHEDULED;
527
+
528
+ /* Set for the first push */
529
+ if (rk->rk_telemetry.rk_historic_c.ts_start == 0) {
530
+ rk->rk_telemetry.rk_historic_c.ts_start = now_ns;
531
+ rk->rk_telemetry.rk_historic_c.ts_last = now_ns;
532
+ rd_kafka_rdlock(rk);
533
+ TAILQ_FOREACH(rkb, &rk->rk_brokers, rkb_link) {
534
+ rkb->rkb_telemetry.rkb_historic_c.connects =
535
+ rd_atomic32_get(&rkb->rkb_c.connects);
536
+ }
537
+ rd_kafka_rdunlock(rk);
538
+ }
539
+
540
+ } else {
541
+ /* No metrics requested, or we're in error. */
542
+ next_scheduled = rk->rk_telemetry.push_interval_ms * 1000;
543
+ rk->rk_telemetry.state =
544
+ RD_KAFKA_TELEMETRY_GET_SUBSCRIPTIONS_SCHEDULED;
545
+ }
546
+
547
+ rd_kafka_dbg(rk, TELEMETRY, "GETSUBSCRIPTIONS",
548
+ "Handled GetTelemetrySubscriptions, scheduling FSM after "
549
+ "%" PRId64
550
+ " microseconds, state = %s, err = %s, metrics = %" PRIusz,
551
+ next_scheduled,
552
+ rd_kafka_telemetry_state2str(rk->rk_telemetry.state),
553
+ rd_kafka_err2str(err),
554
+ rk->rk_telemetry.requested_metrics_cnt);
555
+
556
+ rd_kafka_timer_start_oneshot(
557
+ &rk->rk_timers, &rk->rk_telemetry.request_timer, rd_false,
558
+ next_scheduled, rd_kafka_telemetry_fsm_tmr_cb, rk);
559
+ }
560
+
561
+ void rd_kafka_handle_push_telemetry(rd_kafka_t *rk, rd_kafka_resp_err_t err) {
562
+
563
+ /* We only make a best-effort attempt to push telemetry while
564
+ * terminating, and don't care about any errors. */
565
+ if (rk->rk_telemetry.state ==
566
+ RD_KAFKA_TELEMETRY_TERMINATING_PUSH_SENT) {
567
+ rd_kafka_telemetry_set_terminated(rk);
568
+ return;
569
+ }
570
+
571
+ /* There's a possiblity that we sent a PushTelemetryRequest, and
572
+ * scheduled a termination before getting the response. In that case, we
573
+ * will enter this method in the TERMINATED state when/if we get a
574
+ * response, and we should not take any action. */
575
+ if (rk->rk_telemetry.state != RD_KAFKA_TELEMETRY_PUSH_SENT)
576
+ return;
577
+
578
+ if (err == RD_KAFKA_RESP_ERR_NO_ERROR) {
579
+ rd_kafka_dbg(rk, TELEMETRY, "PUSH",
580
+ "PushTelemetryRequest succeeded");
581
+ rk->rk_telemetry.state = RD_KAFKA_TELEMETRY_PUSH_SCHEDULED;
582
+ rd_kafka_timer_start_oneshot(
583
+ &rk->rk_timers, &rk->rk_telemetry.request_timer, rd_false,
584
+ rk->rk_telemetry.push_interval_ms * 1000,
585
+ rd_kafka_telemetry_fsm_tmr_cb, (void *)rk);
586
+ } else { /* error */
587
+ rd_kafka_dbg(rk, TELEMETRY, "PUSH",
588
+ "PushTelemetryRequest failed: %s",
589
+ rd_kafka_err2str(err));
590
+ /* Non-retriable errors */
591
+ if (err == RD_KAFKA_RESP_ERR_INVALID_REQUEST ||
592
+ err == RD_KAFKA_RESP_ERR_INVALID_RECORD) {
593
+ rd_kafka_log(
594
+ rk, LOG_WARNING, "TELEMETRY",
595
+ "PushTelemetryRequest failed with non-retriable "
596
+ "error: %s. Stopping telemetry.",
597
+ rd_kafka_err2str(err));
598
+ rd_kafka_telemetry_set_terminated(rk);
599
+ return;
600
+ }
601
+
602
+ if (err == RD_KAFKA_RESP_ERR_TELEMETRY_TOO_LARGE) {
603
+ rd_kafka_log(
604
+ rk, LOG_WARNING, "TELEMETRY",
605
+ "PushTelemetryRequest failed because of payload "
606
+ "size too large: %s. Continuing telemetry.",
607
+ rd_kafka_err2str(err));
608
+ rk->rk_telemetry.state =
609
+ RD_KAFKA_TELEMETRY_PUSH_SCHEDULED;
610
+ rd_kafka_timer_start_oneshot(
611
+ &rk->rk_timers, &rk->rk_telemetry.request_timer,
612
+ rd_false, rk->rk_telemetry.push_interval_ms * 1000,
613
+ rd_kafka_telemetry_fsm_tmr_cb, (void *)rk);
614
+ return;
615
+ }
616
+
617
+ rd_ts_t next_scheduled =
618
+ err == RD_KAFKA_RESP_ERR_UNKNOWN_SUBSCRIPTION_ID
619
+ ? 0
620
+ : rk->rk_telemetry.push_interval_ms * 1000;
621
+
622
+ rk->rk_telemetry.state =
623
+ RD_KAFKA_TELEMETRY_GET_SUBSCRIPTIONS_SCHEDULED;
624
+ rd_kafka_timer_start_oneshot(
625
+ &rk->rk_timers, &rk->rk_telemetry.request_timer, rd_false,
626
+ next_scheduled, rd_kafka_telemetry_fsm_tmr_cb, (void *)rk);
627
+ }
628
+ }
629
+
630
+ /**
631
+ * @brief This method starts the termination for telemetry and awaits
632
+ * completion.
633
+ *
634
+ * @locks none
635
+ * @locks_acquired rk_telemetry.lock
636
+ * @locality app thread (normal case) or the main thread (when terminated
637
+ * during creation).
638
+ */
639
+ void rd_kafka_telemetry_await_termination(rd_kafka_t *rk) {
640
+ rd_kafka_op_t *rko;
641
+
642
+ /* In the case where we have a termination during creation, we can't
643
+ * send any telemetry. */
644
+ if (thrd_is_current(rk->rk_thread) ||
645
+ !rk->rk_conf.enable_metrics_push) {
646
+ rd_kafka_telemetry_set_terminated(rk);
647
+ return;
648
+ }
649
+
650
+ mtx_lock(&rk->rk_telemetry.lock);
651
+ rko = rd_kafka_op_new(RD_KAFKA_OP_TERMINATE_TELEMETRY);
652
+ rko->rko_rk = rk;
653
+ rd_kafka_q_enq(rk->rk_ops, rko);
654
+
655
+ /* Await termination sequence completion. */
656
+ rd_kafka_dbg(rk, TELEMETRY, "TERM",
657
+ "Awaiting termination of telemetry.");
658
+ cnd_timedwait_ms(&rk->rk_telemetry.termination_cnd,
659
+ &rk->rk_telemetry.lock,
660
+ 1000 /* timeout for waiting */);
661
+ mtx_unlock(&rk->rk_telemetry.lock);
662
+ rd_kafka_dbg(rk, TELEMETRY, "TERM",
663
+ "Ended waiting for termination of telemetry.");
664
+ }
665
+
666
+ /**
667
+ * @brief Send a final push request before terminating.
668
+ *
669
+ * @locks none
670
+ * @locks_acquired none
671
+ * @locality main thread
672
+ * @note This method is on a best-effort basis.
673
+ */
674
+ void rd_kafka_telemetry_schedule_termination(rd_kafka_t *rk) {
675
+ rd_kafka_dbg(
676
+ rk, TELEMETRY, "TERM",
677
+ "Starting rd_kafka_telemetry_schedule_termination in state %s",
678
+ rd_kafka_telemetry_state2str(rk->rk_telemetry.state));
679
+
680
+ if (rk->rk_telemetry.state != RD_KAFKA_TELEMETRY_PUSH_SCHEDULED) {
681
+ rd_kafka_telemetry_set_terminated(rk);
682
+ return;
683
+ }
684
+
685
+ rk->rk_telemetry.state = RD_KAFKA_TELEMETRY_TERMINATING_PUSH_SCHEDULED;
686
+
687
+ rd_kafka_dbg(rk, TELEMETRY, "TERM", "Sending final request for Push");
688
+ rd_kafka_timer_override_once(
689
+ &rk->rk_timers, &rk->rk_telemetry.request_timer, 0 /* immediate */);
690
+ }
691
+
692
+
693
+ /**
694
+ * @brief Sets telemetry broker if we are in AWAIT_BROKER state.
695
+ *
696
+ * @locks none
697
+ * @locks_acquired rk_telemetry.lock
698
+ * @locality main thread
699
+ */
700
+ void rd_kafka_set_telemetry_broker_maybe(rd_kafka_t *rk,
701
+ rd_kafka_broker_t *rkb) {
702
+ rd_dassert(thrd_is_current(rk->rk_thread));
703
+
704
+ /* The op triggering this method is scheduled by brokers without knowing
705
+ * if a preferred broker is already set. If it is set, this method is a
706
+ * no-op. */
707
+ if (rk->rk_telemetry.state != RD_KAFKA_TELEMETRY_AWAIT_BROKER)
708
+ return;
709
+
710
+ mtx_lock(&rk->rk_telemetry.lock);
711
+
712
+ if (rk->rk_telemetry.preferred_broker) {
713
+ mtx_unlock(&rk->rk_telemetry.lock);
714
+ return;
715
+ }
716
+
717
+ rd_kafka_broker_keep(rkb);
718
+ rk->rk_telemetry.preferred_broker = rkb;
719
+
720
+ mtx_unlock(&rk->rk_telemetry.lock);
721
+
722
+ rd_kafka_dbg(rk, TELEMETRY, "SETBROKER",
723
+ "Setting telemetry broker to %s\n", rkb->rkb_name);
724
+
725
+ rk->rk_telemetry.state = RD_KAFKA_TELEMETRY_GET_SUBSCRIPTIONS_SCHEDULED;
726
+
727
+ rd_kafka_timer_start_oneshot(
728
+ &rk->rk_timers, &rk->rk_telemetry.request_timer, rd_false,
729
+ 0 /* immediate */, rd_kafka_telemetry_fsm_tmr_cb, (void *)rk);
730
+ }
731
+
732
+ /**
733
+ * @brief Overlapping prefixes should not match the metrics
734
+ * multiple times.
735
+ */
736
+ int unit_test_telemetry_match_requested_metrics_no_duplicates(void) {
737
+ rd_kafka_t *rk = rd_kafka_new(RD_KAFKA_PRODUCER, NULL, NULL, 0);
738
+ rk->rk_telemetry.requested_metrics_cnt = 3;
739
+ rk->rk_telemetry.requested_metrics =
740
+ rd_calloc(rk->rk_telemetry.requested_metrics_cnt, sizeof(char *));
741
+ rk->rk_telemetry.requested_metrics[0] = rd_strdup("org");
742
+ rk->rk_telemetry.requested_metrics[1] = rd_strdup("org.apache");
743
+ rk->rk_telemetry.requested_metrics[2] = rd_strdup("org.apache.kafka");
744
+ rd_kafka_match_requested_metrics(rk);
745
+
746
+ RD_UT_ASSERT(rk->rk_telemetry.matched_metrics_cnt ==
747
+ RD_KAFKA_TELEMETRY_PRODUCER_METRIC__CNT,
748
+ "Expected %d matched metrics, got %" PRIusz,
749
+ RD_KAFKA_TELEMETRY_PRODUCER_METRIC__CNT,
750
+ rk->rk_telemetry.matched_metrics_cnt);
751
+ rd_kafka_destroy(rk);
752
+ return 0;
753
+ }
754
+
755
+
756
+ int unittest_telemetry(void) {
757
+ int fails = 0;
758
+ fails += unit_test_telemetry_match_requested_metrics_no_duplicates();
759
+ return fails;
760
+ }