@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,1641 @@
1
+ /*
2
+ * librdkafka - Apache Kafka C/C++ library
3
+ *
4
+ * Copyright (c) 2014-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
+ #ifndef _RDKAFKACPP_INT_H_
31
+ #define _RDKAFKACPP_INT_H_
32
+
33
+ #include <string>
34
+ #include <iostream>
35
+ #include <cstring>
36
+ #include <stdlib.h>
37
+
38
+ #include "rdkafkacpp.h"
39
+
40
+ extern "C" {
41
+ #include "../src/rdkafka.h"
42
+ }
43
+
44
+ #ifdef _WIN32
45
+ /* Visual Studio */
46
+ #include "../src/win32_config.h"
47
+ #else
48
+ /* POSIX / UNIX based systems */
49
+ #include "../config.h" /* mklove output */
50
+ #endif
51
+
52
+ #ifdef _MSC_VER
53
+ typedef int mode_t;
54
+ #pragma warning(disable : 4250)
55
+ #endif
56
+
57
+
58
+ namespace RdKafka {
59
+
60
+ void consume_cb_trampoline(rd_kafka_message_t *msg, void *opaque);
61
+ void log_cb_trampoline(const rd_kafka_t *rk,
62
+ int level,
63
+ const char *fac,
64
+ const char *buf);
65
+ void error_cb_trampoline(rd_kafka_t *rk,
66
+ int err,
67
+ const char *reason,
68
+ void *opaque);
69
+ void throttle_cb_trampoline(rd_kafka_t *rk,
70
+ const char *broker_name,
71
+ int32_t broker_id,
72
+ int throttle_time_ms,
73
+ void *opaque);
74
+ int stats_cb_trampoline(rd_kafka_t *rk,
75
+ char *json,
76
+ size_t json_len,
77
+ void *opaque);
78
+ int socket_cb_trampoline(int domain, int type, int protocol, void *opaque);
79
+ int open_cb_trampoline(const char *pathname,
80
+ int flags,
81
+ mode_t mode,
82
+ void *opaque);
83
+ void rebalance_cb_trampoline(rd_kafka_t *rk,
84
+ rd_kafka_resp_err_t err,
85
+ rd_kafka_topic_partition_list_t *c_partitions,
86
+ void *opaque);
87
+ void offset_commit_cb_trampoline0(rd_kafka_t *rk,
88
+ rd_kafka_resp_err_t err,
89
+ rd_kafka_topic_partition_list_t *c_offsets,
90
+ void *opaque);
91
+ void oauthbearer_token_refresh_cb_trampoline(rd_kafka_t *rk,
92
+ const char *oauthbearer_config,
93
+ void *opaque);
94
+
95
+ int ssl_cert_verify_cb_trampoline(rd_kafka_t *rk,
96
+ const char *broker_name,
97
+ int32_t broker_id,
98
+ int *x509_error,
99
+ int depth,
100
+ const char *buf,
101
+ size_t size,
102
+ char *errstr,
103
+ size_t errstr_size,
104
+ void *opaque);
105
+
106
+ rd_kafka_topic_partition_list_t *partitions_to_c_parts(
107
+ const std::vector<TopicPartition *> &partitions);
108
+
109
+ /**
110
+ * @brief Update the application provided 'partitions' with info from 'c_parts'
111
+ */
112
+ void update_partitions_from_c_parts(
113
+ std::vector<TopicPartition *> &partitions,
114
+ const rd_kafka_topic_partition_list_t *c_parts);
115
+
116
+
117
+ class ErrorImpl : public Error {
118
+ public:
119
+ ~ErrorImpl() {
120
+ rd_kafka_error_destroy(c_error_);
121
+ }
122
+
123
+ ErrorImpl(ErrorCode code, const std::string *errstr) {
124
+ c_error_ = rd_kafka_error_new(static_cast<rd_kafka_resp_err_t>(code),
125
+ errstr ? "%s" : NULL,
126
+ errstr ? errstr->c_str() : NULL);
127
+ }
128
+
129
+ ErrorImpl(rd_kafka_error_t *c_error) : c_error_(c_error) {
130
+ }
131
+
132
+ static Error *create(ErrorCode code, const std::string *errstr) {
133
+ return new ErrorImpl(code, errstr);
134
+ }
135
+
136
+ ErrorCode code() const {
137
+ return static_cast<ErrorCode>(rd_kafka_error_code(c_error_));
138
+ }
139
+
140
+ std::string name() const {
141
+ return std::string(rd_kafka_error_name(c_error_));
142
+ }
143
+
144
+ std::string str() const {
145
+ return std::string(rd_kafka_error_string(c_error_));
146
+ }
147
+
148
+ bool is_fatal() const {
149
+ return !!rd_kafka_error_is_fatal(c_error_);
150
+ }
151
+
152
+ bool is_retriable() const {
153
+ return !!rd_kafka_error_is_retriable(c_error_);
154
+ }
155
+
156
+ bool txn_requires_abort() const {
157
+ return !!rd_kafka_error_txn_requires_abort(c_error_);
158
+ }
159
+
160
+ rd_kafka_error_t *c_error_;
161
+ };
162
+
163
+
164
+ class EventImpl : public Event {
165
+ public:
166
+ ~EventImpl() {
167
+ }
168
+
169
+ EventImpl(Type type,
170
+ ErrorCode err,
171
+ Severity severity,
172
+ const char *fac,
173
+ const char *str) :
174
+ type_(type),
175
+ err_(err),
176
+ severity_(severity),
177
+ fac_(fac ? fac : ""),
178
+ str_(str),
179
+ id_(0),
180
+ throttle_time_(0),
181
+ fatal_(false) {
182
+ }
183
+
184
+ EventImpl(Type type) :
185
+ type_(type),
186
+ err_(ERR_NO_ERROR),
187
+ severity_(EVENT_SEVERITY_EMERG),
188
+ fac_(""),
189
+ str_(""),
190
+ id_(0),
191
+ throttle_time_(0),
192
+ fatal_(false) {
193
+ }
194
+
195
+ Type type() const {
196
+ return type_;
197
+ }
198
+ ErrorCode err() const {
199
+ return err_;
200
+ }
201
+ Severity severity() const {
202
+ return severity_;
203
+ }
204
+ std::string fac() const {
205
+ return fac_;
206
+ }
207
+ std::string str() const {
208
+ return str_;
209
+ }
210
+ std::string broker_name() const {
211
+ if (type_ == EVENT_THROTTLE)
212
+ return str_;
213
+ else
214
+ return std::string("");
215
+ }
216
+ int broker_id() const {
217
+ return id_;
218
+ }
219
+ int throttle_time() const {
220
+ return throttle_time_;
221
+ }
222
+
223
+ bool fatal() const {
224
+ return fatal_;
225
+ }
226
+
227
+ Type type_;
228
+ ErrorCode err_;
229
+ Severity severity_;
230
+ std::string fac_;
231
+ std::string str_; /* reused for THROTTLE broker_name */
232
+ int id_;
233
+ int throttle_time_;
234
+ bool fatal_;
235
+ };
236
+
237
+ class QueueImpl : virtual public Queue {
238
+ public:
239
+ QueueImpl(rd_kafka_queue_t *c_rkqu) : queue_(c_rkqu) {
240
+ }
241
+ ~QueueImpl() {
242
+ rd_kafka_queue_destroy(queue_);
243
+ }
244
+ static Queue *create(Handle *base);
245
+ ErrorCode forward(Queue *queue);
246
+ Message *consume(int timeout_ms);
247
+ int poll(int timeout_ms);
248
+ void io_event_enable(int fd, const void *payload, size_t size);
249
+
250
+ rd_kafka_queue_t *queue_;
251
+ };
252
+
253
+
254
+
255
+ class HeadersImpl : public Headers {
256
+ public:
257
+ HeadersImpl() : headers_(rd_kafka_headers_new(8)) {
258
+ }
259
+
260
+ HeadersImpl(rd_kafka_headers_t *headers) : headers_(headers) {
261
+ }
262
+
263
+ HeadersImpl(const std::vector<Header> &headers) {
264
+ if (headers.size() > 0) {
265
+ headers_ = rd_kafka_headers_new(headers.size());
266
+ from_vector(headers);
267
+ } else {
268
+ headers_ = rd_kafka_headers_new(8);
269
+ }
270
+ }
271
+
272
+ ~HeadersImpl() {
273
+ if (headers_) {
274
+ rd_kafka_headers_destroy(headers_);
275
+ }
276
+ }
277
+
278
+ ErrorCode add(const std::string &key, const char *value) {
279
+ rd_kafka_resp_err_t err;
280
+ err = rd_kafka_header_add(headers_, key.c_str(), key.size(), value, -1);
281
+ return static_cast<RdKafka::ErrorCode>(err);
282
+ }
283
+
284
+ ErrorCode add(const std::string &key, const void *value, size_t value_size) {
285
+ rd_kafka_resp_err_t err;
286
+ err = rd_kafka_header_add(headers_, key.c_str(), key.size(), value,
287
+ value_size);
288
+ return static_cast<RdKafka::ErrorCode>(err);
289
+ }
290
+
291
+ ErrorCode add(const std::string &key, const std::string &value) {
292
+ rd_kafka_resp_err_t err;
293
+ err = rd_kafka_header_add(headers_, key.c_str(), key.size(), value.c_str(),
294
+ value.size());
295
+ return static_cast<RdKafka::ErrorCode>(err);
296
+ }
297
+
298
+ ErrorCode add(const Header &header) {
299
+ rd_kafka_resp_err_t err;
300
+ err =
301
+ rd_kafka_header_add(headers_, header.key().c_str(), header.key().size(),
302
+ header.value(), header.value_size());
303
+ return static_cast<RdKafka::ErrorCode>(err);
304
+ }
305
+
306
+ ErrorCode remove(const std::string &key) {
307
+ rd_kafka_resp_err_t err;
308
+ err = rd_kafka_header_remove(headers_, key.c_str());
309
+ return static_cast<RdKafka::ErrorCode>(err);
310
+ }
311
+
312
+ std::vector<Headers::Header> get(const std::string &key) const {
313
+ std::vector<Headers::Header> headers;
314
+ const void *value;
315
+ size_t size;
316
+ rd_kafka_resp_err_t err;
317
+ for (size_t idx = 0; !(err = rd_kafka_header_get(headers_, idx, key.c_str(),
318
+ &value, &size));
319
+ idx++) {
320
+ headers.push_back(Headers::Header(key, value, size));
321
+ }
322
+ return headers;
323
+ }
324
+
325
+ Headers::Header get_last(const std::string &key) const {
326
+ const void *value;
327
+ size_t size;
328
+ rd_kafka_resp_err_t err;
329
+ err = rd_kafka_header_get_last(headers_, key.c_str(), &value, &size);
330
+ return Headers::Header(key, value, size,
331
+ static_cast<RdKafka::ErrorCode>(err));
332
+ }
333
+
334
+ std::vector<Headers::Header> get_all() const {
335
+ std::vector<Headers::Header> headers;
336
+ size_t idx = 0;
337
+ const char *name;
338
+ const void *valuep;
339
+ size_t size;
340
+ while (!rd_kafka_header_get_all(headers_, idx++, &name, &valuep, &size)) {
341
+ headers.push_back(Headers::Header(name, valuep, size));
342
+ }
343
+ return headers;
344
+ }
345
+
346
+ size_t size() const {
347
+ return rd_kafka_header_cnt(headers_);
348
+ }
349
+
350
+ /** @brief Reset the C headers pointer to NULL. */
351
+ void c_headers_destroyed() {
352
+ headers_ = NULL;
353
+ }
354
+
355
+ /** @returns the underlying C headers, or NULL. */
356
+ rd_kafka_headers_t *c_ptr() {
357
+ return headers_;
358
+ }
359
+
360
+
361
+ private:
362
+ void from_vector(const std::vector<Header> &headers) {
363
+ if (headers.size() == 0)
364
+ return;
365
+ for (std::vector<Header>::const_iterator it = headers.begin();
366
+ it != headers.end(); it++)
367
+ this->add(*it);
368
+ }
369
+
370
+ HeadersImpl(HeadersImpl const &) /*= delete*/;
371
+ HeadersImpl &operator=(HeadersImpl const &) /*= delete*/;
372
+
373
+ rd_kafka_headers_t *headers_;
374
+ };
375
+
376
+
377
+
378
+ class MessageImpl : public Message {
379
+ public:
380
+ ~MessageImpl() {
381
+ if (free_rkmessage_)
382
+ rd_kafka_message_destroy(const_cast<rd_kafka_message_t *>(rkmessage_));
383
+ if (key_)
384
+ delete key_;
385
+ if (headers_)
386
+ delete headers_;
387
+ }
388
+
389
+ MessageImpl(rd_kafka_type_t rk_type,
390
+ RdKafka::Topic *topic,
391
+ rd_kafka_message_t *rkmessage) :
392
+ topic_(topic),
393
+ rkmessage_(rkmessage),
394
+ free_rkmessage_(true),
395
+ key_(NULL),
396
+ headers_(NULL),
397
+ rk_type_(rk_type) {
398
+ }
399
+
400
+ MessageImpl(rd_kafka_type_t rk_type,
401
+ RdKafka::Topic *topic,
402
+ rd_kafka_message_t *rkmessage,
403
+ bool dofree) :
404
+ topic_(topic),
405
+ rkmessage_(rkmessage),
406
+ free_rkmessage_(dofree),
407
+ key_(NULL),
408
+ headers_(NULL),
409
+ rk_type_(rk_type) {
410
+ }
411
+
412
+ MessageImpl(rd_kafka_type_t rk_type, rd_kafka_message_t *rkmessage) :
413
+ topic_(NULL),
414
+ rkmessage_(rkmessage),
415
+ free_rkmessage_(true),
416
+ key_(NULL),
417
+ headers_(NULL),
418
+ rk_type_(rk_type) {
419
+ if (rkmessage->rkt) {
420
+ /* Possibly NULL */
421
+ topic_ = static_cast<Topic *>(rd_kafka_topic_opaque(rkmessage->rkt));
422
+ }
423
+ }
424
+
425
+ /* Create errored message */
426
+ MessageImpl(rd_kafka_type_t rk_type,
427
+ RdKafka::Topic *topic,
428
+ RdKafka::ErrorCode err) :
429
+ topic_(topic),
430
+ free_rkmessage_(false),
431
+ key_(NULL),
432
+ headers_(NULL),
433
+ rk_type_(rk_type) {
434
+ rkmessage_ = &rkmessage_err_;
435
+ memset(&rkmessage_err_, 0, sizeof(rkmessage_err_));
436
+ rkmessage_err_.err = static_cast<rd_kafka_resp_err_t>(err);
437
+ }
438
+
439
+ std::string errstr() const {
440
+ const char *es;
441
+ /* message_errstr() is only available for the consumer. */
442
+ if (rk_type_ == RD_KAFKA_CONSUMER)
443
+ es = rd_kafka_message_errstr(rkmessage_);
444
+ else
445
+ es = rd_kafka_err2str(rkmessage_->err);
446
+
447
+ return std::string(es ? es : "");
448
+ }
449
+
450
+ ErrorCode err() const {
451
+ return static_cast<RdKafka::ErrorCode>(rkmessage_->err);
452
+ }
453
+
454
+ Topic *topic() const {
455
+ return topic_;
456
+ }
457
+ std::string topic_name() const {
458
+ if (rkmessage_->rkt)
459
+ return rd_kafka_topic_name(rkmessage_->rkt);
460
+ else
461
+ return "";
462
+ }
463
+ int32_t partition() const {
464
+ return rkmessage_->partition;
465
+ }
466
+ void *payload() const {
467
+ return rkmessage_->payload;
468
+ }
469
+ size_t len() const {
470
+ return rkmessage_->len;
471
+ }
472
+ const std::string *key() const {
473
+ if (key_) {
474
+ return key_;
475
+ } else if (rkmessage_->key) {
476
+ key_ = new std::string(static_cast<char const *>(rkmessage_->key),
477
+ rkmessage_->key_len);
478
+ return key_;
479
+ }
480
+ return NULL;
481
+ }
482
+ const void *key_pointer() const {
483
+ return rkmessage_->key;
484
+ }
485
+ size_t key_len() const {
486
+ return rkmessage_->key_len;
487
+ }
488
+
489
+ int64_t offset() const {
490
+ return rkmessage_->offset;
491
+ }
492
+
493
+ MessageTimestamp timestamp() const {
494
+ MessageTimestamp ts;
495
+ rd_kafka_timestamp_type_t tstype;
496
+ ts.timestamp = rd_kafka_message_timestamp(rkmessage_, &tstype);
497
+ ts.type = static_cast<MessageTimestamp::MessageTimestampType>(tstype);
498
+ return ts;
499
+ }
500
+
501
+ void *msg_opaque() const {
502
+ return rkmessage_->_private;
503
+ }
504
+
505
+ int64_t latency() const {
506
+ return rd_kafka_message_latency(rkmessage_);
507
+ }
508
+
509
+ struct rd_kafka_message_s *c_ptr() {
510
+ return rkmessage_;
511
+ }
512
+
513
+ Status status() const {
514
+ return static_cast<Status>(rd_kafka_message_status(rkmessage_));
515
+ }
516
+
517
+ Headers *headers() {
518
+ ErrorCode err;
519
+ return headers(&err);
520
+ }
521
+
522
+ Headers *headers(ErrorCode *err) {
523
+ *err = ERR_NO_ERROR;
524
+
525
+ if (!headers_) {
526
+ rd_kafka_headers_t *c_hdrs;
527
+ rd_kafka_resp_err_t c_err;
528
+
529
+ if ((c_err = rd_kafka_message_detach_headers(rkmessage_, &c_hdrs))) {
530
+ *err = static_cast<RdKafka::ErrorCode>(c_err);
531
+ return NULL;
532
+ }
533
+
534
+ headers_ = new HeadersImpl(c_hdrs);
535
+ }
536
+
537
+ return headers_;
538
+ }
539
+
540
+ int32_t broker_id() const {
541
+ return rd_kafka_message_broker_id(rkmessage_);
542
+ }
543
+
544
+ int32_t leader_epoch() const {
545
+ return rd_kafka_message_leader_epoch(rkmessage_);
546
+ }
547
+
548
+
549
+ Error *offset_store() {
550
+ rd_kafka_error_t *c_error;
551
+
552
+ c_error = rd_kafka_offset_store_message(rkmessage_);
553
+
554
+ if (c_error)
555
+ return new ErrorImpl(c_error);
556
+ else
557
+ return NULL;
558
+ }
559
+
560
+ RdKafka::Topic *topic_;
561
+ rd_kafka_message_t *rkmessage_;
562
+ bool free_rkmessage_;
563
+ /* For error signalling by the C++ layer the .._err_ message is
564
+ * used as a place holder and rkmessage_ is set to point to it. */
565
+ rd_kafka_message_t rkmessage_err_;
566
+ mutable std::string *key_; /* mutable because it's a cached value */
567
+
568
+ private:
569
+ /* "delete" copy ctor + copy assignment, for safety of key_ */
570
+ MessageImpl(MessageImpl const &) /*= delete*/;
571
+ MessageImpl &operator=(MessageImpl const &) /*= delete*/;
572
+
573
+ RdKafka::Headers *headers_;
574
+ const rd_kafka_type_t rk_type_; /**< Client type */
575
+ };
576
+
577
+
578
+ class ConfImpl : public Conf {
579
+ public:
580
+ ConfImpl(ConfType conf_type) :
581
+ consume_cb_(NULL),
582
+ dr_cb_(NULL),
583
+ event_cb_(NULL),
584
+ socket_cb_(NULL),
585
+ open_cb_(NULL),
586
+ partitioner_cb_(NULL),
587
+ partitioner_kp_cb_(NULL),
588
+ rebalance_cb_(NULL),
589
+ offset_commit_cb_(NULL),
590
+ oauthbearer_token_refresh_cb_(NULL),
591
+ ssl_cert_verify_cb_(NULL),
592
+ conf_type_(conf_type),
593
+ rk_conf_(NULL),
594
+ rkt_conf_(NULL) {
595
+ }
596
+ ~ConfImpl() {
597
+ if (rk_conf_)
598
+ rd_kafka_conf_destroy(rk_conf_);
599
+ else if (rkt_conf_)
600
+ rd_kafka_topic_conf_destroy(rkt_conf_);
601
+ }
602
+
603
+ Conf::ConfResult set(const std::string &name,
604
+ const std::string &value,
605
+ std::string &errstr);
606
+
607
+ Conf::ConfResult set(const std::string &name,
608
+ DeliveryReportCb *dr_cb,
609
+ std::string &errstr) {
610
+ if (name != "dr_cb") {
611
+ errstr = "Invalid value type, expected RdKafka::DeliveryReportCb";
612
+ return Conf::CONF_INVALID;
613
+ }
614
+
615
+ if (!rk_conf_) {
616
+ errstr = "Requires RdKafka::Conf::CONF_GLOBAL object";
617
+ return Conf::CONF_INVALID;
618
+ }
619
+
620
+ dr_cb_ = dr_cb;
621
+ return Conf::CONF_OK;
622
+ }
623
+
624
+ Conf::ConfResult set(const std::string &name,
625
+ OAuthBearerTokenRefreshCb *oauthbearer_token_refresh_cb,
626
+ std::string &errstr) {
627
+ if (name != "oauthbearer_token_refresh_cb") {
628
+ errstr =
629
+ "Invalid value type, expected RdKafka::OAuthBearerTokenRefreshCb";
630
+ return Conf::CONF_INVALID;
631
+ }
632
+
633
+ if (!rk_conf_) {
634
+ errstr = "Requires RdKafka::Conf::CONF_GLOBAL object";
635
+ return Conf::CONF_INVALID;
636
+ }
637
+
638
+ oauthbearer_token_refresh_cb_ = oauthbearer_token_refresh_cb;
639
+ return Conf::CONF_OK;
640
+ }
641
+
642
+ Conf::ConfResult set(const std::string &name,
643
+ EventCb *event_cb,
644
+ std::string &errstr) {
645
+ if (name != "event_cb") {
646
+ errstr = "Invalid value type, expected RdKafka::EventCb";
647
+ return Conf::CONF_INVALID;
648
+ }
649
+
650
+ if (!rk_conf_) {
651
+ errstr = "Requires RdKafka::Conf::CONF_GLOBAL object";
652
+ return Conf::CONF_INVALID;
653
+ }
654
+
655
+ event_cb_ = event_cb;
656
+ return Conf::CONF_OK;
657
+ }
658
+
659
+ Conf::ConfResult set(const std::string &name,
660
+ const Conf *topic_conf,
661
+ std::string &errstr) {
662
+ const ConfImpl *tconf_impl =
663
+ dynamic_cast<const RdKafka::ConfImpl *>(topic_conf);
664
+ if (name != "default_topic_conf" || !tconf_impl->rkt_conf_) {
665
+ errstr = "Invalid value type, expected RdKafka::Conf";
666
+ return Conf::CONF_INVALID;
667
+ }
668
+
669
+ if (!rk_conf_) {
670
+ errstr = "Requires RdKafka::Conf::CONF_GLOBAL object";
671
+ return Conf::CONF_INVALID;
672
+ }
673
+
674
+ rd_kafka_conf_set_default_topic_conf(
675
+ rk_conf_, rd_kafka_topic_conf_dup(tconf_impl->rkt_conf_));
676
+
677
+ return Conf::CONF_OK;
678
+ }
679
+
680
+ Conf::ConfResult set(const std::string &name,
681
+ PartitionerCb *partitioner_cb,
682
+ std::string &errstr) {
683
+ if (name != "partitioner_cb") {
684
+ errstr = "Invalid value type, expected RdKafka::PartitionerCb";
685
+ return Conf::CONF_INVALID;
686
+ }
687
+
688
+ if (!rkt_conf_) {
689
+ errstr = "Requires RdKafka::Conf::CONF_TOPIC object";
690
+ return Conf::CONF_INVALID;
691
+ }
692
+
693
+ partitioner_cb_ = partitioner_cb;
694
+ return Conf::CONF_OK;
695
+ }
696
+
697
+ Conf::ConfResult set(const std::string &name,
698
+ PartitionerKeyPointerCb *partitioner_kp_cb,
699
+ std::string &errstr) {
700
+ if (name != "partitioner_key_pointer_cb") {
701
+ errstr = "Invalid value type, expected RdKafka::PartitionerKeyPointerCb";
702
+ return Conf::CONF_INVALID;
703
+ }
704
+
705
+ if (!rkt_conf_) {
706
+ errstr = "Requires RdKafka::Conf::CONF_TOPIC object";
707
+ return Conf::CONF_INVALID;
708
+ }
709
+
710
+ partitioner_kp_cb_ = partitioner_kp_cb;
711
+ return Conf::CONF_OK;
712
+ }
713
+
714
+ Conf::ConfResult set(const std::string &name,
715
+ SocketCb *socket_cb,
716
+ std::string &errstr) {
717
+ if (name != "socket_cb") {
718
+ errstr = "Invalid value type, expected RdKafka::SocketCb";
719
+ return Conf::CONF_INVALID;
720
+ }
721
+
722
+ if (!rk_conf_) {
723
+ errstr = "Requires RdKafka::Conf::CONF_GLOBAL object";
724
+ return Conf::CONF_INVALID;
725
+ }
726
+
727
+ socket_cb_ = socket_cb;
728
+ return Conf::CONF_OK;
729
+ }
730
+
731
+
732
+ Conf::ConfResult set(const std::string &name,
733
+ OpenCb *open_cb,
734
+ std::string &errstr) {
735
+ if (name != "open_cb") {
736
+ errstr = "Invalid value type, expected RdKafka::OpenCb";
737
+ return Conf::CONF_INVALID;
738
+ }
739
+
740
+ if (!rk_conf_) {
741
+ errstr = "Requires RdKafka::Conf::CONF_GLOBAL object";
742
+ return Conf::CONF_INVALID;
743
+ }
744
+
745
+ open_cb_ = open_cb;
746
+ return Conf::CONF_OK;
747
+ }
748
+
749
+
750
+
751
+ Conf::ConfResult set(const std::string &name,
752
+ RebalanceCb *rebalance_cb,
753
+ std::string &errstr) {
754
+ if (name != "rebalance_cb") {
755
+ errstr = "Invalid value type, expected RdKafka::RebalanceCb";
756
+ return Conf::CONF_INVALID;
757
+ }
758
+
759
+ if (!rk_conf_) {
760
+ errstr = "Requires RdKafka::Conf::CONF_GLOBAL object";
761
+ return Conf::CONF_INVALID;
762
+ }
763
+
764
+ rebalance_cb_ = rebalance_cb;
765
+ return Conf::CONF_OK;
766
+ }
767
+
768
+
769
+ Conf::ConfResult set(const std::string &name,
770
+ OffsetCommitCb *offset_commit_cb,
771
+ std::string &errstr) {
772
+ if (name != "offset_commit_cb") {
773
+ errstr = "Invalid value type, expected RdKafka::OffsetCommitCb";
774
+ return Conf::CONF_INVALID;
775
+ }
776
+
777
+ if (!rk_conf_) {
778
+ errstr = "Requires RdKafka::Conf::CONF_GLOBAL object";
779
+ return Conf::CONF_INVALID;
780
+ }
781
+
782
+ offset_commit_cb_ = offset_commit_cb;
783
+ return Conf::CONF_OK;
784
+ }
785
+
786
+
787
+ Conf::ConfResult set(const std::string &name,
788
+ SslCertificateVerifyCb *ssl_cert_verify_cb,
789
+ std::string &errstr) {
790
+ if (name != "ssl_cert_verify_cb") {
791
+ errstr = "Invalid value type, expected RdKafka::SslCertificateVerifyCb";
792
+ return Conf::CONF_INVALID;
793
+ }
794
+
795
+ if (!rk_conf_) {
796
+ errstr = "Requires RdKafka::Conf::CONF_GLOBAL object";
797
+ return Conf::CONF_INVALID;
798
+ }
799
+
800
+ ssl_cert_verify_cb_ = ssl_cert_verify_cb;
801
+ return Conf::CONF_OK;
802
+ }
803
+
804
+ Conf::ConfResult set_engine_callback_data(void *value, std::string &errstr) {
805
+ if (!rk_conf_) {
806
+ errstr = "Requires RdKafka::Conf::CONF_GLOBAL object";
807
+ return Conf::CONF_INVALID;
808
+ }
809
+
810
+ rd_kafka_conf_set_engine_callback_data(rk_conf_, value);
811
+ return Conf::CONF_OK;
812
+ }
813
+
814
+
815
+ Conf::ConfResult set_ssl_cert(RdKafka::CertificateType cert_type,
816
+ RdKafka::CertificateEncoding cert_enc,
817
+ const void *buffer,
818
+ size_t size,
819
+ std::string &errstr) {
820
+ rd_kafka_conf_res_t res;
821
+ char errbuf[512];
822
+
823
+ if (!rk_conf_) {
824
+ errstr = "Requires RdKafka::Conf::CONF_GLOBAL object";
825
+ return Conf::CONF_INVALID;
826
+ }
827
+
828
+ res = rd_kafka_conf_set_ssl_cert(
829
+ rk_conf_, static_cast<rd_kafka_cert_type_t>(cert_type),
830
+ static_cast<rd_kafka_cert_enc_t>(cert_enc), buffer, size, errbuf,
831
+ sizeof(errbuf));
832
+
833
+ if (res != RD_KAFKA_CONF_OK)
834
+ errstr = errbuf;
835
+
836
+ return static_cast<Conf::ConfResult>(res);
837
+ }
838
+
839
+ Conf::ConfResult enable_sasl_queue(bool enable, std::string &errstr) {
840
+ if (!rk_conf_) {
841
+ errstr = "Requires RdKafka::Conf::CONF_GLOBAL object";
842
+ return Conf::CONF_INVALID;
843
+ }
844
+
845
+ rd_kafka_conf_enable_sasl_queue(rk_conf_, enable ? 1 : 0);
846
+
847
+ return Conf::CONF_OK;
848
+ }
849
+
850
+
851
+ Conf::ConfResult get(const std::string &name, std::string &value) const {
852
+ if (name.compare("dr_cb") == 0 || name.compare("event_cb") == 0 ||
853
+ name.compare("partitioner_cb") == 0 ||
854
+ name.compare("partitioner_key_pointer_cb") == 0 ||
855
+ name.compare("socket_cb") == 0 || name.compare("open_cb") == 0 ||
856
+ name.compare("rebalance_cb") == 0 ||
857
+ name.compare("offset_commit_cb") == 0 ||
858
+ name.compare("oauthbearer_token_refresh_cb") == 0 ||
859
+ name.compare("ssl_cert_verify_cb") == 0 ||
860
+ name.compare("set_engine_callback_data") == 0 ||
861
+ name.compare("enable_sasl_queue") == 0) {
862
+ return Conf::CONF_INVALID;
863
+ }
864
+ rd_kafka_conf_res_t res = RD_KAFKA_CONF_INVALID;
865
+
866
+ /* Get size of property */
867
+ size_t size;
868
+ if (rk_conf_)
869
+ res = rd_kafka_conf_get(rk_conf_, name.c_str(), NULL, &size);
870
+ else if (rkt_conf_)
871
+ res = rd_kafka_topic_conf_get(rkt_conf_, name.c_str(), NULL, &size);
872
+ if (res != RD_KAFKA_CONF_OK)
873
+ return static_cast<Conf::ConfResult>(res);
874
+
875
+ char *tmpValue = new char[size];
876
+
877
+ if (rk_conf_)
878
+ res = rd_kafka_conf_get(rk_conf_, name.c_str(), tmpValue, &size);
879
+ else if (rkt_conf_)
880
+ res = rd_kafka_topic_conf_get(rkt_conf_, name.c_str(), tmpValue, &size);
881
+
882
+ if (res == RD_KAFKA_CONF_OK)
883
+ value.assign(tmpValue);
884
+ delete[] tmpValue;
885
+
886
+ return static_cast<Conf::ConfResult>(res);
887
+ }
888
+
889
+ Conf::ConfResult get(DeliveryReportCb *&dr_cb) const {
890
+ if (!rk_conf_)
891
+ return Conf::CONF_INVALID;
892
+ dr_cb = this->dr_cb_;
893
+ return Conf::CONF_OK;
894
+ }
895
+
896
+ Conf::ConfResult get(
897
+ OAuthBearerTokenRefreshCb *&oauthbearer_token_refresh_cb) const {
898
+ if (!rk_conf_)
899
+ return Conf::CONF_INVALID;
900
+ oauthbearer_token_refresh_cb = this->oauthbearer_token_refresh_cb_;
901
+ return Conf::CONF_OK;
902
+ }
903
+
904
+ Conf::ConfResult get(EventCb *&event_cb) const {
905
+ if (!rk_conf_)
906
+ return Conf::CONF_INVALID;
907
+ event_cb = this->event_cb_;
908
+ return Conf::CONF_OK;
909
+ }
910
+
911
+ Conf::ConfResult get(PartitionerCb *&partitioner_cb) const {
912
+ if (!rkt_conf_)
913
+ return Conf::CONF_INVALID;
914
+ partitioner_cb = this->partitioner_cb_;
915
+ return Conf::CONF_OK;
916
+ }
917
+
918
+ Conf::ConfResult get(PartitionerKeyPointerCb *&partitioner_kp_cb) const {
919
+ if (!rkt_conf_)
920
+ return Conf::CONF_INVALID;
921
+ partitioner_kp_cb = this->partitioner_kp_cb_;
922
+ return Conf::CONF_OK;
923
+ }
924
+
925
+ Conf::ConfResult get(SocketCb *&socket_cb) const {
926
+ if (!rk_conf_)
927
+ return Conf::CONF_INVALID;
928
+ socket_cb = this->socket_cb_;
929
+ return Conf::CONF_OK;
930
+ }
931
+
932
+ Conf::ConfResult get(OpenCb *&open_cb) const {
933
+ if (!rk_conf_)
934
+ return Conf::CONF_INVALID;
935
+ open_cb = this->open_cb_;
936
+ return Conf::CONF_OK;
937
+ }
938
+
939
+ Conf::ConfResult get(RebalanceCb *&rebalance_cb) const {
940
+ if (!rk_conf_)
941
+ return Conf::CONF_INVALID;
942
+ rebalance_cb = this->rebalance_cb_;
943
+ return Conf::CONF_OK;
944
+ }
945
+
946
+ Conf::ConfResult get(OffsetCommitCb *&offset_commit_cb) const {
947
+ if (!rk_conf_)
948
+ return Conf::CONF_INVALID;
949
+ offset_commit_cb = this->offset_commit_cb_;
950
+ return Conf::CONF_OK;
951
+ }
952
+
953
+ Conf::ConfResult get(SslCertificateVerifyCb *&ssl_cert_verify_cb) const {
954
+ if (!rk_conf_)
955
+ return Conf::CONF_INVALID;
956
+ ssl_cert_verify_cb = this->ssl_cert_verify_cb_;
957
+ return Conf::CONF_OK;
958
+ }
959
+
960
+ std::list<std::string> *dump();
961
+
962
+
963
+ Conf::ConfResult set(const std::string &name,
964
+ ConsumeCb *consume_cb,
965
+ std::string &errstr) {
966
+ if (name != "consume_cb") {
967
+ errstr = "Invalid value type, expected RdKafka::ConsumeCb";
968
+ return Conf::CONF_INVALID;
969
+ }
970
+
971
+ if (!rk_conf_) {
972
+ errstr = "Requires RdKafka::Conf::CONF_GLOBAL object";
973
+ return Conf::CONF_INVALID;
974
+ }
975
+
976
+ consume_cb_ = consume_cb;
977
+ return Conf::CONF_OK;
978
+ }
979
+
980
+ struct rd_kafka_conf_s *c_ptr_global() {
981
+ if (conf_type_ == CONF_GLOBAL)
982
+ return rk_conf_;
983
+ else
984
+ return NULL;
985
+ }
986
+
987
+ struct rd_kafka_topic_conf_s *c_ptr_topic() {
988
+ if (conf_type_ == CONF_TOPIC)
989
+ return rkt_conf_;
990
+ else
991
+ return NULL;
992
+ }
993
+
994
+ ConsumeCb *consume_cb_;
995
+ DeliveryReportCb *dr_cb_;
996
+ EventCb *event_cb_;
997
+ SocketCb *socket_cb_;
998
+ OpenCb *open_cb_;
999
+ PartitionerCb *partitioner_cb_;
1000
+ PartitionerKeyPointerCb *partitioner_kp_cb_;
1001
+ RebalanceCb *rebalance_cb_;
1002
+ OffsetCommitCb *offset_commit_cb_;
1003
+ OAuthBearerTokenRefreshCb *oauthbearer_token_refresh_cb_;
1004
+ SslCertificateVerifyCb *ssl_cert_verify_cb_;
1005
+ ConfType conf_type_;
1006
+ rd_kafka_conf_t *rk_conf_;
1007
+ rd_kafka_topic_conf_t *rkt_conf_;
1008
+ };
1009
+
1010
+
1011
+ class HandleImpl : virtual public Handle {
1012
+ public:
1013
+ ~HandleImpl() {
1014
+ }
1015
+ HandleImpl() {
1016
+ }
1017
+ std::string name() const {
1018
+ return std::string(rd_kafka_name(rk_));
1019
+ }
1020
+ std::string memberid() const {
1021
+ char *str = rd_kafka_memberid(rk_);
1022
+ std::string memberid = str ? str : "";
1023
+ if (str)
1024
+ rd_kafka_mem_free(rk_, str);
1025
+ return memberid;
1026
+ }
1027
+ int poll(int timeout_ms) {
1028
+ return rd_kafka_poll(rk_, timeout_ms);
1029
+ }
1030
+ int outq_len() {
1031
+ return rd_kafka_outq_len(rk_);
1032
+ }
1033
+
1034
+ void set_common_config(const RdKafka::ConfImpl *confimpl);
1035
+
1036
+ RdKafka::ErrorCode metadata(bool all_topics,
1037
+ const Topic *only_rkt,
1038
+ Metadata **metadatap,
1039
+ int timeout_ms);
1040
+
1041
+ ErrorCode pause(std::vector<TopicPartition *> &partitions);
1042
+ ErrorCode resume(std::vector<TopicPartition *> &partitions);
1043
+
1044
+ ErrorCode query_watermark_offsets(const std::string &topic,
1045
+ int32_t partition,
1046
+ int64_t *low,
1047
+ int64_t *high,
1048
+ int timeout_ms) {
1049
+ return static_cast<RdKafka::ErrorCode>(rd_kafka_query_watermark_offsets(
1050
+ rk_, topic.c_str(), partition, low, high, timeout_ms));
1051
+ }
1052
+
1053
+ ErrorCode get_watermark_offsets(const std::string &topic,
1054
+ int32_t partition,
1055
+ int64_t *low,
1056
+ int64_t *high) {
1057
+ return static_cast<RdKafka::ErrorCode>(rd_kafka_get_watermark_offsets(
1058
+ rk_, topic.c_str(), partition, low, high));
1059
+ }
1060
+
1061
+ Queue *get_partition_queue(const TopicPartition *partition);
1062
+
1063
+ Queue *get_sasl_queue() {
1064
+ rd_kafka_queue_t *rkqu;
1065
+ rkqu = rd_kafka_queue_get_sasl(rk_);
1066
+
1067
+ if (rkqu == NULL)
1068
+ return NULL;
1069
+
1070
+ return new QueueImpl(rkqu);
1071
+ }
1072
+
1073
+ Queue *get_background_queue() {
1074
+ rd_kafka_queue_t *rkqu;
1075
+ rkqu = rd_kafka_queue_get_background(rk_);
1076
+
1077
+ if (rkqu == NULL)
1078
+ return NULL;
1079
+
1080
+ return new QueueImpl(rkqu);
1081
+ }
1082
+
1083
+
1084
+ ErrorCode offsetsForTimes(std::vector<TopicPartition *> &offsets,
1085
+ int timeout_ms) {
1086
+ rd_kafka_topic_partition_list_t *c_offsets = partitions_to_c_parts(offsets);
1087
+ ErrorCode err = static_cast<ErrorCode>(
1088
+ rd_kafka_offsets_for_times(rk_, c_offsets, timeout_ms));
1089
+ update_partitions_from_c_parts(offsets, c_offsets);
1090
+ rd_kafka_topic_partition_list_destroy(c_offsets);
1091
+ return err;
1092
+ }
1093
+
1094
+ ErrorCode set_log_queue(Queue *queue);
1095
+
1096
+ void yield() {
1097
+ rd_kafka_yield(rk_);
1098
+ }
1099
+
1100
+ std::string clusterid(int timeout_ms) {
1101
+ char *str = rd_kafka_clusterid(rk_, timeout_ms);
1102
+ std::string clusterid = str ? str : "";
1103
+ if (str)
1104
+ rd_kafka_mem_free(rk_, str);
1105
+ return clusterid;
1106
+ }
1107
+
1108
+ struct rd_kafka_s *c_ptr() {
1109
+ return rk_;
1110
+ }
1111
+
1112
+ int32_t controllerid(int timeout_ms) {
1113
+ return rd_kafka_controllerid(rk_, timeout_ms);
1114
+ }
1115
+
1116
+ ErrorCode fatal_error(std::string &errstr) const {
1117
+ char errbuf[512];
1118
+ RdKafka::ErrorCode err = static_cast<RdKafka::ErrorCode>(
1119
+ rd_kafka_fatal_error(rk_, errbuf, sizeof(errbuf)));
1120
+ if (err)
1121
+ errstr = errbuf;
1122
+ return err;
1123
+ }
1124
+
1125
+ ErrorCode oauthbearer_set_token(const std::string &token_value,
1126
+ int64_t md_lifetime_ms,
1127
+ const std::string &md_principal_name,
1128
+ const std::list<std::string> &extensions,
1129
+ std::string &errstr) {
1130
+ char errbuf[512];
1131
+ ErrorCode err;
1132
+ const char **extensions_copy = new const char *[extensions.size()];
1133
+ int elem = 0;
1134
+
1135
+ for (std::list<std::string>::const_iterator it = extensions.begin();
1136
+ it != extensions.end(); it++)
1137
+ extensions_copy[elem++] = it->c_str();
1138
+ err = static_cast<ErrorCode>(rd_kafka_oauthbearer_set_token(
1139
+ rk_, token_value.c_str(), md_lifetime_ms, md_principal_name.c_str(),
1140
+ extensions_copy, extensions.size(), errbuf, sizeof(errbuf)));
1141
+ delete[] extensions_copy;
1142
+
1143
+ if (err != ERR_NO_ERROR)
1144
+ errstr = errbuf;
1145
+
1146
+ return err;
1147
+ }
1148
+
1149
+ ErrorCode oauthbearer_set_token_failure(const std::string &errstr) {
1150
+ return static_cast<ErrorCode>(
1151
+ rd_kafka_oauthbearer_set_token_failure(rk_, errstr.c_str()));
1152
+ }
1153
+
1154
+ Error *sasl_background_callbacks_enable() {
1155
+ rd_kafka_error_t *c_error = rd_kafka_sasl_background_callbacks_enable(rk_);
1156
+
1157
+ if (c_error)
1158
+ return new ErrorImpl(c_error);
1159
+
1160
+ return NULL;
1161
+ }
1162
+
1163
+ Error *sasl_set_credentials(const std::string &username,
1164
+ const std::string &password) {
1165
+ rd_kafka_error_t *c_error =
1166
+ rd_kafka_sasl_set_credentials(rk_, username.c_str(), password.c_str());
1167
+
1168
+ if (c_error)
1169
+ return new ErrorImpl(c_error);
1170
+
1171
+ return NULL;
1172
+ };
1173
+
1174
+ void *mem_malloc(size_t size) {
1175
+ return rd_kafka_mem_malloc(rk_, size);
1176
+ }
1177
+
1178
+ void mem_free(void *ptr) {
1179
+ rd_kafka_mem_free(rk_, ptr);
1180
+ }
1181
+
1182
+ rd_kafka_t *rk_;
1183
+ /* All Producer and Consumer callbacks must reside in HandleImpl and
1184
+ * the opaque provided to rdkafka must be a pointer to HandleImpl, since
1185
+ * ProducerImpl and ConsumerImpl classes cannot be safely directly cast to
1186
+ * HandleImpl due to the skewed diamond inheritance. */
1187
+ ConsumeCb *consume_cb_;
1188
+ EventCb *event_cb_;
1189
+ SocketCb *socket_cb_;
1190
+ OpenCb *open_cb_;
1191
+ DeliveryReportCb *dr_cb_;
1192
+ PartitionerCb *partitioner_cb_;
1193
+ PartitionerKeyPointerCb *partitioner_kp_cb_;
1194
+ RebalanceCb *rebalance_cb_;
1195
+ OffsetCommitCb *offset_commit_cb_;
1196
+ OAuthBearerTokenRefreshCb *oauthbearer_token_refresh_cb_;
1197
+ SslCertificateVerifyCb *ssl_cert_verify_cb_;
1198
+ };
1199
+
1200
+
1201
+ class TopicImpl : public Topic {
1202
+ public:
1203
+ ~TopicImpl() {
1204
+ rd_kafka_topic_destroy(rkt_);
1205
+ }
1206
+
1207
+ std::string name() const {
1208
+ return rd_kafka_topic_name(rkt_);
1209
+ }
1210
+
1211
+ bool partition_available(int32_t partition) const {
1212
+ return !!rd_kafka_topic_partition_available(rkt_, partition);
1213
+ }
1214
+
1215
+ ErrorCode offset_store(int32_t partition, int64_t offset) {
1216
+ return static_cast<RdKafka::ErrorCode>(
1217
+ rd_kafka_offset_store(rkt_, partition, offset));
1218
+ }
1219
+
1220
+ static Topic *create(Handle &base, const std::string &topic, Conf *conf);
1221
+
1222
+ struct rd_kafka_topic_s *c_ptr() {
1223
+ return rkt_;
1224
+ }
1225
+
1226
+ rd_kafka_topic_t *rkt_;
1227
+ PartitionerCb *partitioner_cb_;
1228
+ PartitionerKeyPointerCb *partitioner_kp_cb_;
1229
+ };
1230
+
1231
+
1232
+ /**
1233
+ * Topic and Partition
1234
+ */
1235
+ class TopicPartitionImpl : public TopicPartition {
1236
+ public:
1237
+ ~TopicPartitionImpl() {
1238
+ }
1239
+
1240
+ static TopicPartition *create(const std::string &topic, int partition);
1241
+
1242
+ TopicPartitionImpl(const std::string &topic, int partition) :
1243
+ topic_(topic),
1244
+ partition_(partition),
1245
+ offset_(RdKafka::Topic::OFFSET_INVALID),
1246
+ err_(ERR_NO_ERROR),
1247
+ leader_epoch_(-1) {
1248
+ }
1249
+
1250
+ TopicPartitionImpl(const std::string &topic, int partition, int64_t offset) :
1251
+ topic_(topic),
1252
+ partition_(partition),
1253
+ offset_(offset),
1254
+ err_(ERR_NO_ERROR),
1255
+ leader_epoch_(-1) {
1256
+ }
1257
+
1258
+ TopicPartitionImpl(const rd_kafka_topic_partition_t *c_part) {
1259
+ topic_ = std::string(c_part->topic);
1260
+ partition_ = c_part->partition;
1261
+ offset_ = c_part->offset;
1262
+ err_ = static_cast<ErrorCode>(c_part->err);
1263
+ leader_epoch_ = rd_kafka_topic_partition_get_leader_epoch(c_part);
1264
+ if (c_part->metadata_size > 0) {
1265
+ unsigned char *metadata = (unsigned char *)c_part->metadata;
1266
+ metadata_.assign(metadata, metadata + c_part->metadata_size);
1267
+ }
1268
+ }
1269
+
1270
+ static void destroy(std::vector<TopicPartition *> &partitions);
1271
+
1272
+ int partition() const {
1273
+ return partition_;
1274
+ }
1275
+ const std::string &topic() const {
1276
+ return topic_;
1277
+ }
1278
+
1279
+ int64_t offset() const {
1280
+ return offset_;
1281
+ }
1282
+
1283
+ ErrorCode err() const {
1284
+ return err_;
1285
+ }
1286
+
1287
+ void set_offset(int64_t offset) {
1288
+ offset_ = offset;
1289
+ }
1290
+
1291
+ int32_t get_leader_epoch() {
1292
+ return leader_epoch_;
1293
+ }
1294
+
1295
+ void set_leader_epoch(int32_t leader_epoch) {
1296
+ leader_epoch_ = leader_epoch;
1297
+ }
1298
+
1299
+ std::vector<unsigned char> get_metadata() {
1300
+ return metadata_;
1301
+ }
1302
+
1303
+ void set_metadata(std::vector<unsigned char> &metadata) {
1304
+ metadata_ = metadata;
1305
+ }
1306
+
1307
+ std::ostream &operator<<(std::ostream &ostrm) const {
1308
+ return ostrm << topic_ << " [" << partition_ << "]";
1309
+ }
1310
+
1311
+ std::string topic_;
1312
+ int partition_;
1313
+ int64_t offset_;
1314
+ ErrorCode err_;
1315
+ int32_t leader_epoch_;
1316
+ std::vector<unsigned char> metadata_;
1317
+ };
1318
+
1319
+
1320
+ /**
1321
+ * @class ConsumerGroupMetadata wraps the
1322
+ * C rd_kafka_consumer_group_metadata_t object.
1323
+ */
1324
+ class ConsumerGroupMetadataImpl : public ConsumerGroupMetadata {
1325
+ public:
1326
+ ~ConsumerGroupMetadataImpl() {
1327
+ rd_kafka_consumer_group_metadata_destroy(cgmetadata_);
1328
+ }
1329
+
1330
+ ConsumerGroupMetadataImpl(rd_kafka_consumer_group_metadata_t *cgmetadata) :
1331
+ cgmetadata_(cgmetadata) {
1332
+ }
1333
+
1334
+ rd_kafka_consumer_group_metadata_t *cgmetadata_;
1335
+ };
1336
+
1337
+
1338
+ class KafkaConsumerImpl : virtual public KafkaConsumer,
1339
+ virtual public HandleImpl {
1340
+ public:
1341
+ ~KafkaConsumerImpl() {
1342
+ if (rk_)
1343
+ rd_kafka_destroy_flags(rk_, RD_KAFKA_DESTROY_F_NO_CONSUMER_CLOSE);
1344
+ }
1345
+
1346
+ static KafkaConsumer *create(Conf *conf, std::string &errstr);
1347
+
1348
+ ErrorCode assignment(std::vector<TopicPartition *> &partitions);
1349
+ bool assignment_lost();
1350
+ std::string rebalance_protocol() {
1351
+ const char *str = rd_kafka_rebalance_protocol(rk_);
1352
+ return std::string(str ? str : "");
1353
+ }
1354
+ ErrorCode subscription(std::vector<std::string> &topics);
1355
+ ErrorCode subscribe(const std::vector<std::string> &topics);
1356
+ ErrorCode unsubscribe();
1357
+ ErrorCode assign(const std::vector<TopicPartition *> &partitions);
1358
+ ErrorCode unassign();
1359
+ Error *incremental_assign(const std::vector<TopicPartition *> &partitions);
1360
+ Error *incremental_unassign(const std::vector<TopicPartition *> &partitions);
1361
+
1362
+ Message *consume(int timeout_ms);
1363
+ ErrorCode commitSync() {
1364
+ return static_cast<ErrorCode>(rd_kafka_commit(rk_, NULL, 0 /*sync*/));
1365
+ }
1366
+ ErrorCode commitAsync() {
1367
+ return static_cast<ErrorCode>(rd_kafka_commit(rk_, NULL, 1 /*async*/));
1368
+ }
1369
+ ErrorCode commitSync(Message *message) {
1370
+ MessageImpl *msgimpl = dynamic_cast<MessageImpl *>(message);
1371
+ return static_cast<ErrorCode>(
1372
+ rd_kafka_commit_message(rk_, msgimpl->rkmessage_, 0 /*sync*/));
1373
+ }
1374
+ ErrorCode commitAsync(Message *message) {
1375
+ MessageImpl *msgimpl = dynamic_cast<MessageImpl *>(message);
1376
+ return static_cast<ErrorCode>(
1377
+ rd_kafka_commit_message(rk_, msgimpl->rkmessage_, 1 /*async*/));
1378
+ }
1379
+
1380
+ ErrorCode commitSync(std::vector<TopicPartition *> &offsets) {
1381
+ rd_kafka_topic_partition_list_t *c_parts = partitions_to_c_parts(offsets);
1382
+ rd_kafka_resp_err_t err = rd_kafka_commit(rk_, c_parts, 0);
1383
+ if (!err)
1384
+ update_partitions_from_c_parts(offsets, c_parts);
1385
+ rd_kafka_topic_partition_list_destroy(c_parts);
1386
+ return static_cast<ErrorCode>(err);
1387
+ }
1388
+
1389
+ ErrorCode commitAsync(const std::vector<TopicPartition *> &offsets) {
1390
+ rd_kafka_topic_partition_list_t *c_parts = partitions_to_c_parts(offsets);
1391
+ rd_kafka_resp_err_t err = rd_kafka_commit(rk_, c_parts, 1);
1392
+ rd_kafka_topic_partition_list_destroy(c_parts);
1393
+ return static_cast<ErrorCode>(err);
1394
+ }
1395
+
1396
+ ErrorCode commitSync(OffsetCommitCb *offset_commit_cb) {
1397
+ return static_cast<ErrorCode>(rd_kafka_commit_queue(
1398
+ rk_, NULL, NULL, RdKafka::offset_commit_cb_trampoline0,
1399
+ offset_commit_cb));
1400
+ }
1401
+
1402
+ ErrorCode commitSync(std::vector<TopicPartition *> &offsets,
1403
+ OffsetCommitCb *offset_commit_cb) {
1404
+ rd_kafka_topic_partition_list_t *c_parts = partitions_to_c_parts(offsets);
1405
+ rd_kafka_resp_err_t err = rd_kafka_commit_queue(
1406
+ rk_, c_parts, NULL, RdKafka::offset_commit_cb_trampoline0,
1407
+ offset_commit_cb);
1408
+ rd_kafka_topic_partition_list_destroy(c_parts);
1409
+ return static_cast<ErrorCode>(err);
1410
+ }
1411
+
1412
+ ErrorCode committed(std::vector<TopicPartition *> &partitions,
1413
+ int timeout_ms);
1414
+ ErrorCode position(std::vector<TopicPartition *> &partitions);
1415
+
1416
+ ConsumerGroupMetadata *groupMetadata() {
1417
+ rd_kafka_consumer_group_metadata_t *cgmetadata;
1418
+
1419
+ cgmetadata = rd_kafka_consumer_group_metadata(rk_);
1420
+ if (!cgmetadata)
1421
+ return NULL;
1422
+
1423
+ return new ConsumerGroupMetadataImpl(cgmetadata);
1424
+ }
1425
+
1426
+ ErrorCode close();
1427
+
1428
+ Error *close(Queue *queue);
1429
+
1430
+ bool closed() {
1431
+ return rd_kafka_consumer_closed(rk_) ? true : false;
1432
+ }
1433
+
1434
+ ErrorCode seek(const TopicPartition &partition, int timeout_ms);
1435
+
1436
+ ErrorCode offsets_store(std::vector<TopicPartition *> &offsets) {
1437
+ rd_kafka_topic_partition_list_t *c_parts = partitions_to_c_parts(offsets);
1438
+ rd_kafka_resp_err_t err = rd_kafka_offsets_store(rk_, c_parts);
1439
+ update_partitions_from_c_parts(offsets, c_parts);
1440
+ rd_kafka_topic_partition_list_destroy(c_parts);
1441
+ return static_cast<ErrorCode>(err);
1442
+ }
1443
+ };
1444
+
1445
+
1446
+ class MetadataImpl : public Metadata {
1447
+ public:
1448
+ MetadataImpl(const rd_kafka_metadata_t *metadata);
1449
+ ~MetadataImpl();
1450
+
1451
+ const std::vector<const BrokerMetadata *> *brokers() const {
1452
+ return &brokers_;
1453
+ }
1454
+
1455
+ const std::vector<const TopicMetadata *> *topics() const {
1456
+ return &topics_;
1457
+ }
1458
+
1459
+ std::string orig_broker_name() const {
1460
+ return std::string(metadata_->orig_broker_name);
1461
+ }
1462
+
1463
+ int32_t orig_broker_id() const {
1464
+ return metadata_->orig_broker_id;
1465
+ }
1466
+
1467
+ private:
1468
+ const rd_kafka_metadata_t *metadata_;
1469
+ std::vector<const BrokerMetadata *> brokers_;
1470
+ std::vector<const TopicMetadata *> topics_;
1471
+ std::string orig_broker_name_;
1472
+ };
1473
+
1474
+
1475
+
1476
+ class ConsumerImpl : virtual public Consumer, virtual public HandleImpl {
1477
+ public:
1478
+ ~ConsumerImpl() {
1479
+ if (rk_)
1480
+ rd_kafka_destroy(rk_);
1481
+ }
1482
+ static Consumer *create(Conf *conf, std::string &errstr);
1483
+
1484
+ ErrorCode start(Topic *topic, int32_t partition, int64_t offset);
1485
+ ErrorCode start(Topic *topic,
1486
+ int32_t partition,
1487
+ int64_t offset,
1488
+ Queue *queue);
1489
+ ErrorCode stop(Topic *topic, int32_t partition);
1490
+ ErrorCode seek(Topic *topic,
1491
+ int32_t partition,
1492
+ int64_t offset,
1493
+ int timeout_ms);
1494
+ Message *consume(Topic *topic, int32_t partition, int timeout_ms);
1495
+ Message *consume(Queue *queue, int timeout_ms);
1496
+ int consume_callback(Topic *topic,
1497
+ int32_t partition,
1498
+ int timeout_ms,
1499
+ ConsumeCb *cb,
1500
+ void *opaque);
1501
+ int consume_callback(Queue *queue,
1502
+ int timeout_ms,
1503
+ RdKafka::ConsumeCb *consume_cb,
1504
+ void *opaque);
1505
+ };
1506
+
1507
+
1508
+
1509
+ class ProducerImpl : virtual public Producer, virtual public HandleImpl {
1510
+ public:
1511
+ ~ProducerImpl() {
1512
+ if (rk_)
1513
+ rd_kafka_destroy(rk_);
1514
+ }
1515
+
1516
+ ErrorCode produce(Topic *topic,
1517
+ int32_t partition,
1518
+ int msgflags,
1519
+ void *payload,
1520
+ size_t len,
1521
+ const std::string *key,
1522
+ void *msg_opaque);
1523
+
1524
+ ErrorCode produce(Topic *topic,
1525
+ int32_t partition,
1526
+ int msgflags,
1527
+ void *payload,
1528
+ size_t len,
1529
+ const void *key,
1530
+ size_t key_len,
1531
+ void *msg_opaque);
1532
+
1533
+ ErrorCode produce(Topic *topic,
1534
+ int32_t partition,
1535
+ const std::vector<char> *payload,
1536
+ const std::vector<char> *key,
1537
+ void *msg_opaque);
1538
+
1539
+ ErrorCode produce(const std::string topic_name,
1540
+ int32_t partition,
1541
+ int msgflags,
1542
+ void *payload,
1543
+ size_t len,
1544
+ const void *key,
1545
+ size_t key_len,
1546
+ int64_t timestamp,
1547
+ void *msg_opaque);
1548
+
1549
+ ErrorCode produce(const std::string topic_name,
1550
+ int32_t partition,
1551
+ int msgflags,
1552
+ void *payload,
1553
+ size_t len,
1554
+ const void *key,
1555
+ size_t key_len,
1556
+ int64_t timestamp,
1557
+ RdKafka::Headers *headers,
1558
+ void *msg_opaque);
1559
+
1560
+ ErrorCode flush(int timeout_ms) {
1561
+ return static_cast<RdKafka::ErrorCode>(rd_kafka_flush(rk_, timeout_ms));
1562
+ }
1563
+
1564
+ ErrorCode purge(int purge_flags) {
1565
+ return static_cast<RdKafka::ErrorCode>(
1566
+ rd_kafka_purge(rk_, (int)purge_flags));
1567
+ }
1568
+
1569
+ Error *init_transactions(int timeout_ms) {
1570
+ rd_kafka_error_t *c_error;
1571
+
1572
+ c_error = rd_kafka_init_transactions(rk_, timeout_ms);
1573
+
1574
+ if (c_error)
1575
+ return new ErrorImpl(c_error);
1576
+ else
1577
+ return NULL;
1578
+ }
1579
+
1580
+ Error *begin_transaction() {
1581
+ rd_kafka_error_t *c_error;
1582
+
1583
+ c_error = rd_kafka_begin_transaction(rk_);
1584
+
1585
+ if (c_error)
1586
+ return new ErrorImpl(c_error);
1587
+ else
1588
+ return NULL;
1589
+ }
1590
+
1591
+ Error *send_offsets_to_transaction(
1592
+ const std::vector<TopicPartition *> &offsets,
1593
+ const ConsumerGroupMetadata *group_metadata,
1594
+ int timeout_ms) {
1595
+ rd_kafka_error_t *c_error;
1596
+ const RdKafka::ConsumerGroupMetadataImpl *cgmdimpl =
1597
+ dynamic_cast<const RdKafka::ConsumerGroupMetadataImpl *>(
1598
+ group_metadata);
1599
+ rd_kafka_topic_partition_list_t *c_offsets = partitions_to_c_parts(offsets);
1600
+
1601
+ c_error = rd_kafka_send_offsets_to_transaction(
1602
+ rk_, c_offsets, cgmdimpl->cgmetadata_, timeout_ms);
1603
+
1604
+ rd_kafka_topic_partition_list_destroy(c_offsets);
1605
+
1606
+ if (c_error)
1607
+ return new ErrorImpl(c_error);
1608
+ else
1609
+ return NULL;
1610
+ }
1611
+
1612
+ Error *commit_transaction(int timeout_ms) {
1613
+ rd_kafka_error_t *c_error;
1614
+
1615
+ c_error = rd_kafka_commit_transaction(rk_, timeout_ms);
1616
+
1617
+ if (c_error)
1618
+ return new ErrorImpl(c_error);
1619
+ else
1620
+ return NULL;
1621
+ }
1622
+
1623
+ Error *abort_transaction(int timeout_ms) {
1624
+ rd_kafka_error_t *c_error;
1625
+
1626
+ c_error = rd_kafka_abort_transaction(rk_, timeout_ms);
1627
+
1628
+ if (c_error)
1629
+ return new ErrorImpl(c_error);
1630
+ else
1631
+ return NULL;
1632
+ }
1633
+
1634
+ static Producer *create(Conf *conf, std::string &errstr);
1635
+ };
1636
+
1637
+
1638
+
1639
+ } // namespace RdKafka
1640
+
1641
+ #endif /* _RDKAFKACPP_INT_H_ */