@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
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* librdkafka - Apache Kafka C library
|
|
3
|
+
*
|
|
4
|
+
* Copyright (c) 2018-2022, Magnus Edenhill
|
|
5
|
+
* All rights reserved.
|
|
6
|
+
*
|
|
7
|
+
* Redistribution and use in source and binary forms, with or without
|
|
8
|
+
* modification, are permitted provided that the following conditions are met:
|
|
9
|
+
*
|
|
10
|
+
* 1. Redistributions of source code must retain the above copyright notice,
|
|
11
|
+
* this list of conditions and the following disclaimer.
|
|
12
|
+
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
13
|
+
* this list of conditions and the following disclaimer in the documentation
|
|
14
|
+
* and/or other materials provided with the distribution.
|
|
15
|
+
*
|
|
16
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
17
|
+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
18
|
+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
19
|
+
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
20
|
+
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
21
|
+
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
|
22
|
+
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
23
|
+
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
24
|
+
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
25
|
+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
26
|
+
* POSSIBILITY OF SUCH DAMAGE.
|
|
27
|
+
*/
|
|
28
|
+
#ifndef _RDHDR_HISTOGRAM_H_
|
|
29
|
+
#define _RDHDR_HISTOGRAM_H_
|
|
30
|
+
|
|
31
|
+
#include <inttypes.h>
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
typedef struct rd_hdr_histogram_s {
|
|
35
|
+
int64_t lowestTrackableValue;
|
|
36
|
+
int64_t highestTrackableValue;
|
|
37
|
+
int64_t unitMagnitude;
|
|
38
|
+
int64_t significantFigures;
|
|
39
|
+
int32_t subBucketHalfCountMagnitude;
|
|
40
|
+
int32_t subBucketHalfCount;
|
|
41
|
+
int64_t subBucketMask;
|
|
42
|
+
int32_t subBucketCount;
|
|
43
|
+
int32_t bucketCount;
|
|
44
|
+
int32_t countsLen;
|
|
45
|
+
int64_t totalCount;
|
|
46
|
+
int64_t *counts;
|
|
47
|
+
int64_t outOfRangeCount; /**< Number of rejected records due to
|
|
48
|
+
* value being out of range. */
|
|
49
|
+
int64_t lowestOutOfRange; /**< Lowest value that was out of range.
|
|
50
|
+
* Initialized to lowestTrackableValue */
|
|
51
|
+
int64_t highestOutOfRange; /**< Highest value that was out of range.
|
|
52
|
+
* Initialized to highestTrackableValue */
|
|
53
|
+
int32_t allocatedSize; /**< Allocated size of histogram, for
|
|
54
|
+
* sigfigs tuning. */
|
|
55
|
+
} rd_hdr_histogram_t;
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
#endif /* !_RDHDR_HISTOGRAM_H_ */
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
void rd_hdr_histogram_destroy(rd_hdr_histogram_t *hdr);
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* @brief Create a new Hdr_Histogram.
|
|
65
|
+
*
|
|
66
|
+
* @param significant_figures must be between 1..5
|
|
67
|
+
*
|
|
68
|
+
* @returns a newly allocated histogram, or NULL on error.
|
|
69
|
+
*
|
|
70
|
+
* @sa rd_hdr_histogram_destroy()
|
|
71
|
+
*/
|
|
72
|
+
rd_hdr_histogram_t *rd_hdr_histogram_new(int64_t minValue,
|
|
73
|
+
int64_t maxValue,
|
|
74
|
+
int significantFigures);
|
|
75
|
+
|
|
76
|
+
void rd_hdr_histogram_reset(rd_hdr_histogram_t *hdr);
|
|
77
|
+
|
|
78
|
+
int rd_hdr_histogram_record(rd_hdr_histogram_t *hdr, int64_t v);
|
|
79
|
+
|
|
80
|
+
double rd_hdr_histogram_stddev(rd_hdr_histogram_t *hdr);
|
|
81
|
+
double rd_hdr_histogram_mean(const rd_hdr_histogram_t *hdr);
|
|
82
|
+
int64_t rd_hdr_histogram_max(const rd_hdr_histogram_t *hdr);
|
|
83
|
+
int64_t rd_hdr_histogram_min(const rd_hdr_histogram_t *hdr);
|
|
84
|
+
int64_t rd_hdr_histogram_quantile(const rd_hdr_histogram_t *hdr, double q);
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
int unittest_rdhdrhistogram(void);
|
|
@@ -0,0 +1,512 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* librdkafka - The Apache Kafka C/C++ library
|
|
3
|
+
*
|
|
4
|
+
* Copyright (c) 2021-2022, Magnus Edenhill
|
|
5
|
+
* All rights reserved.
|
|
6
|
+
*
|
|
7
|
+
* Redistribution and use in source and binary forms, with or without
|
|
8
|
+
* modification, are permitted provided that the following conditions are met:
|
|
9
|
+
*
|
|
10
|
+
* 1. Redistributions of source code must retain the above copyright notice,
|
|
11
|
+
* this list of conditions and the following disclaimer.
|
|
12
|
+
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
13
|
+
* this list of conditions and the following disclaimer in the documentation
|
|
14
|
+
* and/or other materials provided with the distribution.
|
|
15
|
+
*
|
|
16
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
17
|
+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
18
|
+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
19
|
+
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
20
|
+
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
21
|
+
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
22
|
+
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
23
|
+
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
24
|
+
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
25
|
+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
26
|
+
* POSSIBILITY OF SUCH DAMAGE.
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @name HTTP client
|
|
32
|
+
*
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
#include "rdkafka_int.h"
|
|
36
|
+
#include "rdunittest.h"
|
|
37
|
+
|
|
38
|
+
#include <stdarg.h>
|
|
39
|
+
|
|
40
|
+
#include <curl/curl.h>
|
|
41
|
+
#include "rdhttp.h"
|
|
42
|
+
|
|
43
|
+
/** Maximum response size, increase as necessary. */
|
|
44
|
+
#define RD_HTTP_RESPONSE_SIZE_MAX 1024 * 1024 * 500 /* 500kb */
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
void rd_http_error_destroy(rd_http_error_t *herr) {
|
|
48
|
+
rd_free(herr);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
static rd_http_error_t *rd_http_error_new(int code, const char *fmt, ...)
|
|
52
|
+
RD_FORMAT(printf, 2, 3);
|
|
53
|
+
static rd_http_error_t *rd_http_error_new(int code, const char *fmt, ...) {
|
|
54
|
+
size_t len = 0;
|
|
55
|
+
rd_http_error_t *herr;
|
|
56
|
+
va_list ap;
|
|
57
|
+
|
|
58
|
+
va_start(ap, fmt);
|
|
59
|
+
|
|
60
|
+
if (fmt && *fmt) {
|
|
61
|
+
va_list ap2;
|
|
62
|
+
va_copy(ap2, ap);
|
|
63
|
+
len = rd_vsnprintf(NULL, 0, fmt, ap2);
|
|
64
|
+
va_end(ap2);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/* Use single allocation for both herr and the error string */
|
|
68
|
+
herr = rd_malloc(sizeof(*herr) + len + 1);
|
|
69
|
+
herr->code = code;
|
|
70
|
+
herr->errstr = herr->data;
|
|
71
|
+
|
|
72
|
+
if (len > 0)
|
|
73
|
+
rd_vsnprintf(herr->errstr, len + 1, fmt, ap);
|
|
74
|
+
else
|
|
75
|
+
herr->errstr[0] = '\0';
|
|
76
|
+
|
|
77
|
+
va_end(ap);
|
|
78
|
+
|
|
79
|
+
return herr;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* @brief Same as rd_http_error_new() but reads the error string from the
|
|
84
|
+
* provided buffer.
|
|
85
|
+
*/
|
|
86
|
+
static rd_http_error_t *rd_http_error_new_from_buf(int code,
|
|
87
|
+
const rd_buf_t *rbuf) {
|
|
88
|
+
rd_http_error_t *herr;
|
|
89
|
+
rd_slice_t slice;
|
|
90
|
+
size_t len = rd_buf_len(rbuf);
|
|
91
|
+
|
|
92
|
+
if (len == 0)
|
|
93
|
+
return rd_http_error_new(
|
|
94
|
+
code, "Server did not provide an error string");
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
/* Use single allocation for both herr and the error string */
|
|
98
|
+
herr = rd_malloc(sizeof(*herr) + len + 1);
|
|
99
|
+
herr->code = code;
|
|
100
|
+
herr->errstr = herr->data;
|
|
101
|
+
rd_slice_init_full(&slice, rbuf);
|
|
102
|
+
rd_slice_read(&slice, herr->errstr, len);
|
|
103
|
+
herr->errstr[len] = '\0';
|
|
104
|
+
|
|
105
|
+
return herr;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
void rd_http_req_destroy(rd_http_req_t *hreq) {
|
|
109
|
+
RD_IF_FREE(hreq->hreq_curl, curl_easy_cleanup);
|
|
110
|
+
RD_IF_FREE(hreq->hreq_buf, rd_buf_destroy_free);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* @brief Curl writefunction. Writes the bytes passed from curl
|
|
116
|
+
* to the hreq's buffer.
|
|
117
|
+
*/
|
|
118
|
+
static size_t
|
|
119
|
+
rd_http_req_write_cb(char *ptr, size_t size, size_t nmemb, void *userdata) {
|
|
120
|
+
rd_http_req_t *hreq = (rd_http_req_t *)userdata;
|
|
121
|
+
|
|
122
|
+
if (unlikely(rd_buf_len(hreq->hreq_buf) + nmemb >
|
|
123
|
+
RD_HTTP_RESPONSE_SIZE_MAX))
|
|
124
|
+
return 0; /* FIXME: Set some overflow flag or rely on curl? */
|
|
125
|
+
|
|
126
|
+
rd_buf_write(hreq->hreq_buf, ptr, nmemb);
|
|
127
|
+
|
|
128
|
+
return nmemb;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
rd_http_error_t *rd_http_req_init(rd_http_req_t *hreq, const char *url) {
|
|
132
|
+
|
|
133
|
+
memset(hreq, 0, sizeof(*hreq));
|
|
134
|
+
|
|
135
|
+
hreq->hreq_curl = curl_easy_init();
|
|
136
|
+
if (!hreq->hreq_curl)
|
|
137
|
+
return rd_http_error_new(-1, "Failed to create curl handle");
|
|
138
|
+
|
|
139
|
+
hreq->hreq_buf = rd_buf_new(1, 1024);
|
|
140
|
+
|
|
141
|
+
curl_easy_setopt(hreq->hreq_curl, CURLOPT_URL, url);
|
|
142
|
+
curl_easy_setopt(hreq->hreq_curl, CURLOPT_PROTOCOLS,
|
|
143
|
+
CURLPROTO_HTTP | CURLPROTO_HTTPS);
|
|
144
|
+
curl_easy_setopt(hreq->hreq_curl, CURLOPT_MAXREDIRS, 16);
|
|
145
|
+
curl_easy_setopt(hreq->hreq_curl, CURLOPT_TIMEOUT, 30);
|
|
146
|
+
curl_easy_setopt(hreq->hreq_curl, CURLOPT_ERRORBUFFER,
|
|
147
|
+
hreq->hreq_curl_errstr);
|
|
148
|
+
curl_easy_setopt(hreq->hreq_curl, CURLOPT_NOSIGNAL, 1);
|
|
149
|
+
curl_easy_setopt(hreq->hreq_curl, CURLOPT_WRITEFUNCTION,
|
|
150
|
+
rd_http_req_write_cb);
|
|
151
|
+
curl_easy_setopt(hreq->hreq_curl, CURLOPT_WRITEDATA, (void *)hreq);
|
|
152
|
+
|
|
153
|
+
return NULL;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* @brief Synchronously (blockingly) perform the HTTP operation.
|
|
158
|
+
*/
|
|
159
|
+
rd_http_error_t *rd_http_req_perform_sync(rd_http_req_t *hreq) {
|
|
160
|
+
CURLcode res;
|
|
161
|
+
long code = 0;
|
|
162
|
+
|
|
163
|
+
res = curl_easy_perform(hreq->hreq_curl);
|
|
164
|
+
if (unlikely(res != CURLE_OK))
|
|
165
|
+
return rd_http_error_new(-1, "%s", hreq->hreq_curl_errstr);
|
|
166
|
+
|
|
167
|
+
curl_easy_getinfo(hreq->hreq_curl, CURLINFO_RESPONSE_CODE, &code);
|
|
168
|
+
hreq->hreq_code = (int)code;
|
|
169
|
+
if (hreq->hreq_code >= 400)
|
|
170
|
+
return rd_http_error_new_from_buf(hreq->hreq_code,
|
|
171
|
+
hreq->hreq_buf);
|
|
172
|
+
|
|
173
|
+
return NULL;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
int rd_http_req_get_code(const rd_http_req_t *hreq) {
|
|
178
|
+
return hreq->hreq_code;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
const char *rd_http_req_get_content_type(rd_http_req_t *hreq) {
|
|
182
|
+
const char *content_type = NULL;
|
|
183
|
+
|
|
184
|
+
if (curl_easy_getinfo(hreq->hreq_curl, CURLINFO_CONTENT_TYPE,
|
|
185
|
+
&content_type))
|
|
186
|
+
return NULL;
|
|
187
|
+
|
|
188
|
+
return content_type;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* @brief Perform a blocking HTTP(S) request to \p url.
|
|
194
|
+
*
|
|
195
|
+
* Returns the response (even if there's a HTTP error code returned)
|
|
196
|
+
* in \p *rbufp.
|
|
197
|
+
*
|
|
198
|
+
* Returns NULL on success (HTTP response code < 400), or an error
|
|
199
|
+
* object on transport or HTTP error - this error object must be destroyed
|
|
200
|
+
* by calling rd_http_error_destroy(). In case of HTTP error the \p *rbufp
|
|
201
|
+
* may be filled with the error response.
|
|
202
|
+
*/
|
|
203
|
+
rd_http_error_t *rd_http_get(const char *url, rd_buf_t **rbufp) {
|
|
204
|
+
rd_http_req_t hreq;
|
|
205
|
+
rd_http_error_t *herr;
|
|
206
|
+
|
|
207
|
+
*rbufp = NULL;
|
|
208
|
+
|
|
209
|
+
herr = rd_http_req_init(&hreq, url);
|
|
210
|
+
if (unlikely(herr != NULL))
|
|
211
|
+
return herr;
|
|
212
|
+
|
|
213
|
+
herr = rd_http_req_perform_sync(&hreq);
|
|
214
|
+
if (herr) {
|
|
215
|
+
rd_http_req_destroy(&hreq);
|
|
216
|
+
return herr;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
*rbufp = hreq.hreq_buf;
|
|
220
|
+
hreq.hreq_buf = NULL;
|
|
221
|
+
|
|
222
|
+
return NULL;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* @brief Extract the JSON object from \p hreq and return it in \p *jsonp.
|
|
228
|
+
*
|
|
229
|
+
* @returns Returns NULL on success, or an JSON parsing error - this
|
|
230
|
+
* error object must be destroyed by calling rd_http_error_destroy().
|
|
231
|
+
*/
|
|
232
|
+
rd_http_error_t *rd_http_parse_json(rd_http_req_t *hreq, cJSON **jsonp) {
|
|
233
|
+
size_t len;
|
|
234
|
+
char *raw_json;
|
|
235
|
+
const char *end = NULL;
|
|
236
|
+
rd_slice_t slice;
|
|
237
|
+
rd_http_error_t *herr = NULL;
|
|
238
|
+
|
|
239
|
+
/* cJSON requires the entire input to parse in contiguous memory. */
|
|
240
|
+
rd_slice_init_full(&slice, hreq->hreq_buf);
|
|
241
|
+
len = rd_buf_len(hreq->hreq_buf);
|
|
242
|
+
|
|
243
|
+
raw_json = rd_malloc(len + 1);
|
|
244
|
+
rd_slice_read(&slice, raw_json, len);
|
|
245
|
+
raw_json[len] = '\0';
|
|
246
|
+
|
|
247
|
+
/* Parse JSON */
|
|
248
|
+
*jsonp = cJSON_ParseWithOpts(raw_json, &end, 0);
|
|
249
|
+
|
|
250
|
+
if (!*jsonp)
|
|
251
|
+
herr = rd_http_error_new(hreq->hreq_code,
|
|
252
|
+
"Failed to parse JSON response "
|
|
253
|
+
"at %" PRIusz "/%" PRIusz,
|
|
254
|
+
(size_t)(end - raw_json), len);
|
|
255
|
+
rd_free(raw_json);
|
|
256
|
+
return herr;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* @brief Check if the error returned from HTTP(S) is temporary or not.
|
|
262
|
+
*
|
|
263
|
+
* @returns If the \p error_code is temporary, return rd_true,
|
|
264
|
+
* otherwise return rd_false.
|
|
265
|
+
*
|
|
266
|
+
* @locality Any thread.
|
|
267
|
+
*/
|
|
268
|
+
static rd_bool_t rd_http_is_failure_temporary(int error_code) {
|
|
269
|
+
switch (error_code) {
|
|
270
|
+
case 408: /**< Request timeout */
|
|
271
|
+
case 425: /**< Too early */
|
|
272
|
+
case 429: /**< Too many requests */
|
|
273
|
+
case 500: /**< Internal server error */
|
|
274
|
+
case 502: /**< Bad gateway */
|
|
275
|
+
case 503: /**< Service unavailable */
|
|
276
|
+
case 504: /**< Gateway timeout */
|
|
277
|
+
return rd_true;
|
|
278
|
+
|
|
279
|
+
default:
|
|
280
|
+
return rd_false;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* @brief Perform a blocking HTTP(S) request to \p url with
|
|
287
|
+
* HTTP(S) headers and data with \p timeout_s.
|
|
288
|
+
* If the HTTP(S) request fails, will retry another \p retries times
|
|
289
|
+
* with multiplying backoff \p retry_ms.
|
|
290
|
+
*
|
|
291
|
+
* @returns The result will be returned in \p *jsonp.
|
|
292
|
+
* Returns NULL on success (HTTP response code < 400), or an error
|
|
293
|
+
* object on transport, HTTP error or a JSON parsing error - this
|
|
294
|
+
* error object must be destroyed by calling rd_http_error_destroy().
|
|
295
|
+
*
|
|
296
|
+
* @locality Any thread.
|
|
297
|
+
*/
|
|
298
|
+
rd_http_error_t *rd_http_post_expect_json(rd_kafka_t *rk,
|
|
299
|
+
const char *url,
|
|
300
|
+
const struct curl_slist *headers,
|
|
301
|
+
const char *post_fields,
|
|
302
|
+
size_t post_fields_size,
|
|
303
|
+
int timeout_s,
|
|
304
|
+
int retries,
|
|
305
|
+
int retry_ms,
|
|
306
|
+
cJSON **jsonp) {
|
|
307
|
+
rd_http_error_t *herr;
|
|
308
|
+
rd_http_req_t hreq;
|
|
309
|
+
int i;
|
|
310
|
+
size_t len;
|
|
311
|
+
const char *content_type;
|
|
312
|
+
|
|
313
|
+
herr = rd_http_req_init(&hreq, url);
|
|
314
|
+
if (unlikely(herr != NULL))
|
|
315
|
+
return herr;
|
|
316
|
+
|
|
317
|
+
curl_easy_setopt(hreq.hreq_curl, CURLOPT_HTTPHEADER, headers);
|
|
318
|
+
curl_easy_setopt(hreq.hreq_curl, CURLOPT_TIMEOUT, timeout_s);
|
|
319
|
+
|
|
320
|
+
curl_easy_setopt(hreq.hreq_curl, CURLOPT_POSTFIELDSIZE,
|
|
321
|
+
post_fields_size);
|
|
322
|
+
curl_easy_setopt(hreq.hreq_curl, CURLOPT_POSTFIELDS, post_fields);
|
|
323
|
+
|
|
324
|
+
for (i = 0; i <= retries; i++) {
|
|
325
|
+
if (rd_kafka_terminating(rk)) {
|
|
326
|
+
rd_http_req_destroy(&hreq);
|
|
327
|
+
return rd_http_error_new(-1, "Terminating");
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
herr = rd_http_req_perform_sync(&hreq);
|
|
331
|
+
len = rd_buf_len(hreq.hreq_buf);
|
|
332
|
+
|
|
333
|
+
if (!herr) {
|
|
334
|
+
if (len > 0)
|
|
335
|
+
break; /* Success */
|
|
336
|
+
/* Empty response */
|
|
337
|
+
rd_http_req_destroy(&hreq);
|
|
338
|
+
return NULL;
|
|
339
|
+
}
|
|
340
|
+
/* Retry if HTTP(S) request returns temporary error and there
|
|
341
|
+
* are remaining retries, else fail. */
|
|
342
|
+
if (i == retries || !rd_http_is_failure_temporary(herr->code)) {
|
|
343
|
+
rd_http_req_destroy(&hreq);
|
|
344
|
+
return herr;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
/* Retry */
|
|
348
|
+
rd_http_error_destroy(herr);
|
|
349
|
+
rd_usleep(retry_ms * 1000 * (i + 1), &rk->rk_terminate);
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
content_type = rd_http_req_get_content_type(&hreq);
|
|
353
|
+
|
|
354
|
+
if (!content_type || rd_strncasecmp(content_type, "application/json",
|
|
355
|
+
strlen("application/json"))) {
|
|
356
|
+
if (!herr)
|
|
357
|
+
herr = rd_http_error_new(
|
|
358
|
+
hreq.hreq_code, "Response is not JSON encoded: %s",
|
|
359
|
+
content_type ? content_type : "(n/a)");
|
|
360
|
+
rd_http_req_destroy(&hreq);
|
|
361
|
+
return herr;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
herr = rd_http_parse_json(&hreq, jsonp);
|
|
365
|
+
|
|
366
|
+
rd_http_req_destroy(&hreq);
|
|
367
|
+
|
|
368
|
+
return herr;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
|
|
372
|
+
/**
|
|
373
|
+
* @brief Same as rd_http_get() but requires a JSON response.
|
|
374
|
+
* The response is parsed and a JSON object is returned in \p *jsonp.
|
|
375
|
+
*
|
|
376
|
+
* Same error semantics as rd_http_get().
|
|
377
|
+
*/
|
|
378
|
+
rd_http_error_t *rd_http_get_json(const char *url, cJSON **jsonp) {
|
|
379
|
+
rd_http_req_t hreq;
|
|
380
|
+
rd_http_error_t *herr;
|
|
381
|
+
rd_slice_t slice;
|
|
382
|
+
size_t len;
|
|
383
|
+
const char *content_type;
|
|
384
|
+
char *raw_json;
|
|
385
|
+
const char *end;
|
|
386
|
+
|
|
387
|
+
*jsonp = NULL;
|
|
388
|
+
|
|
389
|
+
herr = rd_http_req_init(&hreq, url);
|
|
390
|
+
if (unlikely(herr != NULL))
|
|
391
|
+
return herr;
|
|
392
|
+
|
|
393
|
+
// FIXME: send Accept: json.. header?
|
|
394
|
+
|
|
395
|
+
herr = rd_http_req_perform_sync(&hreq);
|
|
396
|
+
len = rd_buf_len(hreq.hreq_buf);
|
|
397
|
+
if (herr && len == 0) {
|
|
398
|
+
rd_http_req_destroy(&hreq);
|
|
399
|
+
return herr;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
if (len == 0) {
|
|
403
|
+
/* Empty response: create empty JSON object */
|
|
404
|
+
*jsonp = cJSON_CreateObject();
|
|
405
|
+
rd_http_req_destroy(&hreq);
|
|
406
|
+
return NULL;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
content_type = rd_http_req_get_content_type(&hreq);
|
|
410
|
+
|
|
411
|
+
if (!content_type || rd_strncasecmp(content_type, "application/json",
|
|
412
|
+
strlen("application/json"))) {
|
|
413
|
+
if (!herr)
|
|
414
|
+
herr = rd_http_error_new(
|
|
415
|
+
hreq.hreq_code, "Response is not JSON encoded: %s",
|
|
416
|
+
content_type ? content_type : "(n/a)");
|
|
417
|
+
rd_http_req_destroy(&hreq);
|
|
418
|
+
return herr;
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
/* cJSON requires the entire input to parse in contiguous memory. */
|
|
422
|
+
rd_slice_init_full(&slice, hreq.hreq_buf);
|
|
423
|
+
raw_json = rd_malloc(len + 1);
|
|
424
|
+
rd_slice_read(&slice, raw_json, len);
|
|
425
|
+
raw_json[len] = '\0';
|
|
426
|
+
|
|
427
|
+
/* Parse JSON */
|
|
428
|
+
end = NULL;
|
|
429
|
+
*jsonp = cJSON_ParseWithOpts(raw_json, &end, 0);
|
|
430
|
+
if (!*jsonp && !herr)
|
|
431
|
+
herr = rd_http_error_new(hreq.hreq_code,
|
|
432
|
+
"Failed to parse JSON response "
|
|
433
|
+
"at %" PRIusz "/%" PRIusz,
|
|
434
|
+
(size_t)(end - raw_json), len);
|
|
435
|
+
|
|
436
|
+
rd_free(raw_json);
|
|
437
|
+
rd_http_req_destroy(&hreq);
|
|
438
|
+
|
|
439
|
+
return herr;
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
|
|
443
|
+
void rd_http_global_init(void) {
|
|
444
|
+
curl_global_init(CURL_GLOBAL_DEFAULT);
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
|
|
448
|
+
/**
|
|
449
|
+
* @brief Unittest. Requires a (local) webserver to be set with env var
|
|
450
|
+
* RD_UT_HTTP_URL=http://localhost:1234/some-path
|
|
451
|
+
*
|
|
452
|
+
* This server must return a JSON object or array containing at least one
|
|
453
|
+
* object on the main URL with a 2xx response code,
|
|
454
|
+
* and 4xx response on $RD_UT_HTTP_URL/error (with whatever type of body).
|
|
455
|
+
*/
|
|
456
|
+
|
|
457
|
+
int unittest_http(void) {
|
|
458
|
+
const char *base_url = rd_getenv("RD_UT_HTTP_URL", NULL);
|
|
459
|
+
char *error_url;
|
|
460
|
+
size_t error_url_size;
|
|
461
|
+
cJSON *json, *jval;
|
|
462
|
+
rd_http_error_t *herr;
|
|
463
|
+
rd_bool_t empty;
|
|
464
|
+
|
|
465
|
+
if (!base_url || !*base_url)
|
|
466
|
+
RD_UT_SKIP("RD_UT_HTTP_URL environment variable not set");
|
|
467
|
+
|
|
468
|
+
RD_UT_BEGIN();
|
|
469
|
+
|
|
470
|
+
error_url_size = strlen(base_url) + strlen("/error") + 1;
|
|
471
|
+
error_url = rd_alloca(error_url_size);
|
|
472
|
+
rd_snprintf(error_url, error_url_size, "%s/error", base_url);
|
|
473
|
+
|
|
474
|
+
/* Try the base url first, parse its JSON and extract a key-value. */
|
|
475
|
+
json = NULL;
|
|
476
|
+
herr = rd_http_get_json(base_url, &json);
|
|
477
|
+
RD_UT_ASSERT(!herr, "Expected get_json(%s) to succeed, got: %s",
|
|
478
|
+
base_url, herr->errstr);
|
|
479
|
+
|
|
480
|
+
empty = rd_true;
|
|
481
|
+
cJSON_ArrayForEach(jval, json) {
|
|
482
|
+
empty = rd_false;
|
|
483
|
+
break;
|
|
484
|
+
}
|
|
485
|
+
RD_UT_ASSERT(!empty, "Expected non-empty JSON response from %s",
|
|
486
|
+
base_url);
|
|
487
|
+
RD_UT_SAY(
|
|
488
|
+
"URL %s returned no error and a non-empty "
|
|
489
|
+
"JSON object/array as expected",
|
|
490
|
+
base_url);
|
|
491
|
+
cJSON_Delete(json);
|
|
492
|
+
|
|
493
|
+
|
|
494
|
+
/* Try the error URL, verify error code. */
|
|
495
|
+
json = NULL;
|
|
496
|
+
herr = rd_http_get_json(error_url, &json);
|
|
497
|
+
RD_UT_ASSERT(herr != NULL, "Expected get_json(%s) to fail", error_url);
|
|
498
|
+
RD_UT_ASSERT(herr->code >= 400,
|
|
499
|
+
"Expected get_json(%s) error code >= "
|
|
500
|
+
"400, got %d",
|
|
501
|
+
error_url, herr->code);
|
|
502
|
+
RD_UT_SAY(
|
|
503
|
+
"Error URL %s returned code %d, errstr \"%s\" "
|
|
504
|
+
"and %s JSON object as expected",
|
|
505
|
+
error_url, herr->code, herr->errstr, json ? "a" : "no");
|
|
506
|
+
/* Check if there's a JSON document returned */
|
|
507
|
+
if (json)
|
|
508
|
+
cJSON_Delete(json);
|
|
509
|
+
rd_http_error_destroy(herr);
|
|
510
|
+
|
|
511
|
+
RD_UT_PASS();
|
|
512
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* librdkafka - The Apache Kafka C/C++ library
|
|
3
|
+
*
|
|
4
|
+
* Copyright (c) 2021-2022, Magnus Edenhill
|
|
5
|
+
* All rights reserved.
|
|
6
|
+
*
|
|
7
|
+
* Redistribution and use in source and binary forms, with or without
|
|
8
|
+
* modification, are permitted provided that the following conditions are met:
|
|
9
|
+
*
|
|
10
|
+
* 1. Redistributions of source code must retain the above copyright notice,
|
|
11
|
+
* this list of conditions and the following disclaimer.
|
|
12
|
+
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
13
|
+
* this list of conditions and the following disclaimer in the documentation
|
|
14
|
+
* and/or other materials provided with the distribution.
|
|
15
|
+
*
|
|
16
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
17
|
+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
18
|
+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
19
|
+
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
20
|
+
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
21
|
+
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
22
|
+
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
23
|
+
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
24
|
+
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
25
|
+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
26
|
+
* POSSIBILITY OF SUCH DAMAGE.
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
#ifndef _RDHTTP_H_
|
|
31
|
+
#define _RDHTTP_H_
|
|
32
|
+
|
|
33
|
+
#define CJSON_HIDE_SYMBOLS
|
|
34
|
+
#include "cJSON.h"
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
typedef struct rd_http_error_s {
|
|
38
|
+
int code;
|
|
39
|
+
char *errstr;
|
|
40
|
+
char data[1]; /**< This is where the error string begins. */
|
|
41
|
+
} rd_http_error_t;
|
|
42
|
+
|
|
43
|
+
void rd_http_error_destroy(rd_http_error_t *herr);
|
|
44
|
+
|
|
45
|
+
rd_http_error_t *rd_http_get(const char *url, rd_buf_t **rbufp);
|
|
46
|
+
rd_http_error_t *rd_http_get_json(const char *url, cJSON **jsonp);
|
|
47
|
+
|
|
48
|
+
void rd_http_global_init(void);
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
#ifdef LIBCURL_VERSION
|
|
53
|
+
/* Advanced API that exposes the underlying CURL handle.
|
|
54
|
+
* Requires caller to have included curl.h prior to this file. */
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
typedef struct rd_http_req_s {
|
|
58
|
+
CURL *hreq_curl; /**< CURL handle */
|
|
59
|
+
rd_buf_t *hreq_buf; /**< Response buffer */
|
|
60
|
+
int hreq_code; /**< HTTP response code */
|
|
61
|
+
char hreq_curl_errstr[CURL_ERROR_SIZE]; /**< Error string for curl to
|
|
62
|
+
* write to. */
|
|
63
|
+
} rd_http_req_t;
|
|
64
|
+
|
|
65
|
+
rd_http_error_t *rd_http_req_init(rd_http_req_t *hreq, const char *url);
|
|
66
|
+
rd_http_error_t *rd_http_req_perform_sync(rd_http_req_t *hreq);
|
|
67
|
+
rd_http_error_t *rd_http_parse_json(rd_http_req_t *hreq, cJSON **jsonp);
|
|
68
|
+
rd_http_error_t *rd_http_post_expect_json(rd_kafka_t *rk,
|
|
69
|
+
const char *url,
|
|
70
|
+
const struct curl_slist *headers,
|
|
71
|
+
const char *data_to_token,
|
|
72
|
+
size_t data_to_token_size,
|
|
73
|
+
int timeout_s,
|
|
74
|
+
int retry,
|
|
75
|
+
int retry_ms,
|
|
76
|
+
cJSON **jsonp);
|
|
77
|
+
void rd_http_req_destroy(rd_http_req_t *hreq);
|
|
78
|
+
|
|
79
|
+
#endif
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
#endif /* _RDHTTP_H_ */
|