@point3/node-rdkafka 3.6.0-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.txt +20 -0
- package/README.md +636 -0
- package/binding.gyp +154 -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/.github/CODEOWNERS +1 -0
- package/deps/librdkafka/.github/ISSUE_TEMPLATE +34 -0
- package/deps/librdkafka/.semaphore/run-all-tests.yml +77 -0
- package/deps/librdkafka/.semaphore/semaphore-integration.yml +250 -0
- package/deps/librdkafka/.semaphore/semaphore.yml +378 -0
- package/deps/librdkafka/.semaphore/verify-linux-packages.yml +41 -0
- package/deps/librdkafka/CHANGELOG.md +2208 -0
- package/deps/librdkafka/CMakeLists.txt +291 -0
- package/deps/librdkafka/CODE_OF_CONDUCT.md +46 -0
- package/deps/librdkafka/CONFIGURATION.md +209 -0
- package/deps/librdkafka/CONTRIBUTING.md +431 -0
- package/deps/librdkafka/Doxyfile +2375 -0
- package/deps/librdkafka/INTRODUCTION.md +2481 -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 +125 -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 +271 -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 +455 -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 +347 -0
- package/deps/librdkafka/examples/kafkatest_verifiable_client.cpp +945 -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 +248 -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 +491 -0
- package/deps/librdkafka/examples/win_ssl_cert_store.cpp +396 -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 +319 -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 +16 -0
- package/deps/librdkafka/packaging/cp/check_features.c +72 -0
- package/deps/librdkafka/packaging/cp/verify-deb.sh +33 -0
- package/deps/librdkafka/packaging/cp/verify-packages.sh +69 -0
- package/deps/librdkafka/packaging/cp/verify-rpm.sh +32 -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/docs +5 -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/export-variables.sh +13 -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/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/Dockerfile +31 -0
- package/deps/librdkafka/packaging/tools/build-configurations-checks.sh +12 -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/run-in-docker.sh +28 -0
- package/deps/librdkafka/packaging/tools/run-integration-tests.sh +31 -0
- package/deps/librdkafka/packaging/tools/run-style-check.sh +4 -0
- package/deps/librdkafka/packaging/tools/style-format.sh +149 -0
- package/deps/librdkafka/packaging/tools/update_rpcs_max_versions.py +100 -0
- package/deps/librdkafka/service.yml +172 -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 +584 -0
- package/deps/librdkafka/src/rdaddr.c +255 -0
- package/deps/librdkafka/src/rdaddr.h +202 -0
- package/deps/librdkafka/src/rdatomic.h +230 -0
- package/deps/librdkafka/src/rdavg.h +260 -0
- package/deps/librdkafka/src/rdavl.c +210 -0
- package/deps/librdkafka/src/rdavl.h +250 -0
- package/deps/librdkafka/src/rdbase64.c +200 -0
- package/deps/librdkafka/src/rdbase64.h +43 -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 +175 -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 +830 -0
- package/deps/librdkafka/src/rdhttp.h +101 -0
- package/deps/librdkafka/src/rdinterval.h +177 -0
- package/deps/librdkafka/src/rdkafka.c +5505 -0
- package/deps/librdkafka/src/rdkafka.h +10686 -0
- package/deps/librdkafka/src/rdkafka_admin.c +9794 -0
- package/deps/librdkafka/src/rdkafka_admin.h +661 -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 +6337 -0
- package/deps/librdkafka/src/rdkafka_broker.h +744 -0
- package/deps/librdkafka/src/rdkafka_buf.c +543 -0
- package/deps/librdkafka/src/rdkafka_buf.h +1525 -0
- package/deps/librdkafka/src/rdkafka_cert.c +576 -0
- package/deps/librdkafka/src/rdkafka_cert.h +62 -0
- package/deps/librdkafka/src/rdkafka_cgrp.c +7587 -0
- package/deps/librdkafka/src/rdkafka_cgrp.h +477 -0
- package/deps/librdkafka/src/rdkafka_conf.c +4880 -0
- package/deps/librdkafka/src/rdkafka_conf.h +732 -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 +898 -0
- package/deps/librdkafka/src/rdkafka_feature.h +104 -0
- package/deps/librdkafka/src/rdkafka_fetcher.c +1422 -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 +1260 -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 +2209 -0
- package/deps/librdkafka/src/rdkafka_metadata.h +345 -0
- package/deps/librdkafka/src/rdkafka_metadata_cache.c +1183 -0
- package/deps/librdkafka/src/rdkafka_mock.c +3661 -0
- package/deps/librdkafka/src/rdkafka_mock.h +610 -0
- package/deps/librdkafka/src/rdkafka_mock_cgrp.c +1876 -0
- package/deps/librdkafka/src/rdkafka_mock_handlers.c +3113 -0
- package/deps/librdkafka/src/rdkafka_mock_int.h +710 -0
- package/deps/librdkafka/src/rdkafka_msg.c +2589 -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 +1474 -0
- package/deps/librdkafka/src/rdkafka_offset.c +1565 -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 +858 -0
- package/deps/librdkafka/src/rdkafka_partition.c +4896 -0
- package/deps/librdkafka/src/rdkafka_partition.h +1182 -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 +736 -0
- package/deps/librdkafka/src/rdkafka_protocol.h +128 -0
- package/deps/librdkafka/src/rdkafka_queue.c +1230 -0
- package/deps/librdkafka/src/rdkafka_queue.h +1220 -0
- package/deps/librdkafka/src/rdkafka_range_assignor.c +1748 -0
- package/deps/librdkafka/src/rdkafka_request.c +7089 -0
- package/deps/librdkafka/src/rdkafka_request.h +732 -0
- package/deps/librdkafka/src/rdkafka_roundrobin_assignor.c +123 -0
- package/deps/librdkafka/src/rdkafka_sasl.c +530 -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 +1833 -0
- package/deps/librdkafka/src/rdkafka_sasl_oauthbearer.h +52 -0
- package/deps/librdkafka/src/rdkafka_sasl_oauthbearer_oidc.c +1666 -0
- package/deps/librdkafka/src/rdkafka_sasl_oauthbearer_oidc.h +47 -0
- package/deps/librdkafka/src/rdkafka_sasl_plain.c +142 -0
- package/deps/librdkafka/src/rdkafka_sasl_scram.c +858 -0
- package/deps/librdkafka/src/rdkafka_sasl_win32.c +550 -0
- package/deps/librdkafka/src/rdkafka_ssl.c +2129 -0
- package/deps/librdkafka/src/rdkafka_ssl.h +86 -0
- package/deps/librdkafka/src/rdkafka_sticky_assignor.c +4785 -0
- package/deps/librdkafka/src/rdkafka_subscription.c +278 -0
- package/deps/librdkafka/src/rdkafka_telemetry.c +760 -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 +997 -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 +2161 -0
- package/deps/librdkafka/src/rdkafka_topic.h +334 -0
- package/deps/librdkafka/src/rdkafka_transport.c +1309 -0
- package/deps/librdkafka/src/rdkafka_transport.h +99 -0
- package/deps/librdkafka/src/rdkafka_transport_int.h +100 -0
- package/deps/librdkafka/src/rdkafka_txnmgr.c +3256 -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 +508 -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 +80 -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 +356 -0
- package/deps/librdkafka/src/rdtypes.h +86 -0
- package/deps/librdkafka/src/rdunittest.c +549 -0
- package/deps/librdkafka/src/rdunittest.h +232 -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 +1352 -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 +199 -0
- package/deps/librdkafka/src/tinycthread_extra.h +212 -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 +3797 -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 +102 -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 +934 -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 +97 -0
- package/deps/librdkafka/tests/0011-produce_batch.c +753 -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 +181 -0
- package/deps/librdkafka/tests/0017-compression.c +140 -0
- package/deps/librdkafka/tests/0018-cgrp_term.c +338 -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 +72 -0
- package/deps/librdkafka/tests/0022-consume_batch.c +279 -0
- package/deps/librdkafka/tests/0025-timers.c +147 -0
- package/deps/librdkafka/tests/0026-consume_pause.c +547 -0
- package/deps/librdkafka/tests/0028-long_topicnames.c +79 -0
- package/deps/librdkafka/tests/0029-assign_offset.c +202 -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 +536 -0
- package/deps/librdkafka/tests/0034-offset_reset.c +398 -0
- package/deps/librdkafka/tests/0035-api_version.c +73 -0
- package/deps/librdkafka/tests/0036-partial_fetch.c +87 -0
- package/deps/librdkafka/tests/0037-destroy_hang_local.c +85 -0
- package/deps/librdkafka/tests/0038-performance.c +121 -0
- package/deps/librdkafka/tests/0039-event.c +284 -0
- package/deps/librdkafka/tests/0040-io_event.c +257 -0
- package/deps/librdkafka/tests/0041-fetch_max_bytes.c +97 -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 +94 -0
- package/deps/librdkafka/tests/0045-subscribe_update.c +1010 -0
- package/deps/librdkafka/tests/0046-rkt_cache.c +65 -0
- package/deps/librdkafka/tests/0047-partial_buf_tmout.c +98 -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 +145 -0
- package/deps/librdkafka/tests/0051-assign_adds.c +126 -0
- package/deps/librdkafka/tests/0052-msg_timestamps.c +238 -0
- package/deps/librdkafka/tests/0053-stats_cb.cpp +527 -0
- package/deps/librdkafka/tests/0054-offset_time.cpp +236 -0
- package/deps/librdkafka/tests/0055-producer_latency.c +539 -0
- package/deps/librdkafka/tests/0056-balanced_group_mt.c +315 -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 +241 -0
- package/deps/librdkafka/tests/0060-op_prio.cpp +163 -0
- package/deps/librdkafka/tests/0061-consumer_lag.cpp +295 -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 +151 -0
- package/deps/librdkafka/tests/0068-produce_timeout.c +136 -0
- package/deps/librdkafka/tests/0069-consumer_add_parts.c +119 -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 +290 -0
- package/deps/librdkafka/tests/0076-produce_retry.c +452 -0
- package/deps/librdkafka/tests/0077-compaction.c +363 -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 +3095 -0
- package/deps/librdkafka/tests/0081-admin.c +5633 -0
- package/deps/librdkafka/tests/0082-fetch_max_bytes.cpp +137 -0
- package/deps/librdkafka/tests/0083-cb_event.c +233 -0
- package/deps/librdkafka/tests/0084-destroy_flags.c +208 -0
- package/deps/librdkafka/tests/0085-headers.cpp +392 -0
- package/deps/librdkafka/tests/0086-purge.c +368 -0
- package/deps/librdkafka/tests/0088-produce_metadata_timeout.c +162 -0
- package/deps/librdkafka/tests/0089-max_poll_interval.c +511 -0
- package/deps/librdkafka/tests/0090-idempotence.c +171 -0
- package/deps/librdkafka/tests/0091-max_poll_interval_timeout.c +295 -0
- package/deps/librdkafka/tests/0092-mixed_msgver.c +103 -0
- package/deps/librdkafka/tests/0093-holb.c +200 -0
- package/deps/librdkafka/tests/0094-idempotence_msg_timeout.c +231 -0
- package/deps/librdkafka/tests/0095-all_brokers_down.cpp +122 -0
- package/deps/librdkafka/tests/0097-ssl_verify.cpp +658 -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 +836 -0
- package/deps/librdkafka/tests/0103-transactions.c +1383 -0
- package/deps/librdkafka/tests/0104-fetch_from_follower_mock.c +625 -0
- package/deps/librdkafka/tests/0105-transactions_mock.c +3930 -0
- package/deps/librdkafka/tests/0106-cgrp_sess_timeout.c +318 -0
- package/deps/librdkafka/tests/0107-topic_recreate.c +259 -0
- package/deps/librdkafka/tests/0109-auto_create_topics.cpp +278 -0
- package/deps/librdkafka/tests/0110-batch_size.cpp +182 -0
- package/deps/librdkafka/tests/0111-delay_create_topics.cpp +127 -0
- package/deps/librdkafka/tests/0112-assign_unknown_part.c +87 -0
- package/deps/librdkafka/tests/0113-cooperative_rebalance.cpp +3473 -0
- package/deps/librdkafka/tests/0114-sticky_partitioning.cpp +176 -0
- package/deps/librdkafka/tests/0115-producer_auth.cpp +182 -0
- package/deps/librdkafka/tests/0116-kafkaconsumer_close.cpp +216 -0
- package/deps/librdkafka/tests/0117-mock_errors.c +331 -0
- package/deps/librdkafka/tests/0118-commit_rebalance.c +154 -0
- package/deps/librdkafka/tests/0119-consumer_auth.cpp +167 -0
- package/deps/librdkafka/tests/0120-asymmetric_subscription.c +185 -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 +528 -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 +79 -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 +179 -0
- package/deps/librdkafka/tests/0133-ssl_keys.c +150 -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 +619 -0
- package/deps/librdkafka/tests/0138-admin_mock.c +281 -0
- package/deps/librdkafka/tests/0139-offset_validation_mock.c +950 -0
- package/deps/librdkafka/tests/0140-commit_metadata.cpp +108 -0
- package/deps/librdkafka/tests/0142-reauthentication.c +515 -0
- package/deps/librdkafka/tests/0143-exponential_backoff_mock.c +552 -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 +505 -0
- package/deps/librdkafka/tests/0147-consumer_group_consumer_mock.c +952 -0
- package/deps/librdkafka/tests/0148-offset_fetch_commit_error_mock.c +563 -0
- package/deps/librdkafka/tests/0149-broker-same-host-port.c +140 -0
- package/deps/librdkafka/tests/0150-telemetry_mock.c +651 -0
- package/deps/librdkafka/tests/0151-purge-brokers.c +566 -0
- package/deps/librdkafka/tests/0152-rebootstrap.c +59 -0
- package/deps/librdkafka/tests/0153-memberid.c +128 -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 +170 -0
- package/deps/librdkafka/tests/LibrdkafkaTestApp.py +291 -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/oauthbearer/jwt_assertion_template.json +10 -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.intermediate.p12 +0 -0
- package/deps/librdkafka/tests/fixtures/ssl/client.keystore.p12 +0 -0
- package/deps/librdkafka/tests/fixtures/ssl/client2.certificate.intermediate.pem +72 -0
- package/deps/librdkafka/tests/fixtures/ssl/client2.certificate.pem +50 -0
- package/deps/librdkafka/tests/fixtures/ssl/client2.intermediate.key +46 -0
- package/deps/librdkafka/tests/fixtures/ssl/client2.key +46 -0
- package/deps/librdkafka/tests/fixtures/ssl/create_keys.sh +168 -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 +13 -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-all-tests.sh +79 -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-batches.py +157 -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 +7778 -0
- package/deps/librdkafka/tests/test.conf.example +27 -0
- package/deps/librdkafka/tests/test.h +1028 -0
- package/deps/librdkafka/tests/testcpp.cpp +131 -0
- package/deps/librdkafka/tests/testcpp.h +388 -0
- package/deps/librdkafka/tests/testshared.h +416 -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/trivup/trivup-0.14.0.tar.gz +0 -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/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 +47 -0
- package/deps/librdkafka/win32/setup-vcpkg.ps1 +34 -0
- package/deps/librdkafka/win32/tests/test.conf.example +25 -0
- package/deps/librdkafka/win32/tests/tests.vcxproj +253 -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 +101 -0
- package/deps/librdkafka/win32/wintime.h +33 -0
- package/deps/librdkafka.gyp +62 -0
- package/lib/admin.js +233 -0
- package/lib/client.js +573 -0
- package/lib/error.js +500 -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/package.json +61 -0
- package/prebuilds/darwin-arm64/@point3+node-rdkafka.node +0 -0
- package/prebuilds/linux-x64/@point3+node-rdkafka.node +0 -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
|
@@ -0,0 +1,760 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* librdkafka - Apache Kafka C library
|
|
3
|
+
*
|
|
4
|
+
* Copyright (c) 2023, Confluent Inc.
|
|
5
|
+
* All rights reserved.
|
|
6
|
+
*
|
|
7
|
+
* Redistribution and use in source and binary forms, with or without
|
|
8
|
+
* modification, are permitted provided that the following conditions are met:
|
|
9
|
+
*
|
|
10
|
+
* 1. Redistributions of source code must retain the above copyright notice,
|
|
11
|
+
* this list of conditions and the following disclaimer.
|
|
12
|
+
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
13
|
+
* this list of conditions and the following disclaimer in the documentation
|
|
14
|
+
* and/or other materials provided with the distribution.
|
|
15
|
+
*
|
|
16
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
17
|
+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
18
|
+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
19
|
+
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
20
|
+
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
21
|
+
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
22
|
+
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
23
|
+
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
24
|
+
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
25
|
+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
26
|
+
* POSSIBILITY OF SUCH DAMAGE.
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
#include "rdkafka_telemetry.h"
|
|
30
|
+
#include "rdkafka_msgset.h"
|
|
31
|
+
#include "rdkafka_telemetry_encode.h"
|
|
32
|
+
#include "rdkafka_request.h"
|
|
33
|
+
#include "nanopb/pb.h"
|
|
34
|
+
#include "rdkafka_lz4.h"
|
|
35
|
+
#include "snappy.h"
|
|
36
|
+
#include "rdunittest.h"
|
|
37
|
+
|
|
38
|
+
#if WITH_ZSTD
|
|
39
|
+
#include "rdkafka_zstd.h"
|
|
40
|
+
#endif
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
#define RD_KAFKA_TELEMETRY_PUSH_JITTER 20
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* @brief Filters broker by availability of GetTelemetrySubscription.
|
|
47
|
+
*
|
|
48
|
+
* @return 0 if GetTelemetrySubscription is supported, 1 otherwise.
|
|
49
|
+
*
|
|
50
|
+
* @locks rd_kafka_broker_lock()
|
|
51
|
+
*/
|
|
52
|
+
static int
|
|
53
|
+
rd_kafka_filter_broker_by_GetTelemetrySubscription(rd_kafka_broker_t *rkb,
|
|
54
|
+
void *opaque) {
|
|
55
|
+
if (rd_kafka_broker_ApiVersion_at_least_no_lock(
|
|
56
|
+
rkb, RD_KAFKAP_GetTelemetrySubscriptions, 0))
|
|
57
|
+
return 0;
|
|
58
|
+
return 1;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* @brief Returns the preferred metrics broker or NULL if unavailable.
|
|
63
|
+
*
|
|
64
|
+
* @locks none
|
|
65
|
+
* @locks_acquired rk_telemetry.lock, rd_kafka_wrlock()
|
|
66
|
+
* @locality main thread
|
|
67
|
+
*/
|
|
68
|
+
static rd_kafka_broker_t *rd_kafka_get_preferred_broker(rd_kafka_t *rk) {
|
|
69
|
+
rd_kafka_broker_t *rkb = NULL;
|
|
70
|
+
|
|
71
|
+
mtx_lock(&rk->rk_telemetry.lock);
|
|
72
|
+
if (rk->rk_telemetry.preferred_broker)
|
|
73
|
+
rkb = rk->rk_telemetry.preferred_broker;
|
|
74
|
+
else {
|
|
75
|
+
/* If there is no preferred broker, that means that our previous
|
|
76
|
+
* one failed. Iterate through all available brokers to find
|
|
77
|
+
* one. */
|
|
78
|
+
rd_kafka_wrlock(rk);
|
|
79
|
+
rkb = rd_kafka_broker_random_up(
|
|
80
|
+
rk, rd_kafka_filter_broker_by_GetTelemetrySubscription,
|
|
81
|
+
NULL);
|
|
82
|
+
rd_kafka_wrunlock(rk);
|
|
83
|
+
|
|
84
|
+
/* No need to increase refcnt as broker_random_up does it
|
|
85
|
+
* already. */
|
|
86
|
+
rk->rk_telemetry.preferred_broker = rkb;
|
|
87
|
+
|
|
88
|
+
rd_kafka_dbg(rk, TELEMETRY, "SETBROKER",
|
|
89
|
+
"Lost preferred broker, switching to new "
|
|
90
|
+
"preferred broker %" PRId32 "\n",
|
|
91
|
+
rkb ? rd_kafka_broker_id(rkb) : -1);
|
|
92
|
+
}
|
|
93
|
+
mtx_unlock(&rk->rk_telemetry.lock);
|
|
94
|
+
|
|
95
|
+
return rkb;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* @brief Cleans up the rk.rk_telemetry struct and frees any allocations.
|
|
100
|
+
*
|
|
101
|
+
* @param clear_control_flow_fields This determines if the control flow fields
|
|
102
|
+
* need to be cleared. This should only be set
|
|
103
|
+
* to true if the rk is terminating.
|
|
104
|
+
* @locality main thread
|
|
105
|
+
* @locks none
|
|
106
|
+
* @locks_acquired rk_telemetry.lock
|
|
107
|
+
*/
|
|
108
|
+
void rd_kafka_telemetry_clear(rd_kafka_t *rk,
|
|
109
|
+
rd_bool_t clear_control_flow_fields) {
|
|
110
|
+
if (clear_control_flow_fields) {
|
|
111
|
+
mtx_lock(&rk->rk_telemetry.lock);
|
|
112
|
+
if (rk->rk_telemetry.preferred_broker) {
|
|
113
|
+
rd_kafka_broker_destroy(
|
|
114
|
+
rk->rk_telemetry.preferred_broker);
|
|
115
|
+
rk->rk_telemetry.preferred_broker = NULL;
|
|
116
|
+
}
|
|
117
|
+
mtx_unlock(&rk->rk_telemetry.lock);
|
|
118
|
+
mtx_destroy(&rk->rk_telemetry.lock);
|
|
119
|
+
cnd_destroy(&rk->rk_telemetry.termination_cnd);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
if (rk->rk_telemetry.accepted_compression_types_cnt) {
|
|
123
|
+
rd_free(rk->rk_telemetry.accepted_compression_types);
|
|
124
|
+
rk->rk_telemetry.accepted_compression_types = NULL;
|
|
125
|
+
rk->rk_telemetry.accepted_compression_types_cnt = 0;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
if (rk->rk_telemetry.requested_metrics_cnt) {
|
|
129
|
+
size_t i;
|
|
130
|
+
for (i = 0; i < rk->rk_telemetry.requested_metrics_cnt; i++)
|
|
131
|
+
rd_free(rk->rk_telemetry.requested_metrics[i]);
|
|
132
|
+
rd_free(rk->rk_telemetry.requested_metrics);
|
|
133
|
+
rd_free(rk->rk_telemetry.matched_metrics);
|
|
134
|
+
rk->rk_telemetry.requested_metrics = NULL;
|
|
135
|
+
rk->rk_telemetry.requested_metrics_cnt = 0;
|
|
136
|
+
rk->rk_telemetry.matched_metrics = NULL;
|
|
137
|
+
rk->rk_telemetry.matched_metrics_cnt = 0;
|
|
138
|
+
}
|
|
139
|
+
rk->rk_telemetry.telemetry_max_bytes = 0;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* @brief Sets the telemetry state to TERMINATED and signals the conditional
|
|
144
|
+
* variable
|
|
145
|
+
*
|
|
146
|
+
* @locality main thread
|
|
147
|
+
* @locks none
|
|
148
|
+
* @locks_acquired rk_telemetry.lock
|
|
149
|
+
*/
|
|
150
|
+
static void rd_kafka_telemetry_set_terminated(rd_kafka_t *rk) {
|
|
151
|
+
rd_dassert(thrd_is_current(rk->rk_thread));
|
|
152
|
+
|
|
153
|
+
rd_kafka_dbg(rk, TELEMETRY, "TERM",
|
|
154
|
+
"Setting state to TERMINATED and signalling");
|
|
155
|
+
|
|
156
|
+
rk->rk_telemetry.state = RD_KAFKA_TELEMETRY_TERMINATED;
|
|
157
|
+
rd_kafka_timer_stop(&rk->rk_timers, &rk->rk_telemetry.request_timer,
|
|
158
|
+
1 /*lock*/);
|
|
159
|
+
mtx_lock(&rk->rk_telemetry.lock);
|
|
160
|
+
cnd_signal(&rk->rk_telemetry.termination_cnd);
|
|
161
|
+
mtx_unlock(&rk->rk_telemetry.lock);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
static void update_matched_metrics(rd_kafka_t *rk, size_t j) {
|
|
165
|
+
rk->rk_telemetry.matched_metrics_cnt++;
|
|
166
|
+
rk->rk_telemetry.matched_metrics =
|
|
167
|
+
rd_realloc(rk->rk_telemetry.matched_metrics,
|
|
168
|
+
sizeof(int) * rk->rk_telemetry.matched_metrics_cnt);
|
|
169
|
+
rk->rk_telemetry
|
|
170
|
+
.matched_metrics[rk->rk_telemetry.matched_metrics_cnt - 1] = j;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
static void rd_kafka_match_requested_metrics(rd_kafka_t *rk) {
|
|
174
|
+
size_t metrics_cnt = RD_KAFKA_TELEMETRY_METRIC_CNT(rk), i;
|
|
175
|
+
rd_bool_t is_metric_included[RD_MAX(
|
|
176
|
+
(int)RD_KAFKA_TELEMETRY_PRODUCER_METRIC__CNT,
|
|
177
|
+
(int)RD_KAFKA_TELEMETRY_CONSUMER_METRIC__CNT)] = {0};
|
|
178
|
+
const rd_kafka_telemetry_metric_info_t *info =
|
|
179
|
+
RD_KAFKA_TELEMETRY_METRIC_INFO(rk);
|
|
180
|
+
|
|
181
|
+
if (rk->rk_telemetry.requested_metrics_cnt == 1 &&
|
|
182
|
+
!strcmp(rk->rk_telemetry.requested_metrics[0],
|
|
183
|
+
RD_KAFKA_TELEMETRY_METRICS_ALL_METRICS_SUBSCRIPTION)) {
|
|
184
|
+
size_t j;
|
|
185
|
+
rd_kafka_dbg(rk, TELEMETRY, "GETSUBSCRIPTIONS",
|
|
186
|
+
"All metrics subscribed");
|
|
187
|
+
|
|
188
|
+
for (j = 0; j < metrics_cnt; j++)
|
|
189
|
+
update_matched_metrics(rk, j);
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
for (i = 0; i < rk->rk_telemetry.requested_metrics_cnt; i++) {
|
|
194
|
+
size_t name_len = strlen(rk->rk_telemetry.requested_metrics[i]),
|
|
195
|
+
j;
|
|
196
|
+
|
|
197
|
+
for (j = 0; j < metrics_cnt; j++) {
|
|
198
|
+
if (is_metric_included[j])
|
|
199
|
+
continue;
|
|
200
|
+
|
|
201
|
+
/* Prefix matching the requested metrics with the
|
|
202
|
+
* available metrics. */
|
|
203
|
+
char full_metric_name
|
|
204
|
+
[RD_KAFKA_TELEMETRY_METRIC_NAME_MAX_LEN];
|
|
205
|
+
rd_snprintf(full_metric_name, sizeof(full_metric_name),
|
|
206
|
+
"%s%s", RD_KAFKA_TELEMETRY_METRIC_PREFIX,
|
|
207
|
+
info[j].name);
|
|
208
|
+
bool name_matches =
|
|
209
|
+
strncmp(full_metric_name,
|
|
210
|
+
rk->rk_telemetry.requested_metrics[i],
|
|
211
|
+
name_len) == 0;
|
|
212
|
+
|
|
213
|
+
if (name_matches) {
|
|
214
|
+
update_matched_metrics(rk, j);
|
|
215
|
+
is_metric_included[j] = rd_true;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
rd_kafka_dbg(rk, TELEMETRY, "GETSUBSCRIPTIONS",
|
|
221
|
+
"Matched metrics: %" PRIusz,
|
|
222
|
+
rk->rk_telemetry.matched_metrics_cnt);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* @brief Enqueues a GetTelemetrySubscriptionsRequest.
|
|
227
|
+
*
|
|
228
|
+
* @locks none
|
|
229
|
+
* @locks_acquired none
|
|
230
|
+
* @locality main thread
|
|
231
|
+
*/
|
|
232
|
+
static void rd_kafka_send_get_telemetry_subscriptions(rd_kafka_t *rk,
|
|
233
|
+
rd_kafka_broker_t *rkb) {
|
|
234
|
+
/* Clear out the telemetry struct, free anything that is malloc'd. */
|
|
235
|
+
rd_kafka_telemetry_clear(rk, rd_false /* clear_control_flow_fields */);
|
|
236
|
+
|
|
237
|
+
/* Enqueue on broker transmit queue.
|
|
238
|
+
* The preferred broker might change in the meanwhile but let it fail.
|
|
239
|
+
*/
|
|
240
|
+
rd_kafka_dbg(rk, TELEMETRY, "GETSUBSCRIPTIONS",
|
|
241
|
+
"Sending GetTelemetryRequest");
|
|
242
|
+
rd_kafka_GetTelemetrySubscriptionsRequest(
|
|
243
|
+
rkb, NULL, 0, RD_KAFKA_REPLYQ(rk->rk_ops, 0),
|
|
244
|
+
rd_kafka_handle_GetTelemetrySubscriptions, NULL);
|
|
245
|
+
|
|
246
|
+
/* Change state */
|
|
247
|
+
rk->rk_telemetry.state = RD_KAFKA_TELEMETRY_GET_SUBSCRIPTIONS_SENT;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* @brief Compresses the telemetry payload using the available compression
|
|
252
|
+
* types.
|
|
253
|
+
*
|
|
254
|
+
* @param rk The rdkafka instance.
|
|
255
|
+
* @param rkb The broker to which the payload is being sent.
|
|
256
|
+
* @param payload The payload to be compressed.
|
|
257
|
+
* @param compressed_payload The compressed payload.
|
|
258
|
+
* @param compressed_payload_size The size of the compressed payload.
|
|
259
|
+
*
|
|
260
|
+
* @return The compression type used.
|
|
261
|
+
*
|
|
262
|
+
* @locks none
|
|
263
|
+
* @locks_acquired none
|
|
264
|
+
* @locality main thread
|
|
265
|
+
*/
|
|
266
|
+
static rd_kafka_compression_t
|
|
267
|
+
rd_kafka_push_telemetry_payload_compress(rd_kafka_t *rk,
|
|
268
|
+
rd_kafka_broker_t *rkb,
|
|
269
|
+
rd_buf_t *payload,
|
|
270
|
+
void **compressed_payload,
|
|
271
|
+
size_t *compressed_payload_size) {
|
|
272
|
+
rd_kafka_compression_t compression_used = RD_KAFKA_COMPRESSION_NONE;
|
|
273
|
+
rd_slice_t payload_slice;
|
|
274
|
+
size_t i;
|
|
275
|
+
rd_kafka_resp_err_t r = RD_KAFKA_RESP_ERR_NO_ERROR;
|
|
276
|
+
|
|
277
|
+
if (payload->rbuf_len == 0) {
|
|
278
|
+
/* We can only initialize the slice to compress
|
|
279
|
+
* if not empty. */
|
|
280
|
+
rd_kafka_dbg(rk, TELEMETRY, "PUSH",
|
|
281
|
+
"Empty payload. "
|
|
282
|
+
"Sending uncompressed payload");
|
|
283
|
+
|
|
284
|
+
/* It's not important the payload isn't actually a segment
|
|
285
|
+
* inside the buffer, as size is 0, we can send any allocated
|
|
286
|
+
* memory here, but we chose the buffer because it's
|
|
287
|
+
* freed like the other COMPRESSION_NONE case, without
|
|
288
|
+
* memory leaks. */
|
|
289
|
+
*compressed_payload = payload;
|
|
290
|
+
*compressed_payload_size = 0;
|
|
291
|
+
return RD_KAFKA_COMPRESSION_NONE;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
rd_slice_init_full(&payload_slice, payload);
|
|
295
|
+
for (i = 0; i < rk->rk_telemetry.accepted_compression_types_cnt; i++) {
|
|
296
|
+
rd_kafka_compression_t compression_type =
|
|
297
|
+
rk->rk_telemetry.accepted_compression_types[i];
|
|
298
|
+
switch (compression_type) {
|
|
299
|
+
#if WITH_ZLIB
|
|
300
|
+
case RD_KAFKA_COMPRESSION_GZIP:
|
|
301
|
+
/* TODO: Using 0 for compression level for now. */
|
|
302
|
+
r = rd_kafka_gzip_compress(rkb, 0, &payload_slice,
|
|
303
|
+
compressed_payload,
|
|
304
|
+
compressed_payload_size);
|
|
305
|
+
compression_used = RD_KAFKA_COMPRESSION_GZIP;
|
|
306
|
+
break;
|
|
307
|
+
#endif
|
|
308
|
+
case RD_KAFKA_COMPRESSION_LZ4:
|
|
309
|
+
/* TODO: Using 0 for compression level for now. */
|
|
310
|
+
r = rd_kafka_lz4_compress(
|
|
311
|
+
rkb, rd_true, 0, &payload_slice, compressed_payload,
|
|
312
|
+
compressed_payload_size);
|
|
313
|
+
compression_used = RD_KAFKA_COMPRESSION_LZ4;
|
|
314
|
+
break;
|
|
315
|
+
#if WITH_ZSTD
|
|
316
|
+
case RD_KAFKA_COMPRESSION_ZSTD:
|
|
317
|
+
/* TODO: Using 0 for compression level for now. */
|
|
318
|
+
r = rd_kafka_zstd_compress(rkb, 0, &payload_slice,
|
|
319
|
+
compressed_payload,
|
|
320
|
+
compressed_payload_size);
|
|
321
|
+
compression_used = RD_KAFKA_COMPRESSION_ZSTD;
|
|
322
|
+
break;
|
|
323
|
+
#endif
|
|
324
|
+
#if WITH_SNAPPY
|
|
325
|
+
case RD_KAFKA_COMPRESSION_SNAPPY:
|
|
326
|
+
r = rd_kafka_snappy_compress_slice(
|
|
327
|
+
rkb, &payload_slice, compressed_payload,
|
|
328
|
+
compressed_payload_size);
|
|
329
|
+
compression_used = RD_KAFKA_COMPRESSION_SNAPPY;
|
|
330
|
+
break;
|
|
331
|
+
#endif
|
|
332
|
+
default:
|
|
333
|
+
break;
|
|
334
|
+
}
|
|
335
|
+
if (compression_used != RD_KAFKA_COMPRESSION_NONE &&
|
|
336
|
+
r == RD_KAFKA_RESP_ERR_NO_ERROR) {
|
|
337
|
+
rd_kafka_dbg(
|
|
338
|
+
rk, TELEMETRY, "PUSH",
|
|
339
|
+
"Compressed payload of size %" PRIusz " to %" PRIusz
|
|
340
|
+
" using compression type "
|
|
341
|
+
"%s",
|
|
342
|
+
payload->rbuf_size, *compressed_payload_size,
|
|
343
|
+
rd_kafka_compression2str(compression_used));
|
|
344
|
+
return compression_used;
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
if (compression_used != RD_KAFKA_COMPRESSION_NONE &&
|
|
348
|
+
r != RD_KAFKA_RESP_ERR_NO_ERROR) {
|
|
349
|
+
rd_kafka_dbg(rk, TELEMETRY, "PUSH",
|
|
350
|
+
"Failed to compress payload with available "
|
|
351
|
+
"compression types");
|
|
352
|
+
}
|
|
353
|
+
rd_kafka_dbg(rk, TELEMETRY, "PUSH", "Sending uncompressed payload");
|
|
354
|
+
*compressed_payload = payload->rbuf_wpos->seg_p;
|
|
355
|
+
*compressed_payload_size = payload->rbuf_wpos->seg_of;
|
|
356
|
+
return RD_KAFKA_COMPRESSION_NONE;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
/**
|
|
360
|
+
* @brief Enqueues a PushTelemetryRequest.
|
|
361
|
+
*
|
|
362
|
+
* @locks none
|
|
363
|
+
* @locks_acquired none
|
|
364
|
+
* @locality main thread
|
|
365
|
+
*/
|
|
366
|
+
static void rd_kafka_send_push_telemetry(rd_kafka_t *rk,
|
|
367
|
+
rd_kafka_broker_t *rkb,
|
|
368
|
+
rd_bool_t terminating) {
|
|
369
|
+
|
|
370
|
+
rd_buf_t *metrics_payload = rd_kafka_telemetry_encode_metrics(rk);
|
|
371
|
+
size_t compressed_metrics_payload_size = 0;
|
|
372
|
+
void *compressed_metrics_payload = NULL;
|
|
373
|
+
rd_kafka_compression_t compression_used = RD_KAFKA_COMPRESSION_NONE;
|
|
374
|
+
if (metrics_payload) {
|
|
375
|
+
compression_used = rd_kafka_push_telemetry_payload_compress(
|
|
376
|
+
rk, rkb, metrics_payload, &compressed_metrics_payload,
|
|
377
|
+
&compressed_metrics_payload_size);
|
|
378
|
+
if (compressed_metrics_payload_size >
|
|
379
|
+
(size_t)rk->rk_telemetry.telemetry_max_bytes) {
|
|
380
|
+
rd_kafka_log(rk, LOG_WARNING, "TELEMETRY",
|
|
381
|
+
"Metrics payload size %" PRIusz
|
|
382
|
+
" exceeds telemetry_max_bytes %" PRId32
|
|
383
|
+
"specified by the broker.",
|
|
384
|
+
compressed_metrics_payload_size,
|
|
385
|
+
rk->rk_telemetry.telemetry_max_bytes);
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
rd_kafka_dbg(
|
|
389
|
+
rk, TELEMETRY, "PUSH",
|
|
390
|
+
"Sending PushTelemetryRequest with terminating = %s",
|
|
391
|
+
RD_STR_ToF(terminating));
|
|
392
|
+
rd_kafka_PushTelemetryRequest(
|
|
393
|
+
rkb, &rk->rk_telemetry.client_instance_id,
|
|
394
|
+
rk->rk_telemetry.subscription_id, terminating,
|
|
395
|
+
compression_used, compressed_metrics_payload,
|
|
396
|
+
compressed_metrics_payload_size, NULL, 0,
|
|
397
|
+
RD_KAFKA_REPLYQ(rk->rk_ops, 0),
|
|
398
|
+
rd_kafka_handle_PushTelemetry, NULL);
|
|
399
|
+
} else {
|
|
400
|
+
rd_kafka_log(rk, LOG_WARNING, "PUSH",
|
|
401
|
+
"Telemetry metrics encode error, not sending "
|
|
402
|
+
"metrics");
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
if (metrics_payload)
|
|
406
|
+
rd_buf_destroy_free(metrics_payload);
|
|
407
|
+
if (compression_used != RD_KAFKA_COMPRESSION_NONE)
|
|
408
|
+
rd_free(compressed_metrics_payload);
|
|
409
|
+
|
|
410
|
+
rk->rk_telemetry.state = terminating
|
|
411
|
+
? RD_KAFKA_TELEMETRY_TERMINATING_PUSH_SENT
|
|
412
|
+
: RD_KAFKA_TELEMETRY_PUSH_SENT;
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
/**
|
|
416
|
+
* @brief Progress the telemetry state machine.
|
|
417
|
+
*
|
|
418
|
+
* @locks none
|
|
419
|
+
* @locks_acquired rd_kafka_rdlock()
|
|
420
|
+
* @locality main thread
|
|
421
|
+
*/
|
|
422
|
+
static void rd_kafka_telemetry_fsm(rd_kafka_t *rk) {
|
|
423
|
+
rd_kafka_broker_t *preferred_broker = NULL;
|
|
424
|
+
|
|
425
|
+
rd_dassert(rk);
|
|
426
|
+
rd_dassert(thrd_is_current(rk->rk_thread));
|
|
427
|
+
|
|
428
|
+
switch (rk->rk_telemetry.state) {
|
|
429
|
+
case RD_KAFKA_TELEMETRY_AWAIT_BROKER:
|
|
430
|
+
rd_dassert(!*"Should never be awaiting a broker when the telemetry fsm is called.");
|
|
431
|
+
break;
|
|
432
|
+
|
|
433
|
+
case RD_KAFKA_TELEMETRY_GET_SUBSCRIPTIONS_SCHEDULED:
|
|
434
|
+
preferred_broker = rd_kafka_get_preferred_broker(rk);
|
|
435
|
+
if (!preferred_broker) {
|
|
436
|
+
rk->rk_telemetry.state =
|
|
437
|
+
RD_KAFKA_TELEMETRY_AWAIT_BROKER;
|
|
438
|
+
break;
|
|
439
|
+
}
|
|
440
|
+
rd_kafka_send_get_telemetry_subscriptions(rk, preferred_broker);
|
|
441
|
+
break;
|
|
442
|
+
|
|
443
|
+
case RD_KAFKA_TELEMETRY_PUSH_SCHEDULED:
|
|
444
|
+
preferred_broker = rd_kafka_get_preferred_broker(rk);
|
|
445
|
+
if (!preferred_broker) {
|
|
446
|
+
rk->rk_telemetry.state =
|
|
447
|
+
RD_KAFKA_TELEMETRY_AWAIT_BROKER;
|
|
448
|
+
break;
|
|
449
|
+
}
|
|
450
|
+
rd_kafka_send_push_telemetry(rk, preferred_broker, rd_false);
|
|
451
|
+
break;
|
|
452
|
+
|
|
453
|
+
case RD_KAFKA_TELEMETRY_PUSH_SENT:
|
|
454
|
+
case RD_KAFKA_TELEMETRY_GET_SUBSCRIPTIONS_SENT:
|
|
455
|
+
case RD_KAFKA_TELEMETRY_TERMINATING_PUSH_SENT:
|
|
456
|
+
rd_dassert(!*"Should never be awaiting response when the telemetry fsm is called.");
|
|
457
|
+
break;
|
|
458
|
+
|
|
459
|
+
case RD_KAFKA_TELEMETRY_TERMINATING_PUSH_SCHEDULED:
|
|
460
|
+
preferred_broker = rd_kafka_get_preferred_broker(rk);
|
|
461
|
+
if (!preferred_broker) {
|
|
462
|
+
/* If there's no preferred broker, set state to
|
|
463
|
+
* terminated immediately to stop the app thread from
|
|
464
|
+
* waiting indefinitely. */
|
|
465
|
+
rd_kafka_telemetry_set_terminated(rk);
|
|
466
|
+
break;
|
|
467
|
+
}
|
|
468
|
+
rd_kafka_send_push_telemetry(rk, preferred_broker, rd_true);
|
|
469
|
+
break;
|
|
470
|
+
|
|
471
|
+
case RD_KAFKA_TELEMETRY_TERMINATED:
|
|
472
|
+
rd_dassert(!*"Should not be terminated when the telemetry fsm is called.");
|
|
473
|
+
break;
|
|
474
|
+
|
|
475
|
+
default:
|
|
476
|
+
rd_assert(!*"Unknown state");
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
/**
|
|
481
|
+
* @brief Callback for FSM timer.
|
|
482
|
+
*
|
|
483
|
+
* @locks none
|
|
484
|
+
* @locks_acquired none
|
|
485
|
+
* @locality main thread
|
|
486
|
+
*/
|
|
487
|
+
void rd_kafka_telemetry_fsm_tmr_cb(rd_kafka_timers_t *rkts, void *rk) {
|
|
488
|
+
rd_kafka_telemetry_fsm(rk);
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
/**
|
|
492
|
+
* @brief Handles parsed GetTelemetrySubscriptions response.
|
|
493
|
+
*
|
|
494
|
+
* @locks none
|
|
495
|
+
* @locks_acquired rd_kafka_rdlock()
|
|
496
|
+
* @locality main thread
|
|
497
|
+
*/
|
|
498
|
+
void rd_kafka_handle_get_telemetry_subscriptions(rd_kafka_t *rk,
|
|
499
|
+
rd_kafka_resp_err_t err) {
|
|
500
|
+
rd_ts_t next_scheduled;
|
|
501
|
+
double jitter_multiplier =
|
|
502
|
+
rd_jitter(100 - RD_KAFKA_TELEMETRY_PUSH_JITTER,
|
|
503
|
+
100 + RD_KAFKA_TELEMETRY_PUSH_JITTER) /
|
|
504
|
+
100.0;
|
|
505
|
+
rd_ts_t now_ns = rd_uclock() * 1000;
|
|
506
|
+
rd_kafka_broker_t *rkb = NULL;
|
|
507
|
+
|
|
508
|
+
if (err != RD_KAFKA_RESP_ERR_NO_ERROR) {
|
|
509
|
+
rd_kafka_dbg(rk, TELEMETRY, "GETSUBSCRIPTIONS",
|
|
510
|
+
"GetTelemetrySubscriptionsRequest failed: %s",
|
|
511
|
+
rd_kafka_err2str(err));
|
|
512
|
+
if (rk->rk_telemetry.push_interval_ms == 0) {
|
|
513
|
+
rk->rk_telemetry.push_interval_ms =
|
|
514
|
+
30000; /* Default: 5min */
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
if (err == RD_KAFKA_RESP_ERR_NO_ERROR &&
|
|
519
|
+
rk->rk_telemetry.requested_metrics_cnt) {
|
|
520
|
+
rd_kafka_match_requested_metrics(rk);
|
|
521
|
+
|
|
522
|
+
/* Some metrics are requested. Start the timer accordingly */
|
|
523
|
+
next_scheduled = (int)(jitter_multiplier * 1000 *
|
|
524
|
+
rk->rk_telemetry.push_interval_ms);
|
|
525
|
+
|
|
526
|
+
rk->rk_telemetry.state = RD_KAFKA_TELEMETRY_PUSH_SCHEDULED;
|
|
527
|
+
|
|
528
|
+
/* Set for the first push */
|
|
529
|
+
if (rk->rk_telemetry.rk_historic_c.ts_start == 0) {
|
|
530
|
+
rk->rk_telemetry.rk_historic_c.ts_start = now_ns;
|
|
531
|
+
rk->rk_telemetry.rk_historic_c.ts_last = now_ns;
|
|
532
|
+
rd_kafka_rdlock(rk);
|
|
533
|
+
TAILQ_FOREACH(rkb, &rk->rk_brokers, rkb_link) {
|
|
534
|
+
rkb->rkb_telemetry.rkb_historic_c.connects =
|
|
535
|
+
rd_atomic32_get(&rkb->rkb_c.connects);
|
|
536
|
+
}
|
|
537
|
+
rd_kafka_rdunlock(rk);
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
} else {
|
|
541
|
+
/* No metrics requested, or we're in error. */
|
|
542
|
+
next_scheduled = rk->rk_telemetry.push_interval_ms * 1000;
|
|
543
|
+
rk->rk_telemetry.state =
|
|
544
|
+
RD_KAFKA_TELEMETRY_GET_SUBSCRIPTIONS_SCHEDULED;
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
rd_kafka_dbg(rk, TELEMETRY, "GETSUBSCRIPTIONS",
|
|
548
|
+
"Handled GetTelemetrySubscriptions, scheduling FSM after "
|
|
549
|
+
"%" PRId64
|
|
550
|
+
" microseconds, state = %s, err = %s, metrics = %" PRIusz,
|
|
551
|
+
next_scheduled,
|
|
552
|
+
rd_kafka_telemetry_state2str(rk->rk_telemetry.state),
|
|
553
|
+
rd_kafka_err2str(err),
|
|
554
|
+
rk->rk_telemetry.requested_metrics_cnt);
|
|
555
|
+
|
|
556
|
+
rd_kafka_timer_start_oneshot(
|
|
557
|
+
&rk->rk_timers, &rk->rk_telemetry.request_timer, rd_false,
|
|
558
|
+
next_scheduled, rd_kafka_telemetry_fsm_tmr_cb, rk);
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
void rd_kafka_handle_push_telemetry(rd_kafka_t *rk, rd_kafka_resp_err_t err) {
|
|
562
|
+
|
|
563
|
+
/* We only make a best-effort attempt to push telemetry while
|
|
564
|
+
* terminating, and don't care about any errors. */
|
|
565
|
+
if (rk->rk_telemetry.state ==
|
|
566
|
+
RD_KAFKA_TELEMETRY_TERMINATING_PUSH_SENT) {
|
|
567
|
+
rd_kafka_telemetry_set_terminated(rk);
|
|
568
|
+
return;
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
/* There's a possiblity that we sent a PushTelemetryRequest, and
|
|
572
|
+
* scheduled a termination before getting the response. In that case, we
|
|
573
|
+
* will enter this method in the TERMINATED state when/if we get a
|
|
574
|
+
* response, and we should not take any action. */
|
|
575
|
+
if (rk->rk_telemetry.state != RD_KAFKA_TELEMETRY_PUSH_SENT)
|
|
576
|
+
return;
|
|
577
|
+
|
|
578
|
+
if (err == RD_KAFKA_RESP_ERR_NO_ERROR) {
|
|
579
|
+
rd_kafka_dbg(rk, TELEMETRY, "PUSH",
|
|
580
|
+
"PushTelemetryRequest succeeded");
|
|
581
|
+
rk->rk_telemetry.state = RD_KAFKA_TELEMETRY_PUSH_SCHEDULED;
|
|
582
|
+
rd_kafka_timer_start_oneshot(
|
|
583
|
+
&rk->rk_timers, &rk->rk_telemetry.request_timer, rd_false,
|
|
584
|
+
rk->rk_telemetry.push_interval_ms * 1000,
|
|
585
|
+
rd_kafka_telemetry_fsm_tmr_cb, (void *)rk);
|
|
586
|
+
} else { /* error */
|
|
587
|
+
rd_kafka_dbg(rk, TELEMETRY, "PUSH",
|
|
588
|
+
"PushTelemetryRequest failed: %s",
|
|
589
|
+
rd_kafka_err2str(err));
|
|
590
|
+
/* Non-retriable errors */
|
|
591
|
+
if (err == RD_KAFKA_RESP_ERR_INVALID_REQUEST ||
|
|
592
|
+
err == RD_KAFKA_RESP_ERR_INVALID_RECORD) {
|
|
593
|
+
rd_kafka_log(
|
|
594
|
+
rk, LOG_WARNING, "TELEMETRY",
|
|
595
|
+
"PushTelemetryRequest failed with non-retriable "
|
|
596
|
+
"error: %s. Stopping telemetry.",
|
|
597
|
+
rd_kafka_err2str(err));
|
|
598
|
+
rd_kafka_telemetry_set_terminated(rk);
|
|
599
|
+
return;
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
if (err == RD_KAFKA_RESP_ERR_TELEMETRY_TOO_LARGE) {
|
|
603
|
+
rd_kafka_log(
|
|
604
|
+
rk, LOG_WARNING, "TELEMETRY",
|
|
605
|
+
"PushTelemetryRequest failed because of payload "
|
|
606
|
+
"size too large: %s. Continuing telemetry.",
|
|
607
|
+
rd_kafka_err2str(err));
|
|
608
|
+
rk->rk_telemetry.state =
|
|
609
|
+
RD_KAFKA_TELEMETRY_PUSH_SCHEDULED;
|
|
610
|
+
rd_kafka_timer_start_oneshot(
|
|
611
|
+
&rk->rk_timers, &rk->rk_telemetry.request_timer,
|
|
612
|
+
rd_false, rk->rk_telemetry.push_interval_ms * 1000,
|
|
613
|
+
rd_kafka_telemetry_fsm_tmr_cb, (void *)rk);
|
|
614
|
+
return;
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
rd_ts_t next_scheduled =
|
|
618
|
+
err == RD_KAFKA_RESP_ERR_UNKNOWN_SUBSCRIPTION_ID
|
|
619
|
+
? 0
|
|
620
|
+
: rk->rk_telemetry.push_interval_ms * 1000;
|
|
621
|
+
|
|
622
|
+
rk->rk_telemetry.state =
|
|
623
|
+
RD_KAFKA_TELEMETRY_GET_SUBSCRIPTIONS_SCHEDULED;
|
|
624
|
+
rd_kafka_timer_start_oneshot(
|
|
625
|
+
&rk->rk_timers, &rk->rk_telemetry.request_timer, rd_false,
|
|
626
|
+
next_scheduled, rd_kafka_telemetry_fsm_tmr_cb, (void *)rk);
|
|
627
|
+
}
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
/**
|
|
631
|
+
* @brief This method starts the termination for telemetry and awaits
|
|
632
|
+
* completion.
|
|
633
|
+
*
|
|
634
|
+
* @locks none
|
|
635
|
+
* @locks_acquired rk_telemetry.lock
|
|
636
|
+
* @locality app thread (normal case) or the main thread (when terminated
|
|
637
|
+
* during creation).
|
|
638
|
+
*/
|
|
639
|
+
void rd_kafka_telemetry_await_termination(rd_kafka_t *rk) {
|
|
640
|
+
rd_kafka_op_t *rko;
|
|
641
|
+
|
|
642
|
+
/* In the case where we have a termination during creation, we can't
|
|
643
|
+
* send any telemetry. */
|
|
644
|
+
if (thrd_is_current(rk->rk_thread) ||
|
|
645
|
+
!rk->rk_conf.enable_metrics_push) {
|
|
646
|
+
rd_kafka_telemetry_set_terminated(rk);
|
|
647
|
+
return;
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
mtx_lock(&rk->rk_telemetry.lock);
|
|
651
|
+
rko = rd_kafka_op_new(RD_KAFKA_OP_TERMINATE_TELEMETRY);
|
|
652
|
+
rko->rko_rk = rk;
|
|
653
|
+
rd_kafka_q_enq(rk->rk_ops, rko);
|
|
654
|
+
|
|
655
|
+
/* Await termination sequence completion. */
|
|
656
|
+
rd_kafka_dbg(rk, TELEMETRY, "TERM",
|
|
657
|
+
"Awaiting termination of telemetry.");
|
|
658
|
+
cnd_timedwait_ms(&rk->rk_telemetry.termination_cnd,
|
|
659
|
+
&rk->rk_telemetry.lock,
|
|
660
|
+
1000 /* timeout for waiting */);
|
|
661
|
+
mtx_unlock(&rk->rk_telemetry.lock);
|
|
662
|
+
rd_kafka_dbg(rk, TELEMETRY, "TERM",
|
|
663
|
+
"Ended waiting for termination of telemetry.");
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
/**
|
|
667
|
+
* @brief Send a final push request before terminating.
|
|
668
|
+
*
|
|
669
|
+
* @locks none
|
|
670
|
+
* @locks_acquired none
|
|
671
|
+
* @locality main thread
|
|
672
|
+
* @note This method is on a best-effort basis.
|
|
673
|
+
*/
|
|
674
|
+
void rd_kafka_telemetry_schedule_termination(rd_kafka_t *rk) {
|
|
675
|
+
rd_kafka_dbg(
|
|
676
|
+
rk, TELEMETRY, "TERM",
|
|
677
|
+
"Starting rd_kafka_telemetry_schedule_termination in state %s",
|
|
678
|
+
rd_kafka_telemetry_state2str(rk->rk_telemetry.state));
|
|
679
|
+
|
|
680
|
+
if (rk->rk_telemetry.state != RD_KAFKA_TELEMETRY_PUSH_SCHEDULED) {
|
|
681
|
+
rd_kafka_telemetry_set_terminated(rk);
|
|
682
|
+
return;
|
|
683
|
+
}
|
|
684
|
+
|
|
685
|
+
rk->rk_telemetry.state = RD_KAFKA_TELEMETRY_TERMINATING_PUSH_SCHEDULED;
|
|
686
|
+
|
|
687
|
+
rd_kafka_dbg(rk, TELEMETRY, "TERM", "Sending final request for Push");
|
|
688
|
+
rd_kafka_timer_override_once(
|
|
689
|
+
&rk->rk_timers, &rk->rk_telemetry.request_timer, 0 /* immediate */);
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
|
|
693
|
+
/**
|
|
694
|
+
* @brief Sets telemetry broker if we are in AWAIT_BROKER state.
|
|
695
|
+
*
|
|
696
|
+
* @locks none
|
|
697
|
+
* @locks_acquired rk_telemetry.lock
|
|
698
|
+
* @locality main thread
|
|
699
|
+
*/
|
|
700
|
+
void rd_kafka_set_telemetry_broker_maybe(rd_kafka_t *rk,
|
|
701
|
+
rd_kafka_broker_t *rkb) {
|
|
702
|
+
rd_dassert(thrd_is_current(rk->rk_thread));
|
|
703
|
+
|
|
704
|
+
/* The op triggering this method is scheduled by brokers without knowing
|
|
705
|
+
* if a preferred broker is already set. If it is set, this method is a
|
|
706
|
+
* no-op. */
|
|
707
|
+
if (rk->rk_telemetry.state != RD_KAFKA_TELEMETRY_AWAIT_BROKER)
|
|
708
|
+
return;
|
|
709
|
+
|
|
710
|
+
mtx_lock(&rk->rk_telemetry.lock);
|
|
711
|
+
|
|
712
|
+
if (rk->rk_telemetry.preferred_broker) {
|
|
713
|
+
mtx_unlock(&rk->rk_telemetry.lock);
|
|
714
|
+
return;
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
rd_kafka_broker_keep(rkb);
|
|
718
|
+
rk->rk_telemetry.preferred_broker = rkb;
|
|
719
|
+
|
|
720
|
+
mtx_unlock(&rk->rk_telemetry.lock);
|
|
721
|
+
|
|
722
|
+
rd_kafka_dbg(rk, TELEMETRY, "SETBROKER",
|
|
723
|
+
"Setting telemetry broker to %s\n", rkb->rkb_name);
|
|
724
|
+
|
|
725
|
+
rk->rk_telemetry.state = RD_KAFKA_TELEMETRY_GET_SUBSCRIPTIONS_SCHEDULED;
|
|
726
|
+
|
|
727
|
+
rd_kafka_timer_start_oneshot(
|
|
728
|
+
&rk->rk_timers, &rk->rk_telemetry.request_timer, rd_false,
|
|
729
|
+
0 /* immediate */, rd_kafka_telemetry_fsm_tmr_cb, (void *)rk);
|
|
730
|
+
}
|
|
731
|
+
|
|
732
|
+
/**
|
|
733
|
+
* @brief Overlapping prefixes should not match the metrics
|
|
734
|
+
* multiple times.
|
|
735
|
+
*/
|
|
736
|
+
int unit_test_telemetry_match_requested_metrics_no_duplicates(void) {
|
|
737
|
+
rd_kafka_t *rk = rd_kafka_new(RD_KAFKA_PRODUCER, NULL, NULL, 0);
|
|
738
|
+
rk->rk_telemetry.requested_metrics_cnt = 3;
|
|
739
|
+
rk->rk_telemetry.requested_metrics =
|
|
740
|
+
rd_calloc(rk->rk_telemetry.requested_metrics_cnt, sizeof(char *));
|
|
741
|
+
rk->rk_telemetry.requested_metrics[0] = rd_strdup("org");
|
|
742
|
+
rk->rk_telemetry.requested_metrics[1] = rd_strdup("org.apache");
|
|
743
|
+
rk->rk_telemetry.requested_metrics[2] = rd_strdup("org.apache.kafka");
|
|
744
|
+
rd_kafka_match_requested_metrics(rk);
|
|
745
|
+
|
|
746
|
+
RD_UT_ASSERT(rk->rk_telemetry.matched_metrics_cnt ==
|
|
747
|
+
RD_KAFKA_TELEMETRY_PRODUCER_METRIC__CNT,
|
|
748
|
+
"Expected %d matched metrics, got %" PRIusz,
|
|
749
|
+
RD_KAFKA_TELEMETRY_PRODUCER_METRIC__CNT,
|
|
750
|
+
rk->rk_telemetry.matched_metrics_cnt);
|
|
751
|
+
rd_kafka_destroy(rk);
|
|
752
|
+
return 0;
|
|
753
|
+
}
|
|
754
|
+
|
|
755
|
+
|
|
756
|
+
int unittest_telemetry(void) {
|
|
757
|
+
int fails = 0;
|
|
758
|
+
fails += unit_test_telemetry_match_requested_metrics_no_duplicates();
|
|
759
|
+
return fails;
|
|
760
|
+
}
|