@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,807 @@
1
+ /*
2
+ * librdkafka - Apache Kafka C library
3
+ *
4
+ * Copyright (c) 2018-2022, Magnus Edenhill
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 "rd.h"
30
+ #include "rdkafka_int.h"
31
+ #include "rdkafka_idempotence.h"
32
+ #include "rdkafka_txnmgr.h"
33
+ #include "rdkafka_request.h"
34
+ #include "rdunittest.h"
35
+
36
+ #include <stdarg.h>
37
+
38
+ /**
39
+ * @name Idempotent Producer logic
40
+ *
41
+ *
42
+ * Unrecoverable idempotent producer errors that could jeopardize the
43
+ * idempotency guarantees if the producer was to continue operating
44
+ * are treated as fatal errors, unless the producer is transactional in which
45
+ * case the current transaction will fail (also known as an abortable error)
46
+ * but the producer will not raise a fatal error.
47
+ *
48
+ */
49
+
50
+ static void rd_kafka_idemp_pid_timer_restart(rd_kafka_t *rk,
51
+ rd_bool_t immediate,
52
+ const char *reason);
53
+
54
+
55
+ /**
56
+ * @brief Set the producer's idempotence state.
57
+ * @locks rd_kafka_wrlock() MUST be held
58
+ */
59
+ void rd_kafka_idemp_set_state(rd_kafka_t *rk,
60
+ rd_kafka_idemp_state_t new_state) {
61
+
62
+ if (rk->rk_eos.idemp_state == new_state)
63
+ return;
64
+
65
+ if (rd_kafka_fatal_error_code(rk) &&
66
+ new_state != RD_KAFKA_IDEMP_STATE_FATAL_ERROR &&
67
+ new_state != RD_KAFKA_IDEMP_STATE_TERM &&
68
+ new_state != RD_KAFKA_IDEMP_STATE_DRAIN_RESET &&
69
+ new_state != RD_KAFKA_IDEMP_STATE_DRAIN_BUMP) {
70
+ rd_kafka_dbg(rk, EOS, "IDEMPSTATE",
71
+ "Denying state change %s -> %s since a "
72
+ "fatal error has been raised",
73
+ rd_kafka_idemp_state2str(rk->rk_eos.idemp_state),
74
+ rd_kafka_idemp_state2str(new_state));
75
+ rd_kafka_idemp_set_state(rk, RD_KAFKA_IDEMP_STATE_FATAL_ERROR);
76
+ return;
77
+ }
78
+
79
+ rd_kafka_dbg(rk, EOS, "IDEMPSTATE",
80
+ "Idempotent producer state change %s -> %s",
81
+ rd_kafka_idemp_state2str(rk->rk_eos.idemp_state),
82
+ rd_kafka_idemp_state2str(new_state));
83
+
84
+ rk->rk_eos.idemp_state = new_state;
85
+ rk->rk_eos.ts_idemp_state = rd_clock();
86
+
87
+ /* Inform transaction manager of state change */
88
+ if (rd_kafka_is_transactional(rk))
89
+ rd_kafka_txn_idemp_state_change(rk, new_state);
90
+ }
91
+
92
+
93
+
94
+ /**
95
+ * @brief Find a usable broker suitable for acquiring Pid
96
+ * or Coordinator query.
97
+ *
98
+ * @locks rd_kafka_wrlock() MUST be held
99
+ *
100
+ * @returns a broker with increased refcount, or NULL on error.
101
+ */
102
+ rd_kafka_broker_t *rd_kafka_idemp_broker_any(rd_kafka_t *rk,
103
+ rd_kafka_resp_err_t *errp,
104
+ char *errstr,
105
+ size_t errstr_size) {
106
+ rd_kafka_broker_t *rkb;
107
+ int up_cnt;
108
+
109
+ rkb = rd_kafka_broker_any_up(rk, &up_cnt,
110
+ rd_kafka_broker_filter_non_idempotent,
111
+ NULL, "acquire ProducerID");
112
+ if (rkb)
113
+ return rkb;
114
+
115
+ if (up_cnt > 0) {
116
+ *errp = RD_KAFKA_RESP_ERR__UNSUPPORTED_FEATURE;
117
+ rd_snprintf(errstr, errstr_size,
118
+ "%s not supported by "
119
+ "any of the %d connected broker(s): requires "
120
+ "Apache Kafka broker version >= 0.11.0",
121
+ rd_kafka_is_transactional(rk)
122
+ ? "Transactions"
123
+ : "Idempotent producer",
124
+ up_cnt);
125
+ } else {
126
+ *errp = RD_KAFKA_RESP_ERR__TRANSPORT;
127
+ rd_snprintf(errstr, errstr_size,
128
+ "No brokers available for %s (%d broker(s) known)",
129
+ rd_kafka_is_transactional(rk)
130
+ ? "Transactions"
131
+ : "Idempotent producer",
132
+ rd_atomic32_get(&rk->rk_broker_cnt));
133
+ }
134
+
135
+ rd_kafka_dbg(rk, EOS, "PIDBROKER", "%s", errstr);
136
+
137
+ return NULL;
138
+ }
139
+
140
+
141
+
142
+ /**
143
+ * @brief Check if an error needs special attention, possibly
144
+ * raising a fatal error.
145
+ *
146
+ * @param is_fatal if true, force fatal error regardless of error code.
147
+ *
148
+ * @returns rd_true if a fatal error was triggered, else rd_false.
149
+ *
150
+ * @locks rd_kafka_wrlock() MUST be held
151
+ * @locality rdkafka main thread
152
+ */
153
+ rd_bool_t rd_kafka_idemp_check_error(rd_kafka_t *rk,
154
+ rd_kafka_resp_err_t err,
155
+ const char *errstr,
156
+ rd_bool_t is_fatal) {
157
+ const char *preface = "";
158
+
159
+ switch (err) {
160
+ case RD_KAFKA_RESP_ERR__UNSUPPORTED_FEATURE:
161
+ case RD_KAFKA_RESP_ERR_INVALID_TRANSACTION_TIMEOUT:
162
+ case RD_KAFKA_RESP_ERR_TRANSACTIONAL_ID_AUTHORIZATION_FAILED:
163
+ case RD_KAFKA_RESP_ERR_CLUSTER_AUTHORIZATION_FAILED:
164
+ is_fatal = rd_true;
165
+ break;
166
+
167
+ case RD_KAFKA_RESP_ERR_INVALID_PRODUCER_EPOCH:
168
+ case RD_KAFKA_RESP_ERR_PRODUCER_FENCED:
169
+ is_fatal = rd_true;
170
+ /* Normalize error */
171
+ err = RD_KAFKA_RESP_ERR__FENCED;
172
+ preface = "Producer fenced by newer instance: ";
173
+ break;
174
+
175
+ default:
176
+ break;
177
+ }
178
+
179
+ if (!is_fatal)
180
+ return rd_false;
181
+
182
+ if (rd_kafka_is_transactional(rk))
183
+ rd_kafka_txn_set_fatal_error(rk, RD_DONT_LOCK, err, "%s%s",
184
+ preface, errstr);
185
+ else
186
+ rd_kafka_set_fatal_error0(rk, RD_DONT_LOCK, err, "%s%s",
187
+ preface, errstr);
188
+
189
+ rd_kafka_idemp_set_state(rk, RD_KAFKA_IDEMP_STATE_FATAL_ERROR);
190
+
191
+ return rd_true;
192
+ }
193
+
194
+
195
+
196
+ /**
197
+ * @brief State machine for PID acquisition for the idempotent
198
+ * and transactional producers.
199
+ *
200
+ * @locality rdkafka main thread
201
+ * @locks rd_kafka_wrlock() MUST be held.
202
+ */
203
+ void rd_kafka_idemp_pid_fsm(rd_kafka_t *rk) {
204
+ rd_kafka_resp_err_t err;
205
+ char errstr[512];
206
+ rd_kafka_broker_t *rkb;
207
+ rd_bool_t is_fatal = rd_false;
208
+
209
+ /* If a fatal error has been raised we do not
210
+ * attempt to acquire a PID. */
211
+ if (unlikely(rd_kafka_fatal_error_code(rk)))
212
+ return;
213
+
214
+ redo:
215
+ switch (rk->rk_eos.idemp_state) {
216
+ case RD_KAFKA_IDEMP_STATE_INIT:
217
+ case RD_KAFKA_IDEMP_STATE_TERM:
218
+ case RD_KAFKA_IDEMP_STATE_FATAL_ERROR:
219
+ break;
220
+
221
+ case RD_KAFKA_IDEMP_STATE_REQ_PID:
222
+ /* Request (new) PID */
223
+
224
+ /* The idempotent producer may ask any broker for a PID,
225
+ * while the transactional producer needs to ask its
226
+ * transaction coordinator for a PID. */
227
+ if (!rd_kafka_is_transactional(rk) ||
228
+ rk->rk_eos.txn_curr_coord) {
229
+ rd_kafka_idemp_set_state(
230
+ rk, RD_KAFKA_IDEMP_STATE_WAIT_TRANSPORT);
231
+ goto redo;
232
+ }
233
+
234
+
235
+ /*
236
+ * Look up transaction coordinator.
237
+ * When the coordinator is known this FSM will be called again.
238
+ */
239
+ if (rd_kafka_txn_coord_query(rk, "Acquire PID"))
240
+ return; /* Fatal error */
241
+ break;
242
+
243
+ case RD_KAFKA_IDEMP_STATE_WAIT_TRANSPORT:
244
+ /* Waiting for broker/coordinator to become available */
245
+ if (rd_kafka_is_transactional(rk)) {
246
+ /* Check that a proper coordinator broker has
247
+ * been assigned by inspecting txn_curr_coord
248
+ * (the real broker) rather than txn_coord
249
+ * (the logical broker). */
250
+ if (!rk->rk_eos.txn_curr_coord) {
251
+ /*
252
+ * Can happen if the coordinator wasn't set or
253
+ * wasn't up initially and has been set to NULL
254
+ * after a COORDINATOR_NOT_AVAILABLE error in
255
+ * FindCoordinatorResponse. When the coordinator
256
+ * is known this FSM will be called again.
257
+ */
258
+ rd_kafka_txn_coord_query(
259
+ rk, "Awaiting coordinator");
260
+ return;
261
+ }
262
+ rkb = rk->rk_eos.txn_coord;
263
+ rd_kafka_broker_keep(rkb);
264
+
265
+ } else {
266
+ rkb = rd_kafka_idemp_broker_any(rk, &err, errstr,
267
+ sizeof(errstr));
268
+
269
+ if (!rkb && rd_kafka_idemp_check_error(rk, err, errstr,
270
+ rd_false))
271
+ return; /* Fatal error */
272
+ }
273
+
274
+ if (!rkb || !rd_kafka_broker_is_up(rkb)) {
275
+ /* The coordinator broker monitor will re-trigger
276
+ * the fsm sooner if txn_coord has a state change,
277
+ * else rely on the timer to retry. */
278
+ rd_kafka_idemp_pid_timer_restart(
279
+ rk, rd_false,
280
+ rkb ? "No broker available" : "Coordinator not up");
281
+
282
+ if (rkb)
283
+ rd_kafka_broker_destroy(rkb);
284
+ return;
285
+ }
286
+
287
+ if (rd_kafka_is_transactional(rk)) {
288
+ int err_of = 0;
289
+
290
+ /* If this is a transactional producer and the
291
+ * PID-epoch needs to be bumped we'll require KIP-360
292
+ * support on the broker, else raise a fatal error. */
293
+
294
+ if (rd_kafka_pid_valid(rk->rk_eos.pid)) {
295
+ rd_rkb_dbg(rkb, EOS, "GETPID",
296
+ "Requesting ProducerId bump for %s",
297
+ rd_kafka_pid2str(rk->rk_eos.pid));
298
+ err_of = rd_snprintf(errstr, sizeof(errstr),
299
+ "Failed to request "
300
+ "ProducerId bump: ");
301
+ rd_assert(err_of < 0 ||
302
+ err_of < (int)sizeof(errstr));
303
+ } else {
304
+ rd_rkb_dbg(rkb, EOS, "GETPID",
305
+ "Acquiring ProducerId");
306
+ }
307
+
308
+ err = rd_kafka_InitProducerIdRequest(
309
+ rkb, rk->rk_conf.eos.transactional_id,
310
+ rk->rk_conf.eos.transaction_timeout_ms,
311
+ rd_kafka_pid_valid(rk->rk_eos.pid) ? &rk->rk_eos.pid
312
+ : NULL,
313
+ errstr + err_of, sizeof(errstr) - err_of,
314
+ RD_KAFKA_REPLYQ(rk->rk_ops, 0),
315
+ rd_kafka_handle_InitProducerId, NULL);
316
+
317
+ if (err == RD_KAFKA_RESP_ERR__UNSUPPORTED_FEATURE &&
318
+ rd_kafka_pid_valid(rk->rk_eos.pid))
319
+ is_fatal = rd_true;
320
+ } else {
321
+ rd_rkb_dbg(rkb, EOS, "GETPID", "Acquiring ProducerId");
322
+
323
+ err = rd_kafka_InitProducerIdRequest(
324
+ rkb, NULL, -1, NULL, errstr, sizeof(errstr),
325
+ RD_KAFKA_REPLYQ(rk->rk_ops, 0),
326
+ rd_kafka_handle_InitProducerId, NULL);
327
+ }
328
+
329
+ if (err) {
330
+ rd_rkb_dbg(rkb, EOS, "GETPID",
331
+ "Can't acquire ProducerId from "
332
+ "this broker: %s",
333
+ errstr);
334
+ }
335
+
336
+ rd_kafka_broker_destroy(rkb);
337
+
338
+ if (err) {
339
+ if (rd_kafka_idemp_check_error(rk, err, errstr,
340
+ is_fatal))
341
+ return; /* Fatal error */
342
+
343
+ /* The coordinator broker monitor will re-trigger
344
+ * the fsm sooner if txn_coord has a state change,
345
+ * else rely on the timer to retry. */
346
+ rd_kafka_idemp_pid_timer_restart(rk, rd_false, errstr);
347
+ return;
348
+ }
349
+
350
+ rd_kafka_idemp_set_state(rk, RD_KAFKA_IDEMP_STATE_WAIT_PID);
351
+ break;
352
+
353
+ case RD_KAFKA_IDEMP_STATE_WAIT_PID:
354
+ /* PID requested, waiting for reply */
355
+ break;
356
+
357
+ case RD_KAFKA_IDEMP_STATE_ASSIGNED:
358
+ /* New PID assigned */
359
+ break;
360
+
361
+ case RD_KAFKA_IDEMP_STATE_DRAIN_RESET:
362
+ /* Wait for outstanding ProduceRequests to finish
363
+ * before resetting and re-requesting a new PID. */
364
+ break;
365
+
366
+ case RD_KAFKA_IDEMP_STATE_DRAIN_BUMP:
367
+ /* Wait for outstanding ProduceRequests to finish
368
+ * before bumping the current epoch. */
369
+ break;
370
+
371
+ case RD_KAFKA_IDEMP_STATE_WAIT_TXN_ABORT:
372
+ /* Wait for txnmgr to abort its current transaction
373
+ * and then trigger a drain & reset or bump. */
374
+ break;
375
+ }
376
+ }
377
+
378
+
379
+ /**
380
+ * @brief Timed PID retrieval timer callback.
381
+ *
382
+ * @locality rdkafka main thread
383
+ * @locks none
384
+ */
385
+ static void rd_kafka_idemp_pid_timer_cb(rd_kafka_timers_t *rkts, void *arg) {
386
+ rd_kafka_t *rk = arg;
387
+
388
+ rd_kafka_wrlock(rk);
389
+ rd_kafka_idemp_pid_fsm(rk);
390
+ rd_kafka_wrunlock(rk);
391
+ }
392
+
393
+
394
+ /**
395
+ * @brief Restart the pid retrieval timer.
396
+ *
397
+ * @param immediate If true, request a pid as soon as possible,
398
+ * else use the default interval (500ms).
399
+ * @locality any
400
+ * @locks none
401
+ */
402
+ static void rd_kafka_idemp_pid_timer_restart(rd_kafka_t *rk,
403
+ rd_bool_t immediate,
404
+ const char *reason) {
405
+ rd_kafka_dbg(rk, EOS, "TXN", "Starting PID FSM timer%s: %s",
406
+ immediate ? " (fire immediately)" : "", reason);
407
+ rd_kafka_timer_start_oneshot(&rk->rk_timers, &rk->rk_eos.pid_tmr,
408
+ rd_true,
409
+ 1000 * (immediate ? 1 : 500 /*500ms*/),
410
+ rd_kafka_idemp_pid_timer_cb, rk);
411
+ }
412
+
413
+
414
+ /**
415
+ * @brief Handle failure to acquire a PID from broker.
416
+ *
417
+ * @locality rdkafka main thread
418
+ * @locks none
419
+ */
420
+ void rd_kafka_idemp_request_pid_failed(rd_kafka_broker_t *rkb,
421
+ rd_kafka_resp_err_t err) {
422
+ rd_kafka_t *rk = rkb->rkb_rk;
423
+ char errstr[512];
424
+
425
+ rd_rkb_dbg(rkb, EOS, "GETPID", "Failed to acquire PID: %s",
426
+ rd_kafka_err2str(err));
427
+
428
+ if (err == RD_KAFKA_RESP_ERR__DESTROY)
429
+ return; /* Ignore */
430
+
431
+ rd_assert(thrd_is_current(rk->rk_thread));
432
+
433
+ rd_snprintf(errstr, sizeof(errstr),
434
+ "Failed to acquire %s PID from broker %s: %s",
435
+ rd_kafka_is_transactional(rk) ? "transactional"
436
+ : "idempotence",
437
+ rd_kafka_broker_name(rkb), rd_kafka_err2str(err));
438
+
439
+ rd_kafka_wrlock(rk);
440
+
441
+ if (rd_kafka_idemp_check_error(rk, err, errstr, rd_false)) {
442
+ rd_kafka_wrunlock(rk);
443
+ return; /* Fatal error */
444
+ }
445
+
446
+ RD_UT_COVERAGE(0);
447
+
448
+ if (rd_kafka_is_transactional(rk) &&
449
+ (err == RD_KAFKA_RESP_ERR_NOT_COORDINATOR ||
450
+ err == RD_KAFKA_RESP_ERR_COORDINATOR_NOT_AVAILABLE))
451
+ rd_kafka_txn_coord_set(rk, NULL, "%s", errstr);
452
+
453
+ /* This error code is read by init_transactions() for propagation
454
+ * to the application. */
455
+ rk->rk_eos.txn_init_err = err;
456
+
457
+ rd_kafka_idemp_set_state(rk, RD_KAFKA_IDEMP_STATE_REQ_PID);
458
+
459
+ rd_kafka_wrunlock(rk);
460
+
461
+ rd_kafka_log(rk, LOG_WARNING, "GETPID", "%s: retrying", errstr);
462
+
463
+ /* Restart acquisition after a short wait */
464
+ rd_kafka_idemp_pid_timer_restart(rk, rd_false, errstr);
465
+ }
466
+
467
+
468
+ /**
469
+ * @brief Update Producer ID from InitProducerId response.
470
+ *
471
+ * @locality rdkafka main thread
472
+ * @locks none
473
+ */
474
+ void rd_kafka_idemp_pid_update(rd_kafka_broker_t *rkb,
475
+ const rd_kafka_pid_t pid) {
476
+ rd_kafka_t *rk = rkb->rkb_rk;
477
+
478
+ rd_kafka_wrlock(rk);
479
+ if (rk->rk_eos.idemp_state != RD_KAFKA_IDEMP_STATE_WAIT_PID) {
480
+ rd_rkb_dbg(rkb, EOS, "GETPID",
481
+ "Ignoring InitProduceId response (%s) "
482
+ "in state %s",
483
+ rd_kafka_pid2str(pid),
484
+ rd_kafka_idemp_state2str(rk->rk_eos.idemp_state));
485
+ rd_kafka_wrunlock(rk);
486
+ return;
487
+ }
488
+
489
+ if (!rd_kafka_pid_valid(pid)) {
490
+ rd_kafka_wrunlock(rk);
491
+ rd_rkb_log(rkb, LOG_WARNING, "GETPID",
492
+ "Acquired invalid PID{%" PRId64 ",%hd}: ignoring",
493
+ pid.id, pid.epoch);
494
+ rd_kafka_idemp_request_pid_failed(rkb,
495
+ RD_KAFKA_RESP_ERR__BAD_MSG);
496
+ return;
497
+ }
498
+
499
+ if (rd_kafka_pid_valid(rk->rk_eos.pid))
500
+ rd_kafka_dbg(rk, EOS, "GETPID", "Acquired %s (previous %s)",
501
+ rd_kafka_pid2str(pid),
502
+ rd_kafka_pid2str(rk->rk_eos.pid));
503
+ else
504
+ rd_kafka_dbg(rk, EOS, "GETPID", "Acquired %s",
505
+ rd_kafka_pid2str(pid));
506
+ rk->rk_eos.pid = pid;
507
+ rk->rk_eos.epoch_cnt++;
508
+
509
+ /* The idempotence state change will trigger the transaction manager,
510
+ * see rd_kafka_txn_idemp_state_change(). */
511
+ rd_kafka_idemp_set_state(rk, RD_KAFKA_IDEMP_STATE_ASSIGNED);
512
+
513
+ rd_kafka_wrunlock(rk);
514
+
515
+ /* Wake up all broker threads (that may have messages to send
516
+ * that were waiting for a Producer ID). */
517
+ rd_kafka_all_brokers_wakeup(rk, RD_KAFKA_BROKER_STATE_INIT,
518
+ "PID updated");
519
+ }
520
+
521
+
522
+ /**
523
+ * @brief Call when all partition request queues
524
+ * are drained to reset and re-request a new PID.
525
+ *
526
+ * @locality any
527
+ * @locks none
528
+ */
529
+ static void rd_kafka_idemp_drain_done(rd_kafka_t *rk) {
530
+ rd_bool_t restart_tmr = rd_false;
531
+ rd_bool_t wakeup_brokers = rd_false;
532
+
533
+ rd_kafka_wrlock(rk);
534
+ if (rk->rk_eos.idemp_state == RD_KAFKA_IDEMP_STATE_DRAIN_RESET) {
535
+ rd_kafka_dbg(rk, EOS, "DRAIN", "All partitions drained");
536
+ rd_kafka_idemp_set_state(rk, RD_KAFKA_IDEMP_STATE_REQ_PID);
537
+ restart_tmr = rd_true;
538
+
539
+ } else if (rk->rk_eos.idemp_state == RD_KAFKA_IDEMP_STATE_DRAIN_BUMP &&
540
+ rd_kafka_pid_valid(rk->rk_eos.pid)) {
541
+
542
+ if (rd_kafka_is_transactional(rk)) {
543
+ /* The epoch bump needs to be performed by the
544
+ * coordinator by sending it an InitPid request. */
545
+ rd_kafka_dbg(rk, EOS, "DRAIN",
546
+ "All partitions drained, asking "
547
+ "coordinator to bump epoch (currently %s)",
548
+ rd_kafka_pid2str(rk->rk_eos.pid));
549
+ rd_kafka_idemp_set_state(rk,
550
+ RD_KAFKA_IDEMP_STATE_REQ_PID);
551
+ restart_tmr = rd_true;
552
+
553
+ } else {
554
+ /* The idempotent producer can bump its own epoch */
555
+ rk->rk_eos.pid = rd_kafka_pid_bump(rk->rk_eos.pid);
556
+ rd_kafka_dbg(rk, EOS, "DRAIN",
557
+ "All partitions drained, bumped "
558
+ "epoch to %s",
559
+ rd_kafka_pid2str(rk->rk_eos.pid));
560
+ rd_kafka_idemp_set_state(rk,
561
+ RD_KAFKA_IDEMP_STATE_ASSIGNED);
562
+ wakeup_brokers = rd_true;
563
+ }
564
+ }
565
+ rd_kafka_wrunlock(rk);
566
+
567
+ /* Restart timer to eventually trigger a re-request */
568
+ if (restart_tmr)
569
+ rd_kafka_idemp_pid_timer_restart(rk, rd_true, "Drain done");
570
+
571
+ /* Wake up all broker threads (that may have messages to send
572
+ * that were waiting for a Producer ID). */
573
+ if (wakeup_brokers)
574
+ rd_kafka_all_brokers_wakeup(rk, RD_KAFKA_BROKER_STATE_INIT,
575
+ "message drain done");
576
+ }
577
+
578
+ /**
579
+ * @brief Check if in-flight toppars drain is done, if so transition to
580
+ * next state.
581
+ *
582
+ * @locality any
583
+ * @locks none
584
+ */
585
+ static RD_INLINE void rd_kafka_idemp_check_drain_done(rd_kafka_t *rk) {
586
+ if (rd_atomic32_get(&rk->rk_eos.inflight_toppar_cnt) == 0)
587
+ rd_kafka_idemp_drain_done(rk);
588
+ }
589
+
590
+
591
+ /**
592
+ * @brief Schedule a reset and re-request of PID when the
593
+ * local ProduceRequest queues have been fully drained.
594
+ *
595
+ * The PID is not reset until the queues are fully drained.
596
+ *
597
+ * @locality any
598
+ * @locks none
599
+ */
600
+ void rd_kafka_idemp_drain_reset(rd_kafka_t *rk, const char *reason) {
601
+ rd_kafka_wrlock(rk);
602
+ rd_kafka_dbg(rk, EOS, "DRAIN",
603
+ "Beginning partition drain for %s reset "
604
+ "for %d partition(s) with in-flight requests: %s",
605
+ rd_kafka_pid2str(rk->rk_eos.pid),
606
+ rd_atomic32_get(&rk->rk_eos.inflight_toppar_cnt), reason);
607
+ rd_kafka_idemp_set_state(rk, RD_KAFKA_IDEMP_STATE_DRAIN_RESET);
608
+ rd_kafka_wrunlock(rk);
609
+
610
+ /* Check right away if the drain could be done. */
611
+ rd_kafka_idemp_check_drain_done(rk);
612
+ }
613
+
614
+
615
+ /**
616
+ * @brief Schedule an epoch bump when the local ProduceRequest queues
617
+ * have been fully drained.
618
+ *
619
+ * The PID is not bumped until the queues are fully drained and the current
620
+ * transaction is aborted (if any).
621
+ *
622
+ * @param allow_txn_abort If this is a transactional producer and this flag is
623
+ * true then we trigger an abortable txn error to abort
624
+ * the current transaction first. The txnmgr will later
625
+ * call us back with this flag set to false to go ahead
626
+ * with the epoch bump.
627
+ * @param fmt is a human-readable reason for the bump
628
+ *
629
+ *
630
+ * @locality any
631
+ * @locks none
632
+ */
633
+ void rd_kafka_idemp_drain_epoch_bump0(rd_kafka_t *rk,
634
+ rd_bool_t allow_txn_abort,
635
+ rd_kafka_resp_err_t err,
636
+ const char *fmt,
637
+ ...) {
638
+ va_list ap;
639
+ char buf[256];
640
+ rd_bool_t requires_txn_abort =
641
+ allow_txn_abort && rd_kafka_is_transactional(rk);
642
+
643
+ va_start(ap, fmt);
644
+ rd_vsnprintf(buf, sizeof(buf), fmt, ap);
645
+ va_end(ap);
646
+
647
+ rd_kafka_wrlock(rk);
648
+
649
+
650
+ if (requires_txn_abort) {
651
+ rd_kafka_dbg(rk, EOS, "DRAIN",
652
+ "Need transaction abort before beginning "
653
+ "partition drain in state %s for %s epoch bump "
654
+ "for %d partition(s) with in-flight requests: %s",
655
+ rd_kafka_idemp_state2str(rk->rk_eos.idemp_state),
656
+ rd_kafka_pid2str(rk->rk_eos.pid),
657
+ rd_atomic32_get(&rk->rk_eos.inflight_toppar_cnt),
658
+ buf);
659
+ rd_kafka_idemp_set_state(rk,
660
+ RD_KAFKA_IDEMP_STATE_WAIT_TXN_ABORT);
661
+
662
+ } else {
663
+ rd_kafka_dbg(rk, EOS, "DRAIN",
664
+ "Beginning partition drain in state %s "
665
+ "for %s epoch bump "
666
+ "for %d partition(s) with in-flight requests: %s",
667
+ rd_kafka_idemp_state2str(rk->rk_eos.idemp_state),
668
+ rd_kafka_pid2str(rk->rk_eos.pid),
669
+ rd_atomic32_get(&rk->rk_eos.inflight_toppar_cnt),
670
+ buf);
671
+
672
+ rd_kafka_idemp_set_state(rk, RD_KAFKA_IDEMP_STATE_DRAIN_BUMP);
673
+ }
674
+
675
+ rd_kafka_wrunlock(rk);
676
+
677
+ if (requires_txn_abort) {
678
+ /* Transactions: bumping the epoch requires the current
679
+ * transaction to be aborted first. */
680
+ rd_kafka_txn_set_abortable_error_with_bump(rk, err, "%s", buf);
681
+
682
+ } else {
683
+ /* Idempotent producer: check right away if the drain could
684
+ * be done. */
685
+ rd_kafka_idemp_check_drain_done(rk);
686
+ }
687
+ }
688
+
689
+ /**
690
+ * @brief Mark partition as waiting-to-drain.
691
+ *
692
+ * @locks toppar_lock MUST be held
693
+ * @locality broker thread (leader or not)
694
+ */
695
+ void rd_kafka_idemp_drain_toppar(rd_kafka_toppar_t *rktp, const char *reason) {
696
+ if (rktp->rktp_eos.wait_drain)
697
+ return;
698
+
699
+ rd_kafka_dbg(rktp->rktp_rkt->rkt_rk, EOS | RD_KAFKA_DBG_TOPIC, "DRAIN",
700
+ "%.*s [%" PRId32 "] beginning partition drain: %s",
701
+ RD_KAFKAP_STR_PR(rktp->rktp_rkt->rkt_topic),
702
+ rktp->rktp_partition, reason);
703
+ rktp->rktp_eos.wait_drain = rd_true;
704
+ }
705
+
706
+
707
+ /**
708
+ * @brief Mark partition as no longer having a ProduceRequest in-flight.
709
+ *
710
+ * @locality any
711
+ * @locks none
712
+ */
713
+ void rd_kafka_idemp_inflight_toppar_sub(rd_kafka_t *rk,
714
+ rd_kafka_toppar_t *rktp) {
715
+ int r = rd_atomic32_sub(&rk->rk_eos.inflight_toppar_cnt, 1);
716
+
717
+ if (r == 0) {
718
+ /* Check if we're waiting for the partitions to drain
719
+ * before resetting the PID, and if so trigger a reset
720
+ * since this was the last drained one. */
721
+ rd_kafka_idemp_drain_done(rk);
722
+ } else {
723
+ rd_assert(r >= 0);
724
+ }
725
+ }
726
+
727
+
728
+ /**
729
+ * @brief Mark partition as having a ProduceRequest in-flight.
730
+ *
731
+ * @locality toppar handler thread
732
+ * @locks none
733
+ */
734
+ void rd_kafka_idemp_inflight_toppar_add(rd_kafka_t *rk,
735
+ rd_kafka_toppar_t *rktp) {
736
+ rd_atomic32_add(&rk->rk_eos.inflight_toppar_cnt, 1);
737
+ }
738
+
739
+
740
+
741
+ /**
742
+ * @brief Start idempotent producer (asynchronously).
743
+ *
744
+ * @locality rdkafka main thread
745
+ * @locks none
746
+ */
747
+ void rd_kafka_idemp_start(rd_kafka_t *rk, rd_bool_t immediate) {
748
+
749
+ if (rd_kafka_terminating(rk))
750
+ return;
751
+
752
+ rd_kafka_wrlock(rk);
753
+ /* Don't restart PID acquisition if there's already an outstanding
754
+ * request. */
755
+ if (rk->rk_eos.idemp_state != RD_KAFKA_IDEMP_STATE_WAIT_PID)
756
+ rd_kafka_idemp_set_state(rk, RD_KAFKA_IDEMP_STATE_REQ_PID);
757
+ rd_kafka_wrunlock(rk);
758
+
759
+ /* Schedule request timer */
760
+ rd_kafka_idemp_pid_timer_restart(rk, immediate,
761
+ "Starting idempotent producer");
762
+ }
763
+
764
+
765
+ /**
766
+ * @brief Initialize the idempotent producer.
767
+ *
768
+ * @remark Must be called from rd_kafka_new() and only once.
769
+ * @locality rdkafka main thread
770
+ * @locks none / not needed from rd_kafka_new()
771
+ */
772
+ void rd_kafka_idemp_init(rd_kafka_t *rk) {
773
+ rd_assert(thrd_is_current(rk->rk_thread));
774
+
775
+ rd_atomic32_init(&rk->rk_eos.inflight_toppar_cnt, 0);
776
+ rd_kafka_pid_reset(&rk->rk_eos.pid);
777
+
778
+ /* The transactional producer acquires the PID
779
+ * from init_transactions(), for non-transactional producers
780
+ * the PID can be acquired right away. */
781
+ if (rd_kafka_is_transactional(rk))
782
+ rd_kafka_txns_init(rk);
783
+ else
784
+ /* There are no available brokers this early,
785
+ * so just set the state to indicate that we want to
786
+ * acquire a PID as soon as possible and start
787
+ * the timer. */
788
+ rd_kafka_idemp_start(rk, rd_false /*non-immediate*/);
789
+ }
790
+
791
+
792
+ /**
793
+ * @brief Terminate and clean up idempotent producer
794
+ *
795
+ * @locality rdkafka main thread
796
+ * @locks rd_kafka_wrlock() MUST be held
797
+ */
798
+ void rd_kafka_idemp_term(rd_kafka_t *rk) {
799
+ rd_assert(thrd_is_current(rk->rk_thread));
800
+
801
+ rd_kafka_wrlock(rk);
802
+ if (rd_kafka_is_transactional(rk))
803
+ rd_kafka_txns_term(rk);
804
+ rd_kafka_idemp_set_state(rk, RD_KAFKA_IDEMP_STATE_TERM);
805
+ rd_kafka_wrunlock(rk);
806
+ rd_kafka_timer_stop(&rk->rk_timers, &rk->rk_eos.pid_tmr, 1);
807
+ }