@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,1053 @@
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_decode.h"
30
+ #include "nanopb/pb_decode.h"
31
+ #include "rdunittest.h"
32
+ #include "rdkafka_lz4.h"
33
+ #include "rdgz.h"
34
+ #include "rdkafka_zstd.h"
35
+ #include "snappy.h"
36
+ #include "rdfloat.h"
37
+
38
+
39
+ #define _NANOPB_STRING_DECODE_MAX_BUFFER_SIZE 1024
40
+ #define MAX_LABELS 10
41
+ #define UNITTEST_MARKER "unittest"
42
+
43
+ enum unit_test_string_decoding_state {
44
+ STATE_LABELS,
45
+ STATE_VERSION,
46
+ STATE_METRIC_NAME,
47
+ STATE_METRIC_DESCRIPTION,
48
+ STATE_COMPLETE
49
+ };
50
+
51
+ struct unit_test_metric_label {
52
+ char key[_NANOPB_STRING_DECODE_MAX_BUFFER_SIZE];
53
+ char value[_NANOPB_STRING_DECODE_MAX_BUFFER_SIZE];
54
+ };
55
+
56
+ struct unit_test_data {
57
+ rd_kafka_telemetry_metric_type_t type;
58
+ int32_t current_field;
59
+ struct unit_test_metric_label labels[MAX_LABELS];
60
+ int label_count;
61
+ char version[_NANOPB_STRING_DECODE_MAX_BUFFER_SIZE];
62
+ char metric_name[_NANOPB_STRING_DECODE_MAX_BUFFER_SIZE];
63
+ char metric_description[_NANOPB_STRING_DECODE_MAX_BUFFER_SIZE];
64
+ int64_t metric_value_int;
65
+ int64_t expected_metric_value_int;
66
+ double metric_value_double;
67
+ double expected_metric_value_double;
68
+ int64_t int64_value;
69
+ uint64_t metric_time;
70
+ enum unit_test_string_decoding_state state;
71
+ bool expecting_label_value;
72
+ };
73
+
74
+ static struct unit_test_data unit_test_data;
75
+
76
+ static void clear_unit_test_data(int64_t expected_value_int,
77
+ double expected_value_double) {
78
+ memset(&unit_test_data, 0, sizeof(unit_test_data));
79
+
80
+ unit_test_data.type = RD_KAFKA_TELEMETRY_METRIC_TYPE_GAUGE;
81
+ unit_test_data.state = STATE_LABELS;
82
+ unit_test_data.expecting_label_value = false;
83
+ unit_test_data.version[0] = '\0';
84
+ unit_test_data.metric_name[0] = '\0';
85
+ unit_test_data.metric_description[0] = '\0';
86
+ unit_test_data.current_field = 0;
87
+ unit_test_data.label_count = 0;
88
+ unit_test_data.metric_value_int = 0;
89
+ unit_test_data.metric_value_double = 0.0;
90
+ unit_test_data.metric_time = 0;
91
+ unit_test_data.int64_value = 0;
92
+ unit_test_data.expected_metric_value_int = expected_value_int;
93
+ unit_test_data.expected_metric_value_double = expected_value_double;
94
+ }
95
+
96
+ static bool
97
+ decode_string(pb_istream_t *stream, const pb_field_t *field, void **arg) {
98
+ rd_kafka_telemetry_decode_interface_t *decode_interface = *arg;
99
+ uint8_t buffer[_NANOPB_STRING_DECODE_MAX_BUFFER_SIZE] = {0};
100
+
101
+ if (stream->bytes_left > sizeof(buffer) - 1) {
102
+ RD_INTERFACE_CALL(decode_interface, decode_error,
103
+ "String too long for buffer");
104
+ return false;
105
+ }
106
+
107
+ if (!pb_read(stream, buffer, stream->bytes_left)) {
108
+ RD_INTERFACE_CALL(decode_interface, decode_error,
109
+ "Failed to read string");
110
+ return false;
111
+ }
112
+
113
+ RD_INTERFACE_CALL(decode_interface, decoded_string, buffer);
114
+ return true;
115
+ }
116
+
117
+ static bool
118
+ decode_key_value(pb_istream_t *stream, const pb_field_t *field, void **arg) {
119
+ rd_kafka_telemetry_decode_interface_t *decode_interface = *arg;
120
+ opentelemetry_proto_common_v1_KeyValue key_value =
121
+ opentelemetry_proto_common_v1_KeyValue_init_zero;
122
+ key_value.key.funcs.decode = &decode_string;
123
+ key_value.key.arg = decode_interface;
124
+ key_value.value.value.string_value.funcs.decode = &decode_string;
125
+ key_value.value.value.string_value.arg = decode_interface;
126
+ if (!pb_decode(stream, opentelemetry_proto_common_v1_KeyValue_fields,
127
+ &key_value)) {
128
+ RD_INTERFACE_CALL(decode_interface, decode_error,
129
+ "Failed to decode KeyValue: %s",
130
+ PB_GET_ERROR(stream));
131
+ return false;
132
+ }
133
+
134
+ if (key_value.value.which_value ==
135
+ opentelemetry_proto_common_v1_AnyValue_int_value_tag) {
136
+ RD_INTERFACE_CALL(decode_interface, decoded_int64,
137
+ key_value.value.value.int_value);
138
+ }
139
+
140
+ return true;
141
+ }
142
+
143
+ static bool decode_number_data_point(pb_istream_t *stream,
144
+ const pb_field_t *field,
145
+ void **arg) {
146
+ rd_kafka_telemetry_decode_interface_t *decode_interface = *arg;
147
+ opentelemetry_proto_metrics_v1_NumberDataPoint data_point =
148
+ opentelemetry_proto_metrics_v1_NumberDataPoint_init_zero;
149
+ data_point.attributes.funcs.decode = &decode_key_value;
150
+ data_point.attributes.arg = decode_interface;
151
+ if (!pb_decode(stream,
152
+ opentelemetry_proto_metrics_v1_NumberDataPoint_fields,
153
+ &data_point)) {
154
+ RD_INTERFACE_CALL(decode_interface, decode_error,
155
+ "Failed to decode NumberDataPoint: %s",
156
+ PB_GET_ERROR(stream));
157
+ return false;
158
+ }
159
+
160
+ RD_INTERFACE_CALL(decode_interface, decoded_NumberDataPoint,
161
+ &data_point);
162
+ return true;
163
+ }
164
+
165
+ // TODO: add support for other data types
166
+ static bool
167
+ data_msg_callback(pb_istream_t *stream, const pb_field_t *field, void **arg) {
168
+ rd_kafka_telemetry_decode_interface_t *decode_interface = *arg;
169
+ if (field->tag == opentelemetry_proto_metrics_v1_Metric_sum_tag) {
170
+ opentelemetry_proto_metrics_v1_Sum *sum = field->pData;
171
+ sum->data_points.funcs.decode = &decode_number_data_point;
172
+ sum->data_points.arg = decode_interface;
173
+ if (decode_interface->decoded_type) {
174
+ RD_INTERFACE_CALL(decode_interface, decoded_type,
175
+ RD_KAFKA_TELEMETRY_METRIC_TYPE_SUM);
176
+ }
177
+ } else if (field->tag ==
178
+ opentelemetry_proto_metrics_v1_Metric_gauge_tag) {
179
+ opentelemetry_proto_metrics_v1_Gauge *gauge = field->pData;
180
+ gauge->data_points.funcs.decode = &decode_number_data_point;
181
+ gauge->data_points.arg = decode_interface;
182
+ if (decode_interface->decoded_type) {
183
+ RD_INTERFACE_CALL(decode_interface, decoded_type,
184
+ RD_KAFKA_TELEMETRY_METRIC_TYPE_GAUGE);
185
+ }
186
+ }
187
+ return true;
188
+ }
189
+
190
+
191
+ static bool
192
+ decode_metric(pb_istream_t *stream, const pb_field_t *field, void **arg) {
193
+ rd_kafka_telemetry_decode_interface_t *decode_interface = *arg;
194
+ opentelemetry_proto_metrics_v1_Metric metric =
195
+ opentelemetry_proto_metrics_v1_Metric_init_zero;
196
+ metric.name.funcs.decode = &decode_string;
197
+ metric.name.arg = decode_interface;
198
+ metric.description.funcs.decode = &decode_string;
199
+ metric.description.arg = decode_interface;
200
+ metric.cb_data.funcs.decode = &data_msg_callback;
201
+ metric.cb_data.arg = decode_interface;
202
+
203
+ if (!pb_decode(stream, opentelemetry_proto_metrics_v1_Metric_fields,
204
+ &metric)) {
205
+ RD_INTERFACE_CALL(decode_interface, decode_error,
206
+ "Failed to decode Metric: %s",
207
+ PB_GET_ERROR(stream));
208
+ return false;
209
+ }
210
+
211
+ return true;
212
+ }
213
+
214
+ static bool decode_scope_metrics(pb_istream_t *stream,
215
+ const pb_field_t *field,
216
+ void **arg) {
217
+ rd_kafka_telemetry_decode_interface_t *decode_interface = *arg;
218
+ opentelemetry_proto_metrics_v1_ScopeMetrics scope_metrics =
219
+ opentelemetry_proto_metrics_v1_ScopeMetrics_init_zero;
220
+ scope_metrics.scope.name.funcs.decode = &decode_string;
221
+ scope_metrics.scope.name.arg = decode_interface;
222
+ scope_metrics.scope.version.funcs.decode = &decode_string;
223
+ scope_metrics.scope.version.arg = decode_interface;
224
+ scope_metrics.metrics.funcs.decode = &decode_metric;
225
+ scope_metrics.metrics.arg = decode_interface;
226
+
227
+ if (!pb_decode(stream,
228
+ opentelemetry_proto_metrics_v1_ScopeMetrics_fields,
229
+ &scope_metrics)) {
230
+ RD_INTERFACE_CALL(decode_interface, decode_error,
231
+ "Failed to decode ScopeMetrics: %s",
232
+ PB_GET_ERROR(stream));
233
+ return false;
234
+ }
235
+ return true;
236
+ }
237
+
238
+ static bool decode_resource_metrics(pb_istream_t *stream,
239
+ const pb_field_t *field,
240
+ void **arg) {
241
+ rd_kafka_telemetry_decode_interface_t *decode_interface = *arg;
242
+ opentelemetry_proto_metrics_v1_ResourceMetrics resource_metrics =
243
+ opentelemetry_proto_metrics_v1_ResourceMetrics_init_zero;
244
+ resource_metrics.resource.attributes.funcs.decode = &decode_key_value;
245
+ resource_metrics.resource.attributes.arg = decode_interface;
246
+ resource_metrics.scope_metrics.funcs.decode = &decode_scope_metrics;
247
+ resource_metrics.scope_metrics.arg = decode_interface;
248
+ if (!pb_decode(stream,
249
+ opentelemetry_proto_metrics_v1_ResourceMetrics_fields,
250
+ &resource_metrics)) {
251
+ RD_INTERFACE_CALL(decode_interface, decode_error,
252
+ "Failed to decode ResourceMetrics: %s",
253
+ PB_GET_ERROR(stream));
254
+ return false;
255
+ }
256
+ return true;
257
+ }
258
+
259
+ #if WITH_SNAPPY
260
+
261
+ static int rd_kafka_snappy_decompress(rd_kafka_broker_t *rkb,
262
+ const char *compressed,
263
+ size_t compressed_size,
264
+ void **outbuf,
265
+ size_t *outbuf_len) {
266
+ struct iovec iov = {.iov_base = NULL, .iov_len = 0};
267
+
268
+ const char *inbuf = compressed;
269
+ size_t inlen = compressed_size;
270
+ int r;
271
+ static const unsigned char snappy_java_magic[] = {0x82, 'S', 'N', 'A',
272
+ 'P', 'P', 'Y', 0};
273
+ static const size_t snappy_java_hdrlen = 8 + 4 + 4;
274
+
275
+ /* snappy-java adds its own header (SnappyCodec)
276
+ * which is not compatible with the official Snappy
277
+ * implementation.
278
+ * 8: magic, 4: version, 4: compatible
279
+ * followed by any number of chunks:
280
+ * 4: length
281
+ * ...: snappy-compressed data. */
282
+ if (likely(inlen > snappy_java_hdrlen + 4 &&
283
+ !memcmp(inbuf, snappy_java_magic, 8))) {
284
+ /* snappy-java framing */
285
+ char errstr[128];
286
+
287
+ inbuf = inbuf + snappy_java_hdrlen;
288
+ inlen -= snappy_java_hdrlen;
289
+ iov.iov_base = rd_kafka_snappy_java_uncompress(
290
+ inbuf, inlen, &iov.iov_len, errstr, sizeof(errstr));
291
+
292
+ if (unlikely(!iov.iov_base)) {
293
+ rd_rkb_dbg(
294
+ rkb, MSG, "SNAPPY",
295
+ "Snappy decompression for message failed: %s: "
296
+ "ignoring message",
297
+ errstr);
298
+ return -1; // Indicates decompression error
299
+ }
300
+
301
+
302
+ } else {
303
+ /* No framing */
304
+
305
+ /* Acquire uncompressed length */
306
+ if (unlikely(!rd_kafka_snappy_uncompressed_length(
307
+ inbuf, inlen, &iov.iov_len))) {
308
+ rd_rkb_dbg(
309
+ rkb, MSG, "SNAPPY",
310
+ "Failed to get length of Snappy compressed payload "
311
+ "for message (%" PRIusz
312
+ " bytes): "
313
+ "ignoring message",
314
+ inlen);
315
+ return -1; // Indicates decompression error
316
+ }
317
+
318
+ /* Allocate output buffer for uncompressed data */
319
+ iov.iov_base = rd_malloc(iov.iov_len);
320
+ if (unlikely(!iov.iov_base)) {
321
+ rd_rkb_dbg(rkb, MSG, "SNAPPY",
322
+ "Failed to allocate Snappy decompress "
323
+ "buffer of size %" PRIusz
324
+ " for message (%" PRIusz
325
+ " bytes): %s: "
326
+ "ignoring message",
327
+ *outbuf_len, inlen, rd_strerror(errno));
328
+ return -1; // Indicates memory allocation error
329
+ }
330
+
331
+ /* Uncompress to outbuf */
332
+ if (unlikely((r = rd_kafka_snappy_uncompress(inbuf, inlen,
333
+ iov.iov_base)))) {
334
+ rd_rkb_dbg(
335
+ rkb, MSG, "SNAPPY",
336
+ "Failed to decompress Snappy payload for message "
337
+ "(%" PRIusz
338
+ " bytes): %s: "
339
+ "ignoring message",
340
+ inlen, rd_strerror(errno));
341
+ rd_free(iov.iov_base);
342
+ return -1; // Indicates decompression error
343
+ }
344
+ }
345
+ *outbuf = iov.iov_base;
346
+ *outbuf_len = iov.iov_len;
347
+ return 0;
348
+ }
349
+ #endif
350
+
351
+ /*
352
+ * Decompress a payload using the specified compression type. Allocates memory
353
+ * for uncompressed payload.
354
+ * @returns 0 on success, -1 on failure. Allocated memory in
355
+ * uncompressed_payload and its size in uncompressed_payload_size.
356
+ */
357
+ int rd_kafka_telemetry_uncompress_metrics_payload(
358
+ rd_kafka_broker_t *rkb,
359
+ rd_kafka_compression_t compression_type,
360
+ void *compressed_payload,
361
+ size_t compressed_payload_size,
362
+ void **uncompressed_payload,
363
+ size_t *uncompressed_payload_size) {
364
+ int r = -1;
365
+ switch (compression_type) {
366
+ #if WITH_ZLIB
367
+ case RD_KAFKA_COMPRESSION_GZIP:
368
+ *uncompressed_payload = rd_gz_decompress(
369
+ compressed_payload, (int)compressed_payload_size,
370
+ (uint64_t *)uncompressed_payload_size);
371
+ if (*uncompressed_payload == NULL)
372
+ r = -1;
373
+ else
374
+ r = 0;
375
+ break;
376
+ #endif
377
+ case RD_KAFKA_COMPRESSION_LZ4:
378
+ r = rd_kafka_lz4_decompress(
379
+ rkb, 0, 0, compressed_payload, compressed_payload_size,
380
+ uncompressed_payload, uncompressed_payload_size);
381
+ break;
382
+ #if WITH_ZSTD
383
+ case RD_KAFKA_COMPRESSION_ZSTD:
384
+ r = rd_kafka_zstd_decompress(
385
+ rkb, compressed_payload, compressed_payload_size,
386
+ uncompressed_payload, uncompressed_payload_size);
387
+ break;
388
+ #endif
389
+ #if WITH_SNAPPY
390
+ case RD_KAFKA_COMPRESSION_SNAPPY:
391
+ r = rd_kafka_snappy_decompress(
392
+ rkb, compressed_payload, compressed_payload_size,
393
+ uncompressed_payload, uncompressed_payload_size);
394
+ break;
395
+ #endif
396
+ default:
397
+ rd_kafka_log(rkb->rkb_rk, LOG_WARNING, "TELEMETRY",
398
+ "Unknown compression type: %d", compression_type);
399
+ break;
400
+ }
401
+ return r;
402
+ }
403
+
404
+ /**
405
+ * Decode a metric from a buffer encoded with
406
+ * opentelemetry_proto_metrics_v1_MetricsData datatype. Used for testing and
407
+ * debugging.
408
+ *
409
+ * @param decode_interface The decode_interface to pass as arg when decoding the
410
+ * buffer.
411
+ * @param buffer The buffer to decode.
412
+ * @param size The size of the buffer.
413
+ */
414
+ int rd_kafka_telemetry_decode_metrics(
415
+ rd_kafka_telemetry_decode_interface_t *decode_interface,
416
+ void *buffer,
417
+ size_t size) {
418
+ opentelemetry_proto_metrics_v1_MetricsData metricsData =
419
+ opentelemetry_proto_metrics_v1_MetricsData_init_zero;
420
+
421
+ pb_istream_t stream = pb_istream_from_buffer(buffer, size);
422
+ metricsData.resource_metrics.arg = decode_interface;
423
+ metricsData.resource_metrics.funcs.decode = &decode_resource_metrics;
424
+
425
+ bool status = pb_decode(
426
+ &stream, opentelemetry_proto_metrics_v1_MetricsData_fields,
427
+ &metricsData);
428
+ if (!status) {
429
+ RD_INTERFACE_CALL(decode_interface, decode_error,
430
+ "Failed to decode MetricsData: %s",
431
+ PB_GET_ERROR(&stream));
432
+ }
433
+ return status;
434
+ }
435
+
436
+ static void unit_test_telemetry_decoded_string(void *opaque,
437
+ const uint8_t *decoded) {
438
+
439
+ switch (unit_test_data.state) {
440
+ case STATE_LABELS:
441
+ if (strcmp((const char *)decoded, UNITTEST_MARKER) == 0) {
442
+ unit_test_data.state = STATE_VERSION;
443
+ unit_test_data.expecting_label_value = false;
444
+ } else if (unit_test_data.expecting_label_value) {
445
+ rd_snprintf(unit_test_data
446
+ .labels[unit_test_data.label_count - 1]
447
+ .value,
448
+ sizeof(unit_test_data.labels[0].value),
449
+ "%s", decoded);
450
+ unit_test_data.expecting_label_value = false;
451
+ } else {
452
+ if (unit_test_data.label_count < MAX_LABELS) {
453
+ rd_snprintf(
454
+ unit_test_data
455
+ .labels[unit_test_data.label_count]
456
+ .key,
457
+ sizeof(unit_test_data.labels[0].key), "%s",
458
+ decoded);
459
+ unit_test_data.label_count++;
460
+ unit_test_data.expecting_label_value = true;
461
+ }
462
+ }
463
+ unit_test_data.current_field++;
464
+ break;
465
+
466
+ case STATE_VERSION:
467
+ rd_snprintf(unit_test_data.version,
468
+ sizeof(unit_test_data.version), "%s", decoded);
469
+ unit_test_data.state = STATE_METRIC_NAME;
470
+ unit_test_data.current_field++;
471
+ break;
472
+
473
+ case STATE_METRIC_NAME:
474
+ rd_snprintf(unit_test_data.metric_name,
475
+ sizeof(unit_test_data.metric_name), "%s", decoded);
476
+ unit_test_data.state = STATE_METRIC_DESCRIPTION;
477
+ unit_test_data.current_field++;
478
+ break;
479
+
480
+ case STATE_METRIC_DESCRIPTION:
481
+ rd_snprintf(unit_test_data.metric_description,
482
+ sizeof(unit_test_data.metric_description), "%s",
483
+ decoded);
484
+ unit_test_data.state = STATE_COMPLETE;
485
+ unit_test_data.current_field++;
486
+ break;
487
+
488
+ case STATE_COMPLETE:
489
+ break;
490
+ }
491
+ }
492
+
493
+ static void unit_test_telemetry_decoded_NumberDataPoint(
494
+ void *opaque,
495
+ const opentelemetry_proto_metrics_v1_NumberDataPoint *decoded) {
496
+ unit_test_data.metric_value_int = decoded->value.as_int;
497
+ unit_test_data.metric_value_double = decoded->value.as_double;
498
+ unit_test_data.metric_time = decoded->time_unix_nano;
499
+ unit_test_data.current_field++;
500
+ }
501
+
502
+ static void unit_test_telemetry_decoded_int64(void *opaque,
503
+ int64_t int64_value) {
504
+ unit_test_data.int64_value = int64_value;
505
+ }
506
+
507
+ static void
508
+ unit_test_telemetry_decoded_type(void *opaque,
509
+ rd_kafka_telemetry_metric_type_t type) {
510
+ unit_test_data.type = type;
511
+ unit_test_data.current_field++;
512
+ }
513
+
514
+ static void
515
+ unit_test_telemetry_decode_error(void *opaque, const char *error, ...) {
516
+ char buffer[1024];
517
+ va_list ap;
518
+ va_start(ap, error);
519
+ rd_vsnprintf(buffer, sizeof(buffer), error, ap);
520
+ va_end(ap);
521
+ RD_UT_SAY("%s", buffer);
522
+ rd_assert(!*"Failure while decoding telemetry data");
523
+ }
524
+
525
+ int unit_test_telemetry(rd_kafka_type_t rk_type,
526
+ rd_kafka_telemetry_producer_metric_name_t metric_name,
527
+ const char *expected_name,
528
+ const char *expected_description,
529
+ rd_kafka_telemetry_metric_type_t expected_type,
530
+ rd_bool_t is_double,
531
+ rd_bool_t is_per_broker,
532
+ void (*set_metric_value)(rd_kafka_t *,
533
+ rd_kafka_broker_t *),
534
+ int64_t expected_value_int,
535
+ double expected_value_double) {
536
+ rd_kafka_t *rk = rd_calloc(1, sizeof(*rk));
537
+ rwlock_init(&rk->rk_lock);
538
+ rd_kafka_conf_t *conf = rd_kafka_conf_new();
539
+ char *client_rack = "rack1", *transactional_id = "tx-id",
540
+ *group_id = "group-id", *group_instance_id = "group-instance-id";
541
+ rd_kafka_conf_set(conf, "client.rack", client_rack, NULL, 0);
542
+ rd_kafka_conf_set(conf, "transactional.id", transactional_id, NULL, 0);
543
+ rd_kafka_conf_set(conf, "group.id", group_id, NULL, 0);
544
+ rd_kafka_conf_set(conf, "group.instance.id", group_instance_id, NULL,
545
+ 0);
546
+ rk->rk_conf = *conf;
547
+ rd_free(conf);
548
+
549
+ rk->rk_type = rk_type;
550
+ rk->rk_cgrp = rd_calloc(1, sizeof(*rk->rk_cgrp));
551
+ rk->rk_broker_cnt.val = 1;
552
+ rk->rk_telemetry.matched_metrics_cnt = 1;
553
+ rk->rk_telemetry.matched_metrics =
554
+ rd_malloc(sizeof(rd_kafka_telemetry_producer_metric_name_t) *
555
+ rk->rk_telemetry.matched_metrics_cnt);
556
+ rk->rk_telemetry.matched_metrics[0] = metric_name;
557
+ rk->rk_telemetry.rk_historic_c.ts_start =
558
+ (rd_uclock() - 1000 * 1000) * 1000;
559
+ rk->rk_telemetry.rk_historic_c.ts_last =
560
+ (rd_uclock() - 1000 * 1000) * 1000;
561
+
562
+ rd_avg_init(&rk->rk_telemetry.rd_avg_current.rk_avg_poll_idle_ratio,
563
+ RD_AVG_GAUGE, 0, 500 * 1000, 2, rd_true);
564
+ rd_avg_init(&rk->rk_telemetry.rd_avg_current.rk_avg_commit_latency,
565
+ RD_AVG_GAUGE, 0, 500 * 1000, 2, rd_true);
566
+ rd_avg_init(&rk->rk_telemetry.rd_avg_current.rk_avg_rebalance_latency,
567
+ RD_AVG_GAUGE, 0, 500 * 1000, 2, rd_true);
568
+
569
+ rd_avg_init(&rk->rk_telemetry.rd_avg_rollover.rk_avg_poll_idle_ratio,
570
+ RD_AVG_GAUGE, 0, 500 * 1000, 2, rd_true);
571
+ rd_avg_init(&rk->rk_telemetry.rd_avg_rollover.rk_avg_commit_latency,
572
+ RD_AVG_GAUGE, 0, 500 * 1000, 2, rd_true);
573
+ rd_avg_init(&rk->rk_telemetry.rd_avg_rollover.rk_avg_rebalance_latency,
574
+ RD_AVG_GAUGE, 0, 500 * 1000, 2, rd_true);
575
+
576
+ rd_strlcpy(rk->rk_name, "unittest", sizeof(rk->rk_name));
577
+ clear_unit_test_data(expected_value_int, expected_value_double);
578
+
579
+ rd_kafka_telemetry_decode_interface_t decode_interface = {
580
+ .decoded_string = unit_test_telemetry_decoded_string,
581
+ .decoded_NumberDataPoint =
582
+ unit_test_telemetry_decoded_NumberDataPoint,
583
+ .decoded_int64 = unit_test_telemetry_decoded_int64,
584
+ .decoded_type = unit_test_telemetry_decoded_type,
585
+ .decode_error = unit_test_telemetry_decode_error,
586
+ .opaque = &unit_test_data,
587
+ };
588
+
589
+ TAILQ_INIT(&rk->rk_brokers);
590
+
591
+ rd_kafka_broker_t *rkb = rd_calloc(1, sizeof(*rkb));
592
+ rkb->rkb_nodeid = 1001;
593
+ mtx_init(&rkb->rkb_lock, mtx_plain);
594
+
595
+ rd_avg_init(&rkb->rkb_telemetry.rd_avg_current.rkb_avg_rtt,
596
+ RD_AVG_GAUGE, 0, 500 * 1000, 2, rd_true);
597
+ rd_avg_init(&rkb->rkb_telemetry.rd_avg_current.rkb_avg_outbuf_latency,
598
+ RD_AVG_GAUGE, 0, 500 * 1000, 2, rd_true);
599
+ rd_avg_init(&rkb->rkb_telemetry.rd_avg_current.rkb_avg_throttle,
600
+ RD_AVG_GAUGE, 0, 500 * 1000, 2, rd_true);
601
+ rd_avg_init(&rkb->rkb_telemetry.rd_avg_current.rkb_avg_fetch_latency,
602
+ RD_AVG_GAUGE, 0, 500 * 1000, 2, rd_true);
603
+
604
+ rd_avg_init(&rkb->rkb_telemetry.rd_avg_rollover.rkb_avg_rtt,
605
+ RD_AVG_GAUGE, 0, 500 * 1000, 2, rd_true);
606
+ rd_avg_init(&rkb->rkb_telemetry.rd_avg_rollover.rkb_avg_outbuf_latency,
607
+ RD_AVG_GAUGE, 0, 500 * 1000, 2, rd_true);
608
+ rd_avg_init(&rkb->rkb_telemetry.rd_avg_rollover.rkb_avg_throttle,
609
+ RD_AVG_GAUGE, 0, 500 * 1000, 2, rd_true);
610
+ rd_avg_init(&rkb->rkb_telemetry.rd_avg_rollover.rkb_avg_fetch_latency,
611
+ RD_AVG_GAUGE, 0, 500 * 1000, 2, rd_true);
612
+ rd_avg_init(&rkb->rkb_telemetry.rd_avg_current.rkb_avg_produce_latency,
613
+ RD_AVG_GAUGE, 0, 500 * 1000, 2, rd_true);
614
+ rd_avg_init(&rkb->rkb_telemetry.rd_avg_rollover.rkb_avg_produce_latency,
615
+ RD_AVG_GAUGE, 0, 500 * 1000, 2, rd_true);
616
+
617
+ set_metric_value(rk, rkb);
618
+
619
+ TAILQ_INSERT_HEAD(&rk->rk_brokers, rkb, rkb_link);
620
+ rd_buf_t *rbuf = rd_kafka_telemetry_encode_metrics(rk);
621
+ void *metrics_payload = rbuf->rbuf_wpos->seg_p;
622
+ size_t metrics_payload_size = rbuf->rbuf_wpos->seg_of;
623
+ RD_UT_SAY("metrics_payload_size: %" PRIusz, metrics_payload_size);
624
+
625
+ RD_UT_ASSERT(metrics_payload_size != 0, "Metrics payload zero");
626
+
627
+ bool decode_status = rd_kafka_telemetry_decode_metrics(
628
+ &decode_interface, metrics_payload, metrics_payload_size);
629
+
630
+ RD_UT_ASSERT(decode_status == 1, "Decoding failed");
631
+ RD_UT_ASSERT(unit_test_data.type == expected_type,
632
+ "Metric type mismatch");
633
+ RD_UT_ASSERT(strcmp(unit_test_data.metric_name, expected_name) == 0,
634
+ "Metric name mismatch %s != %s",
635
+ unit_test_data.metric_name, expected_name);
636
+ RD_UT_ASSERT(strcmp(unit_test_data.metric_description,
637
+ expected_description) == 0,
638
+ "Metric description mismatch");
639
+ if (is_double)
640
+ RD_UT_ASSERT(
641
+ rd_dbl_eq0(unit_test_data.metric_value_double,
642
+ unit_test_data.expected_metric_value_double,
643
+ 0.01),
644
+ "Metric value mismatch");
645
+ else
646
+ RD_UT_ASSERT(unit_test_data.metric_value_int ==
647
+ unit_test_data.expected_metric_value_int,
648
+ "Metric value mismatch");
649
+ if (is_per_broker)
650
+ RD_UT_ASSERT(unit_test_data.int64_value == 1001,
651
+ "Expected broker mismatch");
652
+ RD_UT_ASSERT(unit_test_data.metric_time != 0, "Metric time mismatch");
653
+ if (rk_type == RD_KAFKA_PRODUCER) {
654
+ RD_UT_ASSERT(unit_test_data.label_count == 2,
655
+ "Label count mismatch");
656
+ RD_UT_ASSERT(
657
+ strcmp(unit_test_data.labels[0].key, "client_rack") == 0,
658
+ "Client rack key mismatch");
659
+ RD_UT_ASSERT(
660
+ strcmp(unit_test_data.labels[0].value, client_rack) == 0,
661
+ "Client rack value mismatch");
662
+ RD_UT_ASSERT(strcmp(unit_test_data.labels[1].key,
663
+ "transactional_id") == 0,
664
+ "Transactional id key mismatch");
665
+ RD_UT_ASSERT(strcmp(unit_test_data.labels[1].value,
666
+ transactional_id) == 0,
667
+ "Transactional id value mismatch");
668
+ } else {
669
+ RD_UT_ASSERT(unit_test_data.label_count == 3,
670
+ "Label count mismatch");
671
+ RD_UT_ASSERT(
672
+ strcmp(unit_test_data.labels[0].key, "client_rack") == 0,
673
+ "Client rack key mismatch");
674
+ RD_UT_ASSERT(
675
+ strcmp(unit_test_data.labels[0].value, client_rack) == 0,
676
+ "Client rack value mismatch");
677
+ RD_UT_ASSERT(strcmp(unit_test_data.labels[1].key, "group_id") ==
678
+ 0,
679
+ "Group id key mismatch");
680
+ RD_UT_ASSERT(strcmp(unit_test_data.labels[1].value, group_id) ==
681
+ 0,
682
+ "Group id value mismatch");
683
+ RD_UT_ASSERT(strcmp(unit_test_data.labels[2].key,
684
+ "group_instance_id") == 0,
685
+ "Group instance id key mismatch");
686
+ RD_UT_ASSERT(strcmp(unit_test_data.labels[2].value,
687
+ group_instance_id) == 0,
688
+ "Group instance id value mismatch");
689
+ }
690
+
691
+ rd_free(rk->rk_telemetry.matched_metrics);
692
+ rd_buf_destroy_free(rbuf);
693
+ rd_avg_destroy(&rkb->rkb_telemetry.rd_avg_current.rkb_avg_rtt);
694
+ rd_avg_destroy(
695
+ &rkb->rkb_telemetry.rd_avg_current.rkb_avg_outbuf_latency);
696
+ rd_avg_destroy(&rkb->rkb_telemetry.rd_avg_current.rkb_avg_throttle);
697
+ rd_avg_destroy(&rkb->rkb_telemetry.rd_avg_rollover.rkb_avg_rtt);
698
+ rd_avg_destroy(
699
+ &rkb->rkb_telemetry.rd_avg_rollover.rkb_avg_outbuf_latency);
700
+ rd_avg_destroy(&rkb->rkb_telemetry.rd_avg_rollover.rkb_avg_throttle);
701
+
702
+ rd_avg_destroy(
703
+ &rkb->rkb_telemetry.rd_avg_current.rkb_avg_fetch_latency);
704
+ rd_avg_destroy(
705
+ &rkb->rkb_telemetry.rd_avg_rollover.rkb_avg_fetch_latency);
706
+
707
+ rd_avg_destroy(&rk->rk_telemetry.rd_avg_current.rk_avg_poll_idle_ratio);
708
+ rd_avg_destroy(
709
+ &rk->rk_telemetry.rd_avg_rollover.rk_avg_poll_idle_ratio);
710
+
711
+ rd_avg_destroy(
712
+ &rk->rk_telemetry.rd_avg_current.rk_avg_rebalance_latency);
713
+ rd_avg_destroy(
714
+ &rk->rk_telemetry.rd_avg_rollover.rk_avg_rebalance_latency);
715
+
716
+ rd_avg_destroy(&rk->rk_telemetry.rd_avg_current.rk_avg_commit_latency);
717
+ rd_avg_destroy(&rk->rk_telemetry.rd_avg_rollover.rk_avg_commit_latency);
718
+
719
+ rd_avg_destroy(
720
+ &rkb->rkb_telemetry.rd_avg_current.rkb_avg_produce_latency);
721
+ rd_avg_destroy(
722
+ &rkb->rkb_telemetry.rd_avg_rollover.rkb_avg_produce_latency);
723
+
724
+ mtx_destroy(&rkb->rkb_lock);
725
+ rd_free(rkb);
726
+ rwlock_destroy(&rk->rk_lock);
727
+ rd_free(rk->rk_cgrp);
728
+ rd_kafka_anyconf_destroy(_RK_GLOBAL, &rk->rk_conf);
729
+ rd_free(rk);
730
+ RD_UT_PASS();
731
+ return 0;
732
+ }
733
+
734
+ void unit_test_telemetry_set_connects(rd_kafka_t *rk, rd_kafka_broker_t *rkb) {
735
+ rkb->rkb_c.connects.val = 1;
736
+ }
737
+
738
+ void unit_test_telemetry_set_connects2(rd_kafka_t *rk, rd_kafka_broker_t *rkb) {
739
+ rkb->rkb_c.connects.val = 2;
740
+ }
741
+
742
+ void unit_test_telemetry_set_rtt(rd_kafka_t *rk, rd_kafka_broker_t *rkb) {
743
+ rd_avg_add(&rkb->rkb_telemetry.rd_avg_current.rkb_avg_rtt, 1000);
744
+ rd_avg_add(&rkb->rkb_telemetry.rd_avg_current.rkb_avg_rtt, 1000);
745
+ }
746
+
747
+ void unit_test_telemetry_set_throttle_time(rd_kafka_t *rk,
748
+ rd_kafka_broker_t *rkb) {
749
+ rd_avg_add(&rkb->rkb_telemetry.rd_avg_current.rkb_avg_throttle, 1);
750
+ rd_avg_add(&rkb->rkb_telemetry.rd_avg_current.rkb_avg_throttle, 1);
751
+ rd_avg_add(&rkb->rkb_telemetry.rd_avg_current.rkb_avg_throttle, 1);
752
+ }
753
+
754
+ void unit_test_telemetry_set_queue_time(rd_kafka_t *rk,
755
+ rd_kafka_broker_t *rkb) {
756
+ rd_avg_add(&rkb->rkb_telemetry.rd_avg_current.rkb_avg_outbuf_latency,
757
+ 1000);
758
+ rd_avg_add(&rkb->rkb_telemetry.rd_avg_current.rkb_avg_outbuf_latency,
759
+ 1000);
760
+ rd_avg_add(&rkb->rkb_telemetry.rd_avg_current.rkb_avg_outbuf_latency,
761
+ 1000);
762
+ rd_avg_add(&rkb->rkb_telemetry.rd_avg_current.rkb_avg_outbuf_latency,
763
+ 1000);
764
+ }
765
+
766
+ void unit_test_telemetry_set_produce_latency(rd_kafka_t *rk,
767
+ rd_kafka_broker_t *rkb) {
768
+ rd_avg_add(&rkb->rkb_telemetry.rd_avg_current.rkb_avg_produce_latency,
769
+ 1000);
770
+ rd_avg_add(&rkb->rkb_telemetry.rd_avg_current.rkb_avg_produce_latency,
771
+ 1000);
772
+ }
773
+
774
+ void unit_test_telemetry_set_coordinator_assigned_partitions(
775
+ rd_kafka_t *rk,
776
+ rd_kafka_broker_t *rkb) {
777
+ rk->rk_cgrp->rkcg_c.assignment_size = 1;
778
+ }
779
+
780
+ void unit_test_telemetry_set_rebalance_latency(rd_kafka_t *rk,
781
+ rd_kafka_broker_t *rkb) {
782
+ rd_avg_add(&rk->rk_telemetry.rd_avg_current.rk_avg_rebalance_latency,
783
+ 1000);
784
+ }
785
+
786
+ void unit_test_telemetry_set_fetch_latency(rd_kafka_t *rk,
787
+ rd_kafka_broker_t *rkb) {
788
+ rd_avg_add(&rkb->rkb_telemetry.rd_avg_current.rkb_avg_fetch_latency,
789
+ 1000);
790
+ rd_avg_add(&rkb->rkb_telemetry.rd_avg_current.rkb_avg_fetch_latency,
791
+ 1000);
792
+ }
793
+
794
+ void unit_test_telemetry_set_poll_idle_ratio(rd_kafka_t *rk,
795
+ rd_kafka_broker_t *rkb) {
796
+ rd_avg_add(&rk->rk_telemetry.rd_avg_current.rk_avg_poll_idle_ratio,
797
+ 1000000);
798
+ rd_avg_add(&rk->rk_telemetry.rd_avg_current.rk_avg_poll_idle_ratio,
799
+ 1000000);
800
+ rd_avg_add(&rk->rk_telemetry.rd_avg_current.rk_avg_poll_idle_ratio,
801
+ 1000000);
802
+ }
803
+
804
+ void unit_test_telemetry_set_commit_latency(rd_kafka_t *rk,
805
+ rd_kafka_broker_t *rkb) {
806
+ rd_avg_add(&rk->rk_telemetry.rd_avg_current.rk_avg_commit_latency,
807
+ 1000);
808
+ rd_avg_add(&rk->rk_telemetry.rd_avg_current.rk_avg_commit_latency,
809
+ 1000);
810
+ }
811
+
812
+ int unit_test_telemetry_gauge(void) {
813
+ int fails = 0;
814
+ int64_t default_expected_value_int = 1;
815
+ double default_expected_value_double = 1.0;
816
+ /* Producer metrics */
817
+ fails += unit_test_telemetry(
818
+ RD_KAFKA_PRODUCER,
819
+ RD_KAFKA_TELEMETRY_METRIC_PRODUCER_CONNECTION_CREATION_RATE,
820
+ RD_KAFKA_TELEMETRY_METRIC_PREFIX
821
+ "producer.connection.creation.rate",
822
+ "The rate of connections established per second.",
823
+ RD_KAFKA_TELEMETRY_METRIC_TYPE_GAUGE, rd_true, rd_false,
824
+ unit_test_telemetry_set_connects, default_expected_value_int,
825
+ default_expected_value_double);
826
+ fails += unit_test_telemetry(
827
+ RD_KAFKA_PRODUCER,
828
+ RD_KAFKA_TELEMETRY_METRIC_PRODUCER_NODE_REQUEST_LATENCY_AVG,
829
+ RD_KAFKA_TELEMETRY_METRIC_PREFIX
830
+ "producer.node.request.latency.avg",
831
+ "The average request latency in ms for a node.",
832
+ RD_KAFKA_TELEMETRY_METRIC_TYPE_GAUGE, rd_true, rd_true,
833
+ unit_test_telemetry_set_rtt, default_expected_value_int,
834
+ default_expected_value_double);
835
+ fails += unit_test_telemetry(
836
+ RD_KAFKA_PRODUCER,
837
+ RD_KAFKA_TELEMETRY_METRIC_PRODUCER_NODE_REQUEST_LATENCY_MAX,
838
+ RD_KAFKA_TELEMETRY_METRIC_PREFIX
839
+ "producer.node.request.latency.max",
840
+ "The maximum request latency in ms for a node.",
841
+ RD_KAFKA_TELEMETRY_METRIC_TYPE_GAUGE, rd_false, rd_true,
842
+ unit_test_telemetry_set_rtt, default_expected_value_int,
843
+ default_expected_value_double);
844
+ fails += unit_test_telemetry(
845
+ RD_KAFKA_PRODUCER,
846
+ RD_KAFKA_TELEMETRY_METRIC_PRODUCER_PRODUCE_THROTTLE_TIME_AVG,
847
+ RD_KAFKA_TELEMETRY_METRIC_PREFIX
848
+ "producer.produce.throttle.time.avg",
849
+ "The average throttle time in ms for a node.",
850
+ RD_KAFKA_TELEMETRY_METRIC_TYPE_GAUGE, rd_true, rd_false,
851
+ unit_test_telemetry_set_throttle_time, default_expected_value_int,
852
+ default_expected_value_double);
853
+ fails += unit_test_telemetry(
854
+ RD_KAFKA_PRODUCER,
855
+ RD_KAFKA_TELEMETRY_METRIC_PRODUCER_PRODUCE_THROTTLE_TIME_MAX,
856
+ RD_KAFKA_TELEMETRY_METRIC_PREFIX
857
+ "producer.produce.throttle.time.max",
858
+ "The maximum throttle time in ms for a node.",
859
+ RD_KAFKA_TELEMETRY_METRIC_TYPE_GAUGE, rd_false, rd_false,
860
+ unit_test_telemetry_set_throttle_time, default_expected_value_int,
861
+ default_expected_value_double);
862
+ fails += unit_test_telemetry(
863
+ RD_KAFKA_PRODUCER,
864
+ RD_KAFKA_TELEMETRY_METRIC_PRODUCER_RECORD_QUEUE_TIME_AVG,
865
+ RD_KAFKA_TELEMETRY_METRIC_PREFIX "producer.record.queue.time.avg",
866
+ "The average time in ms a record spends in the producer queue.",
867
+ RD_KAFKA_TELEMETRY_METRIC_TYPE_GAUGE, rd_true, rd_false,
868
+ unit_test_telemetry_set_queue_time, default_expected_value_int,
869
+ default_expected_value_double);
870
+ fails += unit_test_telemetry(
871
+ RD_KAFKA_PRODUCER,
872
+ RD_KAFKA_TELEMETRY_METRIC_PRODUCER_RECORD_QUEUE_TIME_MAX,
873
+ RD_KAFKA_TELEMETRY_METRIC_PREFIX "producer.record.queue.time.max",
874
+ "The maximum time in ms a record spends in the producer queue.",
875
+ RD_KAFKA_TELEMETRY_METRIC_TYPE_GAUGE, rd_false, rd_false,
876
+ unit_test_telemetry_set_queue_time, default_expected_value_int,
877
+ default_expected_value_double);
878
+ fails += unit_test_telemetry(
879
+ RD_KAFKA_PRODUCER,
880
+ RD_KAFKA_TELEMETRY_METRIC_PRODUCER_PRODUCE_LATENCY_AVG,
881
+ RD_KAFKA_TELEMETRY_METRIC_PREFIX "producer.request.latency.avg",
882
+ "The average request latency in ms for produce requests.",
883
+ RD_KAFKA_TELEMETRY_METRIC_TYPE_GAUGE, rd_true, rd_false,
884
+ unit_test_telemetry_set_produce_latency, default_expected_value_int,
885
+ default_expected_value_double);
886
+ fails += unit_test_telemetry(
887
+ RD_KAFKA_PRODUCER,
888
+ RD_KAFKA_TELEMETRY_METRIC_PRODUCER_PRODUCE_LATENCY_MAX,
889
+ RD_KAFKA_TELEMETRY_METRIC_PREFIX "producer.request.latency.max",
890
+ "The maximum request latency in ms for produce requests.",
891
+ RD_KAFKA_TELEMETRY_METRIC_TYPE_GAUGE, rd_false, rd_false,
892
+ unit_test_telemetry_set_produce_latency, default_expected_value_int,
893
+ default_expected_value_double);
894
+
895
+ /* Consumer metrics */
896
+ fails += unit_test_telemetry(
897
+ RD_KAFKA_CONSUMER,
898
+ RD_KAFKA_TELEMETRY_METRIC_CONSUMER_CONNECTION_CREATION_RATE,
899
+ RD_KAFKA_TELEMETRY_METRIC_PREFIX
900
+ "consumer.connection.creation.rate",
901
+ "The rate of connections established per second.",
902
+ RD_KAFKA_TELEMETRY_METRIC_TYPE_GAUGE, rd_true, rd_false,
903
+ unit_test_telemetry_set_connects, default_expected_value_int,
904
+ default_expected_value_double);
905
+ fails += unit_test_telemetry(
906
+ RD_KAFKA_CONSUMER,
907
+ RD_KAFKA_TELEMETRY_METRIC_CONSUMER_NODE_REQUEST_LATENCY_AVG,
908
+ RD_KAFKA_TELEMETRY_METRIC_PREFIX
909
+ "consumer.node.request.latency.avg",
910
+ "The average request latency in ms for a node.",
911
+ RD_KAFKA_TELEMETRY_METRIC_TYPE_GAUGE, rd_true, rd_true,
912
+ unit_test_telemetry_set_rtt, default_expected_value_int,
913
+ default_expected_value_double);
914
+ fails += unit_test_telemetry(
915
+ RD_KAFKA_CONSUMER,
916
+ RD_KAFKA_TELEMETRY_METRIC_CONSUMER_NODE_REQUEST_LATENCY_MAX,
917
+ RD_KAFKA_TELEMETRY_METRIC_PREFIX
918
+ "consumer.node.request.latency.max",
919
+ "The maximum request latency in ms for a node.",
920
+ RD_KAFKA_TELEMETRY_METRIC_TYPE_GAUGE, rd_false, rd_true,
921
+ unit_test_telemetry_set_rtt, default_expected_value_int,
922
+ default_expected_value_double);
923
+ fails += unit_test_telemetry(
924
+ RD_KAFKA_CONSUMER,
925
+ RD_KAFKA_TELEMETRY_METRIC_CONSUMER_COORDINATOR_ASSIGNED_PARTITIONS,
926
+ RD_KAFKA_TELEMETRY_METRIC_PREFIX
927
+ "consumer.coordinator.assigned.partitions",
928
+ "The number of partitions currently assigned to this consumer.",
929
+ RD_KAFKA_TELEMETRY_METRIC_TYPE_GAUGE, rd_false, rd_false,
930
+ unit_test_telemetry_set_coordinator_assigned_partitions,
931
+ default_expected_value_int, default_expected_value_double);
932
+ fails += unit_test_telemetry(
933
+ RD_KAFKA_CONSUMER,
934
+ RD_KAFKA_TELEMETRY_METRIC_CONSUMER_COORDINATOR_REBALANCE_LATENCY_AVG,
935
+ RD_KAFKA_TELEMETRY_METRIC_PREFIX
936
+ "consumer.coordinator.rebalance.latency.avg",
937
+ "The average rebalance latency in ms for the "
938
+ "consumer coordinator.",
939
+ RD_KAFKA_TELEMETRY_METRIC_TYPE_GAUGE, rd_true, rd_false,
940
+ unit_test_telemetry_set_rebalance_latency,
941
+ default_expected_value_int, default_expected_value_double);
942
+ fails += unit_test_telemetry(
943
+ RD_KAFKA_CONSUMER,
944
+ RD_KAFKA_TELEMETRY_METRIC_CONSUMER_COORDINATOR_REBALANCE_LATENCY_MAX,
945
+ RD_KAFKA_TELEMETRY_METRIC_PREFIX
946
+ "consumer.coordinator.rebalance.latency.max",
947
+ "The maximum rebalance latency in ms for the "
948
+ "consumer coordinator.",
949
+ RD_KAFKA_TELEMETRY_METRIC_TYPE_GAUGE, rd_false, rd_false,
950
+ unit_test_telemetry_set_rebalance_latency,
951
+ default_expected_value_int, default_expected_value_double);
952
+ fails += unit_test_telemetry(
953
+ RD_KAFKA_CONSUMER,
954
+ RD_KAFKA_TELEMETRY_METRIC_CONSUMER_FETCH_MANAGER_FETCH_LATENCY_AVG,
955
+ RD_KAFKA_TELEMETRY_METRIC_PREFIX
956
+ "consumer.fetch.manager.fetch.latency.avg",
957
+ "The average fetch latency in ms for the fetch manager.",
958
+ RD_KAFKA_TELEMETRY_METRIC_TYPE_GAUGE, rd_true, rd_false,
959
+ unit_test_telemetry_set_fetch_latency, default_expected_value_int,
960
+ default_expected_value_double);
961
+ fails += unit_test_telemetry(
962
+ RD_KAFKA_CONSUMER,
963
+ RD_KAFKA_TELEMETRY_METRIC_CONSUMER_FETCH_MANAGER_FETCH_LATENCY_MAX,
964
+ RD_KAFKA_TELEMETRY_METRIC_PREFIX
965
+ "consumer.fetch.manager.fetch.latency.max",
966
+ "The maximum fetch latency in ms for the fetch manager.",
967
+ RD_KAFKA_TELEMETRY_METRIC_TYPE_GAUGE, rd_false, rd_false,
968
+ unit_test_telemetry_set_fetch_latency, default_expected_value_int,
969
+ default_expected_value_double);
970
+ fails += unit_test_telemetry(
971
+ RD_KAFKA_CONSUMER,
972
+ RD_KAFKA_TELEMETRY_METRIC_CONSUMER_POLL_IDLE_RATIO_AVG,
973
+ RD_KAFKA_TELEMETRY_METRIC_PREFIX "consumer.poll.idle.ratio.avg",
974
+ "The average ratio of idle to poll for a consumer.",
975
+ RD_KAFKA_TELEMETRY_METRIC_TYPE_GAUGE, rd_true, rd_false,
976
+ unit_test_telemetry_set_poll_idle_ratio, default_expected_value_int,
977
+ default_expected_value_double);
978
+ fails += unit_test_telemetry(
979
+ RD_KAFKA_CONSUMER,
980
+ RD_KAFKA_TELEMETRY_METRIC_CONSUMER_COORDINATOR_COMMIT_LATENCY_AVG,
981
+ RD_KAFKA_TELEMETRY_METRIC_PREFIX
982
+ "consumer.coordinator.commit.latency.avg",
983
+ "The average commit latency in ms for the consumer coordinator.",
984
+ RD_KAFKA_TELEMETRY_METRIC_TYPE_GAUGE, rd_true, rd_false,
985
+ unit_test_telemetry_set_commit_latency, default_expected_value_int,
986
+ default_expected_value_double);
987
+ fails += unit_test_telemetry(
988
+ RD_KAFKA_CONSUMER,
989
+ RD_KAFKA_TELEMETRY_METRIC_CONSUMER_COORDINATOR_COMMIT_LATENCY_MAX,
990
+ RD_KAFKA_TELEMETRY_METRIC_PREFIX
991
+ "consumer.coordinator.commit.latency.max",
992
+ "The maximum commit latency in ms for the consumer coordinator.",
993
+ RD_KAFKA_TELEMETRY_METRIC_TYPE_GAUGE, rd_false, rd_false,
994
+ unit_test_telemetry_set_commit_latency, default_expected_value_int,
995
+ default_expected_value_double);
996
+ return fails;
997
+ }
998
+
999
+ int unit_test_telemetry_sum(void) {
1000
+ int fails = 0;
1001
+ int64_t default_expected_value_int = 1;
1002
+ double default_expected_value_double = 1.0;
1003
+
1004
+ /* Producer metrics */
1005
+ fails += unit_test_telemetry(
1006
+ RD_KAFKA_PRODUCER,
1007
+ RD_KAFKA_TELEMETRY_METRIC_PRODUCER_CONNECTION_CREATION_TOTAL,
1008
+ RD_KAFKA_TELEMETRY_METRIC_PREFIX
1009
+ "producer.connection.creation.total",
1010
+ "The total number of connections established.",
1011
+ RD_KAFKA_TELEMETRY_METRIC_TYPE_SUM, rd_false, rd_false,
1012
+ unit_test_telemetry_set_connects, default_expected_value_int,
1013
+ default_expected_value_double);
1014
+
1015
+ /* Consumer metrics */
1016
+ fails += unit_test_telemetry(
1017
+ RD_KAFKA_CONSUMER,
1018
+ RD_KAFKA_TELEMETRY_METRIC_CONSUMER_CONNECTION_CREATION_TOTAL,
1019
+ RD_KAFKA_TELEMETRY_METRIC_PREFIX
1020
+ "consumer.connection.creation.total",
1021
+ "The total number of connections established.",
1022
+ RD_KAFKA_TELEMETRY_METRIC_TYPE_SUM, rd_false, rd_false,
1023
+ unit_test_telemetry_set_connects, default_expected_value_int,
1024
+ default_expected_value_double);
1025
+ /* Test with expected value 2 */
1026
+ fails += unit_test_telemetry(
1027
+ RD_KAFKA_CONSUMER,
1028
+ RD_KAFKA_TELEMETRY_METRIC_CONSUMER_CONNECTION_CREATION_TOTAL,
1029
+ RD_KAFKA_TELEMETRY_METRIC_PREFIX
1030
+ "consumer.connection.creation.total",
1031
+ "The total number of connections established.",
1032
+ RD_KAFKA_TELEMETRY_METRIC_TYPE_SUM, rd_false, rd_false,
1033
+ unit_test_telemetry_set_connects2, 2, 0.0);
1034
+
1035
+ fails += unit_test_telemetry(
1036
+ RD_KAFKA_CONSUMER,
1037
+ RD_KAFKA_TELEMETRY_METRIC_CONSUMER_COORDINATOR_REBALANCE_LATENCY_TOTAL,
1038
+ RD_KAFKA_TELEMETRY_METRIC_PREFIX
1039
+ "consumer.coordinator.rebalance.latency.total",
1040
+ "The total rebalance latency in ms for the "
1041
+ "consumer coordinator.",
1042
+ RD_KAFKA_TELEMETRY_METRIC_TYPE_SUM, rd_false, rd_false,
1043
+ unit_test_telemetry_set_rebalance_latency,
1044
+ default_expected_value_int, default_expected_value_double);
1045
+ return fails;
1046
+ }
1047
+
1048
+ int unittest_telemetry_decode(void) {
1049
+ int fails = 0;
1050
+ fails += unit_test_telemetry_gauge();
1051
+ fails += unit_test_telemetry_sum();
1052
+ return fails;
1053
+ }