@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.
- package/.editorconfig +5 -0
- package/.jshintignore +1 -0
- package/.jshintrc +23 -0
- package/CONTRIBUTING.md +237 -0
- package/LICENSE.txt +21 -0
- package/Makefile +94 -0
- package/README.md +630 -0
- package/bench/consumer-raw-rdkafka.js +76 -0
- package/bench/consumer-subscribe.js +77 -0
- package/bench/kafka-consumer-stream.js +100 -0
- package/bench/producer-raw-rdkafka.js +125 -0
- package/bench/producer-rdkafka.js +117 -0
- package/bench/seed.sh +38 -0
- package/binding.gyp +155 -0
- package/ci/checks/librdkafka-correct-version.js +67 -0
- package/ci/checks/librdkafka-exists.js +13 -0
- package/ci/librdkafka-defs-generator.js +193 -0
- package/ci/prepublish.js +3 -0
- package/config.d.ts +1132 -0
- package/configure +15 -0
- package/cpplint.py +6325 -0
- package/deploy.enc +0 -0
- package/deps/librdkafka/.clang-format +136 -0
- package/deps/librdkafka/.clang-format-cpp +103 -0
- package/deps/librdkafka/.dir-locals.el +10 -0
- package/deps/librdkafka/.formatignore +33 -0
- package/deps/librdkafka/.gdbmacros +19 -0
- package/deps/librdkafka/.semaphore/project.yml +43 -0
- package/deps/librdkafka/.semaphore/project_public.yml +20 -0
- package/deps/librdkafka/.semaphore/semaphore.yml +355 -0
- package/deps/librdkafka/CHANGELOG.md +1738 -0
- package/deps/librdkafka/CMakeLists.txt +291 -0
- package/deps/librdkafka/CODE_OF_CONDUCT.md +46 -0
- package/deps/librdkafka/CONFIGURATION.md +189 -0
- package/deps/librdkafka/CONTRIBUTING.md +431 -0
- package/deps/librdkafka/Doxyfile +2375 -0
- package/deps/librdkafka/INTRODUCTION.md +2173 -0
- package/deps/librdkafka/LICENSE +26 -0
- package/deps/librdkafka/LICENSE.cjson +22 -0
- package/deps/librdkafka/LICENSE.crc32c +28 -0
- package/deps/librdkafka/LICENSE.fnv1a +18 -0
- package/deps/librdkafka/LICENSE.hdrhistogram +27 -0
- package/deps/librdkafka/LICENSE.lz4 +26 -0
- package/deps/librdkafka/LICENSE.murmur2 +25 -0
- package/deps/librdkafka/LICENSE.nanopb +22 -0
- package/deps/librdkafka/LICENSE.opentelemetry +203 -0
- package/deps/librdkafka/LICENSE.pycrc +23 -0
- package/deps/librdkafka/LICENSE.queue +31 -0
- package/deps/librdkafka/LICENSE.regexp +5 -0
- package/deps/librdkafka/LICENSE.snappy +36 -0
- package/deps/librdkafka/LICENSE.tinycthread +26 -0
- package/deps/librdkafka/LICENSE.wingetopt +49 -0
- package/deps/librdkafka/LICENSES.txt +625 -0
- package/deps/librdkafka/Makefile +124 -0
- package/deps/librdkafka/README.md +199 -0
- package/deps/librdkafka/README.win32 +26 -0
- package/deps/librdkafka/STATISTICS.md +624 -0
- package/deps/librdkafka/configure +214 -0
- package/deps/librdkafka/configure.self +331 -0
- package/deps/librdkafka/debian/changelog +111 -0
- package/deps/librdkafka/debian/compat +1 -0
- package/deps/librdkafka/debian/control +71 -0
- package/deps/librdkafka/debian/copyright +99 -0
- package/deps/librdkafka/debian/gbp.conf +9 -0
- package/deps/librdkafka/debian/librdkafka++1.install +1 -0
- package/deps/librdkafka/debian/librdkafka-dev.examples +2 -0
- package/deps/librdkafka/debian/librdkafka-dev.install +9 -0
- package/deps/librdkafka/debian/librdkafka1.docs +5 -0
- package/deps/librdkafka/debian/librdkafka1.install +1 -0
- package/deps/librdkafka/debian/librdkafka1.symbols +135 -0
- package/deps/librdkafka/debian/rules +19 -0
- package/deps/librdkafka/debian/source/format +1 -0
- package/deps/librdkafka/debian/watch +2 -0
- package/deps/librdkafka/dev-conf.sh +123 -0
- package/deps/librdkafka/examples/CMakeLists.txt +79 -0
- package/deps/librdkafka/examples/Makefile +167 -0
- package/deps/librdkafka/examples/README.md +42 -0
- package/deps/librdkafka/examples/alter_consumer_group_offsets.c +338 -0
- package/deps/librdkafka/examples/consumer.c +261 -0
- package/deps/librdkafka/examples/delete_records.c +233 -0
- package/deps/librdkafka/examples/describe_cluster.c +322 -0
- package/deps/librdkafka/examples/describe_consumer_groups.c +436 -0
- package/deps/librdkafka/examples/describe_topics.c +427 -0
- package/deps/librdkafka/examples/elect_leaders.c +317 -0
- package/deps/librdkafka/examples/globals.json +11 -0
- package/deps/librdkafka/examples/idempotent_producer.c +344 -0
- package/deps/librdkafka/examples/incremental_alter_configs.c +348 -0
- package/deps/librdkafka/examples/kafkatest_verifiable_client.cpp +961 -0
- package/deps/librdkafka/examples/list_consumer_group_offsets.c +359 -0
- package/deps/librdkafka/examples/list_consumer_groups.c +365 -0
- package/deps/librdkafka/examples/list_offsets.c +327 -0
- package/deps/librdkafka/examples/misc.c +287 -0
- package/deps/librdkafka/examples/openssl_engine_example.cpp +249 -0
- package/deps/librdkafka/examples/producer.c +251 -0
- package/deps/librdkafka/examples/producer.cpp +228 -0
- package/deps/librdkafka/examples/rdkafka_complex_consumer_example.c +617 -0
- package/deps/librdkafka/examples/rdkafka_complex_consumer_example.cpp +467 -0
- package/deps/librdkafka/examples/rdkafka_consume_batch.cpp +264 -0
- package/deps/librdkafka/examples/rdkafka_example.c +853 -0
- package/deps/librdkafka/examples/rdkafka_example.cpp +679 -0
- package/deps/librdkafka/examples/rdkafka_performance.c +1781 -0
- package/deps/librdkafka/examples/transactions-older-broker.c +668 -0
- package/deps/librdkafka/examples/transactions.c +665 -0
- package/deps/librdkafka/examples/user_scram.c +492 -0
- package/deps/librdkafka/examples/win_ssl_cert_store.cpp +395 -0
- package/deps/librdkafka/lds-gen.py +73 -0
- package/deps/librdkafka/mainpage.doxy +40 -0
- package/deps/librdkafka/mklove/Makefile.base +329 -0
- package/deps/librdkafka/mklove/modules/configure.atomics +144 -0
- package/deps/librdkafka/mklove/modules/configure.base +2484 -0
- package/deps/librdkafka/mklove/modules/configure.builtin +70 -0
- package/deps/librdkafka/mklove/modules/configure.cc +186 -0
- package/deps/librdkafka/mklove/modules/configure.cxx +8 -0
- package/deps/librdkafka/mklove/modules/configure.fileversion +65 -0
- package/deps/librdkafka/mklove/modules/configure.gitversion +29 -0
- package/deps/librdkafka/mklove/modules/configure.good_cflags +18 -0
- package/deps/librdkafka/mklove/modules/configure.host +132 -0
- package/deps/librdkafka/mklove/modules/configure.lib +49 -0
- package/deps/librdkafka/mklove/modules/configure.libcurl +99 -0
- package/deps/librdkafka/mklove/modules/configure.libsasl2 +36 -0
- package/deps/librdkafka/mklove/modules/configure.libssl +147 -0
- package/deps/librdkafka/mklove/modules/configure.libzstd +58 -0
- package/deps/librdkafka/mklove/modules/configure.parseversion +95 -0
- package/deps/librdkafka/mklove/modules/configure.pic +16 -0
- package/deps/librdkafka/mklove/modules/configure.socket +20 -0
- package/deps/librdkafka/mklove/modules/configure.zlib +61 -0
- package/deps/librdkafka/mklove/modules/patches/README.md +8 -0
- package/deps/librdkafka/mklove/modules/patches/libcurl.0000-no-runtime-linking-check.patch +11 -0
- package/deps/librdkafka/mklove/modules/patches/libssl.0000-osx-rand-include-fix-OpenSSL-PR16409.patch +56 -0
- package/deps/librdkafka/packaging/RELEASE.md +311 -0
- package/deps/librdkafka/packaging/alpine/build-alpine.sh +38 -0
- package/deps/librdkafka/packaging/archlinux/PKGBUILD +30 -0
- package/deps/librdkafka/packaging/cmake/Config.cmake.in +37 -0
- package/deps/librdkafka/packaging/cmake/Modules/FindLZ4.cmake +38 -0
- package/deps/librdkafka/packaging/cmake/Modules/FindZSTD.cmake +27 -0
- package/deps/librdkafka/packaging/cmake/Modules/LICENSE.FindZstd +178 -0
- package/deps/librdkafka/packaging/cmake/README.md +38 -0
- package/deps/librdkafka/packaging/cmake/config.h.in +52 -0
- package/deps/librdkafka/packaging/cmake/parseversion.cmake +60 -0
- package/deps/librdkafka/packaging/cmake/rdkafka.pc.in +12 -0
- package/deps/librdkafka/packaging/cmake/try_compile/atomic_32_test.c +8 -0
- package/deps/librdkafka/packaging/cmake/try_compile/atomic_64_test.c +8 -0
- package/deps/librdkafka/packaging/cmake/try_compile/c11threads_test.c +14 -0
- package/deps/librdkafka/packaging/cmake/try_compile/crc32c_hw_test.c +27 -0
- package/deps/librdkafka/packaging/cmake/try_compile/dlopen_test.c +11 -0
- package/deps/librdkafka/packaging/cmake/try_compile/libsasl2_test.c +7 -0
- package/deps/librdkafka/packaging/cmake/try_compile/pthread_setname_darwin_test.c +6 -0
- package/deps/librdkafka/packaging/cmake/try_compile/pthread_setname_freebsd_test.c +7 -0
- package/deps/librdkafka/packaging/cmake/try_compile/pthread_setname_gnu_test.c +5 -0
- package/deps/librdkafka/packaging/cmake/try_compile/rand_r_test.c +7 -0
- package/deps/librdkafka/packaging/cmake/try_compile/rdkafka_setup.cmake +122 -0
- package/deps/librdkafka/packaging/cmake/try_compile/regex_test.c +10 -0
- package/deps/librdkafka/packaging/cmake/try_compile/strndup_test.c +5 -0
- package/deps/librdkafka/packaging/cmake/try_compile/sync_32_test.c +8 -0
- package/deps/librdkafka/packaging/cmake/try_compile/sync_64_test.c +8 -0
- package/deps/librdkafka/packaging/cp/README.md +13 -0
- package/deps/librdkafka/packaging/cp/check_features.c +64 -0
- package/deps/librdkafka/packaging/cp/verify-deb.sh +33 -0
- package/deps/librdkafka/packaging/cp/verify-packages.sh +48 -0
- package/deps/librdkafka/packaging/cp/verify-rpm.sh +39 -0
- package/deps/librdkafka/packaging/debian/changelog +66 -0
- package/deps/librdkafka/packaging/debian/compat +1 -0
- package/deps/librdkafka/packaging/debian/control +49 -0
- package/deps/librdkafka/packaging/debian/copyright +84 -0
- package/deps/librdkafka/packaging/debian/gbp.conf +9 -0
- package/deps/librdkafka/packaging/debian/librdkafka-dev.dirs +2 -0
- package/deps/librdkafka/packaging/debian/librdkafka-dev.examples +2 -0
- package/deps/librdkafka/packaging/debian/librdkafka-dev.install +6 -0
- package/deps/librdkafka/packaging/debian/librdkafka-dev.substvars +1 -0
- package/deps/librdkafka/packaging/debian/librdkafka.dsc +16 -0
- package/deps/librdkafka/packaging/debian/librdkafka1-dbg.substvars +1 -0
- package/deps/librdkafka/packaging/debian/librdkafka1.dirs +1 -0
- package/deps/librdkafka/packaging/debian/librdkafka1.install +2 -0
- package/deps/librdkafka/packaging/debian/librdkafka1.postinst.debhelper +5 -0
- package/deps/librdkafka/packaging/debian/librdkafka1.postrm.debhelper +5 -0
- package/deps/librdkafka/packaging/debian/librdkafka1.symbols +64 -0
- package/deps/librdkafka/packaging/debian/rules +19 -0
- package/deps/librdkafka/packaging/debian/source/format +1 -0
- package/deps/librdkafka/packaging/debian/watch +2 -0
- package/deps/librdkafka/packaging/get_version.py +21 -0
- package/deps/librdkafka/packaging/homebrew/README.md +15 -0
- package/deps/librdkafka/packaging/homebrew/brew-update-pr.sh +31 -0
- package/deps/librdkafka/packaging/mingw-w64/configure-build-msys2-mingw-static.sh +52 -0
- package/deps/librdkafka/packaging/mingw-w64/configure-build-msys2-mingw.sh +21 -0
- package/deps/librdkafka/packaging/mingw-w64/run-tests.sh +6 -0
- package/deps/librdkafka/packaging/mingw-w64/semaphoreci-build.sh +38 -0
- package/deps/librdkafka/packaging/mingw-w64/travis-before-install.sh +20 -0
- package/deps/librdkafka/packaging/nuget/README.md +84 -0
- package/deps/librdkafka/packaging/nuget/artifact.py +177 -0
- package/deps/librdkafka/packaging/nuget/cleanup-s3.py +143 -0
- package/deps/librdkafka/packaging/nuget/common/p-common__plat-windows__arch-win32__bldtype-Release/msvcr120.zip +0 -0
- package/deps/librdkafka/packaging/nuget/common/p-common__plat-windows__arch-win32__bldtype-Release/msvcr140.zip +0 -0
- package/deps/librdkafka/packaging/nuget/common/p-common__plat-windows__arch-x64__bldtype-Release/msvcr120.zip +0 -0
- package/deps/librdkafka/packaging/nuget/common/p-common__plat-windows__arch-x64__bldtype-Release/msvcr140.zip +0 -0
- package/deps/librdkafka/packaging/nuget/nuget.sh +21 -0
- package/deps/librdkafka/packaging/nuget/nugetpackage.py +278 -0
- package/deps/librdkafka/packaging/nuget/packaging.py +448 -0
- package/deps/librdkafka/packaging/nuget/push-to-nuget.sh +21 -0
- package/deps/librdkafka/packaging/nuget/release.py +167 -0
- package/deps/librdkafka/packaging/nuget/requirements.txt +3 -0
- package/deps/librdkafka/packaging/nuget/staticpackage.py +178 -0
- package/deps/librdkafka/packaging/nuget/templates/librdkafka.redist.nuspec +21 -0
- package/deps/librdkafka/packaging/nuget/templates/librdkafka.redist.props +18 -0
- package/deps/librdkafka/packaging/nuget/templates/librdkafka.redist.targets +19 -0
- package/deps/librdkafka/packaging/nuget/zfile/__init__.py +0 -0
- package/deps/librdkafka/packaging/nuget/zfile/zfile.py +98 -0
- package/deps/librdkafka/packaging/rpm/Makefile +92 -0
- package/deps/librdkafka/packaging/rpm/README.md +23 -0
- package/deps/librdkafka/packaging/rpm/el7-x86_64.cfg +40 -0
- package/deps/librdkafka/packaging/rpm/librdkafka.spec +118 -0
- package/deps/librdkafka/packaging/rpm/mock-on-docker.sh +96 -0
- package/deps/librdkafka/packaging/rpm/tests/Makefile +25 -0
- package/deps/librdkafka/packaging/rpm/tests/README.md +8 -0
- package/deps/librdkafka/packaging/rpm/tests/run-test.sh +42 -0
- package/deps/librdkafka/packaging/rpm/tests/test-on-docker.sh +56 -0
- package/deps/librdkafka/packaging/rpm/tests/test.c +77 -0
- package/deps/librdkafka/packaging/rpm/tests/test.cpp +34 -0
- package/deps/librdkafka/packaging/tools/build-configurations-checks.sh +10 -0
- package/deps/librdkafka/packaging/tools/build-deb-package.sh +64 -0
- package/deps/librdkafka/packaging/tools/build-debian.sh +65 -0
- package/deps/librdkafka/packaging/tools/build-manylinux.sh +68 -0
- package/deps/librdkafka/packaging/tools/build-release-artifacts.sh +139 -0
- package/deps/librdkafka/packaging/tools/distro-build.sh +38 -0
- package/deps/librdkafka/packaging/tools/gh-release-checksums.py +39 -0
- package/deps/librdkafka/packaging/tools/rdutcoverage.sh +25 -0
- package/deps/librdkafka/packaging/tools/requirements.txt +2 -0
- package/deps/librdkafka/packaging/tools/style-format.sh +148 -0
- package/deps/librdkafka/service.yml +18 -0
- package/deps/librdkafka/src/CMakeLists.txt +374 -0
- package/deps/librdkafka/src/Makefile +103 -0
- package/deps/librdkafka/src/README.lz4.md +30 -0
- package/deps/librdkafka/src/cJSON.c +2834 -0
- package/deps/librdkafka/src/cJSON.h +398 -0
- package/deps/librdkafka/src/crc32c.c +430 -0
- package/deps/librdkafka/src/crc32c.h +38 -0
- package/deps/librdkafka/src/generate_proto.sh +66 -0
- package/deps/librdkafka/src/librdkafka_cgrp_synch.png +0 -0
- package/deps/librdkafka/src/lz4.c +2727 -0
- package/deps/librdkafka/src/lz4.h +842 -0
- package/deps/librdkafka/src/lz4frame.c +2078 -0
- package/deps/librdkafka/src/lz4frame.h +692 -0
- package/deps/librdkafka/src/lz4frame_static.h +47 -0
- package/deps/librdkafka/src/lz4hc.c +1631 -0
- package/deps/librdkafka/src/lz4hc.h +413 -0
- package/deps/librdkafka/src/nanopb/pb.h +917 -0
- package/deps/librdkafka/src/nanopb/pb_common.c +388 -0
- package/deps/librdkafka/src/nanopb/pb_common.h +49 -0
- package/deps/librdkafka/src/nanopb/pb_decode.c +1727 -0
- package/deps/librdkafka/src/nanopb/pb_decode.h +193 -0
- package/deps/librdkafka/src/nanopb/pb_encode.c +1000 -0
- package/deps/librdkafka/src/nanopb/pb_encode.h +185 -0
- package/deps/librdkafka/src/opentelemetry/common.pb.c +32 -0
- package/deps/librdkafka/src/opentelemetry/common.pb.h +170 -0
- package/deps/librdkafka/src/opentelemetry/metrics.options +2 -0
- package/deps/librdkafka/src/opentelemetry/metrics.pb.c +67 -0
- package/deps/librdkafka/src/opentelemetry/metrics.pb.h +966 -0
- package/deps/librdkafka/src/opentelemetry/resource.pb.c +12 -0
- package/deps/librdkafka/src/opentelemetry/resource.pb.h +58 -0
- package/deps/librdkafka/src/queue.h +850 -0
- package/deps/librdkafka/src/rd.h +441 -0
- package/deps/librdkafka/src/rdaddr.c +255 -0
- package/deps/librdkafka/src/rdaddr.h +203 -0
- package/deps/librdkafka/src/rdatomic.h +226 -0
- package/deps/librdkafka/src/rdavg.h +259 -0
- package/deps/librdkafka/src/rdavl.c +210 -0
- package/deps/librdkafka/src/rdavl.h +250 -0
- package/deps/librdkafka/src/rdbase64.c +169 -0
- package/deps/librdkafka/src/rdbase64.h +41 -0
- package/deps/librdkafka/src/rdbuf.c +1884 -0
- package/deps/librdkafka/src/rdbuf.h +375 -0
- package/deps/librdkafka/src/rdcrc32.c +114 -0
- package/deps/librdkafka/src/rdcrc32.h +170 -0
- package/deps/librdkafka/src/rddl.c +179 -0
- package/deps/librdkafka/src/rddl.h +43 -0
- package/deps/librdkafka/src/rdendian.h +174 -0
- package/deps/librdkafka/src/rdfloat.h +67 -0
- package/deps/librdkafka/src/rdfnv1a.c +113 -0
- package/deps/librdkafka/src/rdfnv1a.h +35 -0
- package/deps/librdkafka/src/rdgz.c +120 -0
- package/deps/librdkafka/src/rdgz.h +46 -0
- package/deps/librdkafka/src/rdhdrhistogram.c +721 -0
- package/deps/librdkafka/src/rdhdrhistogram.h +87 -0
- package/deps/librdkafka/src/rdhttp.c +512 -0
- package/deps/librdkafka/src/rdhttp.h +83 -0
- package/deps/librdkafka/src/rdinterval.h +177 -0
- package/deps/librdkafka/src/rdkafka.c +5351 -0
- package/deps/librdkafka/src/rdkafka.h +10603 -0
- package/deps/librdkafka/src/rdkafka_admin.c +9417 -0
- package/deps/librdkafka/src/rdkafka_admin.h +619 -0
- package/deps/librdkafka/src/rdkafka_assignment.c +1010 -0
- package/deps/librdkafka/src/rdkafka_assignment.h +73 -0
- package/deps/librdkafka/src/rdkafka_assignor.c +1786 -0
- package/deps/librdkafka/src/rdkafka_assignor.h +402 -0
- package/deps/librdkafka/src/rdkafka_aux.c +409 -0
- package/deps/librdkafka/src/rdkafka_aux.h +174 -0
- package/deps/librdkafka/src/rdkafka_background.c +221 -0
- package/deps/librdkafka/src/rdkafka_broker.c +6186 -0
- package/deps/librdkafka/src/rdkafka_broker.h +686 -0
- package/deps/librdkafka/src/rdkafka_buf.c +540 -0
- package/deps/librdkafka/src/rdkafka_buf.h +1524 -0
- package/deps/librdkafka/src/rdkafka_cert.c +552 -0
- package/deps/librdkafka/src/rdkafka_cert.h +61 -0
- package/deps/librdkafka/src/rdkafka_cgrp.c +7262 -0
- package/deps/librdkafka/src/rdkafka_cgrp.h +443 -0
- package/deps/librdkafka/src/rdkafka_conf.c +4456 -0
- package/deps/librdkafka/src/rdkafka_conf.h +668 -0
- package/deps/librdkafka/src/rdkafka_confval.h +97 -0
- package/deps/librdkafka/src/rdkafka_coord.c +623 -0
- package/deps/librdkafka/src/rdkafka_coord.h +132 -0
- package/deps/librdkafka/src/rdkafka_error.c +228 -0
- package/deps/librdkafka/src/rdkafka_error.h +80 -0
- package/deps/librdkafka/src/rdkafka_event.c +502 -0
- package/deps/librdkafka/src/rdkafka_event.h +126 -0
- package/deps/librdkafka/src/rdkafka_feature.c +461 -0
- package/deps/librdkafka/src/rdkafka_feature.h +102 -0
- package/deps/librdkafka/src/rdkafka_fetcher.c +1402 -0
- package/deps/librdkafka/src/rdkafka_fetcher.h +44 -0
- package/deps/librdkafka/src/rdkafka_header.c +220 -0
- package/deps/librdkafka/src/rdkafka_header.h +76 -0
- package/deps/librdkafka/src/rdkafka_idempotence.c +807 -0
- package/deps/librdkafka/src/rdkafka_idempotence.h +144 -0
- package/deps/librdkafka/src/rdkafka_int.h +1222 -0
- package/deps/librdkafka/src/rdkafka_interceptor.c +819 -0
- package/deps/librdkafka/src/rdkafka_interceptor.h +104 -0
- package/deps/librdkafka/src/rdkafka_lz4.c +450 -0
- package/deps/librdkafka/src/rdkafka_lz4.h +49 -0
- package/deps/librdkafka/src/rdkafka_metadata.c +2124 -0
- package/deps/librdkafka/src/rdkafka_metadata.h +341 -0
- package/deps/librdkafka/src/rdkafka_metadata_cache.c +977 -0
- package/deps/librdkafka/src/rdkafka_mock.c +2885 -0
- package/deps/librdkafka/src/rdkafka_mock.h +491 -0
- package/deps/librdkafka/src/rdkafka_mock_cgrp.c +710 -0
- package/deps/librdkafka/src/rdkafka_mock_handlers.c +2817 -0
- package/deps/librdkafka/src/rdkafka_mock_int.h +591 -0
- package/deps/librdkafka/src/rdkafka_msg.c +2573 -0
- package/deps/librdkafka/src/rdkafka_msg.h +614 -0
- package/deps/librdkafka/src/rdkafka_msgbatch.h +62 -0
- package/deps/librdkafka/src/rdkafka_msgset.h +98 -0
- package/deps/librdkafka/src/rdkafka_msgset_reader.c +1806 -0
- package/deps/librdkafka/src/rdkafka_msgset_writer.c +1470 -0
- package/deps/librdkafka/src/rdkafka_offset.c +1537 -0
- package/deps/librdkafka/src/rdkafka_offset.h +150 -0
- package/deps/librdkafka/src/rdkafka_op.c +997 -0
- package/deps/librdkafka/src/rdkafka_op.h +834 -0
- package/deps/librdkafka/src/rdkafka_partition.c +4801 -0
- package/deps/librdkafka/src/rdkafka_partition.h +1173 -0
- package/deps/librdkafka/src/rdkafka_pattern.c +228 -0
- package/deps/librdkafka/src/rdkafka_pattern.h +70 -0
- package/deps/librdkafka/src/rdkafka_plugin.c +213 -0
- package/deps/librdkafka/src/rdkafka_plugin.h +41 -0
- package/deps/librdkafka/src/rdkafka_proto.h +733 -0
- package/deps/librdkafka/src/rdkafka_protocol.h +127 -0
- package/deps/librdkafka/src/rdkafka_queue.c +1153 -0
- package/deps/librdkafka/src/rdkafka_queue.h +1201 -0
- package/deps/librdkafka/src/rdkafka_range_assignor.c +1748 -0
- package/deps/librdkafka/src/rdkafka_request.c +6817 -0
- package/deps/librdkafka/src/rdkafka_request.h +709 -0
- package/deps/librdkafka/src/rdkafka_roundrobin_assignor.c +123 -0
- package/deps/librdkafka/src/rdkafka_sasl.c +528 -0
- package/deps/librdkafka/src/rdkafka_sasl.h +63 -0
- package/deps/librdkafka/src/rdkafka_sasl_cyrus.c +722 -0
- package/deps/librdkafka/src/rdkafka_sasl_int.h +89 -0
- package/deps/librdkafka/src/rdkafka_sasl_oauthbearer.c +1829 -0
- package/deps/librdkafka/src/rdkafka_sasl_oauthbearer.h +52 -0
- package/deps/librdkafka/src/rdkafka_sasl_oauthbearer_oidc.c +589 -0
- package/deps/librdkafka/src/rdkafka_sasl_oauthbearer_oidc.h +37 -0
- package/deps/librdkafka/src/rdkafka_sasl_plain.c +142 -0
- package/deps/librdkafka/src/rdkafka_sasl_scram.c +857 -0
- package/deps/librdkafka/src/rdkafka_sasl_win32.c +550 -0
- package/deps/librdkafka/src/rdkafka_ssl.c +1904 -0
- package/deps/librdkafka/src/rdkafka_ssl.h +64 -0
- package/deps/librdkafka/src/rdkafka_sticky_assignor.c +4781 -0
- package/deps/librdkafka/src/rdkafka_subscription.c +278 -0
- package/deps/librdkafka/src/rdkafka_telemetry.c +703 -0
- package/deps/librdkafka/src/rdkafka_telemetry.h +52 -0
- package/deps/librdkafka/src/rdkafka_telemetry_decode.c +1053 -0
- package/deps/librdkafka/src/rdkafka_telemetry_decode.h +59 -0
- package/deps/librdkafka/src/rdkafka_telemetry_encode.c +993 -0
- package/deps/librdkafka/src/rdkafka_telemetry_encode.h +301 -0
- package/deps/librdkafka/src/rdkafka_timer.c +402 -0
- package/deps/librdkafka/src/rdkafka_timer.h +117 -0
- package/deps/librdkafka/src/rdkafka_topic.c +2078 -0
- package/deps/librdkafka/src/rdkafka_topic.h +328 -0
- package/deps/librdkafka/src/rdkafka_transport.c +1297 -0
- package/deps/librdkafka/src/rdkafka_transport.h +94 -0
- package/deps/librdkafka/src/rdkafka_transport_int.h +100 -0
- package/deps/librdkafka/src/rdkafka_txnmgr.c +3251 -0
- package/deps/librdkafka/src/rdkafka_txnmgr.h +171 -0
- package/deps/librdkafka/src/rdkafka_zstd.c +226 -0
- package/deps/librdkafka/src/rdkafka_zstd.h +57 -0
- package/deps/librdkafka/src/rdlist.c +576 -0
- package/deps/librdkafka/src/rdlist.h +434 -0
- package/deps/librdkafka/src/rdlog.c +89 -0
- package/deps/librdkafka/src/rdlog.h +41 -0
- package/deps/librdkafka/src/rdmap.c +503 -0
- package/deps/librdkafka/src/rdmap.h +492 -0
- package/deps/librdkafka/src/rdmurmur2.c +167 -0
- package/deps/librdkafka/src/rdmurmur2.h +35 -0
- package/deps/librdkafka/src/rdports.c +61 -0
- package/deps/librdkafka/src/rdports.h +38 -0
- package/deps/librdkafka/src/rdposix.h +250 -0
- package/deps/librdkafka/src/rdrand.c +70 -0
- package/deps/librdkafka/src/rdrand.h +43 -0
- package/deps/librdkafka/src/rdregex.c +156 -0
- package/deps/librdkafka/src/rdregex.h +43 -0
- package/deps/librdkafka/src/rdsignal.h +57 -0
- package/deps/librdkafka/src/rdstring.c +645 -0
- package/deps/librdkafka/src/rdstring.h +98 -0
- package/deps/librdkafka/src/rdsysqueue.h +404 -0
- package/deps/librdkafka/src/rdtime.h +325 -0
- package/deps/librdkafka/src/rdtypes.h +86 -0
- package/deps/librdkafka/src/rdunittest.c +532 -0
- package/deps/librdkafka/src/rdunittest.h +230 -0
- package/deps/librdkafka/src/rdvarint.c +134 -0
- package/deps/librdkafka/src/rdvarint.h +165 -0
- package/deps/librdkafka/src/rdwin32.h +382 -0
- package/deps/librdkafka/src/rdxxhash.c +1030 -0
- package/deps/librdkafka/src/rdxxhash.h +328 -0
- package/deps/librdkafka/src/regexp.c +1347 -0
- package/deps/librdkafka/src/regexp.h +41 -0
- package/deps/librdkafka/src/snappy.c +1866 -0
- package/deps/librdkafka/src/snappy.h +62 -0
- package/deps/librdkafka/src/snappy_compat.h +138 -0
- package/deps/librdkafka/src/statistics_schema.json +444 -0
- package/deps/librdkafka/src/tinycthread.c +932 -0
- package/deps/librdkafka/src/tinycthread.h +503 -0
- package/deps/librdkafka/src/tinycthread_extra.c +175 -0
- package/deps/librdkafka/src/tinycthread_extra.h +208 -0
- package/deps/librdkafka/src/win32_config.h +58 -0
- package/deps/librdkafka/src-cpp/CMakeLists.txt +90 -0
- package/deps/librdkafka/src-cpp/ConfImpl.cpp +84 -0
- package/deps/librdkafka/src-cpp/ConsumerImpl.cpp +244 -0
- package/deps/librdkafka/src-cpp/HandleImpl.cpp +436 -0
- package/deps/librdkafka/src-cpp/HeadersImpl.cpp +48 -0
- package/deps/librdkafka/src-cpp/KafkaConsumerImpl.cpp +296 -0
- package/deps/librdkafka/src-cpp/Makefile +55 -0
- package/deps/librdkafka/src-cpp/MessageImpl.cpp +38 -0
- package/deps/librdkafka/src-cpp/MetadataImpl.cpp +170 -0
- package/deps/librdkafka/src-cpp/ProducerImpl.cpp +197 -0
- package/deps/librdkafka/src-cpp/QueueImpl.cpp +70 -0
- package/deps/librdkafka/src-cpp/README.md +16 -0
- package/deps/librdkafka/src-cpp/RdKafka.cpp +59 -0
- package/deps/librdkafka/src-cpp/TopicImpl.cpp +124 -0
- package/deps/librdkafka/src-cpp/TopicPartitionImpl.cpp +57 -0
- package/deps/librdkafka/src-cpp/rdkafkacpp.h +3771 -0
- package/deps/librdkafka/src-cpp/rdkafkacpp_int.h +1641 -0
- package/deps/librdkafka/tests/0000-unittests.c +72 -0
- package/deps/librdkafka/tests/0001-multiobj.c +98 -0
- package/deps/librdkafka/tests/0002-unkpart.c +244 -0
- package/deps/librdkafka/tests/0003-msgmaxsize.c +173 -0
- package/deps/librdkafka/tests/0004-conf.c +867 -0
- package/deps/librdkafka/tests/0005-order.c +133 -0
- package/deps/librdkafka/tests/0006-symbols.c +163 -0
- package/deps/librdkafka/tests/0007-autotopic.c +136 -0
- package/deps/librdkafka/tests/0008-reqacks.c +179 -0
- package/deps/librdkafka/tests/0009-mock_cluster.c +96 -0
- package/deps/librdkafka/tests/0011-produce_batch.c +752 -0
- package/deps/librdkafka/tests/0012-produce_consume.c +537 -0
- package/deps/librdkafka/tests/0013-null-msgs.c +473 -0
- package/deps/librdkafka/tests/0014-reconsume-191.c +512 -0
- package/deps/librdkafka/tests/0015-offset_seeks.c +172 -0
- package/deps/librdkafka/tests/0016-client_swname.c +166 -0
- package/deps/librdkafka/tests/0017-compression.c +142 -0
- package/deps/librdkafka/tests/0018-cgrp_term.c +333 -0
- package/deps/librdkafka/tests/0019-list_groups.c +289 -0
- package/deps/librdkafka/tests/0020-destroy_hang.c +162 -0
- package/deps/librdkafka/tests/0021-rkt_destroy.c +71 -0
- package/deps/librdkafka/tests/0022-consume_batch.c +276 -0
- package/deps/librdkafka/tests/0025-timers.c +147 -0
- package/deps/librdkafka/tests/0026-consume_pause.c +549 -0
- package/deps/librdkafka/tests/0028-long_topicnames.c +79 -0
- package/deps/librdkafka/tests/0029-assign_offset.c +204 -0
- package/deps/librdkafka/tests/0030-offset_commit.c +589 -0
- package/deps/librdkafka/tests/0031-get_offsets.c +235 -0
- package/deps/librdkafka/tests/0033-regex_subscribe.c +520 -0
- package/deps/librdkafka/tests/0034-offset_reset.c +377 -0
- package/deps/librdkafka/tests/0035-api_version.c +73 -0
- package/deps/librdkafka/tests/0036-partial_fetch.c +86 -0
- package/deps/librdkafka/tests/0037-destroy_hang_local.c +85 -0
- package/deps/librdkafka/tests/0038-performance.c +120 -0
- package/deps/librdkafka/tests/0039-event.c +284 -0
- package/deps/librdkafka/tests/0040-io_event.c +251 -0
- package/deps/librdkafka/tests/0041-fetch_max_bytes.c +96 -0
- package/deps/librdkafka/tests/0042-many_topics.c +252 -0
- package/deps/librdkafka/tests/0043-no_connection.c +77 -0
- package/deps/librdkafka/tests/0044-partition_cnt.c +93 -0
- package/deps/librdkafka/tests/0045-subscribe_update.c +746 -0
- package/deps/librdkafka/tests/0046-rkt_cache.c +65 -0
- package/deps/librdkafka/tests/0047-partial_buf_tmout.c +97 -0
- package/deps/librdkafka/tests/0048-partitioner.c +283 -0
- package/deps/librdkafka/tests/0049-consume_conn_close.c +162 -0
- package/deps/librdkafka/tests/0050-subscribe_adds.c +144 -0
- package/deps/librdkafka/tests/0051-assign_adds.c +125 -0
- package/deps/librdkafka/tests/0052-msg_timestamps.c +220 -0
- package/deps/librdkafka/tests/0053-stats_cb.cpp +535 -0
- package/deps/librdkafka/tests/0054-offset_time.cpp +236 -0
- package/deps/librdkafka/tests/0055-producer_latency.c +366 -0
- package/deps/librdkafka/tests/0056-balanced_group_mt.c +311 -0
- package/deps/librdkafka/tests/0057-invalid_topic.cpp +112 -0
- package/deps/librdkafka/tests/0058-log.cpp +123 -0
- package/deps/librdkafka/tests/0059-bsearch.cpp +237 -0
- package/deps/librdkafka/tests/0060-op_prio.cpp +163 -0
- package/deps/librdkafka/tests/0061-consumer_lag.cpp +275 -0
- package/deps/librdkafka/tests/0062-stats_event.c +126 -0
- package/deps/librdkafka/tests/0063-clusterid.cpp +180 -0
- package/deps/librdkafka/tests/0064-interceptors.c +481 -0
- package/deps/librdkafka/tests/0065-yield.cpp +140 -0
- package/deps/librdkafka/tests/0066-plugins.cpp +129 -0
- package/deps/librdkafka/tests/0067-empty_topic.cpp +148 -0
- package/deps/librdkafka/tests/0068-produce_timeout.c +138 -0
- package/deps/librdkafka/tests/0069-consumer_add_parts.c +123 -0
- package/deps/librdkafka/tests/0070-null_empty.cpp +197 -0
- package/deps/librdkafka/tests/0072-headers_ut.c +448 -0
- package/deps/librdkafka/tests/0073-headers.c +381 -0
- package/deps/librdkafka/tests/0074-producev.c +87 -0
- package/deps/librdkafka/tests/0075-retry.c +253 -0
- package/deps/librdkafka/tests/0076-produce_retry.c +450 -0
- package/deps/librdkafka/tests/0077-compaction.c +357 -0
- package/deps/librdkafka/tests/0078-c_from_cpp.cpp +96 -0
- package/deps/librdkafka/tests/0079-fork.c +93 -0
- package/deps/librdkafka/tests/0080-admin_ut.c +3065 -0
- package/deps/librdkafka/tests/0081-admin.c +5333 -0
- package/deps/librdkafka/tests/0082-fetch_max_bytes.cpp +133 -0
- package/deps/librdkafka/tests/0083-cb_event.c +228 -0
- package/deps/librdkafka/tests/0084-destroy_flags.c +212 -0
- package/deps/librdkafka/tests/0085-headers.cpp +388 -0
- package/deps/librdkafka/tests/0086-purge.c +335 -0
- package/deps/librdkafka/tests/0088-produce_metadata_timeout.c +162 -0
- package/deps/librdkafka/tests/0089-max_poll_interval.c +506 -0
- package/deps/librdkafka/tests/0090-idempotence.c +172 -0
- package/deps/librdkafka/tests/0091-max_poll_interval_timeout.c +297 -0
- package/deps/librdkafka/tests/0092-mixed_msgver.c +97 -0
- package/deps/librdkafka/tests/0093-holb.c +197 -0
- package/deps/librdkafka/tests/0094-idempotence_msg_timeout.c +230 -0
- package/deps/librdkafka/tests/0095-all_brokers_down.cpp +122 -0
- package/deps/librdkafka/tests/0097-ssl_verify.cpp +466 -0
- package/deps/librdkafka/tests/0098-consumer-txn.cpp +1218 -0
- package/deps/librdkafka/tests/0099-commit_metadata.c +194 -0
- package/deps/librdkafka/tests/0100-thread_interceptors.cpp +195 -0
- package/deps/librdkafka/tests/0101-fetch-from-follower.cpp +446 -0
- package/deps/librdkafka/tests/0102-static_group_rebalance.c +535 -0
- package/deps/librdkafka/tests/0103-transactions.c +1383 -0
- package/deps/librdkafka/tests/0104-fetch_from_follower_mock.c +624 -0
- package/deps/librdkafka/tests/0105-transactions_mock.c +3923 -0
- package/deps/librdkafka/tests/0106-cgrp_sess_timeout.c +297 -0
- package/deps/librdkafka/tests/0107-topic_recreate.c +259 -0
- package/deps/librdkafka/tests/0109-auto_create_topics.cpp +218 -0
- package/deps/librdkafka/tests/0110-batch_size.cpp +183 -0
- package/deps/librdkafka/tests/0111-delay_create_topics.cpp +127 -0
- package/deps/librdkafka/tests/0112-assign_unknown_part.c +98 -0
- package/deps/librdkafka/tests/0113-cooperative_rebalance.cpp +3329 -0
- package/deps/librdkafka/tests/0114-sticky_partitioning.cpp +176 -0
- package/deps/librdkafka/tests/0115-producer_auth.cpp +179 -0
- package/deps/librdkafka/tests/0116-kafkaconsumer_close.cpp +214 -0
- package/deps/librdkafka/tests/0117-mock_errors.c +321 -0
- package/deps/librdkafka/tests/0118-commit_rebalance.c +121 -0
- package/deps/librdkafka/tests/0119-consumer_auth.cpp +148 -0
- package/deps/librdkafka/tests/0120-asymmetric_subscription.c +180 -0
- package/deps/librdkafka/tests/0121-clusterid.c +115 -0
- package/deps/librdkafka/tests/0122-buffer_cleaning_after_rebalance.c +227 -0
- package/deps/librdkafka/tests/0123-connections_max_idle.c +98 -0
- package/deps/librdkafka/tests/0124-openssl_invalid_engine.c +69 -0
- package/deps/librdkafka/tests/0125-immediate_flush.c +144 -0
- package/deps/librdkafka/tests/0126-oauthbearer_oidc.c +213 -0
- package/deps/librdkafka/tests/0127-fetch_queue_backoff.cpp +165 -0
- package/deps/librdkafka/tests/0128-sasl_callback_queue.cpp +125 -0
- package/deps/librdkafka/tests/0129-fetch_aborted_msgs.c +78 -0
- package/deps/librdkafka/tests/0130-store_offsets.c +178 -0
- package/deps/librdkafka/tests/0131-connect_timeout.c +81 -0
- package/deps/librdkafka/tests/0132-strategy_ordering.c +171 -0
- package/deps/librdkafka/tests/0133-ssl_keys.c +128 -0
- package/deps/librdkafka/tests/0134-ssl_provider.c +92 -0
- package/deps/librdkafka/tests/0135-sasl_credentials.cpp +143 -0
- package/deps/librdkafka/tests/0136-resolve_cb.c +181 -0
- package/deps/librdkafka/tests/0137-barrier_batch_consume.c +609 -0
- package/deps/librdkafka/tests/0138-admin_mock.c +281 -0
- package/deps/librdkafka/tests/0139-offset_validation_mock.c +442 -0
- package/deps/librdkafka/tests/0140-commit_metadata.cpp +108 -0
- package/deps/librdkafka/tests/0142-reauthentication.c +495 -0
- package/deps/librdkafka/tests/0143-exponential_backoff_mock.c +553 -0
- package/deps/librdkafka/tests/0144-idempotence_mock.c +373 -0
- package/deps/librdkafka/tests/0145-pause_resume_mock.c +119 -0
- package/deps/librdkafka/tests/0146-metadata_mock.c +444 -0
- package/deps/librdkafka/tests/0150-telemetry_mock.c +648 -0
- package/deps/librdkafka/tests/1000-unktopic.c +164 -0
- package/deps/librdkafka/tests/8000-idle.cpp +60 -0
- package/deps/librdkafka/tests/8001-fetch_from_follower_mock_manual.c +113 -0
- package/deps/librdkafka/tests/CMakeLists.txt +164 -0
- package/deps/librdkafka/tests/LibrdkafkaTestApp.py +266 -0
- package/deps/librdkafka/tests/Makefile +182 -0
- package/deps/librdkafka/tests/README.md +509 -0
- package/deps/librdkafka/tests/autotest.sh +33 -0
- package/deps/librdkafka/tests/backtrace.gdb +30 -0
- package/deps/librdkafka/tests/broker_version_tests.py +315 -0
- package/deps/librdkafka/tests/buildbox.sh +17 -0
- package/deps/librdkafka/tests/cleanup-checker-tests.sh +20 -0
- package/deps/librdkafka/tests/cluster_testing.py +191 -0
- package/deps/librdkafka/tests/delete-test-topics.sh +56 -0
- package/deps/librdkafka/tests/fixtures/ssl/Makefile +8 -0
- package/deps/librdkafka/tests/fixtures/ssl/README.md +13 -0
- package/deps/librdkafka/tests/fixtures/ssl/client.keystore.p12 +0 -0
- package/deps/librdkafka/tests/fixtures/ssl/client2.certificate.pem +109 -0
- package/deps/librdkafka/tests/fixtures/ssl/client2.key +34 -0
- package/deps/librdkafka/tests/fixtures/ssl/create_keys.sh +93 -0
- package/deps/librdkafka/tests/fuzzers/Makefile +12 -0
- package/deps/librdkafka/tests/fuzzers/README.md +31 -0
- package/deps/librdkafka/tests/fuzzers/fuzz_regex.c +74 -0
- package/deps/librdkafka/tests/fuzzers/helpers.h +90 -0
- package/deps/librdkafka/tests/gen-ssl-certs.sh +165 -0
- package/deps/librdkafka/tests/interactive_broker_version.py +170 -0
- package/deps/librdkafka/tests/interceptor_test/CMakeLists.txt +16 -0
- package/deps/librdkafka/tests/interceptor_test/Makefile +22 -0
- package/deps/librdkafka/tests/interceptor_test/interceptor_test.c +314 -0
- package/deps/librdkafka/tests/interceptor_test/interceptor_test.h +54 -0
- package/deps/librdkafka/tests/java/IncrementalRebalanceCli.java +97 -0
- package/deps/librdkafka/tests/java/Makefile +12 -0
- package/deps/librdkafka/tests/java/Murmur2Cli.java +46 -0
- package/deps/librdkafka/tests/java/README.md +14 -0
- package/deps/librdkafka/tests/java/TransactionProducerCli.java +162 -0
- package/deps/librdkafka/tests/java/run-class.sh +11 -0
- package/deps/librdkafka/tests/librdkafka.suppressions +483 -0
- package/deps/librdkafka/tests/lz4_manual_test.sh +59 -0
- package/deps/librdkafka/tests/multi-broker-version-test.sh +50 -0
- package/deps/librdkafka/tests/parse-refcnt.sh +43 -0
- package/deps/librdkafka/tests/performance_plot.py +115 -0
- package/deps/librdkafka/tests/plugin_test/Makefile +19 -0
- package/deps/librdkafka/tests/plugin_test/plugin_test.c +58 -0
- package/deps/librdkafka/tests/requirements.txt +2 -0
- package/deps/librdkafka/tests/run-consumer-tests.sh +16 -0
- package/deps/librdkafka/tests/run-producer-tests.sh +16 -0
- package/deps/librdkafka/tests/run-test.sh +140 -0
- package/deps/librdkafka/tests/rusage.c +249 -0
- package/deps/librdkafka/tests/sasl_test.py +289 -0
- package/deps/librdkafka/tests/scenarios/README.md +6 -0
- package/deps/librdkafka/tests/scenarios/ak23.json +6 -0
- package/deps/librdkafka/tests/scenarios/default.json +5 -0
- package/deps/librdkafka/tests/scenarios/noautocreate.json +5 -0
- package/deps/librdkafka/tests/sockem.c +801 -0
- package/deps/librdkafka/tests/sockem.h +85 -0
- package/deps/librdkafka/tests/sockem_ctrl.c +145 -0
- package/deps/librdkafka/tests/sockem_ctrl.h +61 -0
- package/deps/librdkafka/tests/test.c +7318 -0
- package/deps/librdkafka/tests/test.conf.example +27 -0
- package/deps/librdkafka/tests/test.h +979 -0
- package/deps/librdkafka/tests/testcpp.cpp +126 -0
- package/deps/librdkafka/tests/testcpp.h +360 -0
- package/deps/librdkafka/tests/testshared.h +402 -0
- package/deps/librdkafka/tests/tools/README.md +4 -0
- package/deps/librdkafka/tests/tools/stats/README.md +21 -0
- package/deps/librdkafka/tests/tools/stats/filter.jq +42 -0
- package/deps/librdkafka/tests/tools/stats/graph.py +150 -0
- package/deps/librdkafka/tests/tools/stats/requirements.txt +3 -0
- package/deps/librdkafka/tests/tools/stats/to_csv.py +124 -0
- package/deps/librdkafka/tests/until-fail.sh +87 -0
- package/deps/librdkafka/tests/xxxx-assign_partition.c +122 -0
- package/deps/librdkafka/tests/xxxx-metadata.cpp +159 -0
- package/deps/librdkafka/vcpkg.json +23 -0
- package/deps/librdkafka/win32/README.md +5 -0
- package/deps/librdkafka/win32/build-package.bat +3 -0
- package/deps/librdkafka/win32/build.bat +19 -0
- package/deps/librdkafka/win32/common.vcxproj +84 -0
- package/deps/librdkafka/win32/install-openssl.ps1 +33 -0
- package/deps/librdkafka/win32/interceptor_test/interceptor_test.vcxproj +87 -0
- package/deps/librdkafka/win32/librdkafka.autopkg.template +54 -0
- package/deps/librdkafka/win32/librdkafka.master.testing.targets +13 -0
- package/deps/librdkafka/win32/librdkafka.sln +226 -0
- package/deps/librdkafka/win32/librdkafka.vcxproj +276 -0
- package/deps/librdkafka/win32/librdkafkacpp/librdkafkacpp.vcxproj +104 -0
- package/deps/librdkafka/win32/msbuild.ps1 +15 -0
- package/deps/librdkafka/win32/openssl_engine_example/openssl_engine_example.vcxproj +132 -0
- package/deps/librdkafka/win32/package-zip.ps1 +46 -0
- package/deps/librdkafka/win32/packages/repositories.config +4 -0
- package/deps/librdkafka/win32/push-package.bat +4 -0
- package/deps/librdkafka/win32/rdkafka_complex_consumer_example_cpp/rdkafka_complex_consumer_example_cpp.vcxproj +67 -0
- package/deps/librdkafka/win32/rdkafka_example/rdkafka_example.vcxproj +97 -0
- package/deps/librdkafka/win32/rdkafka_performance/rdkafka_performance.vcxproj +97 -0
- package/deps/librdkafka/win32/setup-msys2.ps1 +31 -0
- package/deps/librdkafka/win32/setup-vcpkg.ps1 +12 -0
- package/deps/librdkafka/win32/tests/test.conf.example +25 -0
- package/deps/librdkafka/win32/tests/tests.vcxproj +247 -0
- package/deps/librdkafka/win32/win_ssl_cert_store/win_ssl_cert_store.vcxproj +132 -0
- package/deps/librdkafka/win32/wingetopt.c +564 -0
- package/deps/librdkafka/win32/wingetopt.h +100 -0
- package/deps/librdkafka/win32/wintime.h +33 -0
- package/deps/librdkafka.gyp +62 -0
- package/deps/windows-install.py +73 -0
- package/docker-compose.yml +23 -0
- package/e2e/admin.spec.js +187 -0
- package/e2e/both.spec.js +726 -0
- package/e2e/consumer.spec.js +386 -0
- package/e2e/groups.spec.js +132 -0
- package/e2e/listener.js +51 -0
- package/e2e/producer-transaction.spec.js +333 -0
- package/e2e/producer.spec.js +283 -0
- package/errors.d.ts +347 -0
- package/examples/consumer-flow.md +76 -0
- package/examples/consumer.md +45 -0
- package/examples/docker-alpine.md +30 -0
- package/examples/high-level-producer.md +32 -0
- package/examples/metadata.md +27 -0
- package/examples/oauthbearer-default-flow.md +80 -0
- package/examples/producer-cluster.md +103 -0
- package/examples/producer.md +73 -0
- package/index.d.ts +357 -0
- package/lib/admin.js +233 -0
- package/lib/client.js +578 -0
- package/lib/error.js +472 -0
- package/lib/index.js +34 -0
- package/lib/kafka-consumer-stream.js +397 -0
- package/lib/kafka-consumer.js +698 -0
- package/lib/producer/high-level-producer.js +323 -0
- package/lib/producer-stream.js +307 -0
- package/lib/producer.js +375 -0
- package/lib/tools/ref-counter.js +52 -0
- package/lib/topic-partition.js +88 -0
- package/lib/topic.js +42 -0
- package/lib/util.js +29 -0
- package/librdkafka.js +12 -0
- package/make_docs.sh +59 -0
- package/package.json +53 -0
- package/renovate.json +30 -0
- package/run_docker.sh +42 -0
- package/src/admin.cc +624 -0
- package/src/admin.h +78 -0
- package/src/binding.cc +73 -0
- package/src/binding.h +25 -0
- package/src/callbacks.cc +614 -0
- package/src/callbacks.h +265 -0
- package/src/common.cc +582 -0
- package/src/common.h +134 -0
- package/src/config.cc +167 -0
- package/src/config.h +45 -0
- package/src/connection.cc +482 -0
- package/src/connection.h +108 -0
- package/src/errors.cc +96 -0
- package/src/errors.h +53 -0
- package/src/kafka-consumer.cc +1457 -0
- package/src/kafka-consumer.h +136 -0
- package/src/per-isolate-data.cc +57 -0
- package/src/per-isolate-data.h +39 -0
- package/src/producer.cc +873 -0
- package/src/producer.h +125 -0
- package/src/topic.cc +180 -0
- package/src/topic.h +56 -0
- package/src/workers.cc +1245 -0
- package/src/workers.h +511 -0
- package/test/binding.spec.js +66 -0
- package/test/consumer.spec.js +91 -0
- package/test/error.spec.js +8 -0
- package/test/index.spec.js +8 -0
- package/test/kafka-consumer-stream.spec.js +298 -0
- package/test/kafka-consumer-worker.js +51 -0
- package/test/kafka-consumer.spec.js +86 -0
- package/test/mocha.opts +1 -0
- package/test/mock.js +55 -0
- package/test/producer/high-level-producer.spec.js +496 -0
- package/test/producer-stream.spec.js +723 -0
- package/test/producer-worker.js +53 -0
- package/test/producer.spec.js +120 -0
- package/test/tools/ref-counter.spec.js +53 -0
- package/test/topic-partition.spec.js +104 -0
- package/test/util.spec.js +46 -0
- package/util/configure.js +30 -0
- package/util/get-env.js +6 -0
- package/util/test-compile.js +11 -0
- package/util/test-producer-delivery.js +100 -0
- 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
|