@platformatic/rdkafka 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (767) hide show
  1. package/.editorconfig +5 -0
  2. package/.jshintignore +1 -0
  3. package/.jshintrc +23 -0
  4. package/CONTRIBUTING.md +237 -0
  5. package/LICENSE.txt +21 -0
  6. package/Makefile +94 -0
  7. package/README.md +630 -0
  8. package/bench/consumer-raw-rdkafka.js +76 -0
  9. package/bench/consumer-subscribe.js +77 -0
  10. package/bench/kafka-consumer-stream.js +100 -0
  11. package/bench/producer-raw-rdkafka.js +125 -0
  12. package/bench/producer-rdkafka.js +117 -0
  13. package/bench/seed.sh +38 -0
  14. package/binding.gyp +155 -0
  15. package/ci/checks/librdkafka-correct-version.js +67 -0
  16. package/ci/checks/librdkafka-exists.js +13 -0
  17. package/ci/librdkafka-defs-generator.js +193 -0
  18. package/ci/prepublish.js +3 -0
  19. package/config.d.ts +1132 -0
  20. package/configure +15 -0
  21. package/cpplint.py +6325 -0
  22. package/deploy.enc +0 -0
  23. package/deps/librdkafka/.clang-format +136 -0
  24. package/deps/librdkafka/.clang-format-cpp +103 -0
  25. package/deps/librdkafka/.dir-locals.el +10 -0
  26. package/deps/librdkafka/.formatignore +33 -0
  27. package/deps/librdkafka/.gdbmacros +19 -0
  28. package/deps/librdkafka/.semaphore/project.yml +43 -0
  29. package/deps/librdkafka/.semaphore/project_public.yml +20 -0
  30. package/deps/librdkafka/.semaphore/semaphore.yml +355 -0
  31. package/deps/librdkafka/CHANGELOG.md +1738 -0
  32. package/deps/librdkafka/CMakeLists.txt +291 -0
  33. package/deps/librdkafka/CODE_OF_CONDUCT.md +46 -0
  34. package/deps/librdkafka/CONFIGURATION.md +189 -0
  35. package/deps/librdkafka/CONTRIBUTING.md +431 -0
  36. package/deps/librdkafka/Doxyfile +2375 -0
  37. package/deps/librdkafka/INTRODUCTION.md +2173 -0
  38. package/deps/librdkafka/LICENSE +26 -0
  39. package/deps/librdkafka/LICENSE.cjson +22 -0
  40. package/deps/librdkafka/LICENSE.crc32c +28 -0
  41. package/deps/librdkafka/LICENSE.fnv1a +18 -0
  42. package/deps/librdkafka/LICENSE.hdrhistogram +27 -0
  43. package/deps/librdkafka/LICENSE.lz4 +26 -0
  44. package/deps/librdkafka/LICENSE.murmur2 +25 -0
  45. package/deps/librdkafka/LICENSE.nanopb +22 -0
  46. package/deps/librdkafka/LICENSE.opentelemetry +203 -0
  47. package/deps/librdkafka/LICENSE.pycrc +23 -0
  48. package/deps/librdkafka/LICENSE.queue +31 -0
  49. package/deps/librdkafka/LICENSE.regexp +5 -0
  50. package/deps/librdkafka/LICENSE.snappy +36 -0
  51. package/deps/librdkafka/LICENSE.tinycthread +26 -0
  52. package/deps/librdkafka/LICENSE.wingetopt +49 -0
  53. package/deps/librdkafka/LICENSES.txt +625 -0
  54. package/deps/librdkafka/Makefile +124 -0
  55. package/deps/librdkafka/README.md +199 -0
  56. package/deps/librdkafka/README.win32 +26 -0
  57. package/deps/librdkafka/STATISTICS.md +624 -0
  58. package/deps/librdkafka/configure +214 -0
  59. package/deps/librdkafka/configure.self +331 -0
  60. package/deps/librdkafka/debian/changelog +111 -0
  61. package/deps/librdkafka/debian/compat +1 -0
  62. package/deps/librdkafka/debian/control +71 -0
  63. package/deps/librdkafka/debian/copyright +99 -0
  64. package/deps/librdkafka/debian/gbp.conf +9 -0
  65. package/deps/librdkafka/debian/librdkafka++1.install +1 -0
  66. package/deps/librdkafka/debian/librdkafka-dev.examples +2 -0
  67. package/deps/librdkafka/debian/librdkafka-dev.install +9 -0
  68. package/deps/librdkafka/debian/librdkafka1.docs +5 -0
  69. package/deps/librdkafka/debian/librdkafka1.install +1 -0
  70. package/deps/librdkafka/debian/librdkafka1.symbols +135 -0
  71. package/deps/librdkafka/debian/rules +19 -0
  72. package/deps/librdkafka/debian/source/format +1 -0
  73. package/deps/librdkafka/debian/watch +2 -0
  74. package/deps/librdkafka/dev-conf.sh +123 -0
  75. package/deps/librdkafka/examples/CMakeLists.txt +79 -0
  76. package/deps/librdkafka/examples/Makefile +167 -0
  77. package/deps/librdkafka/examples/README.md +42 -0
  78. package/deps/librdkafka/examples/alter_consumer_group_offsets.c +338 -0
  79. package/deps/librdkafka/examples/consumer.c +261 -0
  80. package/deps/librdkafka/examples/delete_records.c +233 -0
  81. package/deps/librdkafka/examples/describe_cluster.c +322 -0
  82. package/deps/librdkafka/examples/describe_consumer_groups.c +436 -0
  83. package/deps/librdkafka/examples/describe_topics.c +427 -0
  84. package/deps/librdkafka/examples/elect_leaders.c +317 -0
  85. package/deps/librdkafka/examples/globals.json +11 -0
  86. package/deps/librdkafka/examples/idempotent_producer.c +344 -0
  87. package/deps/librdkafka/examples/incremental_alter_configs.c +348 -0
  88. package/deps/librdkafka/examples/kafkatest_verifiable_client.cpp +961 -0
  89. package/deps/librdkafka/examples/list_consumer_group_offsets.c +359 -0
  90. package/deps/librdkafka/examples/list_consumer_groups.c +365 -0
  91. package/deps/librdkafka/examples/list_offsets.c +327 -0
  92. package/deps/librdkafka/examples/misc.c +287 -0
  93. package/deps/librdkafka/examples/openssl_engine_example.cpp +249 -0
  94. package/deps/librdkafka/examples/producer.c +251 -0
  95. package/deps/librdkafka/examples/producer.cpp +228 -0
  96. package/deps/librdkafka/examples/rdkafka_complex_consumer_example.c +617 -0
  97. package/deps/librdkafka/examples/rdkafka_complex_consumer_example.cpp +467 -0
  98. package/deps/librdkafka/examples/rdkafka_consume_batch.cpp +264 -0
  99. package/deps/librdkafka/examples/rdkafka_example.c +853 -0
  100. package/deps/librdkafka/examples/rdkafka_example.cpp +679 -0
  101. package/deps/librdkafka/examples/rdkafka_performance.c +1781 -0
  102. package/deps/librdkafka/examples/transactions-older-broker.c +668 -0
  103. package/deps/librdkafka/examples/transactions.c +665 -0
  104. package/deps/librdkafka/examples/user_scram.c +492 -0
  105. package/deps/librdkafka/examples/win_ssl_cert_store.cpp +395 -0
  106. package/deps/librdkafka/lds-gen.py +73 -0
  107. package/deps/librdkafka/mainpage.doxy +40 -0
  108. package/deps/librdkafka/mklove/Makefile.base +329 -0
  109. package/deps/librdkafka/mklove/modules/configure.atomics +144 -0
  110. package/deps/librdkafka/mklove/modules/configure.base +2484 -0
  111. package/deps/librdkafka/mklove/modules/configure.builtin +70 -0
  112. package/deps/librdkafka/mklove/modules/configure.cc +186 -0
  113. package/deps/librdkafka/mklove/modules/configure.cxx +8 -0
  114. package/deps/librdkafka/mklove/modules/configure.fileversion +65 -0
  115. package/deps/librdkafka/mklove/modules/configure.gitversion +29 -0
  116. package/deps/librdkafka/mklove/modules/configure.good_cflags +18 -0
  117. package/deps/librdkafka/mklove/modules/configure.host +132 -0
  118. package/deps/librdkafka/mklove/modules/configure.lib +49 -0
  119. package/deps/librdkafka/mklove/modules/configure.libcurl +99 -0
  120. package/deps/librdkafka/mklove/modules/configure.libsasl2 +36 -0
  121. package/deps/librdkafka/mklove/modules/configure.libssl +147 -0
  122. package/deps/librdkafka/mklove/modules/configure.libzstd +58 -0
  123. package/deps/librdkafka/mklove/modules/configure.parseversion +95 -0
  124. package/deps/librdkafka/mklove/modules/configure.pic +16 -0
  125. package/deps/librdkafka/mklove/modules/configure.socket +20 -0
  126. package/deps/librdkafka/mklove/modules/configure.zlib +61 -0
  127. package/deps/librdkafka/mklove/modules/patches/README.md +8 -0
  128. package/deps/librdkafka/mklove/modules/patches/libcurl.0000-no-runtime-linking-check.patch +11 -0
  129. package/deps/librdkafka/mklove/modules/patches/libssl.0000-osx-rand-include-fix-OpenSSL-PR16409.patch +56 -0
  130. package/deps/librdkafka/packaging/RELEASE.md +311 -0
  131. package/deps/librdkafka/packaging/alpine/build-alpine.sh +38 -0
  132. package/deps/librdkafka/packaging/archlinux/PKGBUILD +30 -0
  133. package/deps/librdkafka/packaging/cmake/Config.cmake.in +37 -0
  134. package/deps/librdkafka/packaging/cmake/Modules/FindLZ4.cmake +38 -0
  135. package/deps/librdkafka/packaging/cmake/Modules/FindZSTD.cmake +27 -0
  136. package/deps/librdkafka/packaging/cmake/Modules/LICENSE.FindZstd +178 -0
  137. package/deps/librdkafka/packaging/cmake/README.md +38 -0
  138. package/deps/librdkafka/packaging/cmake/config.h.in +52 -0
  139. package/deps/librdkafka/packaging/cmake/parseversion.cmake +60 -0
  140. package/deps/librdkafka/packaging/cmake/rdkafka.pc.in +12 -0
  141. package/deps/librdkafka/packaging/cmake/try_compile/atomic_32_test.c +8 -0
  142. package/deps/librdkafka/packaging/cmake/try_compile/atomic_64_test.c +8 -0
  143. package/deps/librdkafka/packaging/cmake/try_compile/c11threads_test.c +14 -0
  144. package/deps/librdkafka/packaging/cmake/try_compile/crc32c_hw_test.c +27 -0
  145. package/deps/librdkafka/packaging/cmake/try_compile/dlopen_test.c +11 -0
  146. package/deps/librdkafka/packaging/cmake/try_compile/libsasl2_test.c +7 -0
  147. package/deps/librdkafka/packaging/cmake/try_compile/pthread_setname_darwin_test.c +6 -0
  148. package/deps/librdkafka/packaging/cmake/try_compile/pthread_setname_freebsd_test.c +7 -0
  149. package/deps/librdkafka/packaging/cmake/try_compile/pthread_setname_gnu_test.c +5 -0
  150. package/deps/librdkafka/packaging/cmake/try_compile/rand_r_test.c +7 -0
  151. package/deps/librdkafka/packaging/cmake/try_compile/rdkafka_setup.cmake +122 -0
  152. package/deps/librdkafka/packaging/cmake/try_compile/regex_test.c +10 -0
  153. package/deps/librdkafka/packaging/cmake/try_compile/strndup_test.c +5 -0
  154. package/deps/librdkafka/packaging/cmake/try_compile/sync_32_test.c +8 -0
  155. package/deps/librdkafka/packaging/cmake/try_compile/sync_64_test.c +8 -0
  156. package/deps/librdkafka/packaging/cp/README.md +13 -0
  157. package/deps/librdkafka/packaging/cp/check_features.c +64 -0
  158. package/deps/librdkafka/packaging/cp/verify-deb.sh +33 -0
  159. package/deps/librdkafka/packaging/cp/verify-packages.sh +48 -0
  160. package/deps/librdkafka/packaging/cp/verify-rpm.sh +39 -0
  161. package/deps/librdkafka/packaging/debian/changelog +66 -0
  162. package/deps/librdkafka/packaging/debian/compat +1 -0
  163. package/deps/librdkafka/packaging/debian/control +49 -0
  164. package/deps/librdkafka/packaging/debian/copyright +84 -0
  165. package/deps/librdkafka/packaging/debian/gbp.conf +9 -0
  166. package/deps/librdkafka/packaging/debian/librdkafka-dev.dirs +2 -0
  167. package/deps/librdkafka/packaging/debian/librdkafka-dev.examples +2 -0
  168. package/deps/librdkafka/packaging/debian/librdkafka-dev.install +6 -0
  169. package/deps/librdkafka/packaging/debian/librdkafka-dev.substvars +1 -0
  170. package/deps/librdkafka/packaging/debian/librdkafka.dsc +16 -0
  171. package/deps/librdkafka/packaging/debian/librdkafka1-dbg.substvars +1 -0
  172. package/deps/librdkafka/packaging/debian/librdkafka1.dirs +1 -0
  173. package/deps/librdkafka/packaging/debian/librdkafka1.install +2 -0
  174. package/deps/librdkafka/packaging/debian/librdkafka1.postinst.debhelper +5 -0
  175. package/deps/librdkafka/packaging/debian/librdkafka1.postrm.debhelper +5 -0
  176. package/deps/librdkafka/packaging/debian/librdkafka1.symbols +64 -0
  177. package/deps/librdkafka/packaging/debian/rules +19 -0
  178. package/deps/librdkafka/packaging/debian/source/format +1 -0
  179. package/deps/librdkafka/packaging/debian/watch +2 -0
  180. package/deps/librdkafka/packaging/get_version.py +21 -0
  181. package/deps/librdkafka/packaging/homebrew/README.md +15 -0
  182. package/deps/librdkafka/packaging/homebrew/brew-update-pr.sh +31 -0
  183. package/deps/librdkafka/packaging/mingw-w64/configure-build-msys2-mingw-static.sh +52 -0
  184. package/deps/librdkafka/packaging/mingw-w64/configure-build-msys2-mingw.sh +21 -0
  185. package/deps/librdkafka/packaging/mingw-w64/run-tests.sh +6 -0
  186. package/deps/librdkafka/packaging/mingw-w64/semaphoreci-build.sh +38 -0
  187. package/deps/librdkafka/packaging/mingw-w64/travis-before-install.sh +20 -0
  188. package/deps/librdkafka/packaging/nuget/README.md +84 -0
  189. package/deps/librdkafka/packaging/nuget/artifact.py +177 -0
  190. package/deps/librdkafka/packaging/nuget/cleanup-s3.py +143 -0
  191. package/deps/librdkafka/packaging/nuget/common/p-common__plat-windows__arch-win32__bldtype-Release/msvcr120.zip +0 -0
  192. package/deps/librdkafka/packaging/nuget/common/p-common__plat-windows__arch-win32__bldtype-Release/msvcr140.zip +0 -0
  193. package/deps/librdkafka/packaging/nuget/common/p-common__plat-windows__arch-x64__bldtype-Release/msvcr120.zip +0 -0
  194. package/deps/librdkafka/packaging/nuget/common/p-common__plat-windows__arch-x64__bldtype-Release/msvcr140.zip +0 -0
  195. package/deps/librdkafka/packaging/nuget/nuget.sh +21 -0
  196. package/deps/librdkafka/packaging/nuget/nugetpackage.py +278 -0
  197. package/deps/librdkafka/packaging/nuget/packaging.py +448 -0
  198. package/deps/librdkafka/packaging/nuget/push-to-nuget.sh +21 -0
  199. package/deps/librdkafka/packaging/nuget/release.py +167 -0
  200. package/deps/librdkafka/packaging/nuget/requirements.txt +3 -0
  201. package/deps/librdkafka/packaging/nuget/staticpackage.py +178 -0
  202. package/deps/librdkafka/packaging/nuget/templates/librdkafka.redist.nuspec +21 -0
  203. package/deps/librdkafka/packaging/nuget/templates/librdkafka.redist.props +18 -0
  204. package/deps/librdkafka/packaging/nuget/templates/librdkafka.redist.targets +19 -0
  205. package/deps/librdkafka/packaging/nuget/zfile/__init__.py +0 -0
  206. package/deps/librdkafka/packaging/nuget/zfile/zfile.py +98 -0
  207. package/deps/librdkafka/packaging/rpm/Makefile +92 -0
  208. package/deps/librdkafka/packaging/rpm/README.md +23 -0
  209. package/deps/librdkafka/packaging/rpm/el7-x86_64.cfg +40 -0
  210. package/deps/librdkafka/packaging/rpm/librdkafka.spec +118 -0
  211. package/deps/librdkafka/packaging/rpm/mock-on-docker.sh +96 -0
  212. package/deps/librdkafka/packaging/rpm/tests/Makefile +25 -0
  213. package/deps/librdkafka/packaging/rpm/tests/README.md +8 -0
  214. package/deps/librdkafka/packaging/rpm/tests/run-test.sh +42 -0
  215. package/deps/librdkafka/packaging/rpm/tests/test-on-docker.sh +56 -0
  216. package/deps/librdkafka/packaging/rpm/tests/test.c +77 -0
  217. package/deps/librdkafka/packaging/rpm/tests/test.cpp +34 -0
  218. package/deps/librdkafka/packaging/tools/build-configurations-checks.sh +10 -0
  219. package/deps/librdkafka/packaging/tools/build-deb-package.sh +64 -0
  220. package/deps/librdkafka/packaging/tools/build-debian.sh +65 -0
  221. package/deps/librdkafka/packaging/tools/build-manylinux.sh +68 -0
  222. package/deps/librdkafka/packaging/tools/build-release-artifacts.sh +139 -0
  223. package/deps/librdkafka/packaging/tools/distro-build.sh +38 -0
  224. package/deps/librdkafka/packaging/tools/gh-release-checksums.py +39 -0
  225. package/deps/librdkafka/packaging/tools/rdutcoverage.sh +25 -0
  226. package/deps/librdkafka/packaging/tools/requirements.txt +2 -0
  227. package/deps/librdkafka/packaging/tools/style-format.sh +148 -0
  228. package/deps/librdkafka/service.yml +18 -0
  229. package/deps/librdkafka/src/CMakeLists.txt +374 -0
  230. package/deps/librdkafka/src/Makefile +103 -0
  231. package/deps/librdkafka/src/README.lz4.md +30 -0
  232. package/deps/librdkafka/src/cJSON.c +2834 -0
  233. package/deps/librdkafka/src/cJSON.h +398 -0
  234. package/deps/librdkafka/src/crc32c.c +430 -0
  235. package/deps/librdkafka/src/crc32c.h +38 -0
  236. package/deps/librdkafka/src/generate_proto.sh +66 -0
  237. package/deps/librdkafka/src/librdkafka_cgrp_synch.png +0 -0
  238. package/deps/librdkafka/src/lz4.c +2727 -0
  239. package/deps/librdkafka/src/lz4.h +842 -0
  240. package/deps/librdkafka/src/lz4frame.c +2078 -0
  241. package/deps/librdkafka/src/lz4frame.h +692 -0
  242. package/deps/librdkafka/src/lz4frame_static.h +47 -0
  243. package/deps/librdkafka/src/lz4hc.c +1631 -0
  244. package/deps/librdkafka/src/lz4hc.h +413 -0
  245. package/deps/librdkafka/src/nanopb/pb.h +917 -0
  246. package/deps/librdkafka/src/nanopb/pb_common.c +388 -0
  247. package/deps/librdkafka/src/nanopb/pb_common.h +49 -0
  248. package/deps/librdkafka/src/nanopb/pb_decode.c +1727 -0
  249. package/deps/librdkafka/src/nanopb/pb_decode.h +193 -0
  250. package/deps/librdkafka/src/nanopb/pb_encode.c +1000 -0
  251. package/deps/librdkafka/src/nanopb/pb_encode.h +185 -0
  252. package/deps/librdkafka/src/opentelemetry/common.pb.c +32 -0
  253. package/deps/librdkafka/src/opentelemetry/common.pb.h +170 -0
  254. package/deps/librdkafka/src/opentelemetry/metrics.options +2 -0
  255. package/deps/librdkafka/src/opentelemetry/metrics.pb.c +67 -0
  256. package/deps/librdkafka/src/opentelemetry/metrics.pb.h +966 -0
  257. package/deps/librdkafka/src/opentelemetry/resource.pb.c +12 -0
  258. package/deps/librdkafka/src/opentelemetry/resource.pb.h +58 -0
  259. package/deps/librdkafka/src/queue.h +850 -0
  260. package/deps/librdkafka/src/rd.h +441 -0
  261. package/deps/librdkafka/src/rdaddr.c +255 -0
  262. package/deps/librdkafka/src/rdaddr.h +203 -0
  263. package/deps/librdkafka/src/rdatomic.h +226 -0
  264. package/deps/librdkafka/src/rdavg.h +259 -0
  265. package/deps/librdkafka/src/rdavl.c +210 -0
  266. package/deps/librdkafka/src/rdavl.h +250 -0
  267. package/deps/librdkafka/src/rdbase64.c +169 -0
  268. package/deps/librdkafka/src/rdbase64.h +41 -0
  269. package/deps/librdkafka/src/rdbuf.c +1884 -0
  270. package/deps/librdkafka/src/rdbuf.h +375 -0
  271. package/deps/librdkafka/src/rdcrc32.c +114 -0
  272. package/deps/librdkafka/src/rdcrc32.h +170 -0
  273. package/deps/librdkafka/src/rddl.c +179 -0
  274. package/deps/librdkafka/src/rddl.h +43 -0
  275. package/deps/librdkafka/src/rdendian.h +174 -0
  276. package/deps/librdkafka/src/rdfloat.h +67 -0
  277. package/deps/librdkafka/src/rdfnv1a.c +113 -0
  278. package/deps/librdkafka/src/rdfnv1a.h +35 -0
  279. package/deps/librdkafka/src/rdgz.c +120 -0
  280. package/deps/librdkafka/src/rdgz.h +46 -0
  281. package/deps/librdkafka/src/rdhdrhistogram.c +721 -0
  282. package/deps/librdkafka/src/rdhdrhistogram.h +87 -0
  283. package/deps/librdkafka/src/rdhttp.c +512 -0
  284. package/deps/librdkafka/src/rdhttp.h +83 -0
  285. package/deps/librdkafka/src/rdinterval.h +177 -0
  286. package/deps/librdkafka/src/rdkafka.c +5351 -0
  287. package/deps/librdkafka/src/rdkafka.h +10603 -0
  288. package/deps/librdkafka/src/rdkafka_admin.c +9417 -0
  289. package/deps/librdkafka/src/rdkafka_admin.h +619 -0
  290. package/deps/librdkafka/src/rdkafka_assignment.c +1010 -0
  291. package/deps/librdkafka/src/rdkafka_assignment.h +73 -0
  292. package/deps/librdkafka/src/rdkafka_assignor.c +1786 -0
  293. package/deps/librdkafka/src/rdkafka_assignor.h +402 -0
  294. package/deps/librdkafka/src/rdkafka_aux.c +409 -0
  295. package/deps/librdkafka/src/rdkafka_aux.h +174 -0
  296. package/deps/librdkafka/src/rdkafka_background.c +221 -0
  297. package/deps/librdkafka/src/rdkafka_broker.c +6186 -0
  298. package/deps/librdkafka/src/rdkafka_broker.h +686 -0
  299. package/deps/librdkafka/src/rdkafka_buf.c +540 -0
  300. package/deps/librdkafka/src/rdkafka_buf.h +1524 -0
  301. package/deps/librdkafka/src/rdkafka_cert.c +552 -0
  302. package/deps/librdkafka/src/rdkafka_cert.h +61 -0
  303. package/deps/librdkafka/src/rdkafka_cgrp.c +7262 -0
  304. package/deps/librdkafka/src/rdkafka_cgrp.h +443 -0
  305. package/deps/librdkafka/src/rdkafka_conf.c +4456 -0
  306. package/deps/librdkafka/src/rdkafka_conf.h +668 -0
  307. package/deps/librdkafka/src/rdkafka_confval.h +97 -0
  308. package/deps/librdkafka/src/rdkafka_coord.c +623 -0
  309. package/deps/librdkafka/src/rdkafka_coord.h +132 -0
  310. package/deps/librdkafka/src/rdkafka_error.c +228 -0
  311. package/deps/librdkafka/src/rdkafka_error.h +80 -0
  312. package/deps/librdkafka/src/rdkafka_event.c +502 -0
  313. package/deps/librdkafka/src/rdkafka_event.h +126 -0
  314. package/deps/librdkafka/src/rdkafka_feature.c +461 -0
  315. package/deps/librdkafka/src/rdkafka_feature.h +102 -0
  316. package/deps/librdkafka/src/rdkafka_fetcher.c +1402 -0
  317. package/deps/librdkafka/src/rdkafka_fetcher.h +44 -0
  318. package/deps/librdkafka/src/rdkafka_header.c +220 -0
  319. package/deps/librdkafka/src/rdkafka_header.h +76 -0
  320. package/deps/librdkafka/src/rdkafka_idempotence.c +807 -0
  321. package/deps/librdkafka/src/rdkafka_idempotence.h +144 -0
  322. package/deps/librdkafka/src/rdkafka_int.h +1222 -0
  323. package/deps/librdkafka/src/rdkafka_interceptor.c +819 -0
  324. package/deps/librdkafka/src/rdkafka_interceptor.h +104 -0
  325. package/deps/librdkafka/src/rdkafka_lz4.c +450 -0
  326. package/deps/librdkafka/src/rdkafka_lz4.h +49 -0
  327. package/deps/librdkafka/src/rdkafka_metadata.c +2124 -0
  328. package/deps/librdkafka/src/rdkafka_metadata.h +341 -0
  329. package/deps/librdkafka/src/rdkafka_metadata_cache.c +977 -0
  330. package/deps/librdkafka/src/rdkafka_mock.c +2885 -0
  331. package/deps/librdkafka/src/rdkafka_mock.h +491 -0
  332. package/deps/librdkafka/src/rdkafka_mock_cgrp.c +710 -0
  333. package/deps/librdkafka/src/rdkafka_mock_handlers.c +2817 -0
  334. package/deps/librdkafka/src/rdkafka_mock_int.h +591 -0
  335. package/deps/librdkafka/src/rdkafka_msg.c +2573 -0
  336. package/deps/librdkafka/src/rdkafka_msg.h +614 -0
  337. package/deps/librdkafka/src/rdkafka_msgbatch.h +62 -0
  338. package/deps/librdkafka/src/rdkafka_msgset.h +98 -0
  339. package/deps/librdkafka/src/rdkafka_msgset_reader.c +1806 -0
  340. package/deps/librdkafka/src/rdkafka_msgset_writer.c +1470 -0
  341. package/deps/librdkafka/src/rdkafka_offset.c +1537 -0
  342. package/deps/librdkafka/src/rdkafka_offset.h +150 -0
  343. package/deps/librdkafka/src/rdkafka_op.c +997 -0
  344. package/deps/librdkafka/src/rdkafka_op.h +834 -0
  345. package/deps/librdkafka/src/rdkafka_partition.c +4801 -0
  346. package/deps/librdkafka/src/rdkafka_partition.h +1173 -0
  347. package/deps/librdkafka/src/rdkafka_pattern.c +228 -0
  348. package/deps/librdkafka/src/rdkafka_pattern.h +70 -0
  349. package/deps/librdkafka/src/rdkafka_plugin.c +213 -0
  350. package/deps/librdkafka/src/rdkafka_plugin.h +41 -0
  351. package/deps/librdkafka/src/rdkafka_proto.h +733 -0
  352. package/deps/librdkafka/src/rdkafka_protocol.h +127 -0
  353. package/deps/librdkafka/src/rdkafka_queue.c +1153 -0
  354. package/deps/librdkafka/src/rdkafka_queue.h +1201 -0
  355. package/deps/librdkafka/src/rdkafka_range_assignor.c +1748 -0
  356. package/deps/librdkafka/src/rdkafka_request.c +6817 -0
  357. package/deps/librdkafka/src/rdkafka_request.h +709 -0
  358. package/deps/librdkafka/src/rdkafka_roundrobin_assignor.c +123 -0
  359. package/deps/librdkafka/src/rdkafka_sasl.c +528 -0
  360. package/deps/librdkafka/src/rdkafka_sasl.h +63 -0
  361. package/deps/librdkafka/src/rdkafka_sasl_cyrus.c +722 -0
  362. package/deps/librdkafka/src/rdkafka_sasl_int.h +89 -0
  363. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer.c +1829 -0
  364. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer.h +52 -0
  365. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer_oidc.c +589 -0
  366. package/deps/librdkafka/src/rdkafka_sasl_oauthbearer_oidc.h +37 -0
  367. package/deps/librdkafka/src/rdkafka_sasl_plain.c +142 -0
  368. package/deps/librdkafka/src/rdkafka_sasl_scram.c +857 -0
  369. package/deps/librdkafka/src/rdkafka_sasl_win32.c +550 -0
  370. package/deps/librdkafka/src/rdkafka_ssl.c +1904 -0
  371. package/deps/librdkafka/src/rdkafka_ssl.h +64 -0
  372. package/deps/librdkafka/src/rdkafka_sticky_assignor.c +4781 -0
  373. package/deps/librdkafka/src/rdkafka_subscription.c +278 -0
  374. package/deps/librdkafka/src/rdkafka_telemetry.c +703 -0
  375. package/deps/librdkafka/src/rdkafka_telemetry.h +52 -0
  376. package/deps/librdkafka/src/rdkafka_telemetry_decode.c +1053 -0
  377. package/deps/librdkafka/src/rdkafka_telemetry_decode.h +59 -0
  378. package/deps/librdkafka/src/rdkafka_telemetry_encode.c +993 -0
  379. package/deps/librdkafka/src/rdkafka_telemetry_encode.h +301 -0
  380. package/deps/librdkafka/src/rdkafka_timer.c +402 -0
  381. package/deps/librdkafka/src/rdkafka_timer.h +117 -0
  382. package/deps/librdkafka/src/rdkafka_topic.c +2078 -0
  383. package/deps/librdkafka/src/rdkafka_topic.h +328 -0
  384. package/deps/librdkafka/src/rdkafka_transport.c +1297 -0
  385. package/deps/librdkafka/src/rdkafka_transport.h +94 -0
  386. package/deps/librdkafka/src/rdkafka_transport_int.h +100 -0
  387. package/deps/librdkafka/src/rdkafka_txnmgr.c +3251 -0
  388. package/deps/librdkafka/src/rdkafka_txnmgr.h +171 -0
  389. package/deps/librdkafka/src/rdkafka_zstd.c +226 -0
  390. package/deps/librdkafka/src/rdkafka_zstd.h +57 -0
  391. package/deps/librdkafka/src/rdlist.c +576 -0
  392. package/deps/librdkafka/src/rdlist.h +434 -0
  393. package/deps/librdkafka/src/rdlog.c +89 -0
  394. package/deps/librdkafka/src/rdlog.h +41 -0
  395. package/deps/librdkafka/src/rdmap.c +503 -0
  396. package/deps/librdkafka/src/rdmap.h +492 -0
  397. package/deps/librdkafka/src/rdmurmur2.c +167 -0
  398. package/deps/librdkafka/src/rdmurmur2.h +35 -0
  399. package/deps/librdkafka/src/rdports.c +61 -0
  400. package/deps/librdkafka/src/rdports.h +38 -0
  401. package/deps/librdkafka/src/rdposix.h +250 -0
  402. package/deps/librdkafka/src/rdrand.c +70 -0
  403. package/deps/librdkafka/src/rdrand.h +43 -0
  404. package/deps/librdkafka/src/rdregex.c +156 -0
  405. package/deps/librdkafka/src/rdregex.h +43 -0
  406. package/deps/librdkafka/src/rdsignal.h +57 -0
  407. package/deps/librdkafka/src/rdstring.c +645 -0
  408. package/deps/librdkafka/src/rdstring.h +98 -0
  409. package/deps/librdkafka/src/rdsysqueue.h +404 -0
  410. package/deps/librdkafka/src/rdtime.h +325 -0
  411. package/deps/librdkafka/src/rdtypes.h +86 -0
  412. package/deps/librdkafka/src/rdunittest.c +532 -0
  413. package/deps/librdkafka/src/rdunittest.h +230 -0
  414. package/deps/librdkafka/src/rdvarint.c +134 -0
  415. package/deps/librdkafka/src/rdvarint.h +165 -0
  416. package/deps/librdkafka/src/rdwin32.h +382 -0
  417. package/deps/librdkafka/src/rdxxhash.c +1030 -0
  418. package/deps/librdkafka/src/rdxxhash.h +328 -0
  419. package/deps/librdkafka/src/regexp.c +1347 -0
  420. package/deps/librdkafka/src/regexp.h +41 -0
  421. package/deps/librdkafka/src/snappy.c +1866 -0
  422. package/deps/librdkafka/src/snappy.h +62 -0
  423. package/deps/librdkafka/src/snappy_compat.h +138 -0
  424. package/deps/librdkafka/src/statistics_schema.json +444 -0
  425. package/deps/librdkafka/src/tinycthread.c +932 -0
  426. package/deps/librdkafka/src/tinycthread.h +503 -0
  427. package/deps/librdkafka/src/tinycthread_extra.c +175 -0
  428. package/deps/librdkafka/src/tinycthread_extra.h +208 -0
  429. package/deps/librdkafka/src/win32_config.h +58 -0
  430. package/deps/librdkafka/src-cpp/CMakeLists.txt +90 -0
  431. package/deps/librdkafka/src-cpp/ConfImpl.cpp +84 -0
  432. package/deps/librdkafka/src-cpp/ConsumerImpl.cpp +244 -0
  433. package/deps/librdkafka/src-cpp/HandleImpl.cpp +436 -0
  434. package/deps/librdkafka/src-cpp/HeadersImpl.cpp +48 -0
  435. package/deps/librdkafka/src-cpp/KafkaConsumerImpl.cpp +296 -0
  436. package/deps/librdkafka/src-cpp/Makefile +55 -0
  437. package/deps/librdkafka/src-cpp/MessageImpl.cpp +38 -0
  438. package/deps/librdkafka/src-cpp/MetadataImpl.cpp +170 -0
  439. package/deps/librdkafka/src-cpp/ProducerImpl.cpp +197 -0
  440. package/deps/librdkafka/src-cpp/QueueImpl.cpp +70 -0
  441. package/deps/librdkafka/src-cpp/README.md +16 -0
  442. package/deps/librdkafka/src-cpp/RdKafka.cpp +59 -0
  443. package/deps/librdkafka/src-cpp/TopicImpl.cpp +124 -0
  444. package/deps/librdkafka/src-cpp/TopicPartitionImpl.cpp +57 -0
  445. package/deps/librdkafka/src-cpp/rdkafkacpp.h +3771 -0
  446. package/deps/librdkafka/src-cpp/rdkafkacpp_int.h +1641 -0
  447. package/deps/librdkafka/tests/0000-unittests.c +72 -0
  448. package/deps/librdkafka/tests/0001-multiobj.c +98 -0
  449. package/deps/librdkafka/tests/0002-unkpart.c +244 -0
  450. package/deps/librdkafka/tests/0003-msgmaxsize.c +173 -0
  451. package/deps/librdkafka/tests/0004-conf.c +867 -0
  452. package/deps/librdkafka/tests/0005-order.c +133 -0
  453. package/deps/librdkafka/tests/0006-symbols.c +163 -0
  454. package/deps/librdkafka/tests/0007-autotopic.c +136 -0
  455. package/deps/librdkafka/tests/0008-reqacks.c +179 -0
  456. package/deps/librdkafka/tests/0009-mock_cluster.c +96 -0
  457. package/deps/librdkafka/tests/0011-produce_batch.c +752 -0
  458. package/deps/librdkafka/tests/0012-produce_consume.c +537 -0
  459. package/deps/librdkafka/tests/0013-null-msgs.c +473 -0
  460. package/deps/librdkafka/tests/0014-reconsume-191.c +512 -0
  461. package/deps/librdkafka/tests/0015-offset_seeks.c +172 -0
  462. package/deps/librdkafka/tests/0016-client_swname.c +166 -0
  463. package/deps/librdkafka/tests/0017-compression.c +142 -0
  464. package/deps/librdkafka/tests/0018-cgrp_term.c +333 -0
  465. package/deps/librdkafka/tests/0019-list_groups.c +289 -0
  466. package/deps/librdkafka/tests/0020-destroy_hang.c +162 -0
  467. package/deps/librdkafka/tests/0021-rkt_destroy.c +71 -0
  468. package/deps/librdkafka/tests/0022-consume_batch.c +276 -0
  469. package/deps/librdkafka/tests/0025-timers.c +147 -0
  470. package/deps/librdkafka/tests/0026-consume_pause.c +549 -0
  471. package/deps/librdkafka/tests/0028-long_topicnames.c +79 -0
  472. package/deps/librdkafka/tests/0029-assign_offset.c +204 -0
  473. package/deps/librdkafka/tests/0030-offset_commit.c +589 -0
  474. package/deps/librdkafka/tests/0031-get_offsets.c +235 -0
  475. package/deps/librdkafka/tests/0033-regex_subscribe.c +520 -0
  476. package/deps/librdkafka/tests/0034-offset_reset.c +377 -0
  477. package/deps/librdkafka/tests/0035-api_version.c +73 -0
  478. package/deps/librdkafka/tests/0036-partial_fetch.c +86 -0
  479. package/deps/librdkafka/tests/0037-destroy_hang_local.c +85 -0
  480. package/deps/librdkafka/tests/0038-performance.c +120 -0
  481. package/deps/librdkafka/tests/0039-event.c +284 -0
  482. package/deps/librdkafka/tests/0040-io_event.c +251 -0
  483. package/deps/librdkafka/tests/0041-fetch_max_bytes.c +96 -0
  484. package/deps/librdkafka/tests/0042-many_topics.c +252 -0
  485. package/deps/librdkafka/tests/0043-no_connection.c +77 -0
  486. package/deps/librdkafka/tests/0044-partition_cnt.c +93 -0
  487. package/deps/librdkafka/tests/0045-subscribe_update.c +746 -0
  488. package/deps/librdkafka/tests/0046-rkt_cache.c +65 -0
  489. package/deps/librdkafka/tests/0047-partial_buf_tmout.c +97 -0
  490. package/deps/librdkafka/tests/0048-partitioner.c +283 -0
  491. package/deps/librdkafka/tests/0049-consume_conn_close.c +162 -0
  492. package/deps/librdkafka/tests/0050-subscribe_adds.c +144 -0
  493. package/deps/librdkafka/tests/0051-assign_adds.c +125 -0
  494. package/deps/librdkafka/tests/0052-msg_timestamps.c +220 -0
  495. package/deps/librdkafka/tests/0053-stats_cb.cpp +535 -0
  496. package/deps/librdkafka/tests/0054-offset_time.cpp +236 -0
  497. package/deps/librdkafka/tests/0055-producer_latency.c +366 -0
  498. package/deps/librdkafka/tests/0056-balanced_group_mt.c +311 -0
  499. package/deps/librdkafka/tests/0057-invalid_topic.cpp +112 -0
  500. package/deps/librdkafka/tests/0058-log.cpp +123 -0
  501. package/deps/librdkafka/tests/0059-bsearch.cpp +237 -0
  502. package/deps/librdkafka/tests/0060-op_prio.cpp +163 -0
  503. package/deps/librdkafka/tests/0061-consumer_lag.cpp +275 -0
  504. package/deps/librdkafka/tests/0062-stats_event.c +126 -0
  505. package/deps/librdkafka/tests/0063-clusterid.cpp +180 -0
  506. package/deps/librdkafka/tests/0064-interceptors.c +481 -0
  507. package/deps/librdkafka/tests/0065-yield.cpp +140 -0
  508. package/deps/librdkafka/tests/0066-plugins.cpp +129 -0
  509. package/deps/librdkafka/tests/0067-empty_topic.cpp +148 -0
  510. package/deps/librdkafka/tests/0068-produce_timeout.c +138 -0
  511. package/deps/librdkafka/tests/0069-consumer_add_parts.c +123 -0
  512. package/deps/librdkafka/tests/0070-null_empty.cpp +197 -0
  513. package/deps/librdkafka/tests/0072-headers_ut.c +448 -0
  514. package/deps/librdkafka/tests/0073-headers.c +381 -0
  515. package/deps/librdkafka/tests/0074-producev.c +87 -0
  516. package/deps/librdkafka/tests/0075-retry.c +253 -0
  517. package/deps/librdkafka/tests/0076-produce_retry.c +450 -0
  518. package/deps/librdkafka/tests/0077-compaction.c +357 -0
  519. package/deps/librdkafka/tests/0078-c_from_cpp.cpp +96 -0
  520. package/deps/librdkafka/tests/0079-fork.c +93 -0
  521. package/deps/librdkafka/tests/0080-admin_ut.c +3065 -0
  522. package/deps/librdkafka/tests/0081-admin.c +5333 -0
  523. package/deps/librdkafka/tests/0082-fetch_max_bytes.cpp +133 -0
  524. package/deps/librdkafka/tests/0083-cb_event.c +228 -0
  525. package/deps/librdkafka/tests/0084-destroy_flags.c +212 -0
  526. package/deps/librdkafka/tests/0085-headers.cpp +388 -0
  527. package/deps/librdkafka/tests/0086-purge.c +335 -0
  528. package/deps/librdkafka/tests/0088-produce_metadata_timeout.c +162 -0
  529. package/deps/librdkafka/tests/0089-max_poll_interval.c +506 -0
  530. package/deps/librdkafka/tests/0090-idempotence.c +172 -0
  531. package/deps/librdkafka/tests/0091-max_poll_interval_timeout.c +297 -0
  532. package/deps/librdkafka/tests/0092-mixed_msgver.c +97 -0
  533. package/deps/librdkafka/tests/0093-holb.c +197 -0
  534. package/deps/librdkafka/tests/0094-idempotence_msg_timeout.c +230 -0
  535. package/deps/librdkafka/tests/0095-all_brokers_down.cpp +122 -0
  536. package/deps/librdkafka/tests/0097-ssl_verify.cpp +466 -0
  537. package/deps/librdkafka/tests/0098-consumer-txn.cpp +1218 -0
  538. package/deps/librdkafka/tests/0099-commit_metadata.c +194 -0
  539. package/deps/librdkafka/tests/0100-thread_interceptors.cpp +195 -0
  540. package/deps/librdkafka/tests/0101-fetch-from-follower.cpp +446 -0
  541. package/deps/librdkafka/tests/0102-static_group_rebalance.c +535 -0
  542. package/deps/librdkafka/tests/0103-transactions.c +1383 -0
  543. package/deps/librdkafka/tests/0104-fetch_from_follower_mock.c +624 -0
  544. package/deps/librdkafka/tests/0105-transactions_mock.c +3923 -0
  545. package/deps/librdkafka/tests/0106-cgrp_sess_timeout.c +297 -0
  546. package/deps/librdkafka/tests/0107-topic_recreate.c +259 -0
  547. package/deps/librdkafka/tests/0109-auto_create_topics.cpp +218 -0
  548. package/deps/librdkafka/tests/0110-batch_size.cpp +183 -0
  549. package/deps/librdkafka/tests/0111-delay_create_topics.cpp +127 -0
  550. package/deps/librdkafka/tests/0112-assign_unknown_part.c +98 -0
  551. package/deps/librdkafka/tests/0113-cooperative_rebalance.cpp +3329 -0
  552. package/deps/librdkafka/tests/0114-sticky_partitioning.cpp +176 -0
  553. package/deps/librdkafka/tests/0115-producer_auth.cpp +179 -0
  554. package/deps/librdkafka/tests/0116-kafkaconsumer_close.cpp +214 -0
  555. package/deps/librdkafka/tests/0117-mock_errors.c +321 -0
  556. package/deps/librdkafka/tests/0118-commit_rebalance.c +121 -0
  557. package/deps/librdkafka/tests/0119-consumer_auth.cpp +148 -0
  558. package/deps/librdkafka/tests/0120-asymmetric_subscription.c +180 -0
  559. package/deps/librdkafka/tests/0121-clusterid.c +115 -0
  560. package/deps/librdkafka/tests/0122-buffer_cleaning_after_rebalance.c +227 -0
  561. package/deps/librdkafka/tests/0123-connections_max_idle.c +98 -0
  562. package/deps/librdkafka/tests/0124-openssl_invalid_engine.c +69 -0
  563. package/deps/librdkafka/tests/0125-immediate_flush.c +144 -0
  564. package/deps/librdkafka/tests/0126-oauthbearer_oidc.c +213 -0
  565. package/deps/librdkafka/tests/0127-fetch_queue_backoff.cpp +165 -0
  566. package/deps/librdkafka/tests/0128-sasl_callback_queue.cpp +125 -0
  567. package/deps/librdkafka/tests/0129-fetch_aborted_msgs.c +78 -0
  568. package/deps/librdkafka/tests/0130-store_offsets.c +178 -0
  569. package/deps/librdkafka/tests/0131-connect_timeout.c +81 -0
  570. package/deps/librdkafka/tests/0132-strategy_ordering.c +171 -0
  571. package/deps/librdkafka/tests/0133-ssl_keys.c +128 -0
  572. package/deps/librdkafka/tests/0134-ssl_provider.c +92 -0
  573. package/deps/librdkafka/tests/0135-sasl_credentials.cpp +143 -0
  574. package/deps/librdkafka/tests/0136-resolve_cb.c +181 -0
  575. package/deps/librdkafka/tests/0137-barrier_batch_consume.c +609 -0
  576. package/deps/librdkafka/tests/0138-admin_mock.c +281 -0
  577. package/deps/librdkafka/tests/0139-offset_validation_mock.c +442 -0
  578. package/deps/librdkafka/tests/0140-commit_metadata.cpp +108 -0
  579. package/deps/librdkafka/tests/0142-reauthentication.c +495 -0
  580. package/deps/librdkafka/tests/0143-exponential_backoff_mock.c +553 -0
  581. package/deps/librdkafka/tests/0144-idempotence_mock.c +373 -0
  582. package/deps/librdkafka/tests/0145-pause_resume_mock.c +119 -0
  583. package/deps/librdkafka/tests/0146-metadata_mock.c +444 -0
  584. package/deps/librdkafka/tests/0150-telemetry_mock.c +648 -0
  585. package/deps/librdkafka/tests/1000-unktopic.c +164 -0
  586. package/deps/librdkafka/tests/8000-idle.cpp +60 -0
  587. package/deps/librdkafka/tests/8001-fetch_from_follower_mock_manual.c +113 -0
  588. package/deps/librdkafka/tests/CMakeLists.txt +164 -0
  589. package/deps/librdkafka/tests/LibrdkafkaTestApp.py +266 -0
  590. package/deps/librdkafka/tests/Makefile +182 -0
  591. package/deps/librdkafka/tests/README.md +509 -0
  592. package/deps/librdkafka/tests/autotest.sh +33 -0
  593. package/deps/librdkafka/tests/backtrace.gdb +30 -0
  594. package/deps/librdkafka/tests/broker_version_tests.py +315 -0
  595. package/deps/librdkafka/tests/buildbox.sh +17 -0
  596. package/deps/librdkafka/tests/cleanup-checker-tests.sh +20 -0
  597. package/deps/librdkafka/tests/cluster_testing.py +191 -0
  598. package/deps/librdkafka/tests/delete-test-topics.sh +56 -0
  599. package/deps/librdkafka/tests/fixtures/ssl/Makefile +8 -0
  600. package/deps/librdkafka/tests/fixtures/ssl/README.md +13 -0
  601. package/deps/librdkafka/tests/fixtures/ssl/client.keystore.p12 +0 -0
  602. package/deps/librdkafka/tests/fixtures/ssl/client2.certificate.pem +109 -0
  603. package/deps/librdkafka/tests/fixtures/ssl/client2.key +34 -0
  604. package/deps/librdkafka/tests/fixtures/ssl/create_keys.sh +93 -0
  605. package/deps/librdkafka/tests/fuzzers/Makefile +12 -0
  606. package/deps/librdkafka/tests/fuzzers/README.md +31 -0
  607. package/deps/librdkafka/tests/fuzzers/fuzz_regex.c +74 -0
  608. package/deps/librdkafka/tests/fuzzers/helpers.h +90 -0
  609. package/deps/librdkafka/tests/gen-ssl-certs.sh +165 -0
  610. package/deps/librdkafka/tests/interactive_broker_version.py +170 -0
  611. package/deps/librdkafka/tests/interceptor_test/CMakeLists.txt +16 -0
  612. package/deps/librdkafka/tests/interceptor_test/Makefile +22 -0
  613. package/deps/librdkafka/tests/interceptor_test/interceptor_test.c +314 -0
  614. package/deps/librdkafka/tests/interceptor_test/interceptor_test.h +54 -0
  615. package/deps/librdkafka/tests/java/IncrementalRebalanceCli.java +97 -0
  616. package/deps/librdkafka/tests/java/Makefile +12 -0
  617. package/deps/librdkafka/tests/java/Murmur2Cli.java +46 -0
  618. package/deps/librdkafka/tests/java/README.md +14 -0
  619. package/deps/librdkafka/tests/java/TransactionProducerCli.java +162 -0
  620. package/deps/librdkafka/tests/java/run-class.sh +11 -0
  621. package/deps/librdkafka/tests/librdkafka.suppressions +483 -0
  622. package/deps/librdkafka/tests/lz4_manual_test.sh +59 -0
  623. package/deps/librdkafka/tests/multi-broker-version-test.sh +50 -0
  624. package/deps/librdkafka/tests/parse-refcnt.sh +43 -0
  625. package/deps/librdkafka/tests/performance_plot.py +115 -0
  626. package/deps/librdkafka/tests/plugin_test/Makefile +19 -0
  627. package/deps/librdkafka/tests/plugin_test/plugin_test.c +58 -0
  628. package/deps/librdkafka/tests/requirements.txt +2 -0
  629. package/deps/librdkafka/tests/run-consumer-tests.sh +16 -0
  630. package/deps/librdkafka/tests/run-producer-tests.sh +16 -0
  631. package/deps/librdkafka/tests/run-test.sh +140 -0
  632. package/deps/librdkafka/tests/rusage.c +249 -0
  633. package/deps/librdkafka/tests/sasl_test.py +289 -0
  634. package/deps/librdkafka/tests/scenarios/README.md +6 -0
  635. package/deps/librdkafka/tests/scenarios/ak23.json +6 -0
  636. package/deps/librdkafka/tests/scenarios/default.json +5 -0
  637. package/deps/librdkafka/tests/scenarios/noautocreate.json +5 -0
  638. package/deps/librdkafka/tests/sockem.c +801 -0
  639. package/deps/librdkafka/tests/sockem.h +85 -0
  640. package/deps/librdkafka/tests/sockem_ctrl.c +145 -0
  641. package/deps/librdkafka/tests/sockem_ctrl.h +61 -0
  642. package/deps/librdkafka/tests/test.c +7318 -0
  643. package/deps/librdkafka/tests/test.conf.example +27 -0
  644. package/deps/librdkafka/tests/test.h +979 -0
  645. package/deps/librdkafka/tests/testcpp.cpp +126 -0
  646. package/deps/librdkafka/tests/testcpp.h +360 -0
  647. package/deps/librdkafka/tests/testshared.h +402 -0
  648. package/deps/librdkafka/tests/tools/README.md +4 -0
  649. package/deps/librdkafka/tests/tools/stats/README.md +21 -0
  650. package/deps/librdkafka/tests/tools/stats/filter.jq +42 -0
  651. package/deps/librdkafka/tests/tools/stats/graph.py +150 -0
  652. package/deps/librdkafka/tests/tools/stats/requirements.txt +3 -0
  653. package/deps/librdkafka/tests/tools/stats/to_csv.py +124 -0
  654. package/deps/librdkafka/tests/until-fail.sh +87 -0
  655. package/deps/librdkafka/tests/xxxx-assign_partition.c +122 -0
  656. package/deps/librdkafka/tests/xxxx-metadata.cpp +159 -0
  657. package/deps/librdkafka/vcpkg.json +23 -0
  658. package/deps/librdkafka/win32/README.md +5 -0
  659. package/deps/librdkafka/win32/build-package.bat +3 -0
  660. package/deps/librdkafka/win32/build.bat +19 -0
  661. package/deps/librdkafka/win32/common.vcxproj +84 -0
  662. package/deps/librdkafka/win32/install-openssl.ps1 +33 -0
  663. package/deps/librdkafka/win32/interceptor_test/interceptor_test.vcxproj +87 -0
  664. package/deps/librdkafka/win32/librdkafka.autopkg.template +54 -0
  665. package/deps/librdkafka/win32/librdkafka.master.testing.targets +13 -0
  666. package/deps/librdkafka/win32/librdkafka.sln +226 -0
  667. package/deps/librdkafka/win32/librdkafka.vcxproj +276 -0
  668. package/deps/librdkafka/win32/librdkafkacpp/librdkafkacpp.vcxproj +104 -0
  669. package/deps/librdkafka/win32/msbuild.ps1 +15 -0
  670. package/deps/librdkafka/win32/openssl_engine_example/openssl_engine_example.vcxproj +132 -0
  671. package/deps/librdkafka/win32/package-zip.ps1 +46 -0
  672. package/deps/librdkafka/win32/packages/repositories.config +4 -0
  673. package/deps/librdkafka/win32/push-package.bat +4 -0
  674. package/deps/librdkafka/win32/rdkafka_complex_consumer_example_cpp/rdkafka_complex_consumer_example_cpp.vcxproj +67 -0
  675. package/deps/librdkafka/win32/rdkafka_example/rdkafka_example.vcxproj +97 -0
  676. package/deps/librdkafka/win32/rdkafka_performance/rdkafka_performance.vcxproj +97 -0
  677. package/deps/librdkafka/win32/setup-msys2.ps1 +31 -0
  678. package/deps/librdkafka/win32/setup-vcpkg.ps1 +12 -0
  679. package/deps/librdkafka/win32/tests/test.conf.example +25 -0
  680. package/deps/librdkafka/win32/tests/tests.vcxproj +247 -0
  681. package/deps/librdkafka/win32/win_ssl_cert_store/win_ssl_cert_store.vcxproj +132 -0
  682. package/deps/librdkafka/win32/wingetopt.c +564 -0
  683. package/deps/librdkafka/win32/wingetopt.h +100 -0
  684. package/deps/librdkafka/win32/wintime.h +33 -0
  685. package/deps/librdkafka.gyp +62 -0
  686. package/deps/windows-install.py +73 -0
  687. package/docker-compose.yml +23 -0
  688. package/e2e/admin.spec.js +187 -0
  689. package/e2e/both.spec.js +726 -0
  690. package/e2e/consumer.spec.js +386 -0
  691. package/e2e/groups.spec.js +132 -0
  692. package/e2e/listener.js +51 -0
  693. package/e2e/producer-transaction.spec.js +333 -0
  694. package/e2e/producer.spec.js +283 -0
  695. package/errors.d.ts +347 -0
  696. package/examples/consumer-flow.md +76 -0
  697. package/examples/consumer.md +45 -0
  698. package/examples/docker-alpine.md +30 -0
  699. package/examples/high-level-producer.md +32 -0
  700. package/examples/metadata.md +27 -0
  701. package/examples/oauthbearer-default-flow.md +80 -0
  702. package/examples/producer-cluster.md +103 -0
  703. package/examples/producer.md +73 -0
  704. package/index.d.ts +357 -0
  705. package/lib/admin.js +233 -0
  706. package/lib/client.js +578 -0
  707. package/lib/error.js +472 -0
  708. package/lib/index.js +34 -0
  709. package/lib/kafka-consumer-stream.js +397 -0
  710. package/lib/kafka-consumer.js +698 -0
  711. package/lib/producer/high-level-producer.js +323 -0
  712. package/lib/producer-stream.js +307 -0
  713. package/lib/producer.js +375 -0
  714. package/lib/tools/ref-counter.js +52 -0
  715. package/lib/topic-partition.js +88 -0
  716. package/lib/topic.js +42 -0
  717. package/lib/util.js +29 -0
  718. package/librdkafka.js +12 -0
  719. package/make_docs.sh +59 -0
  720. package/package.json +53 -0
  721. package/renovate.json +30 -0
  722. package/run_docker.sh +42 -0
  723. package/src/admin.cc +624 -0
  724. package/src/admin.h +78 -0
  725. package/src/binding.cc +73 -0
  726. package/src/binding.h +25 -0
  727. package/src/callbacks.cc +614 -0
  728. package/src/callbacks.h +265 -0
  729. package/src/common.cc +582 -0
  730. package/src/common.h +134 -0
  731. package/src/config.cc +167 -0
  732. package/src/config.h +45 -0
  733. package/src/connection.cc +482 -0
  734. package/src/connection.h +108 -0
  735. package/src/errors.cc +96 -0
  736. package/src/errors.h +53 -0
  737. package/src/kafka-consumer.cc +1457 -0
  738. package/src/kafka-consumer.h +136 -0
  739. package/src/per-isolate-data.cc +57 -0
  740. package/src/per-isolate-data.h +39 -0
  741. package/src/producer.cc +873 -0
  742. package/src/producer.h +125 -0
  743. package/src/topic.cc +180 -0
  744. package/src/topic.h +56 -0
  745. package/src/workers.cc +1245 -0
  746. package/src/workers.h +511 -0
  747. package/test/binding.spec.js +66 -0
  748. package/test/consumer.spec.js +91 -0
  749. package/test/error.spec.js +8 -0
  750. package/test/index.spec.js +8 -0
  751. package/test/kafka-consumer-stream.spec.js +298 -0
  752. package/test/kafka-consumer-worker.js +51 -0
  753. package/test/kafka-consumer.spec.js +86 -0
  754. package/test/mocha.opts +1 -0
  755. package/test/mock.js +55 -0
  756. package/test/producer/high-level-producer.spec.js +496 -0
  757. package/test/producer-stream.spec.js +723 -0
  758. package/test/producer-worker.js +53 -0
  759. package/test/producer.spec.js +120 -0
  760. package/test/tools/ref-counter.spec.js +53 -0
  761. package/test/topic-partition.spec.js +104 -0
  762. package/test/util.spec.js +46 -0
  763. package/util/configure.js +30 -0
  764. package/util/get-env.js +6 -0
  765. package/util/test-compile.js +11 -0
  766. package/util/test-producer-delivery.js +100 -0
  767. package/win_install.ps1 +2 -0
