@platformatic/rdkafka 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (767) hide show
  1. package/.editorconfig +5 -0
  2. package/.jshintignore +1 -0
  3. package/.jshintrc +23 -0
  4. package/CONTRIBUTING.md +237 -0
  5. package/LICENSE.txt +21 -0
  6. package/Makefile +94 -0
  7. package/README.md +630 -0
  8. package/bench/consumer-raw-rdkafka.js +76 -0
  9. package/bench/consumer-subscribe.js +77 -0
  10. package/bench/kafka-consumer-stream.js +100 -0
  11. package/bench/producer-raw-rdkafka.js +125 -0
  12. package/bench/producer-rdkafka.js +117 -0
  13. package/bench/seed.sh +38 -0
  14. package/binding.gyp +155 -0
  15. package/ci/checks/librdkafka-correct-version.js +67 -0
  16. package/ci/checks/librdkafka-exists.js +13 -0
  17. package/ci/librdkafka-defs-generator.js +193 -0
  18. package/ci/prepublish.js +3 -0
  19. package/config.d.ts +1132 -0
  20. package/configure +15 -0
  21. package/cpplint.py +6325 -0
  22. package/deploy.enc +0 -0
  23. package/deps/librdkafka/.clang-format +136 -0
  24. package/deps/librdkafka/.clang-format-cpp +103 -0
  25. package/deps/librdkafka/.dir-locals.el +10 -0
  26. package/deps/librdkafka/.formatignore +33 -0
  27. package/deps/librdkafka/.gdbmacros +19 -0
  28. package/deps/librdkafka/.semaphore/project.yml +43 -0
  29. package/deps/librdkafka/.semaphore/project_public.yml +20 -0
  30. package/deps/librdkafka/.semaphore/semaphore.yml +355 -0
  31. package/deps/librdkafka/CHANGELOG.md +1738 -0
  32. package/deps/librdkafka/CMakeLists.txt +291 -0
  33. package/deps/librdkafka/CODE_OF_CONDUCT.md +46 -0
  34. package/deps/librdkafka/CONFIGURATION.md +189 -0
  35. package/deps/librdkafka/CONTRIBUTING.md +431 -0
  36. package/deps/librdkafka/Doxyfile +2375 -0
  37. package/deps/librdkafka/INTRODUCTION.md +2173 -0
  38. package/deps/librdkafka/LICENSE +26 -0
  39. package/deps/librdkafka/LICENSE.cjson +22 -0
  40. package/deps/librdkafka/LICENSE.crc32c +28 -0
  41. package/deps/librdkafka/LICENSE.fnv1a +18 -0
  42. package/deps/librdkafka/LICENSE.hdrhistogram +27 -0
  43. package/deps/librdkafka/LICENSE.lz4 +26 -0
  44. package/deps/librdkafka/LICENSE.murmur2 +25 -0
  45. package/deps/librdkafka/LICENSE.nanopb +22 -0
  46. package/deps/librdkafka/LICENSE.opentelemetry +203 -0
  47. package/deps/librdkafka/LICENSE.pycrc +23 -0
  48. package/deps/librdkafka/LICENSE.queue +31 -0
  49. package/deps/librdkafka/LICENSE.regexp +5 -0
  50. package/deps/librdkafka/LICENSE.snappy +36 -0
  51. package/deps/librdkafka/LICENSE.tinycthread +26 -0
  52. package/deps/librdkafka/LICENSE.wingetopt +49 -0
  53. package/deps/librdkafka/LICENSES.txt +625 -0
  54. package/deps/librdkafka/Makefile +124 -0
  55. package/deps/librdkafka/README.md +199 -0
  56. package/deps/librdkafka/README.win32 +26 -0
  57. package/deps/librdkafka/STATISTICS.md +624 -0
  58. package/deps/librdkafka/configure +214 -0
  59. package/deps/librdkafka/configure.self +331 -0
  60. package/deps/librdkafka/debian/changelog +111 -0
  61. package/deps/librdkafka/debian/compat +1 -0
  62. package/deps/librdkafka/debian/control +71 -0
  63. package/deps/librdkafka/debian/copyright +99 -0
  64. package/deps/librdkafka/debian/gbp.conf +9 -0
  65. package/deps/librdkafka/debian/librdkafka++1.install +1 -0
  66. package/deps/librdkafka/debian/librdkafka-dev.examples +2 -0
  67. package/deps/librdkafka/debian/librdkafka-dev.install +9 -0
  68. package/deps/librdkafka/debian/librdkafka1.docs +5 -0
  69. package/deps/librdkafka/debian/librdkafka1.install +1 -0
  70. package/deps/librdkafka/debian/librdkafka1.symbols +135 -0
  71. package/deps/librdkafka/debian/rules +19 -0
  72. package/deps/librdkafka/debian/source/format +1 -0
  73. package/deps/librdkafka/debian/watch +2 -0
  74. package/deps/librdkafka/dev-conf.sh +123 -0
  75. package/deps/librdkafka/examples/CMakeLists.txt +79 -0
  76. package/deps/librdkafka/examples/Makefile +167 -0
  77. package/deps/librdkafka/examples/README.md +42 -0
  78. package/deps/librdkafka/examples/alter_consumer_group_offsets.c +338 -0
  79. package/deps/librdkafka/examples/consumer.c +261 -0
  80. package/deps/librdkafka/examples/delete_records.c +233 -0
  81. package/deps/librdkafka/examples/describe_cluster.c +322 -0
  82. package/deps/librdkafka/examples/describe_consumer_groups.c +436 -0
  83. package/deps/librdkafka/examples/describe_topics.c +427 -0
  84. package/deps/librdkafka/examples/elect_leaders.c +317 -0
  85. package/deps/librdkafka/examples/globals.json +11 -0
  86. package/deps/librdkafka/examples/idempotent_producer.c +344 -0
  87. package/deps/librdkafka/examples/incremental_alter_configs.c +348 -0
  88. package/deps/librdkafka/examples/kafkatest_verifiable_client.cpp +961 -0
  89. package/deps/librdkafka/examples/list_consumer_group_offsets.c +359 -0
  90. package/deps/librdkafka/examples/list_consumer_groups.c +365 -0
  91. package/deps/librdkafka/examples/list_offsets.c +327 -0
  92. package/deps/librdkafka/examples/misc.c +287 -0
  93. package/deps/librdkafka/examples/openssl_engine_example.cpp +249 -0
  94. package/deps/librdkafka/examples/producer.c +251 -0
  95. package/deps/librdkafka/examples/producer.cpp +228 -0
  96. package/deps/librdkafka/examples/rdkafka_complex_consumer_example.c +617 -0
  97. package/deps/librdkafka/examples/rdkafka_complex_consumer_example.cpp +467 -0
  98. package/deps/librdkafka/examples/rdkafka_consume_batch.cpp +264 -0
  99. package/deps/librdkafka/examples/rdkafka_example.c +853 -0
  100. package/deps/librdkafka/examples/rdkafka_example.cpp +679 -0
  101. package/deps/librdkafka/examples/rdkafka_performance.c +1781 -0
  102. package/deps/librdkafka/examples/transactions-older-broker.c +668 -0
  103. package/deps/librdkafka/examples/transactions.c +665 -0
  104. package/deps/librdkafka/examples/user_scram.c +492 -0
  105. package/deps/librdkafka/examples/win_ssl_cert_store.cpp +395 -0
  106. package/deps/librdkafka/lds-gen.py +73 -0
  107. package/deps/librdkafka/mainpage.doxy +40 -0
  108. package/deps/librdkafka/mklove/Makefile.base +329 -0
  109. package/deps/librdkafka/mklove/modules/configure.atomics +144 -0
  110. package/deps/librdkafka/mklove/modules/configure.base +2484 -0
  111. package/deps/librdkafka/mklove/modules/configure.builtin +70 -0
  112. package/deps/librdkafka/mklove/modules/configure.cc +186 -0
  113. package/deps/librdkafka/mklove/modules/configure.cxx +8 -0
  114. package/deps/librdkafka/mklove/modules/configure.fileversion +65 -0
  115. package/deps/librdkafka/mklove/modules/configure.gitversion +29 -0
  116. package/deps/librdkafka/mklove/modules/configure.good_cflags +18 -0
  117. package/deps/librdkafka/mklove/modules/configure.host +132 -0
  118. package/deps/librdkafka/mklove/modules/configure.lib +49 -0
  119. package/deps/librdkafka/mklove/modules/configure.libcurl +99 -0
  120. package/deps/librdkafka/mklove/modules/configure.libsasl2 +36 -0
  121. package/deps/librdkafka/mklove/modules/configure.libssl +147 -0
  122. package/deps/librdkafka/mklove/modules/configure.libzstd +58 -0
  123. package/deps/librdkafka/mklove/modules/configure.parseversion +95 -0
  124. package/deps/librdkafka/mklove/modules/configure.pic +16 -0
  125. package/deps/librdkafka/mklove/modules/configure.socket +20 -0
  126. package/deps/librdkafka/mklove/modules/configure.zlib +61 -0
  127. package/deps/librdkafka/mklove/modules/patches/README.md +8 -0
  128. package/deps/librdkafka/mklove/modules/patches/libcurl.0000-no-runtime-linking-check.patch +11 -0
  129. package/deps/librdkafka/mklove/modules/patches/libssl.0000-osx-rand-include-fix-OpenSSL-PR16409.patch +56 -0
  130. package/deps/librdkafka/packaging/RELEASE.md +311 -0
  131. package/deps/librdkafka/packaging/alpine/build-alpine.sh +38 -0
  132. package/deps/librdkafka/packaging/archlinux/PKGBUILD +30 -0
  133. package/deps/librdkafka/packaging/cmake/Config.cmake.in +37 -0
  134. package/deps/librdkafka/packaging/cmake/Modules/FindLZ4.cmake +38 -0
  135. package/deps/librdkafka/packaging/cmake/Modules/FindZSTD.cmake +27 -0
  136. package/deps/librdkafka/packaging/cmake/Modules/LICENSE.FindZstd +178 -0
  137. package/deps/librdkafka/packaging/cmake/README.md +38 -0
  138. package/deps/librdkafka/packaging/cmake/config.h.in +52 -0
  139. package/deps/librdkafka/packaging/cmake/parseversion.cmake +60 -0
  140. package/deps/librdkafka/packaging/cmake/rdkafka.pc.in +12 -0
  141. package/deps/librdkafka/packaging/cmake/try_compile/atomic_32_test.c +8 -0
  142. package/deps/librdkafka/packaging/cmake/try_compile/atomic_64_test.c +8 -0
  143. package/deps/librdkafka/packaging/cmake/try_compile/c11threads_test.c +14 -0
  144. package/deps/librdkafka/packaging/cmake/try_compile/crc32c_hw_test.c +27 -0
  145. package/deps/librdkafka/packaging/cmake/try_compile/dlopen_test.c +11 -0
  146. package/deps/librdkafka/packaging/cmake/try_compile/libsasl2_test.c +7 -0
  147. package/deps/librdkafka/packaging/cmake/try_compile/pthread_setname_darwin_test.c +6 -0
  148. package/deps/librdkafka/packaging/cmake/try_compile/pthread_setname_freebsd_test.c +7 -0
  149. package/deps/librdkafka/packaging/cmake/try_compile/pthread_setname_gnu_test.c +5 -0
  150. package/deps/librdkafka/packaging/cmake/try_compile/rand_r_test.c +7 -0
  151. package/deps/librdkafka/packaging/cmake/try_compile/rdkafka_setup.cmake +122 -0
  152. package/deps/librdkafka/packaging/cmake/try_compile/regex_test.c +10 -0
  153. package/deps/librdkafka/packaging/cmake/try_compile/strndup_test.c +5 -0
  154. package/deps/librdkafka/packaging/cmake/try_compile/sync_32_test.c +8 -0
  155. package/deps/librdkafka/packaging/cmake/try_compile/sync_64_test.c +8 -0
  156. package/deps/librdkafka/packaging/cp/README.md +13 -0
  157. package/deps/librdkafka/packaging/cp/check_features.c +64 -0
  158. package/deps/librdkafka/packaging/cp/verify-deb.sh +33 -0
  159. package/deps/librdkafka/packaging/cp/verify-packages.sh +48 -0
  160. package/deps/librdkafka/packaging/cp/verify-rpm.sh +39 -0
  161. package/deps/librdkafka/packaging/debian/changelog +66 -0
  162. package/deps/librdkafka/packaging/debian/compat +1 -0
  163. package/deps/librdkafka/packaging/debian/control +49 -0
  164. package/deps/librdkafka/packaging/debian/copyright +84 -0
  165. package/deps/librdkafka/packaging/debian/gbp.conf +9 -0
  166. package/deps/librdkafka/packaging/debian/librdkafka-dev.dirs +2 -0
  167. package/deps/librdkafka/packaging/debian/librdkafka-dev.examples +2 -0
  168. package/deps/librdkafka/packaging/debian/librdkafka-dev.install +6 -0
  169. package/deps/librdkafka/packaging/debian/librdkafka-dev.substvars +1 -0
  170. package/deps/librdkafka/packaging/debian/librdkafka.dsc +16 -0
  171. package/deps/librdkafka/packaging/debian/librdkafka1-dbg.substvars +1 -0
  172. package/deps/librdkafka/packaging/debian/librdkafka1.dirs +1 -0
  173. package/deps/librdkafka/packaging/debian/librdkafka1.install +2 -0
  174. package/deps/librdkafka/packaging/debian/librdkafka1.postinst.debhelper +5 -0
  175. package/deps/librdkafka/packaging/debian/librdkafka1.postrm.debhelper +5 -0
  176. package/deps/librdkafka/packaging/debian/librdkafka1.symbols +64 -0
  177. package/deps/librdkafka/packaging/debian/rules +19 -0
  178. package/deps/librdkafka/packaging/debian/source/format +1 -0
  179. package/deps/librdkafka/packaging/debian/watch +2 -0
  180. package/deps/librdkafka/packaging/get_version.py +21 -0
  181. package/deps/librdkafka/packaging/homebrew/README.md +15 -0
  182. package/deps/librdkafka/packaging/homebrew/brew-update-pr.sh +31 -0
  183. package/deps/librdkafka/packaging/mingw-w64/configure-build-msys2-mingw-static.sh +52 -0
  184. package/deps/librdkafka/packaging/mingw-w64/configure-build-msys2-mingw.sh +21 -0
  185. package/deps/librdkafka/packaging/mingw-w64/run-tests.sh +6 -0
  186. package/deps/librdkafka/packaging/mingw-w64/semaphoreci-build.sh +38 -0
  187. package/deps/librdkafka/packaging/mingw-w64/travis-before-install.sh +20 -0
  188. package/deps/librdkafka/packaging/nuget/README.md +84 -0
  189. package/deps/librdkafka/packaging/nuget/artifact.py +177 -0
  190. package/deps/librdkafka/packaging/nuget/cleanup-s3.py +143 -0
  191. package/deps/librdkafka/packaging/nuget/common/p-common__plat-windows__arch-win32__bldtype-Release/msvcr120.zip +0 -0
  192. package/deps/librdkafka/packaging/nuget/common/p-common__plat-windows__arch-win32__bldtype-Release/msvcr140.zip +0 -0
  193. package/deps/librdkafka/packaging/nuget/common/p-common__plat-windows__arch-x64__bldtype-Release/msvcr120.zip +0 -0
  194. package/deps/librdkafka/packaging/nuget/common/p-common__plat-windows__arch-x64__bldtype-Release/msvcr140.zip +0 -0
  195. package/deps/librdkafka/packaging/nuget/nuget.sh +21 -0
  196. package/deps/librdkafka/packaging/nuget/nugetpackage.py +278 -0
  197. package/deps/librdkafka/packaging/nuget/packaging.py +448 -0
  198. package/deps/librdkafka/packaging/nuget/push-to-nuget.sh +21 -0
  199. package/deps/librdkafka/packaging/nuget/release.py +167 -0
  200. package/deps/librdkafka/packaging/nuget/requirements.txt +3 -0
  201. package/deps/librdkafka/packaging/nuget/staticpackage.py +178 -0
  202. package/deps/librdkafka/packaging/nuget/templates/librdkafka.redist.nuspec +21 -0
  203. package/deps/librdkafka/packaging/nuget/templates/librdkafka.redist.props +18 -0
  204. package/deps/librdkafka/packaging/nuget/templates/librdkafka.redist.targets +19 -0
  205. package/deps/librdkafka/packaging/nuget/zfile/__init__.py +0 -0
  206. package/deps/librdkafka/packaging/nuget/zfile/zfile.py +98 -0
  207. package/deps/librdkafka/packaging/rpm/Makefile +92 -0
  208. package/deps/librdkafka/packaging/rpm/README.md +23 -0
  209. package/deps/librdkafka/packaging/rpm/el7-x86_64.cfg +40 -0
  210. package/deps/librdkafka/packaging/rpm/librdkafka.spec +118 -0
  211. package/deps/librdkafka/packaging/rpm/mock-on-docker.sh +96 -0
  212. package/deps/librdkafka/packaging/rpm/tests/Makefile +25 -0
  213. package/deps/librdkafka/packaging/rpm/tests/README.md +8 -0
  214. package/deps/librdkafka/packaging/rpm/tests/run-test.sh +42 -0
  215. package/deps/librdkafka/packaging/rpm/tests/test-on-docker.sh +56 -0
  216. package/deps/librdkafka/packaging/rpm/tests/test.c +77 -0
  217. package/deps/librdkafka/packaging/rpm/tests/test.cpp +34 -0
  218. package/deps/librdkafka/packaging/tools/build-configurations-checks.sh +10 -0
  219. package/deps/librdkafka/packaging/tools/build-deb-package.sh +64 -0
  220. package/deps/librdkafka/packaging/tools/build-debian.sh +65 -0
  221. package/deps/librdkafka/packaging/tools/build-manylinux.sh +68 -0
  222. package/deps/librdkafka/packaging/tools/build-release-artifacts.sh +139 -0
  223. package/deps/librdkafka/packaging/tools/distro-build.sh +38 -0
  224. package/deps/librdkafka/packaging/tools/gh-release-checksums.py +39 -0
  225. package/deps/librdkafka/packaging/tools/rdutcoverage.sh +25 -0
  226. package/deps/librdkafka/packaging/tools/requirements.txt +2 -0
  227. package/deps/librdkafka/packaging/tools/style-format.sh +148 -0
  228. package/deps/librdkafka/service.yml +18 -0
  229. package/deps/librdkafka/src/CMakeLists.txt +374 -0
  230. package/deps/librdkafka/src/Makefile +103 -0
  231. package/deps/librdkafka/src/README.lz4.md +30 -0
  232. package/deps/librdkafka/src/cJSON.c +2834 -0
  233. package/deps/librdkafka/src/cJSON.h +398 -0
  234. package/deps/librdkafka/src/crc32c.c +430 -0
  235. package/deps/librdkafka/src/crc32c.h +38 -0
  236. package/deps/librdkafka/src/generate_proto.sh +66 -0
  237. package/deps/librdkafka/src/librdkafka_cgrp_synch.png +0 -0
  238. package/deps/librdkafka/src/lz4.c +2727 -0
  239. package/deps/librdkafka/src/lz4.h +842 -0
  240. package/deps/librdkafka/src/lz4frame.c +2078 -0
  241. package/deps/librdkafka/src/lz4frame.h +692 -0
  242. package/deps/librdkafka/src/lz4frame_static.h +47 -0
  243. package/deps/librdkafka/src/lz4hc.c +1631 -0
  244. package/deps/librdkafka/src/lz4hc.h +413 -0
  245. package/deps/librdkafka/src/nanopb/pb.h +917 -0
  246. package/deps/librdkafka/src/nanopb/pb_common.c +388 -0
  247. package/deps/librdkafka/src/nanopb/pb_common.h +49 -0
  248. package/deps/librdkafka/src/nanopb/pb_decode.c +1727 -0
  249. package/deps/librdkafka/src/nanopb/pb_decode.h +193 -0
  250. package/deps/librdkafka/src/nanopb/pb_encode.c +1000 -0
  251. package/deps/librdkafka/src/nanopb/pb_encode.h +185 -0
  252. package/deps/librdkafka/src/opentelemetry/common.pb.c +32 -0
  253. package/deps/librdkafka/src/opentelemetry/common.pb.h +170 -0
  254. package/deps/librdkafka/src/opentelemetry/metrics.options +2 -0
  255. package/deps/librdkafka/src/opentelemetry/metrics.pb.c +67 -0
  256. package/deps/librdkafka/src/opentelemetry/metrics.pb.h +966 -0
  257. package/deps/librdkafka/src/opentelemetry/resource.pb.c +12 -0
  258. package/deps/librdkafka/src/opentelemetry/resource.pb.h +58 -0
  259. package/deps/librdkafka/src/queue.h +850 -0
  260. package/deps/librdkafka/src/rd.h +441 -0
  261. package/deps/librdkafka/src/rdaddr.c +255 -0
  262. package/deps/librdkafka/src/rdaddr.h +203 -0
  263. package/deps/librdkafka/src/rdatomic.h +226 -0
  264. package/deps/librdkafka/src/rdavg.h +259 -0
  265. package/deps/librdkafka/src/rdavl.c +210 -0
  266. package/deps/librdkafka/src/rdavl.h +250 -0
  267. package/deps/librdkafka/src/rdbase64.c +169 -0
  268. package/deps/librdkafka/src/rdbase64.h +41 -0
  269. package/deps/librdkafka/src/rdbuf.c +1884 -0
  270. package/deps/librdkafka/src/rdbuf.h +375 -0
  271. package/deps/librdkafka/src/rdcrc32.c +114 -0
  272. package/deps/librdkafka/src/rdcrc32.h +170 -0
  273. package/deps/librdkafka/src/rddl.c +179 -0
  274. package/deps/librdkafka/src/rddl.h +43 -0
  275. package/deps/librdkafka/src/rdendian.h +174 -0
  276. package/deps/librdkafka/src/rdfloat.h +67 -0
  277. package/deps/librdkafka/src/rdfnv1a.c +113 -0
  278. package/deps/librdkafka/src/rdfnv1a.h +35 -0
  279. package/deps/librdkafka/src/rdgz.c +120 -0
  280. package/deps/librdkafka/src/rdgz.h +46 -0
  281. package/deps/librdkafka/src/rdhdrhistogram.c +721 -0
  282. package/deps/librdkafka/src/rdhdrhistogram.h +87 -0
  283. package/deps/librdkafka/src/rdhttp.c +512 -0
  284. package/deps/librdkafka/src/rdhttp.h +83 -0
  285. package/deps/librdkafka/src/rdinterval.h +177 -0
  286. package/deps/librdkafka/src/rdkafka.c +5351 -0
  287. package/deps/librdkafka/src/rdkafka.h +10603 -0
  288. package/deps/librdkafka/src/rdkafka_admin.c +9417 -0
  289. package/deps/librdkafka/src/rdkafka_admin.h +619 -0
  290. package/deps/librdkafka/src/rdkafka_assignment.c +1010 -0
  291. package/deps/librdkafka/src/rdkafka_assignment.h +73 -0
  292. package/deps/librdkafka/src/rdkafka_assignor.c +1786 -0
  293. package/deps/librdkafka/src/rdkafka_assignor.h +402 -0
  294. package/deps/librdkafka/src/rdkafka_aux.c +409 -0
  295. package/deps/librdkafka/src/rdkafka_aux.h +174 -0
  296. package/deps/librdkafka/src/rdkafka_background.c +221 -0
  297. package/deps/librdkafka/src/rdkafka_broker.c +6186 -0
  298. package/deps/librdkafka/src/rdkafka_broker.h +686 -0
  299. package/deps/librdkafka/src/rdkafka_buf.c +540 -0
  300. package/deps/librdkafka/src/rdkafka_buf.h +1524 -0
  301. package/deps/librdkafka/src/rdkafka_cert.c +552 -0
  302. package/deps/librdkafka/src/rdkafka_cert.h +61 -0
  303. package/deps/librdkafka/src/rdkafka_cgrp.c +7262 -0
  304. package/deps/librdkafka/src/rdkafka_cgrp.h +443 -0
  305. package/deps/librdkafka/src/rdkafka_conf.c +4456 -0
  306. package/deps/librdkafka/src/rdkafka_conf.h +668 -0
  307. package/deps/librdkafka/src/rdkafka_confval.h +97 -0
  308. package/deps/librdkafka/src/rdkafka_coord.c +623 -0
  309. package/deps/librdkafka/src/rdkafka_coord.h +132 -0
  310. package/deps/librdkafka/src/rdkafka_error.c +228 -0
  311. package/deps/librdkafka/src/rdkafka_error.h +80 -0
  312. package/deps/librdkafka/src/rdkafka_event.c +502 -0
  313. package/deps/librdkafka/src/rdkafka_event.h +126 -0
  314. package/deps/librdkafka/src/rdkafka_feature.c +461 -0
  315. package/deps/librdkafka/src/rdkafka_feature.h +102 -0
  316. package/deps/librdkafka/src/rdkafka_fetcher.c +1402 -0
  317. package/deps/librdkafka/src/rdkafka_fetcher.h +44 -0
  318. package/deps/librdkafka/src/rdkafka_header.c +220 -0
  319. package/deps/librdkafka/src/rdkafka_header.h +76 -0
  320. package/deps/librdkafka/src/rdkafka_idempotence.c +807 -0
  321. package/deps/librdkafka/src/rdkafka_idempotence.h +144 -0
  322. package/deps/librdkafka/src/rdkafka_int.h +1222 -0
  323. package/deps/librdkafka/src/rdkafka_interceptor.c +819 -0
  324. package/deps/librdkafka/src/rdkafka_interceptor.h +104 -0
  325. package/deps/librdkafka/src/rdkafka_lz4.c +450 -0
  326. package/deps/librdkafka/src/rdkafka_lz4.h +49 -0
  327. package/deps/librdkafka/src/rdkafka_metadata.c +2124 -0
  328. package/deps/librdkafka/src/rdkafka_metadata.h +341 -0
  329. package/deps/librdkafka/src/rdkafka_metadata_cache.c +977 -0
  330. package/deps/librdkafka/src/rdkafka_mock.c +2885 -0
  331. package/deps/librdkafka/src/rdkafka_mock.h +491 -0
  332. package/deps/librdkafka/src/rdkafka_mock_cgrp.c +710 -0
  333. package/deps/librdkafka/src/rdkafka_mock_handlers.c +2817 -0
  334. package/deps/librdkafka/src/rdkafka_mock_int.h +591 -0
  335. package/deps/librdkafka/src/rdkafka_msg.c +2573 -0
  336. package/deps/librdkafka/src/rdkafka_msg.h +614 -0
  337. package/deps/librdkafka/src/rdkafka_msgbatch.h +62 -0
  338. package/deps/librdkafka/src/rdkafka_msgset.h +98 -0
  339. package/deps/librdkafka/src/rdkafka_msgset_reader.c +1806 -0
  340. package/deps/librdkafka/src/rdkafka_msgset_writer.c +1470 -0
  341. package/deps/librdkafka/src/rdkafka_offset.c +1537 -0
  342. package/deps/librdkafka/src/rdkafka_offset.h +150 -0
  343. package/deps/librdkafka/src/rdkafka_op.c +997 -0
  344. package/deps/librdkafka/src/rdkafka_op.h +834 -0
  345. package/deps/librdkafka/src/rdkafka_partition.c +4801 -0
  346. package/deps/librdkafka/src/rdkafka_partition.h +1173 -0
  347. package/deps/librdkafka/src/rdkafka_pattern.c +228 -0
  348. package/deps/librdkafka/src/rdkafka_pattern.h +70 -0
  349. package/deps/librdkafka/src/rdkafka_plugin.c +213 -0
  350. package/deps/librdkafka/src/rdkafka_plugin.h +41 -0
  351. package/deps/librdkafka/src/rdkafka_proto.h +733 -0
  352. package/deps/librdkafka/src/rdkafka_protocol.h +127 -0
  353. package/deps/librdkafka/src/rdkafka_queue.c +1153 -0
  354. package/deps/librdkafka/src/rdkafka_queue.h +1201 -0
  355. package/deps/librdkafka/src/rdkafka_range_assignor.c +1748 -0
  356. package/deps/librdkafka/src/rdkafka_request.c +6817 -0
  357. package/deps/librdkafka/src/rdkafka_request.h +709 -0
  358. package/deps/librdkafka/src/rdkafka_roundrobin_assignor.c +123 -0
  359. package/deps/librdkafka/src/rdkafka_sasl.c +528 -0
  360. package/deps/librdkafka/src/rdkafka_sasl.h +63 -0
  361. package/deps/librdkafka/src/rdkafka_sasl_cyrus.c +722 -0
  362. package/deps/librdkafka/src/rdkafka_sasl_int.h +89 -0
  363. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer.c +1829 -0
  364. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer.h +52 -0
  365. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer_oidc.c +589 -0
  366. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer_oidc.h +37 -0
  367. package/deps/librdkafka/src/rdkafka_sasl_plain.c +142 -0
  368. package/deps/librdkafka/src/rdkafka_sasl_scram.c +857 -0
  369. package/deps/librdkafka/src/rdkafka_sasl_win32.c +550 -0
  370. package/deps/librdkafka/src/rdkafka_ssl.c +1904 -0
  371. package/deps/librdkafka/src/rdkafka_ssl.h +64 -0
  372. package/deps/librdkafka/src/rdkafka_sticky_assignor.c +4781 -0
  373. package/deps/librdkafka/src/rdkafka_subscription.c +278 -0
  374. package/deps/librdkafka/src/rdkafka_telemetry.c +703 -0
  375. package/deps/librdkafka/src/rdkafka_telemetry.h +52 -0
  376. package/deps/librdkafka/src/rdkafka_telemetry_decode.c +1053 -0
  377. package/deps/librdkafka/src/rdkafka_telemetry_decode.h +59 -0
  378. package/deps/librdkafka/src/rdkafka_telemetry_encode.c +993 -0
  379. package/deps/librdkafka/src/rdkafka_telemetry_encode.h +301 -0
  380. package/deps/librdkafka/src/rdkafka_timer.c +402 -0
  381. package/deps/librdkafka/src/rdkafka_timer.h +117 -0
  382. package/deps/librdkafka/src/rdkafka_topic.c +2078 -0
  383. package/deps/librdkafka/src/rdkafka_topic.h +328 -0
  384. package/deps/librdkafka/src/rdkafka_transport.c +1297 -0
  385. package/deps/librdkafka/src/rdkafka_transport.h +94 -0
  386. package/deps/librdkafka/src/rdkafka_transport_int.h +100 -0
  387. package/deps/librdkafka/src/rdkafka_txnmgr.c +3251 -0
  388. package/deps/librdkafka/src/rdkafka_txnmgr.h +171 -0
  389. package/deps/librdkafka/src/rdkafka_zstd.c +226 -0
  390. package/deps/librdkafka/src/rdkafka_zstd.h +57 -0
  391. package/deps/librdkafka/src/rdlist.c +576 -0
  392. package/deps/librdkafka/src/rdlist.h +434 -0
  393. package/deps/librdkafka/src/rdlog.c +89 -0
  394. package/deps/librdkafka/src/rdlog.h +41 -0
  395. package/deps/librdkafka/src/rdmap.c +503 -0
  396. package/deps/librdkafka/src/rdmap.h +492 -0
  397. package/deps/librdkafka/src/rdmurmur2.c +167 -0
  398. package/deps/librdkafka/src/rdmurmur2.h +35 -0
  399. package/deps/librdkafka/src/rdports.c +61 -0
  400. package/deps/librdkafka/src/rdports.h +38 -0
  401. package/deps/librdkafka/src/rdposix.h +250 -0
  402. package/deps/librdkafka/src/rdrand.c +70 -0
  403. package/deps/librdkafka/src/rdrand.h +43 -0
  404. package/deps/librdkafka/src/rdregex.c +156 -0
  405. package/deps/librdkafka/src/rdregex.h +43 -0
  406. package/deps/librdkafka/src/rdsignal.h +57 -0
  407. package/deps/librdkafka/src/rdstring.c +645 -0
  408. package/deps/librdkafka/src/rdstring.h +98 -0
  409. package/deps/librdkafka/src/rdsysqueue.h +404 -0
  410. package/deps/librdkafka/src/rdtime.h +325 -0
  411. package/deps/librdkafka/src/rdtypes.h +86 -0
  412. package/deps/librdkafka/src/rdunittest.c +532 -0
  413. package/deps/librdkafka/src/rdunittest.h +230 -0
  414. package/deps/librdkafka/src/rdvarint.c +134 -0
  415. package/deps/librdkafka/src/rdvarint.h +165 -0
  416. package/deps/librdkafka/src/rdwin32.h +382 -0
  417. package/deps/librdkafka/src/rdxxhash.c +1030 -0
  418. package/deps/librdkafka/src/rdxxhash.h +328 -0
  419. package/deps/librdkafka/src/regexp.c +1347 -0
  420. package/deps/librdkafka/src/regexp.h +41 -0
  421. package/deps/librdkafka/src/snappy.c +1866 -0
  422. package/deps/librdkafka/src/snappy.h +62 -0
  423. package/deps/librdkafka/src/snappy_compat.h +138 -0
  424. package/deps/librdkafka/src/statistics_schema.json +444 -0
  425. package/deps/librdkafka/src/tinycthread.c +932 -0
  426. package/deps/librdkafka/src/tinycthread.h +503 -0
  427. package/deps/librdkafka/src/tinycthread_extra.c +175 -0
  428. package/deps/librdkafka/src/tinycthread_extra.h +208 -0
  429. package/deps/librdkafka/src/win32_config.h +58 -0
  430. package/deps/librdkafka/src-cpp/CMakeLists.txt +90 -0
  431. package/deps/librdkafka/src-cpp/ConfImpl.cpp +84 -0
  432. package/deps/librdkafka/src-cpp/ConsumerImpl.cpp +244 -0
  433. package/deps/librdkafka/src-cpp/HandleImpl.cpp +436 -0
  434. package/deps/librdkafka/src-cpp/HeadersImpl.cpp +48 -0
  435. package/deps/librdkafka/src-cpp/KafkaConsumerImpl.cpp +296 -0
  436. package/deps/librdkafka/src-cpp/Makefile +55 -0
  437. package/deps/librdkafka/src-cpp/MessageImpl.cpp +38 -0
  438. package/deps/librdkafka/src-cpp/MetadataImpl.cpp +170 -0
  439. package/deps/librdkafka/src-cpp/ProducerImpl.cpp +197 -0
  440. package/deps/librdkafka/src-cpp/QueueImpl.cpp +70 -0
  441. package/deps/librdkafka/src-cpp/README.md +16 -0
  442. package/deps/librdkafka/src-cpp/RdKafka.cpp +59 -0
  443. package/deps/librdkafka/src-cpp/TopicImpl.cpp +124 -0
  444. package/deps/librdkafka/src-cpp/TopicPartitionImpl.cpp +57 -0
  445. package/deps/librdkafka/src-cpp/rdkafkacpp.h +3771 -0
  446. package/deps/librdkafka/src-cpp/rdkafkacpp_int.h +1641 -0
  447. package/deps/librdkafka/tests/0000-unittests.c +72 -0
  448. package/deps/librdkafka/tests/0001-multiobj.c +98 -0
  449. package/deps/librdkafka/tests/0002-unkpart.c +244 -0
  450. package/deps/librdkafka/tests/0003-msgmaxsize.c +173 -0
  451. package/deps/librdkafka/tests/0004-conf.c +867 -0
  452. package/deps/librdkafka/tests/0005-order.c +133 -0
  453. package/deps/librdkafka/tests/0006-symbols.c +163 -0
  454. package/deps/librdkafka/tests/0007-autotopic.c +136 -0
  455. package/deps/librdkafka/tests/0008-reqacks.c +179 -0
  456. package/deps/librdkafka/tests/0009-mock_cluster.c +96 -0
  457. package/deps/librdkafka/tests/0011-produce_batch.c +752 -0
  458. package/deps/librdkafka/tests/0012-produce_consume.c +537 -0
  459. package/deps/librdkafka/tests/0013-null-msgs.c +473 -0
  460. package/deps/librdkafka/tests/0014-reconsume-191.c +512 -0
  461. package/deps/librdkafka/tests/0015-offset_seeks.c +172 -0
  462. package/deps/librdkafka/tests/0016-client_swname.c +166 -0
  463. package/deps/librdkafka/tests/0017-compression.c +142 -0
  464. package/deps/librdkafka/tests/0018-cgrp_term.c +333 -0
  465. package/deps/librdkafka/tests/0019-list_groups.c +289 -0
  466. package/deps/librdkafka/tests/0020-destroy_hang.c +162 -0
  467. package/deps/librdkafka/tests/0021-rkt_destroy.c +71 -0
  468. package/deps/librdkafka/tests/0022-consume_batch.c +276 -0
  469. package/deps/librdkafka/tests/0025-timers.c +147 -0
  470. package/deps/librdkafka/tests/0026-consume_pause.c +549 -0
  471. package/deps/librdkafka/tests/0028-long_topicnames.c +79 -0
  472. package/deps/librdkafka/tests/0029-assign_offset.c +204 -0
  473. package/deps/librdkafka/tests/0030-offset_commit.c +589 -0
  474. package/deps/librdkafka/tests/0031-get_offsets.c +235 -0
  475. package/deps/librdkafka/tests/0033-regex_subscribe.c +520 -0
  476. package/deps/librdkafka/tests/0034-offset_reset.c +377 -0
  477. package/deps/librdkafka/tests/0035-api_version.c +73 -0
  478. package/deps/librdkafka/tests/0036-partial_fetch.c +86 -0
  479. package/deps/librdkafka/tests/0037-destroy_hang_local.c +85 -0
  480. package/deps/librdkafka/tests/0038-performance.c +120 -0
  481. package/deps/librdkafka/tests/0039-event.c +284 -0
  482. package/deps/librdkafka/tests/0040-io_event.c +251 -0
  483. package/deps/librdkafka/tests/0041-fetch_max_bytes.c +96 -0
  484. package/deps/librdkafka/tests/0042-many_topics.c +252 -0
  485. package/deps/librdkafka/tests/0043-no_connection.c +77 -0
  486. package/deps/librdkafka/tests/0044-partition_cnt.c +93 -0
  487. package/deps/librdkafka/tests/0045-subscribe_update.c +746 -0
  488. package/deps/librdkafka/tests/0046-rkt_cache.c +65 -0
  489. package/deps/librdkafka/tests/0047-partial_buf_tmout.c +97 -0
  490. package/deps/librdkafka/tests/0048-partitioner.c +283 -0
  491. package/deps/librdkafka/tests/0049-consume_conn_close.c +162 -0
  492. package/deps/librdkafka/tests/0050-subscribe_adds.c +144 -0
  493. package/deps/librdkafka/tests/0051-assign_adds.c +125 -0
  494. package/deps/librdkafka/tests/0052-msg_timestamps.c +220 -0
  495. package/deps/librdkafka/tests/0053-stats_cb.cpp +535 -0
  496. package/deps/librdkafka/tests/0054-offset_time.cpp +236 -0
  497. package/deps/librdkafka/tests/0055-producer_latency.c +366 -0
  498. package/deps/librdkafka/tests/0056-balanced_group_mt.c +311 -0
  499. package/deps/librdkafka/tests/0057-invalid_topic.cpp +112 -0
  500. package/deps/librdkafka/tests/0058-log.cpp +123 -0
  501. package/deps/librdkafka/tests/0059-bsearch.cpp +237 -0
  502. package/deps/librdkafka/tests/0060-op_prio.cpp +163 -0
  503. package/deps/librdkafka/tests/0061-consumer_lag.cpp +275 -0
  504. package/deps/librdkafka/tests/0062-stats_event.c +126 -0
  505. package/deps/librdkafka/tests/0063-clusterid.cpp +180 -0
  506. package/deps/librdkafka/tests/0064-interceptors.c +481 -0
  507. package/deps/librdkafka/tests/0065-yield.cpp +140 -0
  508. package/deps/librdkafka/tests/0066-plugins.cpp +129 -0
  509. package/deps/librdkafka/tests/0067-empty_topic.cpp +148 -0
  510. package/deps/librdkafka/tests/0068-produce_timeout.c +138 -0
  511. package/deps/librdkafka/tests/0069-consumer_add_parts.c +123 -0
  512. package/deps/librdkafka/tests/0070-null_empty.cpp +197 -0
  513. package/deps/librdkafka/tests/0072-headers_ut.c +448 -0
  514. package/deps/librdkafka/tests/0073-headers.c +381 -0
  515. package/deps/librdkafka/tests/0074-producev.c +87 -0
  516. package/deps/librdkafka/tests/0075-retry.c +253 -0
  517. package/deps/librdkafka/tests/0076-produce_retry.c +450 -0
  518. package/deps/librdkafka/tests/0077-compaction.c +357 -0
  519. package/deps/librdkafka/tests/0078-c_from_cpp.cpp +96 -0
  520. package/deps/librdkafka/tests/0079-fork.c +93 -0
  521. package/deps/librdkafka/tests/0080-admin_ut.c +3065 -0
  522. package/deps/librdkafka/tests/0081-admin.c +5333 -0
  523. package/deps/librdkafka/tests/0082-fetch_max_bytes.cpp +133 -0
  524. package/deps/librdkafka/tests/0083-cb_event.c +228 -0
  525. package/deps/librdkafka/tests/0084-destroy_flags.c +212 -0
  526. package/deps/librdkafka/tests/0085-headers.cpp +388 -0
  527. package/deps/librdkafka/tests/0086-purge.c +335 -0
  528. package/deps/librdkafka/tests/0088-produce_metadata_timeout.c +162 -0
  529. package/deps/librdkafka/tests/0089-max_poll_interval.c +506 -0
  530. package/deps/librdkafka/tests/0090-idempotence.c +172 -0
  531. package/deps/librdkafka/tests/0091-max_poll_interval_timeout.c +297 -0
  532. package/deps/librdkafka/tests/0092-mixed_msgver.c +97 -0
  533. package/deps/librdkafka/tests/0093-holb.c +197 -0
  534. package/deps/librdkafka/tests/0094-idempotence_msg_timeout.c +230 -0
  535. package/deps/librdkafka/tests/0095-all_brokers_down.cpp +122 -0
  536. package/deps/librdkafka/tests/0097-ssl_verify.cpp +466 -0
  537. package/deps/librdkafka/tests/0098-consumer-txn.cpp +1218 -0
  538. package/deps/librdkafka/tests/0099-commit_metadata.c +194 -0
  539. package/deps/librdkafka/tests/0100-thread_interceptors.cpp +195 -0
  540. package/deps/librdkafka/tests/0101-fetch-from-follower.cpp +446 -0
  541. package/deps/librdkafka/tests/0102-static_group_rebalance.c +535 -0
  542. package/deps/librdkafka/tests/0103-transactions.c +1383 -0
  543. package/deps/librdkafka/tests/0104-fetch_from_follower_mock.c +624 -0
  544. package/deps/librdkafka/tests/0105-transactions_mock.c +3923 -0
  545. package/deps/librdkafka/tests/0106-cgrp_sess_timeout.c +297 -0
  546. package/deps/librdkafka/tests/0107-topic_recreate.c +259 -0
  547. package/deps/librdkafka/tests/0109-auto_create_topics.cpp +218 -0
  548. package/deps/librdkafka/tests/0110-batch_size.cpp +183 -0
  549. package/deps/librdkafka/tests/0111-delay_create_topics.cpp +127 -0
  550. package/deps/librdkafka/tests/0112-assign_unknown_part.c +98 -0
  551. package/deps/librdkafka/tests/0113-cooperative_rebalance.cpp +3329 -0
  552. package/deps/librdkafka/tests/0114-sticky_partitioning.cpp +176 -0
  553. package/deps/librdkafka/tests/0115-producer_auth.cpp +179 -0
  554. package/deps/librdkafka/tests/0116-kafkaconsumer_close.cpp +214 -0
  555. package/deps/librdkafka/tests/0117-mock_errors.c +321 -0
  556. package/deps/librdkafka/tests/0118-commit_rebalance.c +121 -0
  557. package/deps/librdkafka/tests/0119-consumer_auth.cpp +148 -0
  558. package/deps/librdkafka/tests/0120-asymmetric_subscription.c +180 -0
  559. package/deps/librdkafka/tests/0121-clusterid.c +115 -0
  560. package/deps/librdkafka/tests/0122-buffer_cleaning_after_rebalance.c +227 -0
  561. package/deps/librdkafka/tests/0123-connections_max_idle.c +98 -0
  562. package/deps/librdkafka/tests/0124-openssl_invalid_engine.c +69 -0
  563. package/deps/librdkafka/tests/0125-immediate_flush.c +144 -0
  564. package/deps/librdkafka/tests/0126-oauthbearer_oidc.c +213 -0
  565. package/deps/librdkafka/tests/0127-fetch_queue_backoff.cpp +165 -0
  566. package/deps/librdkafka/tests/0128-sasl_callback_queue.cpp +125 -0
  567. package/deps/librdkafka/tests/0129-fetch_aborted_msgs.c +78 -0
  568. package/deps/librdkafka/tests/0130-store_offsets.c +178 -0
  569. package/deps/librdkafka/tests/0131-connect_timeout.c +81 -0
  570. package/deps/librdkafka/tests/0132-strategy_ordering.c +171 -0
  571. package/deps/librdkafka/tests/0133-ssl_keys.c +128 -0
  572. package/deps/librdkafka/tests/0134-ssl_provider.c +92 -0
  573. package/deps/librdkafka/tests/0135-sasl_credentials.cpp +143 -0
  574. package/deps/librdkafka/tests/0136-resolve_cb.c +181 -0
  575. package/deps/librdkafka/tests/0137-barrier_batch_consume.c +609 -0
  576. package/deps/librdkafka/tests/0138-admin_mock.c +281 -0
  577. package/deps/librdkafka/tests/0139-offset_validation_mock.c +442 -0
  578. package/deps/librdkafka/tests/0140-commit_metadata.cpp +108 -0
  579. package/deps/librdkafka/tests/0142-reauthentication.c +495 -0
  580. package/deps/librdkafka/tests/0143-exponential_backoff_mock.c +553 -0
  581. package/deps/librdkafka/tests/0144-idempotence_mock.c +373 -0
  582. package/deps/librdkafka/tests/0145-pause_resume_mock.c +119 -0
  583. package/deps/librdkafka/tests/0146-metadata_mock.c +444 -0
  584. package/deps/librdkafka/tests/0150-telemetry_mock.c +648 -0
  585. package/deps/librdkafka/tests/1000-unktopic.c +164 -0
  586. package/deps/librdkafka/tests/8000-idle.cpp +60 -0
  587. package/deps/librdkafka/tests/8001-fetch_from_follower_mock_manual.c +113 -0
  588. package/deps/librdkafka/tests/CMakeLists.txt +164 -0
  589. package/deps/librdkafka/tests/LibrdkafkaTestApp.py +266 -0
  590. package/deps/librdkafka/tests/Makefile +182 -0
  591. package/deps/librdkafka/tests/README.md +509 -0
  592. package/deps/librdkafka/tests/autotest.sh +33 -0
  593. package/deps/librdkafka/tests/backtrace.gdb +30 -0
  594. package/deps/librdkafka/tests/broker_version_tests.py +315 -0
  595. package/deps/librdkafka/tests/buildbox.sh +17 -0
  596. package/deps/librdkafka/tests/cleanup-checker-tests.sh +20 -0
  597. package/deps/librdkafka/tests/cluster_testing.py +191 -0
  598. package/deps/librdkafka/tests/delete-test-topics.sh +56 -0
  599. package/deps/librdkafka/tests/fixtures/ssl/Makefile +8 -0
  600. package/deps/librdkafka/tests/fixtures/ssl/README.md +13 -0
  601. package/deps/librdkafka/tests/fixtures/ssl/client.keystore.p12 +0 -0
  602. package/deps/librdkafka/tests/fixtures/ssl/client2.certificate.pem +109 -0
  603. package/deps/librdkafka/tests/fixtures/ssl/client2.key +34 -0
  604. package/deps/librdkafka/tests/fixtures/ssl/create_keys.sh +93 -0
  605. package/deps/librdkafka/tests/fuzzers/Makefile +12 -0
  606. package/deps/librdkafka/tests/fuzzers/README.md +31 -0
  607. package/deps/librdkafka/tests/fuzzers/fuzz_regex.c +74 -0
  608. package/deps/librdkafka/tests/fuzzers/helpers.h +90 -0
  609. package/deps/librdkafka/tests/gen-ssl-certs.sh +165 -0
  610. package/deps/librdkafka/tests/interactive_broker_version.py +170 -0
  611. package/deps/librdkafka/tests/interceptor_test/CMakeLists.txt +16 -0
  612. package/deps/librdkafka/tests/interceptor_test/Makefile +22 -0
  613. package/deps/librdkafka/tests/interceptor_test/interceptor_test.c +314 -0
  614. package/deps/librdkafka/tests/interceptor_test/interceptor_test.h +54 -0
  615. package/deps/librdkafka/tests/java/IncrementalRebalanceCli.java +97 -0
  616. package/deps/librdkafka/tests/java/Makefile +12 -0
  617. package/deps/librdkafka/tests/java/Murmur2Cli.java +46 -0
  618. package/deps/librdkafka/tests/java/README.md +14 -0
  619. package/deps/librdkafka/tests/java/TransactionProducerCli.java +162 -0
  620. package/deps/librdkafka/tests/java/run-class.sh +11 -0
  621. package/deps/librdkafka/tests/librdkafka.suppressions +483 -0
  622. package/deps/librdkafka/tests/lz4_manual_test.sh +59 -0
  623. package/deps/librdkafka/tests/multi-broker-version-test.sh +50 -0
  624. package/deps/librdkafka/tests/parse-refcnt.sh +43 -0
  625. package/deps/librdkafka/tests/performance_plot.py +115 -0
  626. package/deps/librdkafka/tests/plugin_test/Makefile +19 -0
  627. package/deps/librdkafka/tests/plugin_test/plugin_test.c +58 -0
  628. package/deps/librdkafka/tests/requirements.txt +2 -0
  629. package/deps/librdkafka/tests/run-consumer-tests.sh +16 -0
  630. package/deps/librdkafka/tests/run-producer-tests.sh +16 -0
  631. package/deps/librdkafka/tests/run-test.sh +140 -0
  632. package/deps/librdkafka/tests/rusage.c +249 -0
  633. package/deps/librdkafka/tests/sasl_test.py +289 -0
  634. package/deps/librdkafka/tests/scenarios/README.md +6 -0
  635. package/deps/librdkafka/tests/scenarios/ak23.json +6 -0
  636. package/deps/librdkafka/tests/scenarios/default.json +5 -0
  637. package/deps/librdkafka/tests/scenarios/noautocreate.json +5 -0
  638. package/deps/librdkafka/tests/sockem.c +801 -0
  639. package/deps/librdkafka/tests/sockem.h +85 -0
  640. package/deps/librdkafka/tests/sockem_ctrl.c +145 -0
  641. package/deps/librdkafka/tests/sockem_ctrl.h +61 -0
  642. package/deps/librdkafka/tests/test.c +7318 -0
  643. package/deps/librdkafka/tests/test.conf.example +27 -0
  644. package/deps/librdkafka/tests/test.h +979 -0
  645. package/deps/librdkafka/tests/testcpp.cpp +126 -0
  646. package/deps/librdkafka/tests/testcpp.h +360 -0
  647. package/deps/librdkafka/tests/testshared.h +402 -0
  648. package/deps/librdkafka/tests/tools/README.md +4 -0
  649. package/deps/librdkafka/tests/tools/stats/README.md +21 -0
  650. package/deps/librdkafka/tests/tools/stats/filter.jq +42 -0
  651. package/deps/librdkafka/tests/tools/stats/graph.py +150 -0
  652. package/deps/librdkafka/tests/tools/stats/requirements.txt +3 -0
  653. package/deps/librdkafka/tests/tools/stats/to_csv.py +124 -0
  654. package/deps/librdkafka/tests/until-fail.sh +87 -0
  655. package/deps/librdkafka/tests/xxxx-assign_partition.c +122 -0
  656. package/deps/librdkafka/tests/xxxx-metadata.cpp +159 -0
  657. package/deps/librdkafka/vcpkg.json +23 -0
  658. package/deps/librdkafka/win32/README.md +5 -0
  659. package/deps/librdkafka/win32/build-package.bat +3 -0
  660. package/deps/librdkafka/win32/build.bat +19 -0
  661. package/deps/librdkafka/win32/common.vcxproj +84 -0
  662. package/deps/librdkafka/win32/install-openssl.ps1 +33 -0
  663. package/deps/librdkafka/win32/interceptor_test/interceptor_test.vcxproj +87 -0
  664. package/deps/librdkafka/win32/librdkafka.autopkg.template +54 -0
  665. package/deps/librdkafka/win32/librdkafka.master.testing.targets +13 -0
  666. package/deps/librdkafka/win32/librdkafka.sln +226 -0
  667. package/deps/librdkafka/win32/librdkafka.vcxproj +276 -0
  668. package/deps/librdkafka/win32/librdkafkacpp/librdkafkacpp.vcxproj +104 -0
  669. package/deps/librdkafka/win32/msbuild.ps1 +15 -0
  670. package/deps/librdkafka/win32/openssl_engine_example/openssl_engine_example.vcxproj +132 -0
  671. package/deps/librdkafka/win32/package-zip.ps1 +46 -0
  672. package/deps/librdkafka/win32/packages/repositories.config +4 -0
  673. package/deps/librdkafka/win32/push-package.bat +4 -0
  674. package/deps/librdkafka/win32/rdkafka_complex_consumer_example_cpp/rdkafka_complex_consumer_example_cpp.vcxproj +67 -0
  675. package/deps/librdkafka/win32/rdkafka_example/rdkafka_example.vcxproj +97 -0
  676. package/deps/librdkafka/win32/rdkafka_performance/rdkafka_performance.vcxproj +97 -0
  677. package/deps/librdkafka/win32/setup-msys2.ps1 +31 -0
  678. package/deps/librdkafka/win32/setup-vcpkg.ps1 +12 -0
  679. package/deps/librdkafka/win32/tests/test.conf.example +25 -0
  680. package/deps/librdkafka/win32/tests/tests.vcxproj +247 -0
  681. package/deps/librdkafka/win32/win_ssl_cert_store/win_ssl_cert_store.vcxproj +132 -0
  682. package/deps/librdkafka/win32/wingetopt.c +564 -0
  683. package/deps/librdkafka/win32/wingetopt.h +100 -0
  684. package/deps/librdkafka/win32/wintime.h +33 -0
  685. package/deps/librdkafka.gyp +62 -0
  686. package/deps/windows-install.py +73 -0
  687. package/docker-compose.yml +23 -0
  688. package/e2e/admin.spec.js +187 -0
  689. package/e2e/both.spec.js +726 -0
  690. package/e2e/consumer.spec.js +386 -0
  691. package/e2e/groups.spec.js +132 -0
  692. package/e2e/listener.js +51 -0
  693. package/e2e/producer-transaction.spec.js +333 -0
  694. package/e2e/producer.spec.js +283 -0
  695. package/errors.d.ts +347 -0
  696. package/examples/consumer-flow.md +76 -0
  697. package/examples/consumer.md +45 -0
  698. package/examples/docker-alpine.md +30 -0
  699. package/examples/high-level-producer.md +32 -0
  700. package/examples/metadata.md +27 -0
  701. package/examples/oauthbearer-default-flow.md +80 -0
  702. package/examples/producer-cluster.md +103 -0
  703. package/examples/producer.md +73 -0
  704. package/index.d.ts +357 -0
  705. package/lib/admin.js +233 -0
  706. package/lib/client.js +578 -0
  707. package/lib/error.js +472 -0
  708. package/lib/index.js +34 -0
  709. package/lib/kafka-consumer-stream.js +397 -0
  710. package/lib/kafka-consumer.js +698 -0
  711. package/lib/producer/high-level-producer.js +323 -0
  712. package/lib/producer-stream.js +307 -0
  713. package/lib/producer.js +375 -0
  714. package/lib/tools/ref-counter.js +52 -0
  715. package/lib/topic-partition.js +88 -0
  716. package/lib/topic.js +42 -0
  717. package/lib/util.js +29 -0
  718. package/librdkafka.js +12 -0
  719. package/make_docs.sh +59 -0
  720. package/package.json +53 -0
  721. package/renovate.json +30 -0
  722. package/run_docker.sh +42 -0
  723. package/src/admin.cc +624 -0
  724. package/src/admin.h +78 -0
  725. package/src/binding.cc +73 -0
  726. package/src/binding.h +25 -0
  727. package/src/callbacks.cc +614 -0
  728. package/src/callbacks.h +265 -0
  729. package/src/common.cc +582 -0
  730. package/src/common.h +134 -0
  731. package/src/config.cc +167 -0
  732. package/src/config.h +45 -0
  733. package/src/connection.cc +482 -0
  734. package/src/connection.h +108 -0
  735. package/src/errors.cc +96 -0
  736. package/src/errors.h +53 -0
  737. package/src/kafka-consumer.cc +1457 -0
  738. package/src/kafka-consumer.h +136 -0
  739. package/src/per-isolate-data.cc +57 -0
  740. package/src/per-isolate-data.h +39 -0
  741. package/src/producer.cc +873 -0
  742. package/src/producer.h +125 -0
  743. package/src/topic.cc +180 -0
  744. package/src/topic.h +56 -0
  745. package/src/workers.cc +1245 -0
  746. package/src/workers.h +511 -0
  747. package/test/binding.spec.js +66 -0
  748. package/test/consumer.spec.js +91 -0
  749. package/test/error.spec.js +8 -0
  750. package/test/index.spec.js +8 -0
  751. package/test/kafka-consumer-stream.spec.js +298 -0
  752. package/test/kafka-consumer-worker.js +51 -0
  753. package/test/kafka-consumer.spec.js +86 -0
  754. package/test/mocha.opts +1 -0
  755. package/test/mock.js +55 -0
  756. package/test/producer/high-level-producer.spec.js +496 -0
  757. package/test/producer-stream.spec.js +723 -0
  758. package/test/producer-worker.js +53 -0
  759. package/test/producer.spec.js +120 -0
  760. package/test/tools/ref-counter.spec.js +53 -0
  761. package/test/topic-partition.spec.js +104 -0
  762. package/test/util.spec.js +46 -0
  763. package/util/configure.js +30 -0
  764. package/util/get-env.js +6 -0
  765. package/util/test-compile.js +11 -0
  766. package/util/test-producer-delivery.js +100 -0
  767. package/win_install.ps1 +2 -0
