@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,997 @@
1
+ /*
2
+ * librdkafka - Apache Kafka C library
3
+ *
4
+ * Copyright (c) 2012-2022, Magnus Edenhill
5
+ * 2023, Confluent Inc.
6
+ * All rights reserved.
7
+ *
8
+ * Redistribution and use in source and binary forms, with or without
9
+ * modification, are permitted provided that the following conditions are met:
10
+ *
11
+ * 1. Redistributions of source code must retain the above copyright notice,
12
+ * this list of conditions and the following disclaimer.
13
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
14
+ * this list of conditions and the following disclaimer in the documentation
15
+ * and/or other materials provided with the distribution.
16
+ *
17
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
+ * POSSIBILITY OF SUCH DAMAGE.
28
+ */
29
+
30
+ #include <stdarg.h>
31
+
32
+ #include "rdkafka_int.h"
33
+ #include "rdkafka_op.h"
34
+ #include "rdkafka_topic.h"
35
+ #include "rdkafka_partition.h"
36
+ #include "rdkafka_proto.h"
37
+ #include "rdkafka_offset.h"
38
+ #include "rdkafka_error.h"
39
+
40
+ /* Current number of rd_kafka_op_t */
41
+ rd_atomic32_t rd_kafka_op_cnt;
42
+
43
+
44
+ const char *rd_kafka_op2str(rd_kafka_op_type_t type) {
45
+ int skiplen = 6;
46
+ static const char *names[RD_KAFKA_OP__END] = {
47
+ [RD_KAFKA_OP_NONE] = "REPLY:NONE",
48
+ [RD_KAFKA_OP_FETCH] = "REPLY:FETCH",
49
+ [RD_KAFKA_OP_ERR] = "REPLY:ERR",
50
+ [RD_KAFKA_OP_CONSUMER_ERR] = "REPLY:CONSUMER_ERR",
51
+ [RD_KAFKA_OP_DR] = "REPLY:DR",
52
+ [RD_KAFKA_OP_STATS] = "REPLY:STATS",
53
+ [RD_KAFKA_OP_OFFSET_COMMIT] = "REPLY:OFFSET_COMMIT",
54
+ [RD_KAFKA_OP_NODE_UPDATE] = "REPLY:NODE_UPDATE",
55
+ [RD_KAFKA_OP_XMIT_BUF] = "REPLY:XMIT_BUF",
56
+ [RD_KAFKA_OP_RECV_BUF] = "REPLY:RECV_BUF",
57
+ [RD_KAFKA_OP_XMIT_RETRY] = "REPLY:XMIT_RETRY",
58
+ [RD_KAFKA_OP_FETCH_START] = "REPLY:FETCH_START",
59
+ [RD_KAFKA_OP_FETCH_STOP] = "REPLY:FETCH_STOP",
60
+ [RD_KAFKA_OP_SEEK] = "REPLY:SEEK",
61
+ [RD_KAFKA_OP_PAUSE] = "REPLY:PAUSE",
62
+ [RD_KAFKA_OP_OFFSET_FETCH] = "REPLY:OFFSET_FETCH",
63
+ [RD_KAFKA_OP_PARTITION_JOIN] = "REPLY:PARTITION_JOIN",
64
+ [RD_KAFKA_OP_PARTITION_LEAVE] = "REPLY:PARTITION_LEAVE",
65
+ [RD_KAFKA_OP_REBALANCE] = "REPLY:REBALANCE",
66
+ [RD_KAFKA_OP_TERMINATE] = "REPLY:TERMINATE",
67
+ [RD_KAFKA_OP_COORD_QUERY] = "REPLY:COORD_QUERY",
68
+ [RD_KAFKA_OP_SUBSCRIBE] = "REPLY:SUBSCRIBE",
69
+ [RD_KAFKA_OP_ASSIGN] = "REPLY:ASSIGN",
70
+ [RD_KAFKA_OP_GET_SUBSCRIPTION] = "REPLY:GET_SUBSCRIPTION",
71
+ [RD_KAFKA_OP_GET_ASSIGNMENT] = "REPLY:GET_ASSIGNMENT",
72
+ [RD_KAFKA_OP_THROTTLE] = "REPLY:THROTTLE",
73
+ [RD_KAFKA_OP_NAME] = "REPLY:NAME",
74
+ [RD_KAFKA_OP_CG_METADATA] = "REPLY:CG_METADATA",
75
+ [RD_KAFKA_OP_OFFSET_RESET] = "REPLY:OFFSET_RESET",
76
+ [RD_KAFKA_OP_METADATA] = "REPLY:METADATA",
77
+ [RD_KAFKA_OP_LOG] = "REPLY:LOG",
78
+ [RD_KAFKA_OP_WAKEUP] = "REPLY:WAKEUP",
79
+ [RD_KAFKA_OP_CREATETOPICS] = "REPLY:CREATETOPICS",
80
+ [RD_KAFKA_OP_DELETETOPICS] = "REPLY:DELETETOPICS",
81
+ [RD_KAFKA_OP_CREATEPARTITIONS] = "REPLY:CREATEPARTITIONS",
82
+ [RD_KAFKA_OP_ALTERCONFIGS] = "REPLY:ALTERCONFIGS",
83
+ [RD_KAFKA_OP_INCREMENTALALTERCONFIGS] =
84
+ "REPLY:INCREMENTALALTERCONFIGS",
85
+ [RD_KAFKA_OP_DESCRIBECONFIGS] = "REPLY:DESCRIBECONFIGS",
86
+ [RD_KAFKA_OP_DELETERECORDS] = "REPLY:DELETERECORDS",
87
+ [RD_KAFKA_OP_LISTCONSUMERGROUPS] = "REPLY:LISTCONSUMERGROUPS",
88
+ [RD_KAFKA_OP_DESCRIBECONSUMERGROUPS] =
89
+ "REPLY:DESCRIBECONSUMERGROUPS",
90
+ [RD_KAFKA_OP_DESCRIBETOPICS] = "REPLY:DESCRIBETOPICS",
91
+ [RD_KAFKA_OP_DESCRIBECLUSTER] = "REPLY:DESCRIBECLUSTER",
92
+ [RD_KAFKA_OP_DELETEGROUPS] = "REPLY:DELETEGROUPS",
93
+ [RD_KAFKA_OP_DELETECONSUMERGROUPOFFSETS] =
94
+ "REPLY:DELETECONSUMERGROUPOFFSETS",
95
+ [RD_KAFKA_OP_CREATEACLS] = "REPLY:CREATEACLS",
96
+ [RD_KAFKA_OP_DESCRIBEACLS] = "REPLY:DESCRIBEACLS",
97
+ [RD_KAFKA_OP_DELETEACLS] = "REPLY:DELETEACLS",
98
+ [RD_KAFKA_OP_ALTERCONSUMERGROUPOFFSETS] =
99
+ "REPLY:ALTERCONSUMERGROUPOFFSETS",
100
+ [RD_KAFKA_OP_LISTCONSUMERGROUPOFFSETS] =
101
+ "REPLY:LISTCONSUMERGROUPOFFSETS",
102
+ [RD_KAFKA_OP_ADMIN_FANOUT] = "REPLY:ADMIN_FANOUT",
103
+ [RD_KAFKA_OP_ADMIN_RESULT] = "REPLY:ADMIN_RESULT",
104
+ [RD_KAFKA_OP_PURGE] = "REPLY:PURGE",
105
+ [RD_KAFKA_OP_CONNECT] = "REPLY:CONNECT",
106
+ [RD_KAFKA_OP_OAUTHBEARER_REFRESH] = "REPLY:OAUTHBEARER_REFRESH",
107
+ [RD_KAFKA_OP_MOCK] = "REPLY:MOCK",
108
+ [RD_KAFKA_OP_BROKER_MONITOR] = "REPLY:BROKER_MONITOR",
109
+ [RD_KAFKA_OP_TXN] = "REPLY:TXN",
110
+ [RD_KAFKA_OP_GET_REBALANCE_PROTOCOL] =
111
+ "REPLY:GET_REBALANCE_PROTOCOL",
112
+ [RD_KAFKA_OP_LEADERS] = "REPLY:LEADERS",
113
+ [RD_KAFKA_OP_BARRIER] = "REPLY:BARRIER",
114
+ [RD_KAFKA_OP_SASL_REAUTH] = "REPLY:SASL_REAUTH",
115
+ [RD_KAFKA_OP_ALTERUSERSCRAMCREDENTIALS] =
116
+ "REPLY:ALTERUSERSCRAMCREDENTIALS",
117
+ [RD_KAFKA_OP_DESCRIBEUSERSCRAMCREDENTIALS] =
118
+ "REPLY:DESCRIBEUSERSCRAMCREDENTIALS",
119
+ [RD_KAFKA_OP_LISTOFFSETS] = "REPLY:LISTOFFSETS",
120
+ [RD_KAFKA_OP_METADATA_UPDATE] = "REPLY:METADATA_UPDATE",
121
+ [RD_KAFKA_OP_SET_TELEMETRY_BROKER] =
122
+ "REPLY:RD_KAFKA_OP_SET_TELEMETRY_BROKER",
123
+ [RD_KAFKA_OP_TERMINATE_TELEMETRY] =
124
+ "REPLY:RD_KAFKA_OP_TERMINATE_TELEMETRY",
125
+ [RD_KAFKA_OP_ELECTLEADERS] = "REPLY:ELECTLEADERS",
126
+ };
127
+
128
+ if (type & RD_KAFKA_OP_REPLY)
129
+ skiplen = 0;
130
+
131
+ rd_assert((names[type & ~RD_KAFKA_OP_FLAGMASK] != NULL) ||
132
+ !*"add OP type to rd_kafka_op2str()");
133
+ return names[type & ~RD_KAFKA_OP_FLAGMASK] + skiplen;
134
+ }
135
+
136
+
137
+ void rd_kafka_op_print(FILE *fp, const char *prefix, rd_kafka_op_t *rko) {
138
+ fprintf(fp,
139
+ "%s((rd_kafka_op_t*)%p)\n"
140
+ "%s Type: %s (0x%x), Version: %" PRId32 "\n",
141
+ prefix, rko, prefix, rd_kafka_op2str(rko->rko_type),
142
+ rko->rko_type, rko->rko_version);
143
+ if (rko->rko_err)
144
+ fprintf(fp, "%s Error: %s\n", prefix,
145
+ rd_kafka_err2str(rko->rko_err));
146
+ if (rko->rko_replyq.q)
147
+ fprintf(fp, "%s Replyq %p v%d (%s)\n", prefix,
148
+ rko->rko_replyq.q, rko->rko_replyq.version,
149
+ #if ENABLE_DEVEL
150
+ rko->rko_replyq._id
151
+ #else
152
+ ""
153
+ #endif
154
+ );
155
+ if (rko->rko_rktp) {
156
+ fprintf(fp,
157
+ "%s ((rd_kafka_toppar_t*)%p) "
158
+ "%s [%" PRId32 "] v%d\n",
159
+ prefix, rko->rko_rktp,
160
+ rko->rko_rktp->rktp_rkt->rkt_topic->str,
161
+ rko->rko_rktp->rktp_partition,
162
+ rd_atomic32_get(&rko->rko_rktp->rktp_version));
163
+ }
164
+
165
+ switch (rko->rko_type & ~RD_KAFKA_OP_FLAGMASK) {
166
+ case RD_KAFKA_OP_FETCH:
167
+ fprintf(fp, "%s Offset: %" PRId64 "\n", prefix,
168
+ rko->rko_u.fetch.rkm.rkm_offset);
169
+ break;
170
+ case RD_KAFKA_OP_CONSUMER_ERR:
171
+ fprintf(fp, "%s Offset: %" PRId64 "\n", prefix,
172
+ rko->rko_u.err.offset);
173
+ /* FALLTHRU */
174
+ case RD_KAFKA_OP_ERR:
175
+ fprintf(fp, "%s Reason: %s\n", prefix, rko->rko_u.err.errstr);
176
+ break;
177
+ case RD_KAFKA_OP_DR:
178
+ fprintf(fp, "%s %" PRId32 " messages on %s\n", prefix,
179
+ rko->rko_u.dr.msgq.rkmq_msg_cnt,
180
+ rko->rko_u.dr.rkt ? rko->rko_u.dr.rkt->rkt_topic->str
181
+ : "(n/a)");
182
+ break;
183
+ case RD_KAFKA_OP_OFFSET_COMMIT:
184
+ fprintf(fp, "%s Callback: %p (opaque %p)\n", prefix,
185
+ rko->rko_u.offset_commit.cb,
186
+ rko->rko_u.offset_commit.opaque);
187
+ fprintf(fp, "%s %d partitions\n", prefix,
188
+ rko->rko_u.offset_commit.partitions
189
+ ? rko->rko_u.offset_commit.partitions->cnt
190
+ : 0);
191
+ break;
192
+
193
+ case RD_KAFKA_OP_LOG:
194
+ fprintf(fp, "%s Log: %%%d %s: %s\n", prefix,
195
+ rko->rko_u.log.level, rko->rko_u.log.fac,
196
+ rko->rko_u.log.str);
197
+ break;
198
+
199
+ default:
200
+ break;
201
+ }
202
+ }
203
+
204
+
205
+ rd_kafka_op_t *rd_kafka_op_new0(const char *source, rd_kafka_op_type_t type) {
206
+ rd_kafka_op_t *rko;
207
+ #define _RD_KAFKA_OP_EMPTY \
208
+ 1234567 /* Special value to be able to assert \
209
+ * on default-initialized (0) sizes \
210
+ * if we forgot to add an op type to \
211
+ * this list. */
212
+ static const size_t op2size[RD_KAFKA_OP__END] = {
213
+ [RD_KAFKA_OP_FETCH] = sizeof(rko->rko_u.fetch),
214
+ [RD_KAFKA_OP_ERR] = sizeof(rko->rko_u.err),
215
+ [RD_KAFKA_OP_CONSUMER_ERR] = sizeof(rko->rko_u.err),
216
+ [RD_KAFKA_OP_DR] = sizeof(rko->rko_u.dr),
217
+ [RD_KAFKA_OP_STATS] = sizeof(rko->rko_u.stats),
218
+ [RD_KAFKA_OP_OFFSET_COMMIT] = sizeof(rko->rko_u.offset_commit),
219
+ [RD_KAFKA_OP_NODE_UPDATE] = sizeof(rko->rko_u.node),
220
+ [RD_KAFKA_OP_XMIT_BUF] = sizeof(rko->rko_u.xbuf),
221
+ [RD_KAFKA_OP_RECV_BUF] = sizeof(rko->rko_u.xbuf),
222
+ [RD_KAFKA_OP_XMIT_RETRY] = sizeof(rko->rko_u.xbuf),
223
+ [RD_KAFKA_OP_FETCH_START] = sizeof(rko->rko_u.fetch_start),
224
+ [RD_KAFKA_OP_FETCH_STOP] = _RD_KAFKA_OP_EMPTY,
225
+ [RD_KAFKA_OP_SEEK] = sizeof(rko->rko_u.fetch_start),
226
+ [RD_KAFKA_OP_PAUSE] = sizeof(rko->rko_u.pause),
227
+ [RD_KAFKA_OP_OFFSET_FETCH] = sizeof(rko->rko_u.offset_fetch),
228
+ [RD_KAFKA_OP_PARTITION_JOIN] = _RD_KAFKA_OP_EMPTY,
229
+ [RD_KAFKA_OP_PARTITION_LEAVE] = _RD_KAFKA_OP_EMPTY,
230
+ [RD_KAFKA_OP_REBALANCE] = sizeof(rko->rko_u.rebalance),
231
+ [RD_KAFKA_OP_TERMINATE] = sizeof(rko->rko_u.terminated),
232
+ [RD_KAFKA_OP_COORD_QUERY] = _RD_KAFKA_OP_EMPTY,
233
+ [RD_KAFKA_OP_SUBSCRIBE] = sizeof(rko->rko_u.subscribe),
234
+ [RD_KAFKA_OP_ASSIGN] = sizeof(rko->rko_u.assign),
235
+ [RD_KAFKA_OP_GET_SUBSCRIPTION] = sizeof(rko->rko_u.subscribe),
236
+ [RD_KAFKA_OP_GET_ASSIGNMENT] = sizeof(rko->rko_u.assign),
237
+ [RD_KAFKA_OP_THROTTLE] = sizeof(rko->rko_u.throttle),
238
+ [RD_KAFKA_OP_NAME] = sizeof(rko->rko_u.name),
239
+ [RD_KAFKA_OP_CG_METADATA] = sizeof(rko->rko_u.cg_metadata),
240
+ [RD_KAFKA_OP_OFFSET_RESET] = sizeof(rko->rko_u.offset_reset),
241
+ [RD_KAFKA_OP_METADATA] = sizeof(rko->rko_u.metadata),
242
+ [RD_KAFKA_OP_LOG] = sizeof(rko->rko_u.log),
243
+ [RD_KAFKA_OP_WAKEUP] = _RD_KAFKA_OP_EMPTY,
244
+ [RD_KAFKA_OP_CREATETOPICS] = sizeof(rko->rko_u.admin_request),
245
+ [RD_KAFKA_OP_DELETETOPICS] = sizeof(rko->rko_u.admin_request),
246
+ [RD_KAFKA_OP_CREATEPARTITIONS] = sizeof(rko->rko_u.admin_request),
247
+ [RD_KAFKA_OP_ALTERCONFIGS] = sizeof(rko->rko_u.admin_request),
248
+ [RD_KAFKA_OP_INCREMENTALALTERCONFIGS] =
249
+ sizeof(rko->rko_u.admin_request),
250
+ [RD_KAFKA_OP_DESCRIBECONFIGS] = sizeof(rko->rko_u.admin_request),
251
+ [RD_KAFKA_OP_DELETERECORDS] = sizeof(rko->rko_u.admin_request),
252
+ [RD_KAFKA_OP_LISTCONSUMERGROUPS] = sizeof(rko->rko_u.admin_request),
253
+ [RD_KAFKA_OP_DESCRIBECONSUMERGROUPS] =
254
+ sizeof(rko->rko_u.admin_request),
255
+ [RD_KAFKA_OP_DESCRIBETOPICS] = sizeof(rko->rko_u.admin_request),
256
+ [RD_KAFKA_OP_DESCRIBECLUSTER] = sizeof(rko->rko_u.admin_request),
257
+ [RD_KAFKA_OP_DELETEGROUPS] = sizeof(rko->rko_u.admin_request),
258
+ [RD_KAFKA_OP_DELETECONSUMERGROUPOFFSETS] =
259
+ sizeof(rko->rko_u.admin_request),
260
+ [RD_KAFKA_OP_CREATEACLS] = sizeof(rko->rko_u.admin_request),
261
+ [RD_KAFKA_OP_DESCRIBEACLS] = sizeof(rko->rko_u.admin_request),
262
+ [RD_KAFKA_OP_DELETEACLS] = sizeof(rko->rko_u.admin_request),
263
+ [RD_KAFKA_OP_ALTERCONSUMERGROUPOFFSETS] =
264
+ sizeof(rko->rko_u.admin_request),
265
+ [RD_KAFKA_OP_LISTCONSUMERGROUPOFFSETS] =
266
+ sizeof(rko->rko_u.admin_request),
267
+ [RD_KAFKA_OP_ADMIN_FANOUT] = sizeof(rko->rko_u.admin_request),
268
+ [RD_KAFKA_OP_ADMIN_RESULT] = sizeof(rko->rko_u.admin_result),
269
+ [RD_KAFKA_OP_PURGE] = sizeof(rko->rko_u.purge),
270
+ [RD_KAFKA_OP_CONNECT] = _RD_KAFKA_OP_EMPTY,
271
+ [RD_KAFKA_OP_OAUTHBEARER_REFRESH] = _RD_KAFKA_OP_EMPTY,
272
+ [RD_KAFKA_OP_MOCK] = sizeof(rko->rko_u.mock),
273
+ [RD_KAFKA_OP_BROKER_MONITOR] = sizeof(rko->rko_u.broker_monitor),
274
+ [RD_KAFKA_OP_TXN] = sizeof(rko->rko_u.txn),
275
+ [RD_KAFKA_OP_GET_REBALANCE_PROTOCOL] =
276
+ sizeof(rko->rko_u.rebalance_protocol),
277
+ [RD_KAFKA_OP_LEADERS] = sizeof(rko->rko_u.leaders),
278
+ [RD_KAFKA_OP_BARRIER] = _RD_KAFKA_OP_EMPTY,
279
+ [RD_KAFKA_OP_SASL_REAUTH] = _RD_KAFKA_OP_EMPTY,
280
+ [RD_KAFKA_OP_ALTERUSERSCRAMCREDENTIALS] =
281
+ sizeof(rko->rko_u.admin_request),
282
+ [RD_KAFKA_OP_DESCRIBEUSERSCRAMCREDENTIALS] =
283
+ sizeof(rko->rko_u.admin_request),
284
+ [RD_KAFKA_OP_LISTOFFSETS] = sizeof(rko->rko_u.admin_request),
285
+ [RD_KAFKA_OP_METADATA_UPDATE] = sizeof(rko->rko_u.metadata),
286
+ [RD_KAFKA_OP_SET_TELEMETRY_BROKER] =
287
+ sizeof(rko->rko_u.telemetry_broker),
288
+ [RD_KAFKA_OP_TERMINATE_TELEMETRY] = _RD_KAFKA_OP_EMPTY,
289
+ [RD_KAFKA_OP_ELECTLEADERS] = sizeof(rko->rko_u.admin_request),
290
+ };
291
+ size_t tsize = op2size[type & ~RD_KAFKA_OP_FLAGMASK];
292
+
293
+ rd_assert(tsize > 0 || !*"add OP type to rd_kafka_op_new0()");
294
+ if (tsize == _RD_KAFKA_OP_EMPTY)
295
+ tsize = 0;
296
+
297
+ rko = rd_calloc(1, sizeof(*rko) - sizeof(rko->rko_u) + tsize);
298
+ rko->rko_type = type;
299
+
300
+ #if ENABLE_DEVEL
301
+ rko->rko_source = source;
302
+ rd_atomic32_add(&rd_kafka_op_cnt, 1);
303
+ #endif
304
+ return rko;
305
+ }
306
+
307
+
308
+ void rd_kafka_op_destroy(rd_kafka_op_t *rko) {
309
+
310
+ /* Call ops callback with ERR__DESTROY to let it
311
+ * clean up its resources. */
312
+ if ((rko->rko_type & RD_KAFKA_OP_CB) && rko->rko_op_cb) {
313
+ rd_kafka_op_res_t res;
314
+ rko->rko_err = RD_KAFKA_RESP_ERR__DESTROY;
315
+ res = rko->rko_op_cb(rko->rko_rk, NULL, rko);
316
+ rd_assert(res != RD_KAFKA_OP_RES_YIELD);
317
+ rd_assert(res != RD_KAFKA_OP_RES_KEEP);
318
+ }
319
+
320
+
321
+ switch (rko->rko_type & ~RD_KAFKA_OP_FLAGMASK) {
322
+ case RD_KAFKA_OP_FETCH:
323
+ rd_kafka_msg_destroy(NULL, &rko->rko_u.fetch.rkm);
324
+ /* Decrease refcount on rkbuf to eventually rd_free shared buf*/
325
+ if (rko->rko_u.fetch.rkbuf)
326
+ rd_kafka_buf_handle_op(rko, RD_KAFKA_RESP_ERR__DESTROY);
327
+
328
+ break;
329
+
330
+ case RD_KAFKA_OP_OFFSET_FETCH:
331
+ if (rko->rko_u.offset_fetch.partitions &&
332
+ rko->rko_u.offset_fetch.do_free)
333
+ rd_kafka_topic_partition_list_destroy(
334
+ rko->rko_u.offset_fetch.partitions);
335
+ break;
336
+
337
+ case RD_KAFKA_OP_OFFSET_COMMIT:
338
+ RD_IF_FREE(rko->rko_u.offset_commit.partitions,
339
+ rd_kafka_topic_partition_list_destroy);
340
+ RD_IF_FREE(rko->rko_u.offset_commit.reason, rd_free);
341
+ break;
342
+
343
+ case RD_KAFKA_OP_SUBSCRIBE:
344
+ case RD_KAFKA_OP_GET_SUBSCRIPTION:
345
+ RD_IF_FREE(rko->rko_u.subscribe.topics,
346
+ rd_kafka_topic_partition_list_destroy);
347
+ break;
348
+
349
+ case RD_KAFKA_OP_ASSIGN:
350
+ case RD_KAFKA_OP_GET_ASSIGNMENT:
351
+ RD_IF_FREE(rko->rko_u.assign.partitions,
352
+ rd_kafka_topic_partition_list_destroy);
353
+ break;
354
+
355
+ case RD_KAFKA_OP_REBALANCE:
356
+ RD_IF_FREE(rko->rko_u.rebalance.partitions,
357
+ rd_kafka_topic_partition_list_destroy);
358
+ break;
359
+
360
+ case RD_KAFKA_OP_NAME:
361
+ RD_IF_FREE(rko->rko_u.name.str, rd_free);
362
+ break;
363
+
364
+ case RD_KAFKA_OP_CG_METADATA:
365
+ RD_IF_FREE(rko->rko_u.cg_metadata,
366
+ rd_kafka_consumer_group_metadata_destroy);
367
+ break;
368
+
369
+ case RD_KAFKA_OP_ERR:
370
+ case RD_KAFKA_OP_CONSUMER_ERR:
371
+ RD_IF_FREE(rko->rko_u.err.errstr, rd_free);
372
+ rd_kafka_msg_destroy(NULL, &rko->rko_u.err.rkm);
373
+ break;
374
+
375
+ break;
376
+
377
+ case RD_KAFKA_OP_THROTTLE:
378
+ RD_IF_FREE(rko->rko_u.throttle.nodename, rd_free);
379
+ break;
380
+
381
+ case RD_KAFKA_OP_STATS:
382
+ RD_IF_FREE(rko->rko_u.stats.json, rd_free);
383
+ break;
384
+
385
+ case RD_KAFKA_OP_XMIT_RETRY:
386
+ case RD_KAFKA_OP_XMIT_BUF:
387
+ case RD_KAFKA_OP_RECV_BUF:
388
+ if (rko->rko_u.xbuf.rkbuf)
389
+ rd_kafka_buf_handle_op(rko, RD_KAFKA_RESP_ERR__DESTROY);
390
+
391
+ RD_IF_FREE(rko->rko_u.xbuf.rkbuf, rd_kafka_buf_destroy);
392
+ break;
393
+
394
+ case RD_KAFKA_OP_DR:
395
+ rd_kafka_msgq_purge(rko->rko_rk, &rko->rko_u.dr.msgq);
396
+ if (rko->rko_u.dr.do_purge2)
397
+ rd_kafka_msgq_purge(rko->rko_rk, &rko->rko_u.dr.msgq2);
398
+
399
+ if (rko->rko_u.dr.rkt)
400
+ rd_kafka_topic_destroy0(rko->rko_u.dr.rkt);
401
+ if (rko->rko_u.dr.presult)
402
+ rd_kafka_Produce_result_destroy(rko->rko_u.dr.presult);
403
+ break;
404
+
405
+ case RD_KAFKA_OP_OFFSET_RESET:
406
+ RD_IF_FREE(rko->rko_u.offset_reset.reason, rd_free);
407
+ break;
408
+
409
+ case RD_KAFKA_OP_METADATA:
410
+ RD_IF_FREE(rko->rko_u.metadata.md, rd_kafka_metadata_destroy);
411
+ /* It's not needed to free metadata.mdi because they
412
+ are the in the same memory allocation. */
413
+ break;
414
+
415
+ case RD_KAFKA_OP_LOG:
416
+ rd_free(rko->rko_u.log.str);
417
+ break;
418
+
419
+ case RD_KAFKA_OP_ADMIN_FANOUT:
420
+ rd_assert(rko->rko_u.admin_request.fanout.outstanding == 0);
421
+ rd_list_destroy(&rko->rko_u.admin_request.fanout.results);
422
+ case RD_KAFKA_OP_CREATETOPICS:
423
+ case RD_KAFKA_OP_DELETETOPICS:
424
+ case RD_KAFKA_OP_CREATEPARTITIONS:
425
+ case RD_KAFKA_OP_ALTERCONFIGS:
426
+ case RD_KAFKA_OP_INCREMENTALALTERCONFIGS:
427
+ case RD_KAFKA_OP_DESCRIBECONFIGS:
428
+ case RD_KAFKA_OP_DELETERECORDS:
429
+ case RD_KAFKA_OP_LISTCONSUMERGROUPS:
430
+ case RD_KAFKA_OP_DESCRIBECONSUMERGROUPS:
431
+ case RD_KAFKA_OP_DELETEGROUPS:
432
+ case RD_KAFKA_OP_DELETECONSUMERGROUPOFFSETS:
433
+ case RD_KAFKA_OP_CREATEACLS:
434
+ case RD_KAFKA_OP_DESCRIBEACLS:
435
+ case RD_KAFKA_OP_DELETEACLS:
436
+ case RD_KAFKA_OP_ALTERCONSUMERGROUPOFFSETS:
437
+ case RD_KAFKA_OP_DESCRIBETOPICS:
438
+ case RD_KAFKA_OP_DESCRIBECLUSTER:
439
+ case RD_KAFKA_OP_LISTCONSUMERGROUPOFFSETS:
440
+ case RD_KAFKA_OP_ALTERUSERSCRAMCREDENTIALS:
441
+ case RD_KAFKA_OP_DESCRIBEUSERSCRAMCREDENTIALS:
442
+ case RD_KAFKA_OP_LISTOFFSETS:
443
+ case RD_KAFKA_OP_ELECTLEADERS:
444
+ rd_kafka_replyq_destroy(&rko->rko_u.admin_request.replyq);
445
+ rd_list_destroy(&rko->rko_u.admin_request.args);
446
+ if (rko->rko_u.admin_request.options.match_consumer_group_states
447
+ .u.PTR) {
448
+ rd_list_destroy(rko->rko_u.admin_request.options
449
+ .match_consumer_group_states.u.PTR);
450
+ }
451
+ if (rko->rko_u.admin_request.options.match_consumer_group_types
452
+ .u.PTR) {
453
+ rd_list_destroy(rko->rko_u.admin_request.options
454
+ .match_consumer_group_types.u.PTR);
455
+ }
456
+ rd_assert(!rko->rko_u.admin_request.fanout_parent);
457
+ RD_IF_FREE(rko->rko_u.admin_request.coordkey, rd_free);
458
+ break;
459
+
460
+ case RD_KAFKA_OP_ADMIN_RESULT:
461
+ rd_list_destroy(&rko->rko_u.admin_result.args);
462
+ rd_list_destroy(&rko->rko_u.admin_result.results);
463
+ RD_IF_FREE(rko->rko_u.admin_result.errstr, rd_free);
464
+ rd_assert(!rko->rko_u.admin_result.fanout_parent);
465
+ ;
466
+ break;
467
+
468
+ case RD_KAFKA_OP_MOCK:
469
+ RD_IF_FREE(rko->rko_u.mock.name, rd_free);
470
+ RD_IF_FREE(rko->rko_u.mock.str, rd_free);
471
+ if (rko->rko_u.mock.metrics) {
472
+ int64_t i;
473
+ for (i = 0; i < rko->rko_u.mock.hi; i++)
474
+ rd_free(rko->rko_u.mock.metrics[i]);
475
+ rd_free(rko->rko_u.mock.metrics);
476
+ }
477
+ break;
478
+
479
+ case RD_KAFKA_OP_BROKER_MONITOR:
480
+ rd_kafka_broker_destroy(rko->rko_u.broker_monitor.rkb);
481
+ break;
482
+
483
+ case RD_KAFKA_OP_TXN:
484
+ RD_IF_FREE(rko->rko_u.txn.group_id, rd_free);
485
+ RD_IF_FREE(rko->rko_u.txn.offsets,
486
+ rd_kafka_topic_partition_list_destroy);
487
+ RD_IF_FREE(rko->rko_u.txn.cgmetadata,
488
+ rd_kafka_consumer_group_metadata_destroy);
489
+ break;
490
+
491
+ case RD_KAFKA_OP_LEADERS:
492
+ rd_assert(!rko->rko_u.leaders.eonce);
493
+ rd_assert(!rko->rko_u.leaders.replyq.q);
494
+ RD_IF_FREE(rko->rko_u.leaders.leaders, rd_list_destroy);
495
+ RD_IF_FREE(rko->rko_u.leaders.partitions,
496
+ rd_kafka_topic_partition_list_destroy);
497
+ break;
498
+
499
+ case RD_KAFKA_OP_METADATA_UPDATE:
500
+ RD_IF_FREE(rko->rko_u.metadata.md, rd_kafka_metadata_destroy);
501
+ /* It's not needed to free metadata.mdi because they
502
+ are the in the same memory allocation. */
503
+ break;
504
+
505
+ case RD_KAFKA_OP_SET_TELEMETRY_BROKER:
506
+ RD_IF_FREE(rko->rko_u.telemetry_broker.rkb,
507
+ rd_kafka_broker_destroy);
508
+ break;
509
+
510
+ default:
511
+ break;
512
+ }
513
+
514
+ RD_IF_FREE(rko->rko_rktp, rd_kafka_toppar_destroy);
515
+
516
+ RD_IF_FREE(rko->rko_error, rd_kafka_error_destroy);
517
+
518
+ rd_kafka_replyq_destroy(&rko->rko_replyq);
519
+
520
+ #if ENABLE_DEVEL
521
+ if (rd_atomic32_sub(&rd_kafka_op_cnt, 1) < 0)
522
+ rd_kafka_assert(NULL, !*"rd_kafka_op_cnt < 0");
523
+ #endif
524
+
525
+ rd_free(rko);
526
+ }
527
+
528
+
529
+
530
+ /**
531
+ * Propagate an error event to the application on a specific queue.
532
+ */
533
+ void rd_kafka_q_op_err(rd_kafka_q_t *rkq,
534
+ rd_kafka_resp_err_t err,
535
+ const char *fmt,
536
+ ...) {
537
+ va_list ap;
538
+ char buf[2048];
539
+ rd_kafka_op_t *rko;
540
+
541
+ va_start(ap, fmt);
542
+ rd_vsnprintf(buf, sizeof(buf), fmt, ap);
543
+ va_end(ap);
544
+
545
+ rko = rd_kafka_op_new(RD_KAFKA_OP_ERR);
546
+ rko->rko_err = err;
547
+ rko->rko_u.err.errstr = rd_strdup(buf);
548
+
549
+ rd_kafka_q_enq(rkq, rko);
550
+ }
551
+
552
+
553
+
554
+ /**
555
+ * @brief Enqueue RD_KAFKA_OP_CONSUMER_ERR on \p rkq.
556
+ *
557
+ * @param broker_id Is the relevant broker id, or RD_KAFKA_NODEID_UA (-1)
558
+ * if not applicable.
559
+ * @param err Error code.
560
+ * @param version Queue version barrier, or 0 if not applicable.
561
+ * @param topic May be NULL.
562
+ * @param rktp May be NULL. Takes precedence over \p topic.
563
+ * @param offset RD_KAFKA_OFFSET_INVALID if not applicable.
564
+ *
565
+ * @sa rd_kafka_q_op_err()
566
+ */
567
+ void rd_kafka_consumer_err(rd_kafka_q_t *rkq,
568
+ int32_t broker_id,
569
+ rd_kafka_resp_err_t err,
570
+ int32_t version,
571
+ const char *topic,
572
+ rd_kafka_toppar_t *rktp,
573
+ int64_t offset,
574
+ const char *fmt,
575
+ ...) {
576
+ va_list ap;
577
+ char buf[2048];
578
+ rd_kafka_op_t *rko;
579
+
580
+ va_start(ap, fmt);
581
+ rd_vsnprintf(buf, sizeof(buf), fmt, ap);
582
+ va_end(ap);
583
+
584
+ rko = rd_kafka_op_new(RD_KAFKA_OP_CONSUMER_ERR);
585
+ rko->rko_version = version;
586
+ rko->rko_err = err;
587
+ rko->rko_u.err.offset = offset;
588
+ rko->rko_u.err.errstr = rd_strdup(buf);
589
+ rko->rko_u.err.rkm.rkm_broker_id = broker_id;
590
+
591
+ if (rktp)
592
+ rko->rko_rktp = rd_kafka_toppar_keep(rktp);
593
+ else if (topic)
594
+ rko->rko_u.err.rkm.rkm_rkmessage.rkt =
595
+ (rd_kafka_topic_t *)rd_kafka_lwtopic_new(rkq->rkq_rk,
596
+ topic);
597
+
598
+
599
+ rd_kafka_q_enq(rkq, rko);
600
+ }
601
+
602
+
603
+ /**
604
+ * Creates a reply op based on 'rko_orig'.
605
+ * If 'rko_orig' has rko_op_cb set the reply op will be OR:ed with
606
+ * RD_KAFKA_OP_CB, else the reply type will be the original rko_type OR:ed
607
+ * with RD_KAFKA_OP_REPLY.
608
+ */
609
+ rd_kafka_op_t *rd_kafka_op_new_reply(rd_kafka_op_t *rko_orig,
610
+ rd_kafka_resp_err_t err) {
611
+ rd_kafka_op_t *rko;
612
+
613
+ rko = rd_kafka_op_new(rko_orig->rko_type | RD_KAFKA_OP_REPLY);
614
+ rd_kafka_op_get_reply_version(rko, rko_orig);
615
+ rko->rko_err = err;
616
+ if (rko_orig->rko_rktp)
617
+ rko->rko_rktp = rd_kafka_toppar_keep(rko_orig->rko_rktp);
618
+
619
+ return rko;
620
+ }
621
+
622
+
623
+ /**
624
+ * @brief Create new callback op for type \p type
625
+ */
626
+ rd_kafka_op_t *rd_kafka_op_new_cb(rd_kafka_t *rk,
627
+ rd_kafka_op_type_t type,
628
+ rd_kafka_op_cb_t *cb) {
629
+ rd_kafka_op_t *rko;
630
+ rko = rd_kafka_op_new(type | RD_KAFKA_OP_CB);
631
+ rko->rko_op_cb = cb;
632
+ rko->rko_rk = rk;
633
+ return rko;
634
+ }
635
+
636
+
637
+ /**
638
+ * @brief Reply to 'rko' re-using the same rko with rko_err
639
+ * specified by \p err. rko_error is set to NULL.
640
+ *
641
+ * If there is no replyq the rko is destroyed.
642
+ *
643
+ * @returns 1 if op was enqueued, else 0 and rko is destroyed.
644
+ */
645
+ int rd_kafka_op_reply(rd_kafka_op_t *rko, rd_kafka_resp_err_t err) {
646
+
647
+ if (!rko->rko_replyq.q) {
648
+ rd_kafka_op_destroy(rko);
649
+ return 0;
650
+ }
651
+
652
+ rko->rko_type |= (rko->rko_op_cb ? RD_KAFKA_OP_CB : RD_KAFKA_OP_REPLY);
653
+ rko->rko_err = err;
654
+ rko->rko_error = NULL;
655
+
656
+ return rd_kafka_replyq_enq(&rko->rko_replyq, rko, 0);
657
+ }
658
+
659
+
660
+ /**
661
+ * @brief Reply to 'rko' re-using the same rko with rko_error specified
662
+ * by \p error (may be NULL) and rko_err set to the corresponding
663
+ * error code. Assumes ownership of \p error.
664
+ *
665
+ * If there is no replyq the rko is destroyed.
666
+ *
667
+ * @returns 1 if op was enqueued, else 0 and rko is destroyed.
668
+ */
669
+ int rd_kafka_op_error_reply(rd_kafka_op_t *rko, rd_kafka_error_t *error) {
670
+
671
+ if (!rko->rko_replyq.q) {
672
+ RD_IF_FREE(error, rd_kafka_error_destroy);
673
+ rd_kafka_op_destroy(rko);
674
+ return 0;
675
+ }
676
+
677
+ rko->rko_type |= (rko->rko_op_cb ? RD_KAFKA_OP_CB : RD_KAFKA_OP_REPLY);
678
+ rko->rko_err =
679
+ error ? rd_kafka_error_code(error) : RD_KAFKA_RESP_ERR_NO_ERROR;
680
+ rko->rko_error = error;
681
+
682
+ return rd_kafka_replyq_enq(&rko->rko_replyq, rko, 0);
683
+ }
684
+
685
+
686
+ /**
687
+ * @brief Send request to queue, wait for response.
688
+ *
689
+ * @returns response on success or NULL if destq is disabled.
690
+ */
691
+ rd_kafka_op_t *rd_kafka_op_req0(rd_kafka_q_t *destq,
692
+ rd_kafka_q_t *recvq,
693
+ rd_kafka_op_t *rko,
694
+ int timeout_ms) {
695
+ rd_kafka_op_t *reply;
696
+
697
+ /* Indicate to destination where to send reply. */
698
+ rd_kafka_op_set_replyq(rko, recvq, NULL);
699
+
700
+ /* Enqueue op */
701
+ if (!rd_kafka_q_enq(destq, rko))
702
+ return NULL;
703
+
704
+ /* Wait for reply */
705
+ reply = rd_kafka_q_pop(recvq, rd_timeout_us(timeout_ms), 0);
706
+
707
+ /* May be NULL for timeout */
708
+ return reply;
709
+ }
710
+
711
+ /**
712
+ * Send request to queue, wait for response.
713
+ * Creates a temporary reply queue.
714
+ */
715
+ rd_kafka_op_t *
716
+ rd_kafka_op_req(rd_kafka_q_t *destq, rd_kafka_op_t *rko, int timeout_ms) {
717
+ rd_kafka_q_t *recvq;
718
+ rd_kafka_op_t *reply;
719
+
720
+ recvq = rd_kafka_q_new(destq->rkq_rk);
721
+
722
+ reply = rd_kafka_op_req0(destq, recvq, rko, timeout_ms);
723
+
724
+ rd_kafka_q_destroy_owner(recvq);
725
+
726
+ return reply;
727
+ }
728
+
729
+
730
+ /**
731
+ * Send simple type-only request to queue, wait for response.
732
+ */
733
+ rd_kafka_op_t *rd_kafka_op_req2(rd_kafka_q_t *destq, rd_kafka_op_type_t type) {
734
+ rd_kafka_op_t *rko;
735
+
736
+ rko = rd_kafka_op_new(type);
737
+ return rd_kafka_op_req(destq, rko, RD_POLL_INFINITE);
738
+ }
739
+
740
+
741
+ /**
742
+ * Destroys the rko and returns its err.
743
+ */
744
+ rd_kafka_resp_err_t rd_kafka_op_err_destroy(rd_kafka_op_t *rko) {
745
+ rd_kafka_resp_err_t err = RD_KAFKA_RESP_ERR__TIMED_OUT;
746
+
747
+ if (rko) {
748
+ err = rko->rko_err;
749
+ rd_kafka_op_destroy(rko);
750
+ }
751
+ return err;
752
+ }
753
+
754
+
755
+ /**
756
+ * Destroys the rko and returns its error object or NULL if no error.
757
+ */
758
+ rd_kafka_error_t *rd_kafka_op_error_destroy(rd_kafka_op_t *rko) {
759
+ if (rko) {
760
+ rd_kafka_error_t *error = rko->rko_error;
761
+ rko->rko_error = NULL;
762
+ rd_kafka_op_destroy(rko);
763
+ return error;
764
+ }
765
+
766
+ return rd_kafka_error_new(RD_KAFKA_RESP_ERR__TIMED_OUT,
767
+ "Operation timed out");
768
+ }
769
+
770
+
771
+ /**
772
+ * Call op callback
773
+ */
774
+ rd_kafka_op_res_t
775
+ rd_kafka_op_call(rd_kafka_t *rk, rd_kafka_q_t *rkq, rd_kafka_op_t *rko) {
776
+ rd_kafka_op_res_t res;
777
+ rd_assert(rko->rko_op_cb);
778
+ res = rko->rko_op_cb(rk, rkq, rko);
779
+ if (unlikely(res == RD_KAFKA_OP_RES_YIELD || rd_kafka_yield_thread))
780
+ return RD_KAFKA_OP_RES_YIELD;
781
+ if (res != RD_KAFKA_OP_RES_KEEP)
782
+ rko->rko_op_cb = NULL;
783
+ return res;
784
+ }
785
+
786
+
787
+ /**
788
+ * @brief Creates a new RD_KAFKA_OP_FETCH op representing a
789
+ * control message. The rkm_flags property is set to
790
+ * RD_KAFKA_MSG_F_CONTROL.
791
+ */
792
+ rd_kafka_op_t *rd_kafka_op_new_ctrl_msg(rd_kafka_toppar_t *rktp,
793
+ int32_t version,
794
+ rd_kafka_buf_t *rkbuf,
795
+ rd_kafka_fetch_pos_t pos) {
796
+ rd_kafka_msg_t *rkm;
797
+ rd_kafka_op_t *rko;
798
+
799
+ rko = rd_kafka_op_new_fetch_msg(&rkm, rktp, version, rkbuf, pos, 0,
800
+ NULL, 0, NULL);
801
+
802
+ rkm->rkm_flags |= RD_KAFKA_MSG_F_CONTROL;
803
+
804
+ return rko;
805
+ }
806
+
807
+ /**
808
+ * @brief Creates a new RD_KAFKA_OP_FETCH op and sets up the
809
+ * embedded message according to the parameters.
810
+ *
811
+ * @param rkmp will be set to the embedded rkm in the rko (for convenience)
812
+ * @param offset may be updated later if relative offset.
813
+ */
814
+ rd_kafka_op_t *rd_kafka_op_new_fetch_msg(rd_kafka_msg_t **rkmp,
815
+ rd_kafka_toppar_t *rktp,
816
+ int32_t version,
817
+ rd_kafka_buf_t *rkbuf,
818
+ rd_kafka_fetch_pos_t pos,
819
+ size_t key_len,
820
+ const void *key,
821
+ size_t val_len,
822
+ const void *val) {
823
+ rd_kafka_msg_t *rkm;
824
+ rd_kafka_op_t *rko;
825
+
826
+ rko = rd_kafka_op_new(RD_KAFKA_OP_FETCH);
827
+ rko->rko_rktp = rd_kafka_toppar_keep(rktp);
828
+ rko->rko_version = version;
829
+ rkm = &rko->rko_u.fetch.rkm;
830
+ *rkmp = rkm;
831
+
832
+ /* Since all the ops share the same payload buffer
833
+ * a refcnt is used on the rkbuf that makes sure all
834
+ * consume_cb() will have been
835
+ * called for each of these ops before the rkbuf
836
+ * and its memory backing buffers are freed. */
837
+ rko->rko_u.fetch.rkbuf = rkbuf;
838
+ rd_kafka_buf_keep(rkbuf);
839
+
840
+ rkm->rkm_offset = pos.offset;
841
+ rkm->rkm_u.consumer.leader_epoch = pos.leader_epoch;
842
+
843
+ rkm->rkm_key = (void *)key;
844
+ rkm->rkm_key_len = key_len;
845
+
846
+ rkm->rkm_payload = (void *)val;
847
+ rkm->rkm_len = val_len;
848
+ rko->rko_len = (int32_t)rkm->rkm_len;
849
+
850
+ rkm->rkm_partition = rktp->rktp_partition;
851
+
852
+ /* Persistence status is always PERSISTED for consumed messages
853
+ * since we managed to read the message. */
854
+ rkm->rkm_status = RD_KAFKA_MSG_STATUS_PERSISTED;
855
+
856
+ return rko;
857
+ }
858
+
859
+
860
+ /**
861
+ * Enqueue ERR__THROTTLE op, if desired.
862
+ */
863
+ void rd_kafka_op_throttle_time(rd_kafka_broker_t *rkb,
864
+ rd_kafka_q_t *rkq,
865
+ int throttle_time) {
866
+ rd_kafka_op_t *rko;
867
+
868
+ if (unlikely(throttle_time > 0)) {
869
+ rd_avg_add(&rkb->rkb_avg_throttle, throttle_time);
870
+ rd_avg_add(&rkb->rkb_telemetry.rd_avg_current.rkb_avg_throttle,
871
+ throttle_time);
872
+ }
873
+
874
+ /* We send throttle events when:
875
+ * - throttle_time > 0
876
+ * - throttle_time == 0 and last throttle_time > 0
877
+ */
878
+ if (!rkb->rkb_rk->rk_conf.throttle_cb ||
879
+ (!throttle_time &&
880
+ !rd_atomic32_get(&rkb->rkb_rk->rk_last_throttle)))
881
+ return;
882
+
883
+ rd_atomic32_set(&rkb->rkb_rk->rk_last_throttle, throttle_time);
884
+
885
+ rko = rd_kafka_op_new(RD_KAFKA_OP_THROTTLE);
886
+ rd_kafka_op_set_prio(rko, RD_KAFKA_PRIO_HIGH);
887
+ rko->rko_u.throttle.nodename = rd_strdup(rkb->rkb_nodename);
888
+ rko->rko_u.throttle.nodeid = rkb->rkb_nodeid;
889
+ rko->rko_u.throttle.throttle_time = throttle_time;
890
+ rd_kafka_q_enq(rkq, rko);
891
+ }
892
+
893
+
894
+ /**
895
+ * @brief Handle standard op types.
896
+ */
897
+ rd_kafka_op_res_t rd_kafka_op_handle_std(rd_kafka_t *rk,
898
+ rd_kafka_q_t *rkq,
899
+ rd_kafka_op_t *rko,
900
+ int cb_type) {
901
+ if (cb_type == RD_KAFKA_Q_CB_FORCE_RETURN)
902
+ return RD_KAFKA_OP_RES_PASS;
903
+ else if (unlikely(rd_kafka_op_is_ctrl_msg(rko))) {
904
+ /* Control messages must not be exposed to the application
905
+ * but we need to store their offsets. */
906
+ rd_kafka_fetch_op_app_prepare(rk, rko);
907
+ return RD_KAFKA_OP_RES_HANDLED;
908
+ } else if (cb_type != RD_KAFKA_Q_CB_EVENT &&
909
+ rko->rko_type & RD_KAFKA_OP_CB)
910
+ return rd_kafka_op_call(rk, rkq, rko);
911
+ else if (rko->rko_type == RD_KAFKA_OP_RECV_BUF) /* Handle Response */
912
+ rd_kafka_buf_handle_op(rko, rko->rko_err);
913
+ else if (cb_type != RD_KAFKA_Q_CB_RETURN &&
914
+ rko->rko_type & RD_KAFKA_OP_REPLY &&
915
+ rko->rko_err == RD_KAFKA_RESP_ERR__DESTROY)
916
+ return RD_KAFKA_OP_RES_HANDLED; /* dest queue was
917
+ * probably disabled. */
918
+ else
919
+ return RD_KAFKA_OP_RES_PASS;
920
+
921
+ return RD_KAFKA_OP_RES_HANDLED;
922
+ }
923
+
924
+
925
+ /**
926
+ * @brief Attempt to handle op using its queue's serve callback,
927
+ * or the passed callback, or op_handle_std(), else do nothing.
928
+ *
929
+ * @param rkq is \p rko's queue (which it was unlinked from) with rkq_lock
930
+ * being held. Callback may re-enqueue the op on this queue
931
+ * and return YIELD.
932
+ *
933
+ * @returns HANDLED if op was handled (and destroyed), PASS if not,
934
+ * or YIELD if op was handled (maybe destroyed or re-enqueued)
935
+ * and caller must propagate yield upwards (cancel and return).
936
+ */
937
+ rd_kafka_op_res_t rd_kafka_op_handle(rd_kafka_t *rk,
938
+ rd_kafka_q_t *rkq,
939
+ rd_kafka_op_t *rko,
940
+ rd_kafka_q_cb_type_t cb_type,
941
+ void *opaque,
942
+ rd_kafka_q_serve_cb_t *callback) {
943
+ rd_kafka_op_res_t res;
944
+
945
+ if (rko->rko_serve) {
946
+ callback = rko->rko_serve;
947
+ opaque = rko->rko_serve_opaque;
948
+ rko->rko_serve = NULL;
949
+ rko->rko_serve_opaque = NULL;
950
+ }
951
+
952
+ res = rd_kafka_op_handle_std(rk, rkq, rko, cb_type);
953
+ if (res == RD_KAFKA_OP_RES_KEEP) {
954
+ /* Op was handled but must not be destroyed. */
955
+ return res;
956
+ }
957
+ if (res == RD_KAFKA_OP_RES_HANDLED) {
958
+ rd_kafka_op_destroy(rko);
959
+ return res;
960
+ } else if (unlikely(res == RD_KAFKA_OP_RES_YIELD))
961
+ return res;
962
+
963
+ if (callback)
964
+ res = callback(rk, rkq, rko, cb_type, opaque);
965
+
966
+ return res;
967
+ }
968
+
969
+
970
+ /**
971
+ * @brief Prepare passing message to application.
972
+ * This must be called just prior to passing/returning a consumed
973
+ * message to the application.
974
+ *
975
+ * Performs:
976
+ * - Store offset for fetched message + 1.
977
+ * - Updates the application offset (rktp_app_offset).
978
+ *
979
+ * @locks rktp_lock and rk_lock MUST NOT be held
980
+ */
981
+ void rd_kafka_fetch_op_app_prepare(rd_kafka_t *rk, rd_kafka_op_t *rko) {
982
+ rd_kafka_toppar_t *rktp;
983
+ rd_kafka_fetch_pos_t pos;
984
+
985
+ if (unlikely(rko->rko_type != RD_KAFKA_OP_FETCH || rko->rko_err))
986
+ return;
987
+
988
+ rktp = rko->rko_rktp;
989
+
990
+ if (unlikely(!rk))
991
+ rk = rktp->rktp_rkt->rkt_rk;
992
+
993
+ pos.offset = rko->rko_u.fetch.rkm.rkm_rkmessage.offset + 1;
994
+ pos.leader_epoch = rko->rko_u.fetch.rkm.rkm_u.consumer.leader_epoch;
995
+
996
+ rd_kafka_update_app_pos(rk, rktp, pos, RD_DO_LOCK);
997
+ }