package/src/workers.cc ADDED
@@ -0,0 +1,1245 @@
1
+ /*
2
+ * node-rdkafka - Node.js wrapper for RdKafka C/C++ library
3
+ *
4
+ * Copyright (c) 2016 Blizzard Entertainment
5
+ *
6
+ * This software may be modified and distributed under the terms
7
+ * of the MIT license. See the LICENSE.txt file for details.
8
+ */
9
+
10
+ #include <string>
11
+ #include <vector>
12
+
13
+ #include "src/workers.h"
14
+
15
+ #ifndef _WIN32
16
+ #include <unistd.h>
17
+ #else
18
+ // Windows specific
19
+ #include <time.h>
20
+ #endif
21
+
22
+ using NodeKafka::Producer;
23
+ using NodeKafka::Connection;
24
+
25
+ namespace NodeKafka {
26
+ namespace Workers {
27
+
28
+ namespace Handle {
29
+ /**
30
+ * @brief Handle: get offsets for times.
31
+ *
32
+ * This callback will take a topic partition list with timestamps and
33
+ * for each topic partition, will fill in the offsets. It is done async
34
+ * because it has a timeout and I don't want node to block
35
+ *
36
+ * @see RdKafka::KafkaConsumer::Committed
37
+ */
38
+
39
+ OffsetsForTimes::OffsetsForTimes(Nan::Callback *callback,
40
+ Connection* handle,
41
+ std::vector<RdKafka::TopicPartition*> & t,
42
+ const int & timeout_ms) :
43
+ ErrorAwareWorker(callback, "node-rdkafka:OffsetsForTimes"),
44
+ m_handle(handle),
45
+ m_topic_partitions(t),
46
+ m_timeout_ms(timeout_ms) {}
47
+
48
+ OffsetsForTimes::~OffsetsForTimes() {
49
+ // Delete the underlying topic partitions as they are ephemeral or cloned
50
+ RdKafka::TopicPartition::destroy(m_topic_partitions);
51
+ }
52
+
53
+ void OffsetsForTimes::Execute() {
54
+ Baton b = m_handle->OffsetsForTimes(m_topic_partitions, m_timeout_ms);
55
+ if (b.err() != RdKafka::ERR_NO_ERROR) {
56
+ SetErrorBaton(b);
57
+ }
58
+ }
59
+
60
+ void OffsetsForTimes::HandleOKCallback() {
61
+ Nan::HandleScope scope;
62
+
63
+ const unsigned int argc = 2;
64
+ v8::Local<v8::Value> argv[argc];
65
+
66
+ argv[0] = Nan::Null();
67
+ argv[1] = Conversion::TopicPartition::ToV8Array(m_topic_partitions);
68
+
69
+ callback->Call(argc, argv);
70
+ }
71
+
72
+ void OffsetsForTimes::HandleErrorCallback() {
73
+ Nan::HandleScope scope;
74
+
75
+ const unsigned int argc = 1;
76
+ v8::Local<v8::Value> argv[argc] = { GetErrorObject() };
77
+
78
+ callback->Call(argc, argv);
79
+ }
80
+ } // namespace Handle
81
+
82
+ ConnectionMetadata::ConnectionMetadata(
83
+ Nan::Callback *callback, Connection* connection,
84
+ std::string topic, int timeout_ms, bool all_topics) :
85
+ ErrorAwareWorker(callback, "node-rdkafka:ConnectionMetadata"),
86
+ m_connection(connection),
87
+ m_topic(topic),
88
+ m_timeout_ms(timeout_ms),
89
+ m_all_topics(all_topics),
90
+ m_metadata(NULL) {}
91
+
92
+ ConnectionMetadata::~ConnectionMetadata() {}
93
+
94
+ void ConnectionMetadata::Execute() {
95
+ Baton b = m_connection->GetMetadata(m_all_topics, m_topic, m_timeout_ms);
96
+
97
+ if (b.err() == RdKafka::ERR_NO_ERROR) {
98
+ // No good way to do this except some stupid string delimiting.
99
+ // maybe we'll delimit it by a | or something and just split
100
+ // the string to create the object
101
+ m_metadata = b.data<RdKafka::Metadata*>();
102
+ } else {
103
+ SetErrorBaton(b);
104
+ }
105
+ }
106
+
107
+ void ConnectionMetadata::HandleOKCallback() {
108
+ Nan::HandleScope scope;
109
+
110
+ const unsigned int argc = 2;
111
+
112
+ // This is a big one!
113
+ v8::Local<v8::Value> argv[argc] = { Nan::Null(),
114
+ Conversion::Metadata::ToV8Object(m_metadata)};
115
+
116
+ callback->Call(argc, argv);
117
+
118
+ delete m_metadata;
119
+ }
120
+
121
+ void ConnectionMetadata::HandleErrorCallback() {
122
+ Nan::HandleScope scope;
123
+
124
+ const unsigned int argc = 1;
125
+ v8::Local<v8::Value> argv[argc] = { GetErrorObject() };
126
+
127
+ callback->Call(argc, argv);
128
+ }
129
+
130
+ /**
131
+ * @brief Client query watermark offsets worker
132
+ *
133
+ * Easy Nan::AsyncWorker for getting watermark offsets from a broker
134
+ *
135
+ * @sa RdKafka::Handle::query_watermark_offsets
136
+ * @sa NodeKafka::Connection::QueryWatermarkOffsets
137
+ */
138
+
139
+ ConnectionQueryWatermarkOffsets::ConnectionQueryWatermarkOffsets(
140
+ Nan::Callback *callback, Connection* connection,
141
+ std::string topic, int32_t partition, int timeout_ms) :
142
+ ErrorAwareWorker(callback, "node-rdkafka:ConnectionQueryWatermarkOffsets"),
143
+ m_connection(connection),
144
+ m_topic(topic),
145
+ m_partition(partition),
146
+ m_timeout_ms(timeout_ms) {}
147
+
148
+ ConnectionQueryWatermarkOffsets::~ConnectionQueryWatermarkOffsets() {}
149
+
150
+ void ConnectionQueryWatermarkOffsets::Execute() {
151
+ Baton b = m_connection->QueryWatermarkOffsets(
152
+ m_topic, m_partition, &m_low_offset, &m_high_offset, m_timeout_ms);
153
+
154
+ // If we got any error here we need to bail out
155
+ if (b.err() != RdKafka::ERR_NO_ERROR) {
156
+ SetErrorBaton(b);
157
+ }
158
+ }
159
+
160
+ void ConnectionQueryWatermarkOffsets::HandleOKCallback() {
161
+ Nan::HandleScope scope;
162
+
163
+ const unsigned int argc = 2;
164
+
165
+ v8::Local<v8::Object> offsetsObj = Nan::New<v8::Object>();
166
+ Nan::Set(offsetsObj, Nan::New<v8::String>("lowOffset").ToLocalChecked(),
167
+ Nan::New<v8::Number>(m_low_offset));
168
+ Nan::Set(offsetsObj, Nan::New<v8::String>("highOffset").ToLocalChecked(),
169
+ Nan::New<v8::Number>(m_high_offset));
170
+
171
+ // This is a big one!
172
+ v8::Local<v8::Value> argv[argc] = { Nan::Null(), offsetsObj};
173
+
174
+ callback->Call(argc, argv);
175
+ }
176
+
177
+ void ConnectionQueryWatermarkOffsets::HandleErrorCallback() {
178
+ Nan::HandleScope scope;
179
+
180
+ const unsigned int argc = 1;
181
+ v8::Local<v8::Value> argv[argc] = { GetErrorObject() };
182
+
183
+ callback->Call(argc, argv);
184
+ }
185
+
186
+ /**
187
+ * @brief Producer connect worker.
188
+ *
189
+ * Easy Nan::AsyncWorker for setting up client connections
190
+ *
191
+ * @sa RdKafka::Producer::connect
192
+ * @sa NodeKafka::Producer::Connect
193
+ */
194
+
195
+ ProducerConnect::ProducerConnect(Nan::Callback *callback, Producer* producer):
196
+ ErrorAwareWorker(callback, "node-rdkafka:ProducerConnect"),
197
+ producer(producer) {}
198
+
199
+ ProducerConnect::~ProducerConnect() {}
200
+
201
+ void ProducerConnect::Execute() {
202
+ Baton b = producer->Connect();
203
+
204
+ if (b.err() != RdKafka::ERR_NO_ERROR) {
205
+ SetErrorBaton(b);
206
+ }
207
+ }
208
+
209
+ void ProducerConnect::HandleOKCallback() {
210
+ Nan::HandleScope scope;
211
+
212
+ const unsigned int argc = 2;
213
+
214
+ v8::Local<v8::Object> obj = Nan::New<v8::Object>();
215
+ Nan::Set(obj, Nan::New("name").ToLocalChecked(),
216
+ Nan::New(producer->Name()).ToLocalChecked());
217
+
218
+ v8::Local<v8::Value> argv[argc] = { Nan::Null(), obj};
219
+
220
+ // Activate the dispatchers
221
+ producer->ActivateDispatchers();
222
+
223
+ callback->Call(argc, argv);
224
+ }
225
+
226
+ void ProducerConnect::HandleErrorCallback() {
227
+ Nan::HandleScope scope;
228
+
229
+ const unsigned int argc = 1;
230
+ v8::Local<v8::Value> argv[argc] = { GetErrorObject() };
231
+
232
+ callback->Call(argc, argv);
233
+ }
234
+
235
+ /**
236
+ * @brief Producer disconnect worker
237
+ *
238
+ * Easy Nan::AsyncWorker for disconnecting from clients
239
+ */
240
+
241
+ ProducerDisconnect::ProducerDisconnect(Nan::Callback *callback,
242
+ Producer* producer):
243
+ ErrorAwareWorker(callback, "node-rdkafka:ProducerDisconnect"),
244
+ producer(producer) {}
245
+
246
+ ProducerDisconnect::~ProducerDisconnect() {}
247
+
248
+ void ProducerDisconnect::Execute() {
249
+ producer->Disconnect();
250
+ }
251
+
252
+ void ProducerDisconnect::HandleOKCallback() {
253
+ Nan::HandleScope scope;
254
+
255
+ const unsigned int argc = 2;
256
+ v8::Local<v8::Value> argv[argc] = { Nan::Null(), Nan::True()};
257
+
258
+ // Deactivate the dispatchers
259
+ producer->DeactivateDispatchers();
260
+
261
+ callback->Call(argc, argv);
262
+ }
263
+
264
+ void ProducerDisconnect::HandleErrorCallback() {
265
+ Nan::HandleScope scope;
266
+ // This should never run
267
+ assert(0);
268
+ }
269
+
270
+ /**
271
+ * @brief Producer flush worker
272
+ *
273
+ * Easy Nan::AsyncWorker for flushing a producer.
274
+ */
275
+
276
+ ProducerFlush::ProducerFlush(Nan::Callback *callback,
277
+ Producer* producer, int timeout_ms):
278
+ ErrorAwareWorker(callback, "node-rdkafka:ProducerFlush"),
279
+ producer(producer),
280
+ timeout_ms(timeout_ms) {}
281
+
282
+ ProducerFlush::~ProducerFlush() {}
283
+
284
+ void ProducerFlush::Execute() {
285
+ if (!producer->IsConnected()) {
286
+ SetErrorMessage("Producer is disconnected");
287
+ return;
288
+ }
289
+
290
+ Baton b = producer->Flush(timeout_ms);
291
+ if (b.err() != RdKafka::ErrorCode::ERR_NO_ERROR) {
292
+ SetErrorBaton(b);
293
+ }
294
+ }
295
+
296
+ void ProducerFlush::HandleOKCallback() {
297
+ Nan::HandleScope scope;
298
+
299
+ const unsigned int argc = 1;
300
+ v8::Local<v8::Value> argv[argc] = { Nan::Null() };
301
+
302
+ callback->Call(argc, argv);
303
+ }
304
+
305
+ /**
306
+ * @brief Producer init transactions worker.
307
+ *
308
+ * Easy Nan::AsyncWorker for initiating transactions
309
+ *
310
+ * @sa RdKafka::Producer::init_transactions
311
+ * @sa NodeKafka::Producer::InitTransactions
312
+ */
313
+
314
+ ProducerInitTransactions::ProducerInitTransactions(Nan::Callback *callback,
315
+ Producer* producer, const int & timeout_ms):
316
+ ErrorAwareWorker(callback, "node-rdkafka:ProducerInitTransactions"),
317
+ producer(producer),
318
+ m_timeout_ms(timeout_ms) {}
319
+
320
+ ProducerInitTransactions::~ProducerInitTransactions() {}
321
+
322
+ void ProducerInitTransactions::Execute() {
323
+ Baton b = producer->InitTransactions(m_timeout_ms);
324
+
325
+ if (b.err() != RdKafka::ERR_NO_ERROR) {
326
+ SetErrorBaton(b);
327
+ }
328
+ }
329
+
330
+ void ProducerInitTransactions::HandleOKCallback() {
331
+ Nan::HandleScope scope;
332
+
333
+ const unsigned int argc = 1;
334
+ v8::Local<v8::Value> argv[argc] = { Nan::Null() };
335
+
336
+ // Activate the dispatchers
337
+ producer->ActivateDispatchers();
338
+
339
+ callback->Call(argc, argv);
340
+ }
341
+
342
+ void ProducerInitTransactions::HandleErrorCallback() {
343
+ Nan::HandleScope scope;
344
+
345
+ const unsigned int argc = 1;
346
+ v8::Local<v8::Value> argv[argc] = { m_baton.ToTxnObject() };
347
+
348
+ callback->Call(argc, argv);
349
+ }
350
+
351
+ /**
352
+ * @brief Producer begin transaction worker.
353
+ *
354
+ * Easy Nan::AsyncWorker for begin transaction
355
+ *
356
+ * @sa RdKafka::Producer::begin_transaction
357
+ * @sa NodeKafka::Producer::BeginTransaction
358
+ */
359
+
360
+ ProducerBeginTransaction::ProducerBeginTransaction(Nan::Callback *callback, Producer* producer):
361
+ ErrorAwareWorker(callback, "node-rdkafka:ProducerBeginTransaction"),
362
+ producer(producer) {}
363
+
364
+ ProducerBeginTransaction::~ProducerBeginTransaction() {}
365
+
366
+ void ProducerBeginTransaction::Execute() {
367
+ Baton b = producer->BeginTransaction();
368
+
369
+ if (b.err() != RdKafka::ERR_NO_ERROR) {
370
+ SetErrorBaton(b);
371
+ }
372
+ }
373
+
374
+ void ProducerBeginTransaction::HandleOKCallback() {
375
+ Nan::HandleScope scope;
376
+
377
+ const unsigned int argc = 1;
378
+
379
+ v8::Local<v8::Value> argv[argc] = { Nan::Null() };
380
+
381
+ // Activate the dispatchers
382
+ producer->ActivateDispatchers();
383
+
384
+ callback->Call(argc, argv);
385
+ }
386
+
387
+ void ProducerBeginTransaction::HandleErrorCallback() {
388
+ Nan::HandleScope scope;
389
+
390
+ const unsigned int argc = 1;
391
+ v8::Local<v8::Value> argv[argc] = { GetErrorObject() };
392
+
393
+ callback->Call(argc, argv);
394
+ }
395
+
396
+ /**
397
+ * @brief Producer commit transaction worker.
398
+ *
399
+ * Easy Nan::AsyncWorker for committing transaction
400
+ *
401
+ * @sa RdKafka::Producer::commit_transaction
402
+ * @sa NodeKafka::Producer::CommitTransaction
403
+ */
404
+
405
+ ProducerCommitTransaction::ProducerCommitTransaction(Nan::Callback *callback,
406
+ Producer* producer, const int & timeout_ms):
407
+ ErrorAwareWorker(callback, "node-rdkafka:ProducerCommitTransaction"),
408
+ producer(producer),
409
+ m_timeout_ms(timeout_ms) {}
410
+
411
+ ProducerCommitTransaction::~ProducerCommitTransaction() {}
412
+
413
+ void ProducerCommitTransaction::Execute() {
414
+ Baton b = producer->CommitTransaction(m_timeout_ms);
415
+
416
+ if (b.err() != RdKafka::ERR_NO_ERROR) {
417
+ SetErrorBaton(b);
418
+ }
419
+ }
420
+
421
+ void ProducerCommitTransaction::HandleOKCallback() {
422
+ Nan::HandleScope scope;
423
+
424
+ const unsigned int argc = 1;
425
+ v8::Local<v8::Value> argv[argc] = { Nan::Null() };
426
+
427
+ // Activate the dispatchers
428
+ producer->ActivateDispatchers();
429
+
430
+ callback->Call(argc, argv);
431
+ }
432
+
433
+ void ProducerCommitTransaction::HandleErrorCallback() {
434
+ Nan::HandleScope scope;
435
+
436
+ const unsigned int argc = 1;
437
+ v8::Local<v8::Value> argv[argc] = { m_baton.ToTxnObject() };
438
+
439
+ callback->Call(argc, argv);
440
+ }
441
+
442
+ /**
443
+ * @brief Producer abort transaction worker.
444
+ *
445
+ * Easy Nan::AsyncWorker for aborting transaction
446
+ *
447
+ * @sa RdKafka::Producer::abort_transaction
448
+ * @sa NodeKafka::Producer::AbortTransaction
449
+ */
450
+
451
+ ProducerAbortTransaction::ProducerAbortTransaction(Nan::Callback *callback,
452
+ Producer* producer, const int & timeout_ms):
453
+ ErrorAwareWorker(callback, "node-rdkafka:ProducerAbortTransaction"),
454
+ producer(producer),
455
+ m_timeout_ms(timeout_ms) {}
456
+
457
+ ProducerAbortTransaction::~ProducerAbortTransaction() {}
458
+
459
+ void ProducerAbortTransaction::Execute() {
460
+ Baton b = producer->AbortTransaction(m_timeout_ms);
461
+
462
+ if (b.err() != RdKafka::ERR_NO_ERROR) {
463
+ SetErrorBaton(b);
464
+ }
465
+ }
466
+
467
+ void ProducerAbortTransaction::HandleOKCallback() {
468
+ Nan::HandleScope scope;
469
+
470
+ const unsigned int argc = 1;
471
+ v8::Local<v8::Value> argv[argc] = { Nan::Null() };
472
+
473
+ // Activate the dispatchers
474
+ producer->ActivateDispatchers();
475
+
476
+ callback->Call(argc, argv);
477
+ }
478
+
479
+ void ProducerAbortTransaction::HandleErrorCallback() {
480
+ Nan::HandleScope scope;
481
+
482
+ const unsigned int argc = 1;
483
+ v8::Local<v8::Value> argv[argc] = { m_baton.ToTxnObject() };
484
+
485
+ callback->Call(argc, argv);
486
+ }
487
+
488
+ /**
489
+ * @brief Producer SendOffsetsToTransaction worker.
490
+ *
491
+ * Easy Nan::AsyncWorker for SendOffsetsToTransaction
492
+ *
493
+ * @sa RdKafka::Producer::send_offsets_to_transaction
494
+ * @sa NodeKafka::Producer::SendOffsetsToTransaction
495
+ */
496
+
497
+ ProducerSendOffsetsToTransaction::ProducerSendOffsetsToTransaction(
498
+ Nan::Callback *callback,
499
+ Producer* producer,
500
+ std::vector<RdKafka::TopicPartition *> & t,
501
+ KafkaConsumer* consumer,
502
+ const int & timeout_ms):
503
+ ErrorAwareWorker(callback, "node-rdkafka:ProducerSendOffsetsToTransaction"),
504
+ producer(producer),
505
+ m_topic_partitions(t),
506
+ consumer(consumer),
507
+ m_timeout_ms(timeout_ms) {}
508
+
509
+ ProducerSendOffsetsToTransaction::~ProducerSendOffsetsToTransaction() {}
510
+
511
+ void ProducerSendOffsetsToTransaction::Execute() {
512
+ Baton b = producer->SendOffsetsToTransaction(
513
+ m_topic_partitions,
514
+ consumer,
515
+ m_timeout_ms
516
+ );
517
+
518
+ if (b.err() != RdKafka::ERR_NO_ERROR) {
519
+ SetErrorBaton(b);
520
+ }
521
+ }
522
+
523
+ void ProducerSendOffsetsToTransaction::HandleOKCallback() {
524
+ Nan::HandleScope scope;
525
+
526
+ const unsigned int argc = 1;
527
+ v8::Local<v8::Value> argv[argc] = { Nan::Null() };
528
+
529
+ // Activate the dispatchers
530
+ producer->ActivateDispatchers();
531
+
532
+ callback->Call(argc, argv);
533
+ }
534
+
535
+ void ProducerSendOffsetsToTransaction::HandleErrorCallback() {
536
+ Nan::HandleScope scope;
537
+
538
+ const unsigned int argc = 1;
539
+ v8::Local<v8::Value> argv[argc] = { m_baton.ToTxnObject() };
540
+
541
+ callback->Call(argc, argv);
542
+ }
543
+
544
+ /**
545
+ * @brief KafkaConsumer connect worker.
546
+ *
547
+ * Easy Nan::AsyncWorker for setting up client connections
548
+ *
549
+ * @sa RdKafka::KafkaConsumer::connect
550
+ * @sa NodeKafka::KafkaConsumer::Connect
551
+ */
552
+
553
+ KafkaConsumerConnect::KafkaConsumerConnect(Nan::Callback *callback,
554
+ KafkaConsumer* consumer):
555
+ ErrorAwareWorker(callback, "node-rdkafka:KafkaConsumerConnect"),
556
+ consumer(consumer) {}
557
+
558
+ KafkaConsumerConnect::~KafkaConsumerConnect() {}
559
+
560
+ void KafkaConsumerConnect::Execute() {
561
+ Baton b = consumer->Connect();
562
+ // consumer->Wait();
563
+
564
+ if (b.err() != RdKafka::ERR_NO_ERROR) {
565
+ SetErrorBaton(b);
566
+ }
567
+ }
568
+
569
+ void KafkaConsumerConnect::HandleOKCallback() {
570
+ Nan::HandleScope scope;
571
+
572
+ const unsigned int argc = 2;
573
+
574
+ // Create the object
575
+ v8::Local<v8::Object> obj = Nan::New<v8::Object>();
576
+ Nan::Set(obj, Nan::New("name").ToLocalChecked(),
577
+ Nan::New(consumer->Name()).ToLocalChecked());
578
+
579
+ v8::Local<v8::Value> argv[argc] = { Nan::Null(), obj };
580
+ consumer->ActivateDispatchers();
581
+
582
+ callback->Call(argc, argv);
583
+ }
584
+
585
+ void KafkaConsumerConnect::HandleErrorCallback() {
586
+ Nan::HandleScope scope;
587
+
588
+ const unsigned int argc = 1;
589
+ v8::Local<v8::Value> argv[argc] = { Nan::Error(ErrorMessage()) };
590
+
591
+ callback->Call(argc, argv);
592
+ }
593
+
594
+ /**
595
+ * @brief KafkaConsumer disconnect worker.
596
+ *
597
+ * Easy Nan::AsyncWorker for disconnecting and cleaning up librdkafka artifacts
598
+ *
599
+ * @sa RdKafka::KafkaConsumer::disconnect
600
+ * @sa NodeKafka::KafkaConsumer::Disconnect
601
+ */
602
+
603
+ KafkaConsumerDisconnect::KafkaConsumerDisconnect(Nan::Callback *callback,
604
+ KafkaConsumer* consumer):
605
+ ErrorAwareWorker(callback, "node-rdkafka:KafkaConsumerDisconnect"),
606
+ consumer(consumer) {}
607
+
608
+ KafkaConsumerDisconnect::~KafkaConsumerDisconnect() {}
609
+
610
+ void KafkaConsumerDisconnect::Execute() {
611
+ Baton b = consumer->Disconnect();
612
+
613
+ if (b.err() != RdKafka::ERR_NO_ERROR) {
614
+ SetErrorBaton(b);
615
+ }
616
+ }
617
+
618
+ void KafkaConsumerDisconnect::HandleOKCallback() {
619
+ Nan::HandleScope scope;
620
+
621
+ const unsigned int argc = 2;
622
+ v8::Local<v8::Value> argv[argc] = { Nan::Null(), Nan::True() };
623
+
624
+ consumer->DeactivateDispatchers();
625
+
626
+ callback->Call(argc, argv);
627
+ }
628
+
629
+ void KafkaConsumerDisconnect::HandleErrorCallback() {
630
+ Nan::HandleScope scope;
631
+
632
+ const unsigned int argc = 1;
633
+ v8::Local<v8::Value> argv[argc] = { GetErrorObject() };
634
+
635
+ consumer->DeactivateDispatchers();
636
+
637
+ callback->Call(argc, argv);
638
+ }
639
+
640
+ /**
641
+ * @brief KafkaConsumer get messages worker.
642
+ *
643
+ * A more complex Nan::AsyncProgressWorker. I made a custom superclass to deal
644
+ * with more real-time progress points. Instead of using ProgressWorker, which
645
+ * is not time sensitive, this custom worker will poll using libuv and send
646
+ * data back to v8 as it comes available without missing any
647
+ *
648
+ * The actual event runs through a continuous while loop. It stops when the
649
+ * consumer is flagged as disconnected or as unsubscribed.
650
+ *
651
+ * @todo thread-safe isConnected checking
652
+ * @note Chances are, when the connection is broken with the way librdkafka works,
653
+ * we are shutting down. But we want it to shut down properly so we probably
654
+ * need the consumer to have a thread lock that can be used when
655
+ * we are dealing with manipulating the `client`
656
+ *
657
+ * @sa RdKafka::KafkaConsumer::Consume
658
+ * @sa NodeKafka::KafkaConsumer::GetMessage
659
+ */
660
+
661
+ KafkaConsumerConsumeLoop::KafkaConsumerConsumeLoop(Nan::Callback *callback,
662
+ KafkaConsumer* consumer,
663
+ const int & timeout_ms,
664
+ const int & timeout_sleep_delay_ms) :
665
+ MessageWorker(callback, "node-rdkafka:KafkaConsumerConsumeLoop"),
666
+ consumer(consumer),
667
+ m_looping(true),
668
+ m_timeout_ms(timeout_ms),
669
+ m_timeout_sleep_delay_ms(timeout_sleep_delay_ms) {
670
+ uv_thread_create(&thread_event_loop, KafkaConsumerConsumeLoop::ConsumeLoop, (void*)this);
671
+ }
672
+
673
+ KafkaConsumerConsumeLoop::~KafkaConsumerConsumeLoop() {}
674
+
675
+ void KafkaConsumerConsumeLoop::Close() {
676
+ m_looping = false;
677
+ uv_thread_join(&thread_event_loop);
678
+ }
679
+
680
+ void KafkaConsumerConsumeLoop::Execute(const ExecutionMessageBus& bus) {
681
+ // ConsumeLoop is used instead
682
+ }
683
+
684
+ void KafkaConsumerConsumeLoop::ConsumeLoop(void *arg) {
685
+ KafkaConsumerConsumeLoop* consumerLoop = (KafkaConsumerConsumeLoop*)arg;
686
+ ExecutionMessageBus bus(consumerLoop);
687
+ KafkaConsumer* consumer = consumerLoop->consumer;
688
+
689
+ // Do one check here before we move forward
690
+ while (consumerLoop->m_looping && consumer->IsConnected()) {
691
+ Baton b = consumer->Consume(consumerLoop->m_timeout_ms);
692
+ RdKafka::ErrorCode ec = b.err();
693
+ if (ec == RdKafka::ERR_NO_ERROR) {
694
+ RdKafka::Message *message = b.data<RdKafka::Message*>();
695
+ switch (message->err()) {
696
+ case RdKafka::ERR__PARTITION_EOF:
697
+ bus.Send(message);
698
+ break;
699
+
700
+ case RdKafka::ERR__TIMED_OUT:
701
+ case RdKafka::ERR__TIMED_OUT_QUEUE:
702
+ delete message;
703
+ if (consumerLoop->m_timeout_sleep_delay_ms > 0) {
704
+ // If it is timed out this could just mean there were no
705
+ // new messages fetched quickly enough. This isn't really
706
+ // an error that should kill us.
707
+ #ifndef _WIN32
708
+ usleep(consumerLoop->m_timeout_sleep_delay_ms*1000);
709
+ #else
710
+ _sleep(consumerLoop->m_timeout_sleep_delay_ms);
711
+ #endif
712
+ }
713
+ break;
714
+ case RdKafka::ERR_NO_ERROR:
715
+ bus.Send(message);
716
+ break;
717
+ default:
718
+ // Unknown error. We need to break out of this
719
+ consumerLoop->SetErrorBaton(b);
720
+ consumerLoop->m_looping = false;
721
+ break;
722
+ }
723
+ } else if (ec == RdKafka::ERR_UNKNOWN_TOPIC_OR_PART || ec == RdKafka::ERR_TOPIC_AUTHORIZATION_FAILED) {
724
+ bus.SendWarning(ec);
725
+ } else {
726
+ // Unknown error. We need to break out of this
727
+ consumerLoop->SetErrorBaton(b);
728
+ consumerLoop->m_looping = false;
729
+ }
730
+ }
731
+ }
732
+
733
+ void KafkaConsumerConsumeLoop::HandleMessageCallback(RdKafka::Message* msg, RdKafka::ErrorCode ec) {
734
+ Nan::HandleScope scope;
735
+
736
+ const unsigned int argc = 4;
737
+ v8::Local<v8::Value> argv[argc];
738
+
739
+ argv[0] = Nan::Null();
740
+ if (msg == NULL) {
741
+ argv[1] = Nan::Null();
742
+ argv[2] = Nan::Null();
743
+ argv[3] = Nan::New<v8::Number>(ec);
744
+ } else {
745
+ argv[3] = Nan::Null();
746
+ switch (msg->err()) {
747
+ case RdKafka::ERR__PARTITION_EOF: {
748
+ argv[1] = Nan::Null();
749
+ v8::Local<v8::Object> eofEvent = Nan::New<v8::Object>();
750
+
751
+ Nan::Set(eofEvent, Nan::New<v8::String>("topic").ToLocalChecked(),
752
+ Nan::New<v8::String>(msg->topic_name()).ToLocalChecked());
753
+ Nan::Set(eofEvent, Nan::New<v8::String>("offset").ToLocalChecked(),
754
+ Nan::New<v8::Number>(msg->offset()));
755
+ Nan::Set(eofEvent, Nan::New<v8::String>("partition").ToLocalChecked(),
756
+ Nan::New<v8::Number>(msg->partition()));
757
+
758
+ argv[2] = eofEvent;
759
+ break;
760
+ }
761
+ default:
762
+ argv[1] = Conversion::Message::ToV8Object(msg);
763
+ argv[2] = Nan::Null();
764
+ break;
765
+ }
766
+
767
+ // We can delete msg now
768
+ delete msg;
769
+ }
770
+
771
+ callback->Call(argc, argv);
772
+ }
773
+
774
+ void KafkaConsumerConsumeLoop::HandleOKCallback() {
775
+ Nan::HandleScope scope;
776
+ }
777
+
778
+ void KafkaConsumerConsumeLoop::HandleErrorCallback() {
779
+ Nan::HandleScope scope;
780
+
781
+ const unsigned int argc = 1;
782
+ v8::Local<v8::Value> argv[argc] = { Nan::Error(ErrorMessage()) };
783
+
784
+ callback->Call(argc, argv);
785
+ }
786
+
787
+ /**
788
+ * @brief KafkaConsumer get messages worker.
789
+ *
790
+ * This callback will get a number of messages. Can be of use in streams or
791
+ * places where you don't want an infinite loop managed in C++land and would
792
+ * rather manage it in Node.
793
+ *
794
+ * @see RdKafka::KafkaConsumer::Consume
795
+ * @see NodeKafka::KafkaConsumer::GetMessage
796
+ */
797
+
798
+ KafkaConsumerConsumeNum::KafkaConsumerConsumeNum(Nan::Callback *callback,
799
+ KafkaConsumer* consumer,
800
+ const uint32_t & num_messages,
801
+ const int & timeout_ms) :
802
+ ErrorAwareWorker(callback, "node-rdkafka:KafkaConsumerConsumeNum"),
803
+ m_consumer(consumer),
804
+ m_num_messages(num_messages),
805
+ m_timeout_ms(timeout_ms) {}
806
+
807
+ KafkaConsumerConsumeNum::~KafkaConsumerConsumeNum() {}
808
+
809
+ void KafkaConsumerConsumeNum::Execute() {
810
+ std::size_t max = static_cast<std::size_t>(m_num_messages);
811
+ bool looping = true;
812
+ int timeout_ms = m_timeout_ms;
813
+ std::size_t eof_event_count = 0;
814
+
815
+ while (m_messages.size() - eof_event_count < max && looping) {
816
+ // Get a message
817
+ Baton b = m_consumer->Consume(timeout_ms);
818
+ if (b.err() == RdKafka::ERR_NO_ERROR) {
819
+ RdKafka::Message *message = b.data<RdKafka::Message*>();
820
+ RdKafka::ErrorCode errorCode = message->err();
821
+ switch (errorCode) {
822
+ case RdKafka::ERR__PARTITION_EOF:
823
+ // If partition EOF and have consumed messages, retry with timeout 1
824
+ // This allows getting ready messages, while not waiting for new ones
825
+ if (m_messages.size() > eof_event_count) {
826
+ timeout_ms = 1;
827
+ }
828
+
829
+ // We will only go into this code path when `enable.partition.eof` is set to true
830
+ // In this case, consumer is also interested in EOF messages, so we return an EOF message
831
+ m_messages.push_back(message);
832
+ eof_event_count += 1;
833
+ break;
834
+ case RdKafka::ERR__TIMED_OUT:
835
+ case RdKafka::ERR__TIMED_OUT_QUEUE:
836
+ // Break of the loop if we timed out
837
+ delete message;
838
+ looping = false;
839
+ break;
840
+ case RdKafka::ERR_NO_ERROR:
841
+ m_messages.push_back(b.data<RdKafka::Message*>());
842
+ break;
843
+ default:
844
+ // Set the error for any other errors and break
845
+ delete message;
846
+ if (m_messages.size() == eof_event_count) {
847
+ SetErrorBaton(Baton(errorCode));
848
+ }
849
+ looping = false;
850
+ break;
851
+ }
852
+ } else {
853
+ if (m_messages.size() == eof_event_count) {
854
+ SetErrorBaton(b);
855
+ }
856
+ looping = false;
857
+ }
858
+ }
859
+ }
860
+
861
+ void KafkaConsumerConsumeNum::HandleOKCallback() {
862
+ Nan::HandleScope scope;
863
+ const unsigned int argc = 3;
864
+ v8::Local<v8::Value> argv[argc];
865
+ argv[0] = Nan::Null();
866
+
867
+ v8::Local<v8::Array> returnArray = Nan::New<v8::Array>();
868
+ v8::Local<v8::Array> eofEventsArray = Nan::New<v8::Array>();
869
+
870
+ if (m_messages.size() > 0) {
871
+ int returnArrayIndex = -1;
872
+ int eofEventsArrayIndex = -1;
873
+ for (std::vector<RdKafka::Message*>::iterator it = m_messages.begin();
874
+ it != m_messages.end(); ++it) {
875
+ RdKafka::Message* message = *it;
876
+
877
+ switch (message->err()) {
878
+ case RdKafka::ERR_NO_ERROR:
879
+ ++returnArrayIndex;
880
+ Nan::Set(returnArray, returnArrayIndex, Conversion::Message::ToV8Object(message));
881
+ break;
882
+ case RdKafka::ERR__PARTITION_EOF:
883
+ ++eofEventsArrayIndex;
884
+
885
+ // create EOF event
886
+ v8::Local<v8::Object> eofEvent = Nan::New<v8::Object>();
887
+
888
+ Nan::Set(eofEvent, Nan::New<v8::String>("topic").ToLocalChecked(),
889
+ Nan::New<v8::String>(message->topic_name()).ToLocalChecked());
890
+ Nan::Set(eofEvent, Nan::New<v8::String>("offset").ToLocalChecked(),
891
+ Nan::New<v8::Number>(message->offset()));
892
+ Nan::Set(eofEvent, Nan::New<v8::String>("partition").ToLocalChecked(),
893
+ Nan::New<v8::Number>(message->partition()));
894
+
895
+ // also store index at which position in the message array this event was emitted
896
+ // this way, we can later emit it at the right point in time
897
+ Nan::Set(eofEvent, Nan::New<v8::String>("messageIndex").ToLocalChecked(),
898
+ Nan::New<v8::Number>(returnArrayIndex));
899
+
900
+ Nan::Set(eofEventsArray, eofEventsArrayIndex, eofEvent);
901
+ }
902
+
903
+ delete message;
904
+ }
905
+ }
906
+
907
+ argv[1] = returnArray;
908
+ argv[2] = eofEventsArray;
909
+
910
+ callback->Call(argc, argv);
911
+ }
912
+
913
+ void KafkaConsumerConsumeNum::HandleErrorCallback() {
914
+ Nan::HandleScope scope;
915
+
916
+ if (m_messages.size() > 0) {
917
+ for (std::vector<RdKafka::Message*>::iterator it = m_messages.begin();
918
+ it != m_messages.end(); ++it) {
919
+ RdKafka::Message* message = *it;
920
+ delete message;
921
+ }
922
+ }
923
+
924
+ const unsigned int argc = 1;
925
+ v8::Local<v8::Value> argv[argc] = { GetErrorObject() };
926
+
927
+ callback->Call(argc, argv);
928
+ }
929
+
930
+ /**
931
+ * @brief KafkaConsumer get message worker.
932
+ *
933
+ * This callback will get a single message. Can be of use in streams or places
934
+ * where you don't want an infinite loop managed in C++land and would rather
935
+ * manage it in Node.
936
+ *
937
+ * @see RdKafka::KafkaConsumer::Consume
938
+ * @see NodeKafka::KafkaConsumer::GetMessage
939
+ */
940
+
941
+ KafkaConsumerConsume::KafkaConsumerConsume(Nan::Callback *callback,
942
+ KafkaConsumer* consumer,
943
+ const int & timeout_ms) :
944
+ ErrorAwareWorker(callback, "node-rdkafka:KafkaConsumerConsume"),
945
+ consumer(consumer),
946
+ m_timeout_ms(timeout_ms) {}
947
+
948
+ KafkaConsumerConsume::~KafkaConsumerConsume() {}
949
+
950
+ void KafkaConsumerConsume::Execute() {
951
+ Baton b = consumer->Consume(m_timeout_ms);
952
+ if (b.err() != RdKafka::ERR_NO_ERROR) {
953
+ SetErrorBaton(b);
954
+ } else {
955
+ RdKafka::Message *message = b.data<RdKafka::Message*>();
956
+ RdKafka::ErrorCode errorCode = message->err();
957
+ if (errorCode == RdKafka::ERR_NO_ERROR) {
958
+ m_message = message;
959
+ } else {
960
+ delete message;
961
+ }
962
+ }
963
+ }
964
+
965
+ void KafkaConsumerConsume::HandleOKCallback() {
966
+ Nan::HandleScope scope;
967
+
968
+ const unsigned int argc = 2;
969
+ v8::Local<v8::Value> argv[argc];
970
+
971
+ argv[0] = Nan::Null();
972
+ argv[1] = Conversion::Message::ToV8Object(m_message);
973
+
974
+ delete m_message;
975
+
976
+ callback->Call(argc, argv);
977
+ }
978
+
979
+ void KafkaConsumerConsume::HandleErrorCallback() {
980
+ Nan::HandleScope scope;
981
+
982
+ const unsigned int argc = 1;
983
+ v8::Local<v8::Value> argv[argc] = { GetErrorObject() };
984
+
985
+ callback->Call(argc, argv);
986
+ }
987
+
988
+ /**
989
+ * @brief KafkaConsumer get committed topic partitions worker.
990
+ *
991
+ * This callback will get a topic partition list of committed offsets
992
+ * for each topic partition. It is done async because it has a timeout
993
+ * and I don't want node to block
994
+ *
995
+ * @see RdKafka::KafkaConsumer::Committed
996
+ */
997
+
998
+ KafkaConsumerCommitted::KafkaConsumerCommitted(Nan::Callback *callback,
999
+ KafkaConsumer* consumer,
1000
+ std::vector<RdKafka::TopicPartition*> & t,
1001
+ const int & timeout_ms) :
1002
+ ErrorAwareWorker(callback, "node-rdkafka:KafkaConsumerCommitted"),
1003
+ m_consumer(consumer),
1004
+ m_topic_partitions(t),
1005
+ m_timeout_ms(timeout_ms) {}
1006
+
1007
+ KafkaConsumerCommitted::~KafkaConsumerCommitted() {
1008
+ // Delete the underlying topic partitions as they are ephemeral or cloned
1009
+ RdKafka::TopicPartition::destroy(m_topic_partitions);
1010
+ }
1011
+
1012
+ void KafkaConsumerCommitted::Execute() {
1013
+ Baton b = m_consumer->Committed(m_topic_partitions, m_timeout_ms);
1014
+ if (b.err() != RdKafka::ERR_NO_ERROR) {
1015
+ SetErrorBaton(b);
1016
+ }
1017
+ }
1018
+
1019
+ void KafkaConsumerCommitted::HandleOKCallback() {
1020
+ Nan::HandleScope scope;
1021
+
1022
+ const unsigned int argc = 2;
1023
+ v8::Local<v8::Value> argv[argc];
1024
+
1025
+ argv[0] = Nan::Null();
1026
+ argv[1] = Conversion::TopicPartition::ToV8Array(m_topic_partitions);
1027
+
1028
+ callback->Call(argc, argv);
1029
+ }
1030
+
1031
+ void KafkaConsumerCommitted::HandleErrorCallback() {
1032
+ Nan::HandleScope scope;
1033
+
1034
+ const unsigned int argc = 1;
1035
+ v8::Local<v8::Value> argv[argc] = { GetErrorObject() };
1036
+
1037
+ callback->Call(argc, argv);
1038
+ }
1039
+
1040
+ /**
1041
+ * @brief KafkaConsumer seek
1042
+ *
1043
+ * This callback will take a topic partition list with offsets and
1044
+ * seek messages from there
1045
+ *
1046
+ * @see RdKafka::KafkaConsumer::seek
1047
+ *
1048
+ * @remark Consumption for the given partition must have started for the
1049
+ * seek to work. Use assign() to set the starting offset.
1050
+ */
1051
+
1052
+ KafkaConsumerSeek::KafkaConsumerSeek(Nan::Callback *callback,
1053
+ KafkaConsumer* consumer,
1054
+ const RdKafka::TopicPartition * toppar,
1055
+ const int & timeout_ms) :
1056
+ ErrorAwareWorker(callback, "node-rdkafka:KafkaConsumerSeek"),
1057
+ m_consumer(consumer),
1058
+ m_toppar(toppar),
1059
+ m_timeout_ms(timeout_ms) {}
1060
+
1061
+ KafkaConsumerSeek::~KafkaConsumerSeek() {
1062
+ if (m_timeout_ms > 0) {
1063
+ // Delete it when we are done with it.
1064
+ // However, if the timeout was less than 1, that means librdkafka is going
1065
+ // to queue the request up asynchronously, which apparently looks like if
1066
+ // we delete the memory here, since it was a pointer, librdkafka segfaults
1067
+ // when it actually does the operation (since it no longer blocks).
1068
+
1069
+ // Well, that means we will be leaking memory when people do a timeout of 0
1070
+ // so... we should never get to this block. But just in case...
1071
+ delete m_toppar;
1072
+ }
1073
+ }
1074
+
1075
+ void KafkaConsumerSeek::Execute() {
1076
+ Baton b = m_consumer->Seek(*m_toppar, m_timeout_ms);
1077
+ if (b.err() != RdKafka::ERR_NO_ERROR) {
1078
+ SetErrorBaton(b);
1079
+ }
1080
+ }
1081
+
1082
+ void KafkaConsumerSeek::HandleOKCallback() {
1083
+ Nan::HandleScope scope;
1084
+
1085
+ const unsigned int argc = 1;
1086
+ v8::Local<v8::Value> argv[argc];
1087
+
1088
+ argv[0] = Nan::Null();
1089
+
1090
+ callback->Call(argc, argv);
1091
+ }
1092
+
1093
+ void KafkaConsumerSeek::HandleErrorCallback() {
1094
+ Nan::HandleScope scope;
1095
+
1096
+ const unsigned int argc = 1;
1097
+ v8::Local<v8::Value> argv[argc] = { GetErrorObject() };
1098
+
1099
+ callback->Call(argc, argv);
1100
+ }
1101
+
1102
+ /**
1103
+ * @brief createTopic
1104
+ *
1105
+ * This callback will create a topic
1106
+ *
1107
+ */
1108
+ AdminClientCreateTopic::AdminClientCreateTopic(Nan::Callback *callback,
1109
+ AdminClient* client,
1110
+ rd_kafka_NewTopic_t* topic,
1111
+ const int & timeout_ms) :
1112
+ ErrorAwareWorker(callback, "node-rdkafka:AdminClientCreateTopic"),
1113
+ m_client(client),
1114
+ m_topic(topic),
1115
+ m_timeout_ms(timeout_ms) {}
1116
+
1117
+ AdminClientCreateTopic::~AdminClientCreateTopic() {
1118
+ // Destroy the topic creation request when we are done
1119
+ rd_kafka_NewTopic_destroy(m_topic);
1120
+ }
1121
+
1122
+ void AdminClientCreateTopic::Execute() {
1123
+ Baton b = m_client->CreateTopic(m_topic, m_timeout_ms);
1124
+ if (b.err() != RdKafka::ERR_NO_ERROR) {
1125
+ SetErrorBaton(b);
1126
+ }
1127
+ }
1128
+
1129
+ void AdminClientCreateTopic::HandleOKCallback() {
1130
+ Nan::HandleScope scope;
1131
+
1132
+ const unsigned int argc = 1;
1133
+ v8::Local<v8::Value> argv[argc];
1134
+
1135
+ argv[0] = Nan::Null();
1136
+
1137
+ callback->Call(argc, argv);
1138
+ }
1139
+
1140
+ void AdminClientCreateTopic::HandleErrorCallback() {
1141
+ Nan::HandleScope scope;
1142
+
1143
+ const unsigned int argc = 1;
1144
+ v8::Local<v8::Value> argv[argc] = { GetErrorObject() };
1145
+
1146
+ callback->Call(argc, argv);
1147
+ }
1148
+
1149
+ /**
1150
+ * @brief Delete a topic in an asynchronous worker.
1151
+ *
1152
+ * This callback will delete a topic
1153
+ *
1154
+ */
1155
+ AdminClientDeleteTopic::AdminClientDeleteTopic(Nan::Callback *callback,
1156
+ AdminClient* client,
1157
+ rd_kafka_DeleteTopic_t* topic,
1158
+ const int & timeout_ms) :
1159
+ ErrorAwareWorker(callback, "node-rdkafka:AdminClientDeleteTopic"),
1160
+ m_client(client),
1161
+ m_topic(topic),
1162
+ m_timeout_ms(timeout_ms) {}
1163
+
1164
+ AdminClientDeleteTopic::~AdminClientDeleteTopic() {
1165
+ // Destroy the topic creation request when we are done
1166
+ rd_kafka_DeleteTopic_destroy(m_topic);
1167
+ }
1168
+
1169
+ void AdminClientDeleteTopic::Execute() {
1170
+ Baton b = m_client->DeleteTopic(m_topic, m_timeout_ms);
1171
+ if (b.err() != RdKafka::ERR_NO_ERROR) {
1172
+ SetErrorBaton(b);
1173
+ }
1174
+ }
1175
+
1176
+ void AdminClientDeleteTopic::HandleOKCallback() {
1177
+ Nan::HandleScope scope;
1178
+
1179
+ const unsigned int argc = 1;
1180
+ v8::Local<v8::Value> argv[argc];
1181
+
1182
+ argv[0] = Nan::Null();
1183
+
1184
+ callback->Call(argc, argv);
1185
+ }
1186
+
1187
+ void AdminClientDeleteTopic::HandleErrorCallback() {
1188
+ Nan::HandleScope scope;
1189
+
1190
+ const unsigned int argc = 1;
1191
+ v8::Local<v8::Value> argv[argc] = { GetErrorObject() };
1192
+
1193
+ callback->Call(argc, argv);
1194
+ }
1195
+
1196
+ /**
1197
+ * @brief Delete a topic in an asynchronous worker.
1198
+ *
1199
+ * This callback will delete a topic
1200
+ *
1201
+ */
1202
+ AdminClientCreatePartitions::AdminClientCreatePartitions(
1203
+ Nan::Callback *callback,
1204
+ AdminClient* client,
1205
+ rd_kafka_NewPartitions_t* partitions,
1206
+ const int & timeout_ms) :
1207
+ ErrorAwareWorker(callback, "node-rdkafka:AdminClientCreatePartitions"),
1208
+ m_client(client),
1209
+ m_partitions(partitions),
1210
+ m_timeout_ms(timeout_ms) {}
1211
+
1212
+ AdminClientCreatePartitions::~AdminClientCreatePartitions() {
1213
+ // Destroy the topic creation request when we are done
1214
+ rd_kafka_NewPartitions_destroy(m_partitions);
1215
+ }
1216
+
1217
+ void AdminClientCreatePartitions::Execute() {
1218
+ Baton b = m_client->CreatePartitions(m_partitions, m_timeout_ms);
1219
+ if (b.err() != RdKafka::ERR_NO_ERROR) {
1220
+ SetErrorBaton(b);
1221
+ }
1222
+ }
1223
+
1224
+ void AdminClientCreatePartitions::HandleOKCallback() {
1225
+ Nan::HandleScope scope;
1226
+
1227
+ const unsigned int argc = 1;
1228
+ v8::Local<v8::Value> argv[argc];
1229
+
1230
+ argv[0] = Nan::Null();
1231
+
1232
+ callback->Call(argc, argv);
1233
+ }
1234
+
1235
+ void AdminClientCreatePartitions::HandleErrorCallback() {
1236
+ Nan::HandleScope scope;
1237
+
1238
+ const unsigned int argc = 1;
1239
+ v8::Local<v8::Value> argv[argc] = { GetErrorObject() };
1240
+
1241
+ callback->Call(argc, argv);
1242
+ }
1243
+
1244
+ } // namespace Workers
1245
+ } // namespace NodeKafka