@@ -0,0 +1,703 @@
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
+
37
+ #if WITH_ZSTD
38
+ #include "rdkafka_zstd.h"
39
+ #endif
40
+
41
+
42
+ #define RD_KAFKA_TELEMETRY_PUSH_JITTER 20
43
+
44
+ /**
45
+ * @brief Filters broker by availability of GetTelemetrySubscription.
46
+ *
47
+ * @return 0 if GetTelemetrySubscription is supported, 1 otherwise.
48
+ *
49
+ * @locks rd_kafka_broker_lock()
50
+ */
51
+ static int
52
+ rd_kafka_filter_broker_by_GetTelemetrySubscription(rd_kafka_broker_t *rkb,
53
+ void *opaque) {
54
+ int features;
55
+ if (rd_kafka_broker_ApiVersion_supported0(
56
+ rkb, RD_KAFKAP_GetTelemetrySubscriptions, 0, 0, &features,
57
+ rd_false) != -1)
58
+ return 0;
59
+ return 1;
60
+ }
61
+
62
+ /**
63
+ * @brief Returns the preferred metrics broker or NULL if unavailable.
64
+ *
65
+ * @locks none
66
+ * @locks_acquired rk_telemetry.lock, rd_kafka_wrlock()
67
+ * @locality main thread
68
+ */
69
+ static rd_kafka_broker_t *rd_kafka_get_preferred_broker(rd_kafka_t *rk) {
70
+ rd_kafka_broker_t *rkb = NULL;
71
+
72
+ mtx_lock(&rk->rk_telemetry.lock);
73
+ if (rk->rk_telemetry.preferred_broker)
74
+ rkb = rk->rk_telemetry.preferred_broker;
75
+ else {
76
+ /* If there is no preferred broker, that means that our previous
77
+ * one failed. Iterate through all available brokers to find
78
+ * one. */
79
+ rd_kafka_wrlock(rk);
80
+ rkb = rd_kafka_broker_random_up(
81
+ rk, rd_kafka_filter_broker_by_GetTelemetrySubscription,
82
+ NULL);
83
+ rd_kafka_wrunlock(rk);
84
+
85
+ /* No need to increase refcnt as broker_random_up does it
86
+ * already. */
87
+ rk->rk_telemetry.preferred_broker = rkb;
88
+
89
+ rd_kafka_dbg(rk, TELEMETRY, "SETBROKER",
90
+ "Lost preferred broker, switching to new "
91
+ "preferred broker %" PRId32 "\n",
92
+ rkb ? rd_kafka_broker_id(rkb) : -1);
93
+ }
94
+ mtx_unlock(&rk->rk_telemetry.lock);
95
+
96
+ return rkb;
97
+ }
98
+
99
+ /**
100
+ * @brief Cleans up the rk.rk_telemetry struct and frees any allocations.
101
+ *
102
+ * @param clear_control_flow_fields This determines if the control flow fields
103
+ * need to be cleared. This should only be set
104
+ * to true if the rk is terminating.
105
+ * @locality main thread
106
+ * @locks none
107
+ * @locks_acquired rk_telemetry.lock
108
+ */
109
+ void rd_kafka_telemetry_clear(rd_kafka_t *rk,
110
+ rd_bool_t clear_control_flow_fields) {
111
+ if (clear_control_flow_fields) {
112
+ mtx_lock(&rk->rk_telemetry.lock);
113
+ if (rk->rk_telemetry.preferred_broker) {
114
+ rd_kafka_broker_destroy(
115
+ rk->rk_telemetry.preferred_broker);
116
+ rk->rk_telemetry.preferred_broker = NULL;
117
+ }
118
+ mtx_unlock(&rk->rk_telemetry.lock);
119
+ mtx_destroy(&rk->rk_telemetry.lock);
120
+ cnd_destroy(&rk->rk_telemetry.termination_cnd);
121
+ }
122
+
123
+ if (rk->rk_telemetry.accepted_compression_types_cnt) {
124
+ rd_free(rk->rk_telemetry.accepted_compression_types);
125
+ rk->rk_telemetry.accepted_compression_types = NULL;
126
+ rk->rk_telemetry.accepted_compression_types_cnt = 0;
127
+ }
128
+
129
+ if (rk->rk_telemetry.requested_metrics_cnt) {
130
+ size_t i;
131
+ for (i = 0; i < rk->rk_telemetry.requested_metrics_cnt; i++)
132
+ rd_free(rk->rk_telemetry.requested_metrics[i]);
133
+ rd_free(rk->rk_telemetry.requested_metrics);
134
+ rd_free(rk->rk_telemetry.matched_metrics);
135
+ rk->rk_telemetry.requested_metrics = NULL;
136
+ rk->rk_telemetry.requested_metrics_cnt = 0;
137
+ rk->rk_telemetry.matched_metrics = NULL;
138
+ rk->rk_telemetry.matched_metrics_cnt = 0;
139
+ }
140
+ rk->rk_telemetry.telemetry_max_bytes = 0;
141
+ }
142
+
143
+ /**
144
+ * @brief Sets the telemetry state to TERMINATED and signals the conditional
145
+ * variable
146
+ *
147
+ * @locality main thread
148
+ * @locks none
149
+ * @locks_acquired rk_telemetry.lock
150
+ */
151
+ static void rd_kafka_telemetry_set_terminated(rd_kafka_t *rk) {
152
+ rd_dassert(thrd_is_current(rk->rk_thread));
153
+
154
+ rd_kafka_dbg(rk, TELEMETRY, "TERM",
155
+ "Setting state to TERMINATED and signalling");
156
+
157
+ rk->rk_telemetry.state = RD_KAFKA_TELEMETRY_TERMINATED;
158
+ rd_kafka_timer_stop(&rk->rk_timers, &rk->rk_telemetry.request_timer,
159
+ 1 /*lock*/);
160
+ mtx_lock(&rk->rk_telemetry.lock);
161
+ cnd_signal(&rk->rk_telemetry.termination_cnd);
162
+ mtx_unlock(&rk->rk_telemetry.lock);
163
+ }
164
+
165
+ static void update_matched_metrics(rd_kafka_t *rk, size_t j) {
166
+ rk->rk_telemetry.matched_metrics_cnt++;
167
+ rk->rk_telemetry.matched_metrics =
168
+ rd_realloc(rk->rk_telemetry.matched_metrics,
169
+ sizeof(int) * rk->rk_telemetry.matched_metrics_cnt);
170
+ rk->rk_telemetry
171
+ .matched_metrics[rk->rk_telemetry.matched_metrics_cnt - 1] = j;
172
+ }
173
+
174
+ static void rd_kafka_match_requested_metrics(rd_kafka_t *rk) {
175
+ size_t metrics_cnt = RD_KAFKA_TELEMETRY_METRIC_CNT(rk), i;
176
+ const rd_kafka_telemetry_metric_info_t *info =
177
+ RD_KAFKA_TELEMETRY_METRIC_INFO(rk);
178
+
179
+ if (rk->rk_telemetry.requested_metrics_cnt == 1 &&
180
+ !strcmp(rk->rk_telemetry.requested_metrics[0],
181
+ RD_KAFKA_TELEMETRY_METRICS_ALL_METRICS_SUBSCRIPTION)) {
182
+ size_t j;
183
+ rd_kafka_dbg(rk, TELEMETRY, "GETSUBSCRIPTIONS",
184
+ "All metrics subscribed");
185
+
186
+ for (j = 0; j < metrics_cnt; j++)
187
+ update_matched_metrics(rk, j);
188
+ return;
189
+ }
190
+
191
+ for (i = 0; i < rk->rk_telemetry.requested_metrics_cnt; i++) {
192
+ size_t name_len = strlen(rk->rk_telemetry.requested_metrics[i]),
193
+ j;
194
+
195
+ for (j = 0; j < metrics_cnt; j++) {
196
+ /* Prefix matching the requested metrics with the
197
+ * available metrics. */
198
+ char full_metric_name
199
+ [RD_KAFKA_TELEMETRY_METRIC_NAME_MAX_LEN];
200
+ rd_snprintf(full_metric_name, sizeof(full_metric_name),
201
+ "%s%s", RD_KAFKA_TELEMETRY_METRIC_PREFIX,
202
+ info[j].name);
203
+ bool name_matches =
204
+ strncmp(full_metric_name,
205
+ rk->rk_telemetry.requested_metrics[i],
206
+ name_len) == 0;
207
+
208
+ if (name_matches)
209
+ update_matched_metrics(rk, j);
210
+ }
211
+ }
212
+
213
+ rd_kafka_dbg(rk, TELEMETRY, "GETSUBSCRIPTIONS",
214
+ "Matched metrics: %" PRIusz,
215
+ rk->rk_telemetry.matched_metrics_cnt);
216
+ }
217
+
218
+ /**
219
+ * @brief Enqueues a GetTelemetrySubscriptionsRequest.
220
+ *
221
+ * @locks none
222
+ * @locks_acquired none
223
+ * @locality main thread
224
+ */
225
+ static void rd_kafka_send_get_telemetry_subscriptions(rd_kafka_t *rk,
226
+ rd_kafka_broker_t *rkb) {
227
+ /* Clear out the telemetry struct, free anything that is malloc'd. */
228
+ rd_kafka_telemetry_clear(rk, rd_false /* clear_control_flow_fields */);
229
+
230
+ /* Enqueue on broker transmit queue.
231
+ * The preferred broker might change in the meanwhile but let it fail.
232
+ */
233
+ rd_kafka_dbg(rk, TELEMETRY, "GETSUBSCRIPTIONS",
234
+ "Sending GetTelemetryRequest");
235
+ rd_kafka_GetTelemetrySubscriptionsRequest(
236
+ rkb, NULL, 0, RD_KAFKA_REPLYQ(rk->rk_ops, 0),
237
+ rd_kafka_handle_GetTelemetrySubscriptions, NULL);
238
+
239
+ /* Change state */
240
+ rk->rk_telemetry.state = RD_KAFKA_TELEMETRY_GET_SUBSCRIPTIONS_SENT;
241
+ }
242
+
243
+ /**
244
+ * @brief Compresses the telemetry payload using the available compression
245
+ * types.
246
+ *
247
+ * @param rk The rdkafka instance.
248
+ * @param rkb The broker to which the payload is being sent.
249
+ * @param payload The payload to be compressed.
250
+ * @param compressed_payload The compressed payload.
251
+ * @param compressed_payload_size The size of the compressed payload.
252
+ *
253
+ * @return The compression type used.
254
+ *
255
+ * @locks none
256
+ * @locks_acquired none
257
+ * @locality main thread
258
+ */
259
+ static rd_kafka_compression_t
260
+ rd_kafka_push_telemetry_payload_compress(rd_kafka_t *rk,
261
+ rd_kafka_broker_t *rkb,
262
+ rd_buf_t *payload,
263
+ void **compressed_payload,
264
+ size_t *compressed_payload_size) {
265
+ rd_kafka_compression_t compression_used = RD_KAFKA_COMPRESSION_NONE;
266
+ rd_slice_t payload_slice;
267
+ size_t i;
268
+ rd_kafka_resp_err_t r = RD_KAFKA_RESP_ERR_NO_ERROR;
269
+ rd_slice_init_full(&payload_slice, payload);
270
+ for (i = 0; i < rk->rk_telemetry.accepted_compression_types_cnt; i++) {
271
+ rd_kafka_compression_t compression_type =
272
+ rk->rk_telemetry.accepted_compression_types[i];
273
+ switch (compression_type) {
274
+ #if WITH_ZLIB
275
+ case RD_KAFKA_COMPRESSION_GZIP:
276
+ /* TODO: Using 0 for compression level for now. */
277
+ r = rd_kafka_gzip_compress(rkb, 0, &payload_slice,
278
+ compressed_payload,
279
+ compressed_payload_size);
280
+ compression_used = RD_KAFKA_COMPRESSION_GZIP;
281
+ break;
282
+ #endif
283
+ case RD_KAFKA_COMPRESSION_LZ4:
284
+ /* TODO: Using 0 for compression level for now. */
285
+ r = rd_kafka_lz4_compress(
286
+ rkb, rd_true, 0, &payload_slice, compressed_payload,
287
+ compressed_payload_size);
288
+ compression_used = RD_KAFKA_COMPRESSION_LZ4;
289
+ break;
290
+ #if WITH_ZSTD
291
+ case RD_KAFKA_COMPRESSION_ZSTD:
292
+ /* TODO: Using 0 for compression level for now. */
293
+ r = rd_kafka_zstd_compress(rkb, 0, &payload_slice,
294
+ compressed_payload,
295
+ compressed_payload_size);
296
+ compression_used = RD_KAFKA_COMPRESSION_ZSTD;
297
+ break;
298
+ #endif
299
+ #if WITH_SNAPPY
300
+ case RD_KAFKA_COMPRESSION_SNAPPY:
301
+ r = rd_kafka_snappy_compress_slice(
302
+ rkb, &payload_slice, compressed_payload,
303
+ compressed_payload_size);
304
+ compression_used = RD_KAFKA_COMPRESSION_SNAPPY;
305
+ break;
306
+ #endif
307
+ default:
308
+ break;
309
+ }
310
+ if (compression_used != RD_KAFKA_COMPRESSION_NONE &&
311
+ r == RD_KAFKA_RESP_ERR_NO_ERROR) {
312
+ rd_kafka_dbg(
313
+ rk, TELEMETRY, "PUSH",
314
+ "Compressed payload of size %" PRIusz " to %" PRIusz
315
+ " using compression type "
316
+ "%s",
317
+ payload->rbuf_size, *compressed_payload_size,
318
+ rd_kafka_compression2str(compression_used));
319
+ return compression_used;
320
+ }
321
+ }
322
+ if (compression_used != RD_KAFKA_COMPRESSION_NONE &&
323
+ r != RD_KAFKA_RESP_ERR_NO_ERROR) {
324
+ rd_kafka_dbg(rk, TELEMETRY, "PUSH",
325
+ "Failed to compress payload with available "
326
+ "compression types");
327
+ }
328
+ rd_kafka_dbg(rk, TELEMETRY, "PUSH", "Sending uncompressed payload");
329
+ *compressed_payload = payload->rbuf_wpos->seg_p;
330
+ *compressed_payload_size = payload->rbuf_wpos->seg_of;
331
+ return RD_KAFKA_COMPRESSION_NONE;
332
+ }
333
+
334
+ /**
335
+ * @brief Enqueues a PushTelemetryRequest.
336
+ *
337
+ * @locks none
338
+ * @locks_acquired none
339
+ * @locality main thread
340
+ */
341
+ static void rd_kafka_send_push_telemetry(rd_kafka_t *rk,
342
+ rd_kafka_broker_t *rkb,
343
+ rd_bool_t terminating) {
344
+
345
+ rd_buf_t *metrics_payload = rd_kafka_telemetry_encode_metrics(rk);
346
+ size_t compressed_metrics_payload_size = 0;
347
+ void *compressed_metrics_payload = NULL;
348
+ rd_kafka_compression_t compression_used = RD_KAFKA_COMPRESSION_NONE;
349
+ if (metrics_payload) {
350
+ compression_used = rd_kafka_push_telemetry_payload_compress(
351
+ rk, rkb, metrics_payload, &compressed_metrics_payload,
352
+ &compressed_metrics_payload_size);
353
+ if (compressed_metrics_payload_size >
354
+ (size_t)rk->rk_telemetry.telemetry_max_bytes) {
355
+ rd_kafka_log(rk, LOG_WARNING, "TELEMETRY",
356
+ "Metrics payload size %" PRIusz
357
+ " exceeds telemetry_max_bytes %" PRId32
358
+ "specified by the broker.",
359
+ compressed_metrics_payload_size,
360
+ rk->rk_telemetry.telemetry_max_bytes);
361
+ }
362
+ } else {
363
+ rd_kafka_dbg(rk, TELEMETRY, "PUSH",
364
+ "No metrics to push. Sending empty payload.");
365
+ }
366
+
367
+ rd_kafka_dbg(rk, TELEMETRY, "PUSH",
368
+ "Sending PushTelemetryRequest with terminating = %s",
369
+ RD_STR_ToF(terminating));
370
+ rd_kafka_PushTelemetryRequest(
371
+ rkb, &rk->rk_telemetry.client_instance_id,
372
+ rk->rk_telemetry.subscription_id, terminating, compression_used,
373
+ compressed_metrics_payload, compressed_metrics_payload_size, NULL,
374
+ 0, RD_KAFKA_REPLYQ(rk->rk_ops, 0), rd_kafka_handle_PushTelemetry,
375
+ NULL);
376
+
377
+ if (metrics_payload)
378
+ rd_buf_destroy_free(metrics_payload);
379
+ if (compression_used != RD_KAFKA_COMPRESSION_NONE)
380
+ rd_free(compressed_metrics_payload);
381
+
382
+ rk->rk_telemetry.state = terminating
383
+ ? RD_KAFKA_TELEMETRY_TERMINATING_PUSH_SENT
384
+ : RD_KAFKA_TELEMETRY_PUSH_SENT;
385
+ }
386
+
387
+ /**
388
+ * @brief Progress the telemetry state machine.
389
+ *
390
+ * @locks none
391
+ * @locks_acquired none
392
+ * @locality main thread
393
+ */
394
+ static void rd_kafka_telemetry_fsm(rd_kafka_t *rk) {
395
+ rd_kafka_broker_t *preferred_broker = NULL;
396
+
397
+ rd_dassert(rk);
398
+ rd_dassert(thrd_is_current(rk->rk_thread));
399
+
400
+ switch (rk->rk_telemetry.state) {
401
+ case RD_KAFKA_TELEMETRY_AWAIT_BROKER:
402
+ rd_dassert(!*"Should never be awaiting a broker when the telemetry fsm is called.");
403
+ break;
404
+
405
+ case RD_KAFKA_TELEMETRY_GET_SUBSCRIPTIONS_SCHEDULED:
406
+ preferred_broker = rd_kafka_get_preferred_broker(rk);
407
+ if (!preferred_broker) {
408
+ rk->rk_telemetry.state =
409
+ RD_KAFKA_TELEMETRY_AWAIT_BROKER;
410
+ break;
411
+ }
412
+ rd_kafka_send_get_telemetry_subscriptions(rk, preferred_broker);
413
+ break;
414
+
415
+ case RD_KAFKA_TELEMETRY_PUSH_SCHEDULED:
416
+ preferred_broker = rd_kafka_get_preferred_broker(rk);
417
+ if (!preferred_broker) {
418
+ rk->rk_telemetry.state =
419
+ RD_KAFKA_TELEMETRY_AWAIT_BROKER;
420
+ break;
421
+ }
422
+ rd_kafka_send_push_telemetry(rk, preferred_broker, rd_false);
423
+ break;
424
+
425
+ case RD_KAFKA_TELEMETRY_PUSH_SENT:
426
+ case RD_KAFKA_TELEMETRY_GET_SUBSCRIPTIONS_SENT:
427
+ case RD_KAFKA_TELEMETRY_TERMINATING_PUSH_SENT:
428
+ rd_dassert(!*"Should never be awaiting response when the telemetry fsm is called.");
429
+ break;
430
+
431
+ case RD_KAFKA_TELEMETRY_TERMINATING_PUSH_SCHEDULED:
432
+ preferred_broker = rd_kafka_get_preferred_broker(rk);
433
+ if (!preferred_broker) {
434
+ /* If there's no preferred broker, set state to
435
+ * terminated immediately to stop the app thread from
436
+ * waiting indefinitely. */
437
+ rd_kafka_telemetry_set_terminated(rk);
438
+ break;
439
+ }
440
+ rd_kafka_send_push_telemetry(rk, preferred_broker, rd_true);
441
+ break;
442
+
443
+ case RD_KAFKA_TELEMETRY_TERMINATED:
444
+ rd_dassert(!*"Should not be terminated when the telemetry fsm is called.");
445
+ break;
446
+
447
+ default:
448
+ rd_assert(!*"Unknown state");
449
+ }
450
+ }
451
+
452
+ /**
453
+ * @brief Callback for FSM timer.
454
+ *
455
+ * @locks none
456
+ * @locks_acquired none
457
+ * @locality main thread
458
+ */
459
+ void rd_kafka_telemetry_fsm_tmr_cb(rd_kafka_timers_t *rkts, void *rk) {
460
+ rd_kafka_telemetry_fsm(rk);
461
+ }
462
+
463
+ /**
464
+ * @brief Handles parsed GetTelemetrySubscriptions response.
465
+ *
466
+ * @locks none
467
+ * @locks_acquired none
468
+ * @locality main thread
469
+ */
470
+ void rd_kafka_handle_get_telemetry_subscriptions(rd_kafka_t *rk,
471
+ rd_kafka_resp_err_t err) {
472
+ rd_ts_t next_scheduled;
473
+ double jitter_multiplier =
474
+ rd_jitter(100 - RD_KAFKA_TELEMETRY_PUSH_JITTER,
475
+ 100 + RD_KAFKA_TELEMETRY_PUSH_JITTER) /
476
+ 100.0;
477
+ rd_ts_t now_ns = rd_uclock() * 1000;
478
+ rd_kafka_broker_t *rkb = NULL;
479
+
480
+ if (err != RD_KAFKA_RESP_ERR_NO_ERROR) {
481
+ rd_kafka_dbg(rk, TELEMETRY, "GETSUBSCRIPTIONS",
482
+ "GetTelemetrySubscriptionsRequest failed: %s",
483
+ rd_kafka_err2str(err));
484
+ if (rk->rk_telemetry.push_interval_ms == 0) {
485
+ rk->rk_telemetry.push_interval_ms =
486
+ 30000; /* Default: 5min */
487
+ }
488
+ }
489
+
490
+ if (err == RD_KAFKA_RESP_ERR_NO_ERROR &&
491
+ rk->rk_telemetry.requested_metrics_cnt) {
492
+ rd_kafka_match_requested_metrics(rk);
493
+
494
+ /* Some metrics are requested. Start the timer accordingly */
495
+ next_scheduled = (int)(jitter_multiplier * 1000 *
496
+ rk->rk_telemetry.push_interval_ms);
497
+
498
+ rk->rk_telemetry.state = RD_KAFKA_TELEMETRY_PUSH_SCHEDULED;
499
+
500
+ /* Set for the first push */
501
+ if (rk->rk_telemetry.rk_historic_c.ts_start == 0) {
502
+ rk->rk_telemetry.rk_historic_c.ts_start = now_ns;
503
+ rk->rk_telemetry.rk_historic_c.ts_last = now_ns;
504
+ TAILQ_FOREACH(rkb, &rk->rk_brokers, rkb_link) {
505
+ rkb->rkb_telemetry.rkb_historic_c.connects =
506
+ rd_atomic32_get(&rkb->rkb_c.connects);
507
+ }
508
+ }
509
+
510
+ } else {
511
+ /* No metrics requested, or we're in error. */
512
+ next_scheduled = rk->rk_telemetry.push_interval_ms * 1000;
513
+ rk->rk_telemetry.state =
514
+ RD_KAFKA_TELEMETRY_GET_SUBSCRIPTIONS_SCHEDULED;
515
+ }
516
+
517
+ rd_kafka_dbg(rk, TELEMETRY, "GETSUBSCRIPTIONS",
518
+ "Handled GetTelemetrySubscriptions, scheduling FSM after "
519
+ "%" PRId64
520
+ " microseconds, state = %s, err = %s, metrics = %" PRIusz,
521
+ next_scheduled,
522
+ rd_kafka_telemetry_state2str(rk->rk_telemetry.state),
523
+ rd_kafka_err2str(err),
524
+ rk->rk_telemetry.requested_metrics_cnt);
525
+
526
+ rd_kafka_timer_start_oneshot(
527
+ &rk->rk_timers, &rk->rk_telemetry.request_timer, rd_false,
528
+ next_scheduled, rd_kafka_telemetry_fsm_tmr_cb, rk);
529
+ }
530
+
531
+ void rd_kafka_handle_push_telemetry(rd_kafka_t *rk, rd_kafka_resp_err_t err) {
532
+
533
+ /* We only make a best-effort attempt to push telemetry while
534
+ * terminating, and don't care about any errors. */
535
+ if (rk->rk_telemetry.state ==
536
+ RD_KAFKA_TELEMETRY_TERMINATING_PUSH_SENT) {
537
+ rd_kafka_telemetry_set_terminated(rk);
538
+ return;
539
+ }
540
+
541
+ /* There's a possiblity that we sent a PushTelemetryRequest, and
542
+ * scheduled a termination before getting the response. In that case, we
543
+ * will enter this method in the TERMINATED state when/if we get a
544
+ * response, and we should not take any action. */
545
+ if (rk->rk_telemetry.state != RD_KAFKA_TELEMETRY_PUSH_SENT)
546
+ return;
547
+
548
+ if (err == RD_KAFKA_RESP_ERR_NO_ERROR) {
549
+ rd_kafka_dbg(rk, TELEMETRY, "PUSH",
550
+ "PushTelemetryRequest succeeded");
551
+ rk->rk_telemetry.state = RD_KAFKA_TELEMETRY_PUSH_SCHEDULED;
552
+ rd_kafka_timer_start_oneshot(
553
+ &rk->rk_timers, &rk->rk_telemetry.request_timer, rd_false,
554
+ rk->rk_telemetry.push_interval_ms * 1000,
555
+ rd_kafka_telemetry_fsm_tmr_cb, (void *)rk);
556
+ } else { /* error */
557
+ rd_kafka_dbg(rk, TELEMETRY, "PUSH",
558
+ "PushTelemetryRequest failed: %s",
559
+ rd_kafka_err2str(err));
560
+ /* Non-retriable errors */
561
+ if (err == RD_KAFKA_RESP_ERR_INVALID_REQUEST ||
562
+ err == RD_KAFKA_RESP_ERR_INVALID_RECORD) {
563
+ rd_kafka_log(
564
+ rk, LOG_WARNING, "TELEMETRY",
565
+ "PushTelemetryRequest failed with non-retriable "
566
+ "error: %s. Stopping telemetry.",
567
+ rd_kafka_err2str(err));
568
+ rd_kafka_telemetry_set_terminated(rk);
569
+ return;
570
+ }
571
+
572
+ if (err == RD_KAFKA_RESP_ERR_TELEMETRY_TOO_LARGE) {
573
+ rd_kafka_log(
574
+ rk, LOG_WARNING, "TELEMETRY",
575
+ "PushTelemetryRequest failed because of payload "
576
+ "size too large: %s. Continuing telemetry.",
577
+ rd_kafka_err2str(err));
578
+ rk->rk_telemetry.state =
579
+ RD_KAFKA_TELEMETRY_PUSH_SCHEDULED;
580
+ rd_kafka_timer_start_oneshot(
581
+ &rk->rk_timers, &rk->rk_telemetry.request_timer,
582
+ rd_false, rk->rk_telemetry.push_interval_ms * 1000,
583
+ rd_kafka_telemetry_fsm_tmr_cb, (void *)rk);
584
+ return;
585
+ }
586
+
587
+ rd_ts_t next_scheduled =
588
+ err == RD_KAFKA_RESP_ERR_UNKNOWN_SUBSCRIPTION_ID
589
+ ? 0
590
+ : rk->rk_telemetry.push_interval_ms * 1000;
591
+
592
+ rk->rk_telemetry.state =
593
+ RD_KAFKA_TELEMETRY_GET_SUBSCRIPTIONS_SCHEDULED;
594
+ rd_kafka_timer_start_oneshot(
595
+ &rk->rk_timers, &rk->rk_telemetry.request_timer, rd_false,
596
+ next_scheduled, rd_kafka_telemetry_fsm_tmr_cb, (void *)rk);
597
+ }
598
+ }
599
+
600
+ /**
601
+ * @brief This method starts the termination for telemetry and awaits
602
+ * completion.
603
+ *
604
+ * @locks none
605
+ * @locks_acquired rk_telemetry.lock
606
+ * @locality app thread (normal case) or the main thread (when terminated
607
+ * during creation).
608
+ */
609
+ void rd_kafka_telemetry_await_termination(rd_kafka_t *rk) {
610
+ rd_kafka_op_t *rko;
611
+
612
+ /* In the case where we have a termination during creation, we can't
613
+ * send any telemetry. */
614
+ if (thrd_is_current(rk->rk_thread) ||
615
+ !rk->rk_conf.enable_metrics_push) {
616
+ rd_kafka_telemetry_set_terminated(rk);
617
+ return;
618
+ }
619
+
620
+ rko = rd_kafka_op_new(RD_KAFKA_OP_TERMINATE_TELEMETRY);
621
+ rko->rko_rk = rk;
622
+ rd_kafka_q_enq(rk->rk_ops, rko);
623
+
624
+ /* Await termination sequence completion. */
625
+ rd_kafka_dbg(rk, TELEMETRY, "TERM",
626
+ "Awaiting termination of telemetry.");
627
+ mtx_lock(&rk->rk_telemetry.lock);
628
+ cnd_timedwait_ms(&rk->rk_telemetry.termination_cnd,
629
+ &rk->rk_telemetry.lock,
630
+ /* TODO(milind): Evaluate this timeout after completion
631
+ of all metrics push, is it too much, or too less if
632
+ we include serialization? */
633
+ 1000 /* timeout for waiting */);
634
+ mtx_unlock(&rk->rk_telemetry.lock);
635
+ rd_kafka_dbg(rk, TELEMETRY, "TERM",
636
+ "Ended waiting for termination of telemetry.");
637
+ }
638
+
639
+ /**
640
+ * @brief Send a final push request before terminating.
641
+ *
642
+ * @locks none
643
+ * @locks_acquired none
644
+ * @locality main thread
645
+ * @note This method is on a best-effort basis.
646
+ */
647
+ void rd_kafka_telemetry_schedule_termination(rd_kafka_t *rk) {
648
+ rd_kafka_dbg(
649
+ rk, TELEMETRY, "TERM",
650
+ "Starting rd_kafka_telemetry_schedule_termination in state %s",
651
+ rd_kafka_telemetry_state2str(rk->rk_telemetry.state));
652
+
653
+ if (rk->rk_telemetry.state != RD_KAFKA_TELEMETRY_PUSH_SCHEDULED) {
654
+ rd_kafka_telemetry_set_terminated(rk);
655
+ return;
656
+ }
657
+
658
+ rk->rk_telemetry.state = RD_KAFKA_TELEMETRY_TERMINATING_PUSH_SCHEDULED;
659
+
660
+ rd_kafka_dbg(rk, TELEMETRY, "TERM", "Sending final request for Push");
661
+ rd_kafka_timer_override_once(
662
+ &rk->rk_timers, &rk->rk_telemetry.request_timer, 0 /* immediate */);
663
+ }
664
+
665
+
666
+ /**
667
+ * @brief Sets telemetry broker if we are in AWAIT_BROKER state.
668
+ *
669
+ * @locks none
670
+ * @locks_acquired rk_telemetry.lock
671
+ * @locality main thread
672
+ */
673
+ void rd_kafka_set_telemetry_broker_maybe(rd_kafka_t *rk,
674
+ rd_kafka_broker_t *rkb) {
675
+ rd_dassert(thrd_is_current(rk->rk_thread));
676
+
677
+ /* The op triggering this method is scheduled by brokers without knowing
678
+ * if a preferred broker is already set. If it is set, this method is a
679
+ * no-op. */
680
+ if (rk->rk_telemetry.state != RD_KAFKA_TELEMETRY_AWAIT_BROKER)
681
+ return;
682
+
683
+ mtx_lock(&rk->rk_telemetry.lock);
684
+
685
+ if (rk->rk_telemetry.preferred_broker) {
686
+ mtx_unlock(&rk->rk_telemetry.lock);
687
+ return;
688
+ }
689
+
690
+ rd_kafka_broker_keep(rkb);
691
+ rk->rk_telemetry.preferred_broker = rkb;
692
+
693
+ mtx_unlock(&rk->rk_telemetry.lock);
694
+
695
+ rd_kafka_dbg(rk, TELEMETRY, "SETBROKER",
696
+ "Setting telemetry broker to %s\n", rkb->rkb_name);
697
+
698
+ rk->rk_telemetry.state = RD_KAFKA_TELEMETRY_GET_SUBSCRIPTIONS_SCHEDULED;
699
+
700
+ rd_kafka_timer_start_oneshot(
701
+ &rk->rk_timers, &rk->rk_telemetry.request_timer, rd_false,
702
+ 0 /* immediate */, rd_kafka_telemetry_fsm_tmr_cb, (void *)rk);
703
+ }