@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,1260 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* librdkafka - Apache Kafka C library
|
|
3
|
+
*
|
|
4
|
+
* Copyright (c) 2012-2022, Magnus Edenhill
|
|
5
|
+
* 2023, Confluent Inc.
|
|
6
|
+
* All rights reserved.
|
|
7
|
+
*
|
|
8
|
+
* Redistribution and use in source and binary forms, with or without
|
|
9
|
+
* modification, are permitted provided that the following conditions are met:
|
|
10
|
+
*
|
|
11
|
+
* 1. Redistributions of source code must retain the above copyright notice,
|
|
12
|
+
* this list of conditions and the following disclaimer.
|
|
13
|
+
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
14
|
+
* this list of conditions and the following disclaimer in the documentation
|
|
15
|
+
* and/or other materials provided with the distribution.
|
|
16
|
+
*
|
|
17
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
18
|
+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
19
|
+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
20
|
+
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
21
|
+
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
22
|
+
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
23
|
+
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
24
|
+
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
25
|
+
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
26
|
+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
27
|
+
* POSSIBILITY OF SUCH DAMAGE.
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
#ifndef _RDKAFKA_INT_H_
|
|
31
|
+
#define _RDKAFKA_INT_H_
|
|
32
|
+
|
|
33
|
+
#ifndef _WIN32
|
|
34
|
+
#define _GNU_SOURCE /* for strndup() */
|
|
35
|
+
#endif
|
|
36
|
+
|
|
37
|
+
#ifdef _MSC_VER
|
|
38
|
+
typedef int mode_t;
|
|
39
|
+
#endif
|
|
40
|
+
|
|
41
|
+
#include <fcntl.h>
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
#include "rdsysqueue.h"
|
|
45
|
+
|
|
46
|
+
#include "rdkafka.h"
|
|
47
|
+
#include "rd.h"
|
|
48
|
+
#include "rdlog.h"
|
|
49
|
+
#include "rdtime.h"
|
|
50
|
+
#include "rdaddr.h"
|
|
51
|
+
#include "rdinterval.h"
|
|
52
|
+
#include "rdavg.h"
|
|
53
|
+
#include "rdlist.h"
|
|
54
|
+
|
|
55
|
+
#if WITH_SSL
|
|
56
|
+
#include <openssl/ssl.h>
|
|
57
|
+
#endif
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
#define rd_kafka_assert(rk, cond) \
|
|
62
|
+
do { \
|
|
63
|
+
if (unlikely(!(cond))) \
|
|
64
|
+
rd_kafka_crash(__FILE__, __LINE__, __FUNCTION__, (rk), \
|
|
65
|
+
"assert: " #cond); \
|
|
66
|
+
} while (0)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
void RD_NORETURN rd_kafka_crash(const char *file,
|
|
70
|
+
int line,
|
|
71
|
+
const char *function,
|
|
72
|
+
rd_kafka_t *rk,
|
|
73
|
+
const char *reason);
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
/* Forward declarations */
|
|
77
|
+
struct rd_kafka_s;
|
|
78
|
+
struct rd_kafka_topic_s;
|
|
79
|
+
struct rd_kafka_msg_s;
|
|
80
|
+
struct rd_kafka_broker_s;
|
|
81
|
+
struct rd_kafka_toppar_s;
|
|
82
|
+
typedef struct rd_kafka_metadata_internal_s rd_kafka_metadata_internal_t;
|
|
83
|
+
typedef struct rd_kafka_toppar_s rd_kafka_toppar_t;
|
|
84
|
+
typedef struct rd_kafka_lwtopic_s rd_kafka_lwtopic_t;
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Protocol level sanity
|
|
89
|
+
*/
|
|
90
|
+
#define RD_KAFKAP_BROKERS_MAX 10000
|
|
91
|
+
#define RD_KAFKAP_TOPICS_MAX 1000000
|
|
92
|
+
#define RD_KAFKAP_PARTITIONS_MAX 100000
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
#define RD_KAFKA_OFFSET_IS_LOGICAL(OFF) ((OFF) < 0)
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* @struct Represents a fetch position:
|
|
100
|
+
* an offset and an partition leader epoch (if known, else -1).
|
|
101
|
+
*/
|
|
102
|
+
typedef struct rd_kafka_fetch_pos_s {
|
|
103
|
+
int64_t offset;
|
|
104
|
+
int32_t leader_epoch;
|
|
105
|
+
rd_bool_t validated;
|
|
106
|
+
} rd_kafka_fetch_pos_t;
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
#include "rdkafka_op.h"
|
|
111
|
+
#include "rdkafka_queue.h"
|
|
112
|
+
#include "rdkafka_msg.h"
|
|
113
|
+
#include "rdkafka_proto.h"
|
|
114
|
+
#include "rdkafka_buf.h"
|
|
115
|
+
#include "rdkafka_pattern.h"
|
|
116
|
+
#include "rdkafka_conf.h"
|
|
117
|
+
#include "rdkafka_transport.h"
|
|
118
|
+
#include "rdkafka_timer.h"
|
|
119
|
+
#include "rdkafka_assignor.h"
|
|
120
|
+
#include "rdkafka_metadata.h"
|
|
121
|
+
#include "rdkafka_mock.h"
|
|
122
|
+
#include "rdkafka_partition.h"
|
|
123
|
+
#include "rdkafka_assignment.h"
|
|
124
|
+
#include "rdkafka_coord.h"
|
|
125
|
+
#include "rdkafka_mock.h"
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Protocol level sanity
|
|
129
|
+
*/
|
|
130
|
+
#define RD_KAFKAP_BROKERS_MAX 10000
|
|
131
|
+
#define RD_KAFKAP_TOPICS_MAX 1000000
|
|
132
|
+
#define RD_KAFKAP_PARTITIONS_MAX 100000
|
|
133
|
+
#define RD_KAFKAP_GROUPS_MAX 100000
|
|
134
|
+
#define RD_KAFKAP_CONFIGS_MAX 10000
|
|
135
|
+
#define RD_KAFKAP_ABORTED_TRANSACTIONS_MAX 1000000
|
|
136
|
+
|
|
137
|
+
#define RD_KAFKA_OFFSET_IS_LOGICAL(OFF) ((OFF) < 0)
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* @enum Idempotent Producer state
|
|
143
|
+
*/
|
|
144
|
+
typedef enum {
|
|
145
|
+
RD_KAFKA_IDEMP_STATE_INIT, /**< Initial state */
|
|
146
|
+
RD_KAFKA_IDEMP_STATE_TERM, /**< Instance is terminating */
|
|
147
|
+
RD_KAFKA_IDEMP_STATE_FATAL_ERROR, /**< A fatal error has been raised */
|
|
148
|
+
RD_KAFKA_IDEMP_STATE_REQ_PID, /**< Request new PID */
|
|
149
|
+
RD_KAFKA_IDEMP_STATE_WAIT_TRANSPORT, /**< Waiting for coordinator to
|
|
150
|
+
* become available. */
|
|
151
|
+
RD_KAFKA_IDEMP_STATE_WAIT_PID, /**< PID requested, waiting for reply */
|
|
152
|
+
RD_KAFKA_IDEMP_STATE_ASSIGNED, /**< New PID assigned */
|
|
153
|
+
RD_KAFKA_IDEMP_STATE_DRAIN_RESET, /**< Wait for outstanding
|
|
154
|
+
* ProduceRequests to finish
|
|
155
|
+
* before resetting and
|
|
156
|
+
* re-requesting a new PID. */
|
|
157
|
+
RD_KAFKA_IDEMP_STATE_DRAIN_BUMP, /**< Wait for outstanding
|
|
158
|
+
* ProduceRequests to finish
|
|
159
|
+
* before bumping the current
|
|
160
|
+
* epoch. */
|
|
161
|
+
RD_KAFKA_IDEMP_STATE_WAIT_TXN_ABORT, /**< Wait for transaction abort
|
|
162
|
+
* to finish and trigger a
|
|
163
|
+
* drain and reset or bump. */
|
|
164
|
+
} rd_kafka_idemp_state_t;
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* @returns the idemp_state_t string representation
|
|
168
|
+
*/
|
|
169
|
+
static RD_UNUSED const char *
|
|
170
|
+
rd_kafka_idemp_state2str(rd_kafka_idemp_state_t state) {
|
|
171
|
+
static const char *names[] = {
|
|
172
|
+
"Init", "Terminate", "FatalError", "RequestPID", "WaitTransport",
|
|
173
|
+
"WaitPID", "Assigned", "DrainReset", "DrainBump", "WaitTxnAbort"};
|
|
174
|
+
return names[state];
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* @enum Transactional Producer state
|
|
181
|
+
*/
|
|
182
|
+
typedef enum {
|
|
183
|
+
/**< Initial state */
|
|
184
|
+
RD_KAFKA_TXN_STATE_INIT,
|
|
185
|
+
/**< Awaiting PID to be acquired by rdkafka_idempotence.c */
|
|
186
|
+
RD_KAFKA_TXN_STATE_WAIT_PID,
|
|
187
|
+
/**< PID acquired, but application has not made a successful
|
|
188
|
+
* init_transactions() call. */
|
|
189
|
+
RD_KAFKA_TXN_STATE_READY_NOT_ACKED,
|
|
190
|
+
/**< PID acquired, no active transaction. */
|
|
191
|
+
RD_KAFKA_TXN_STATE_READY,
|
|
192
|
+
/**< begin_transaction() has been called. */
|
|
193
|
+
RD_KAFKA_TXN_STATE_IN_TRANSACTION,
|
|
194
|
+
/**< commit_transaction() has been called. */
|
|
195
|
+
RD_KAFKA_TXN_STATE_BEGIN_COMMIT,
|
|
196
|
+
/**< commit_transaction() has been called and all outstanding
|
|
197
|
+
* messages, partitions, and offsets have been sent. */
|
|
198
|
+
RD_KAFKA_TXN_STATE_COMMITTING_TRANSACTION,
|
|
199
|
+
/**< Transaction successfully committed but application has not made
|
|
200
|
+
* a successful commit_transaction() call yet. */
|
|
201
|
+
RD_KAFKA_TXN_STATE_COMMIT_NOT_ACKED,
|
|
202
|
+
/**< begin_transaction() has been called. */
|
|
203
|
+
RD_KAFKA_TXN_STATE_BEGIN_ABORT,
|
|
204
|
+
/**< abort_transaction() has been called. */
|
|
205
|
+
RD_KAFKA_TXN_STATE_ABORTING_TRANSACTION,
|
|
206
|
+
/**< Transaction successfully aborted but application has not made
|
|
207
|
+
* a successful abort_transaction() call yet. */
|
|
208
|
+
RD_KAFKA_TXN_STATE_ABORT_NOT_ACKED,
|
|
209
|
+
/**< An abortable error has occurred. */
|
|
210
|
+
RD_KAFKA_TXN_STATE_ABORTABLE_ERROR,
|
|
211
|
+
/* A fatal error has occured. */
|
|
212
|
+
RD_KAFKA_TXN_STATE_FATAL_ERROR
|
|
213
|
+
} rd_kafka_txn_state_t;
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* @returns the txn_state_t string representation
|
|
218
|
+
*/
|
|
219
|
+
static RD_UNUSED const char *
|
|
220
|
+
rd_kafka_txn_state2str(rd_kafka_txn_state_t state) {
|
|
221
|
+
static const char *names[] = {"Init",
|
|
222
|
+
"WaitPID",
|
|
223
|
+
"ReadyNotAcked",
|
|
224
|
+
"Ready",
|
|
225
|
+
"InTransaction",
|
|
226
|
+
"BeginCommit",
|
|
227
|
+
"CommittingTransaction",
|
|
228
|
+
"CommitNotAcked",
|
|
229
|
+
"BeginAbort",
|
|
230
|
+
"AbortingTransaction",
|
|
231
|
+
"AbortedNotAcked",
|
|
232
|
+
"AbortableError",
|
|
233
|
+
"FatalError"};
|
|
234
|
+
return names[state];
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* @enum Telemetry States
|
|
239
|
+
*/
|
|
240
|
+
typedef enum {
|
|
241
|
+
/** Initial state, awaiting telemetry broker to be assigned */
|
|
242
|
+
RD_KAFKA_TELEMETRY_AWAIT_BROKER,
|
|
243
|
+
/** Telemetry broker assigned and GetSubscriptions scheduled */
|
|
244
|
+
RD_KAFKA_TELEMETRY_GET_SUBSCRIPTIONS_SCHEDULED,
|
|
245
|
+
/** GetSubscriptions request sent to the assigned broker */
|
|
246
|
+
RD_KAFKA_TELEMETRY_GET_SUBSCRIPTIONS_SENT,
|
|
247
|
+
/** PushTelemetry scheduled to send */
|
|
248
|
+
RD_KAFKA_TELEMETRY_PUSH_SCHEDULED,
|
|
249
|
+
/** PushTelemetry sent to the assigned broker */
|
|
250
|
+
RD_KAFKA_TELEMETRY_PUSH_SENT,
|
|
251
|
+
/** Client is being terminated and last PushTelemetry is scheduled to
|
|
252
|
+
* send */
|
|
253
|
+
RD_KAFKA_TELEMETRY_TERMINATING_PUSH_SCHEDULED,
|
|
254
|
+
/** Client is being terminated and last PushTelemetry is sent */
|
|
255
|
+
RD_KAFKA_TELEMETRY_TERMINATING_PUSH_SENT,
|
|
256
|
+
/** Telemetry is terminated */
|
|
257
|
+
RD_KAFKA_TELEMETRY_TERMINATED,
|
|
258
|
+
} rd_kafka_telemetry_state_t;
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
static RD_UNUSED const char *
|
|
262
|
+
rd_kafka_telemetry_state2str(rd_kafka_telemetry_state_t state) {
|
|
263
|
+
static const char *names[] = {"AwaitBroker",
|
|
264
|
+
"GetSubscriptionsScheduled",
|
|
265
|
+
"GetSubscriptionsSent",
|
|
266
|
+
"PushScheduled",
|
|
267
|
+
"PushSent",
|
|
268
|
+
"TerminatingPushScheduled",
|
|
269
|
+
"TerminatingPushSent",
|
|
270
|
+
"Terminated"};
|
|
271
|
+
return names[state];
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
static RD_UNUSED const char *rd_kafka_type2str(rd_kafka_type_t type) {
|
|
275
|
+
static const char *types[] = {
|
|
276
|
+
[RD_KAFKA_PRODUCER] = "producer",
|
|
277
|
+
[RD_KAFKA_CONSUMER] = "consumer",
|
|
278
|
+
};
|
|
279
|
+
return types[type];
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* Kafka handle, internal representation of the application's rd_kafka_t.
|
|
284
|
+
*/
|
|
285
|
+
|
|
286
|
+
struct rd_kafka_s {
|
|
287
|
+
rd_kafka_q_t *rk_rep; /* kafka -> application reply queue */
|
|
288
|
+
rd_kafka_q_t *rk_ops; /* any -> rdkafka main thread ops */
|
|
289
|
+
|
|
290
|
+
TAILQ_HEAD(, rd_kafka_broker_s) rk_brokers;
|
|
291
|
+
rd_list_t rk_broker_by_id; /* Fast id lookups. */
|
|
292
|
+
rd_atomic32_t rk_broker_cnt;
|
|
293
|
+
/** Logical brokers count.
|
|
294
|
+
* Used for calculating ERR__ALL_BROKERS_DOWN. */
|
|
295
|
+
rd_atomic32_t rk_logical_broker_cnt;
|
|
296
|
+
/** Number of configured or learned brokers in state >= UP */
|
|
297
|
+
rd_atomic32_t rk_broker_up_cnt;
|
|
298
|
+
/** Number of brokers that are down, only includes brokers
|
|
299
|
+
* that have had at least one connection attempt
|
|
300
|
+
* and are configured or learned. */
|
|
301
|
+
rd_atomic32_t rk_broker_down_cnt;
|
|
302
|
+
/** Set to 1 when there's a re-bootstrap in progress.
|
|
303
|
+
* Set to 0 when the re-bootstrap is done.
|
|
304
|
+
* Accessed from the main thread and the broker threads. */
|
|
305
|
+
rd_atomic32_t rk_rebootstrap_in_progress;
|
|
306
|
+
|
|
307
|
+
/**< Additional bootstrap servers list.
|
|
308
|
+
* contains all brokers added through rd_kafka_brokers_add().
|
|
309
|
+
* Doesn't contain the initially configured bootstrap brokers. */
|
|
310
|
+
rd_list_t additional_brokerlists;
|
|
311
|
+
|
|
312
|
+
/** Decommissioned threads to await */
|
|
313
|
+
rd_list_t wait_decommissioned_thrds;
|
|
314
|
+
/** Decommissioned brokers to await */
|
|
315
|
+
rd_list_t wait_decommissioned_brokers;
|
|
316
|
+
|
|
317
|
+
mtx_t rk_internal_rkb_lock;
|
|
318
|
+
rd_kafka_broker_t *rk_internal_rkb;
|
|
319
|
+
|
|
320
|
+
/* Broadcasting of broker state changes to wake up
|
|
321
|
+
* functions waiting for a state change. */
|
|
322
|
+
cnd_t rk_broker_state_change_cnd;
|
|
323
|
+
mtx_t rk_broker_state_change_lock;
|
|
324
|
+
int rk_broker_state_change_version;
|
|
325
|
+
/* List of (rd_kafka_enq_once_t*) objects waiting for broker
|
|
326
|
+
* state changes. Protected by rk_broker_state_change_lock. */
|
|
327
|
+
rd_list_t rk_broker_state_change_waiters; /**< (rd_kafka_enq_once_t*) */
|
|
328
|
+
|
|
329
|
+
TAILQ_HEAD(, rd_kafka_topic_s) rk_topics;
|
|
330
|
+
int rk_topic_cnt;
|
|
331
|
+
|
|
332
|
+
struct rd_kafka_cgrp_s *rk_cgrp;
|
|
333
|
+
|
|
334
|
+
rd_kafka_conf_t rk_conf;
|
|
335
|
+
rd_kafka_q_t *rk_logq; /* Log queue if `log.queue` set */
|
|
336
|
+
char rk_name[128];
|
|
337
|
+
rd_kafkap_str_t *rk_client_id;
|
|
338
|
+
rd_kafkap_str_t *rk_group_id; /* Consumer group id */
|
|
339
|
+
|
|
340
|
+
rd_atomic32_t rk_terminate; /**< Set to RD_KAFKA_DESTROY_F_..
|
|
341
|
+
* flags instance
|
|
342
|
+
* is being destroyed.
|
|
343
|
+
* The value set is the
|
|
344
|
+
* destroy flags from
|
|
345
|
+
* rd_kafka_destroy*() and
|
|
346
|
+
* the two internal flags shown
|
|
347
|
+
* below.
|
|
348
|
+
*
|
|
349
|
+
* Order:
|
|
350
|
+
* 1. user_flags | .._F_DESTROY_CALLED
|
|
351
|
+
* is set in rd_kafka_destroy*().
|
|
352
|
+
* 2. consumer_close() is called
|
|
353
|
+
* for consumers.
|
|
354
|
+
* 3. .._F_TERMINATE is set to
|
|
355
|
+
* signal all background threads
|
|
356
|
+
* to terminate.
|
|
357
|
+
*/
|
|
358
|
+
|
|
359
|
+
#define RD_KAFKA_DESTROY_F_TERMINATE \
|
|
360
|
+
0x1 /**< Internal flag to make sure \
|
|
361
|
+
* rk_terminate is set to non-zero \
|
|
362
|
+
* value even if user passed \
|
|
363
|
+
* no destroy flags. */
|
|
364
|
+
#define RD_KAFKA_DESTROY_F_DESTROY_CALLED \
|
|
365
|
+
0x2 /**< Application has called \
|
|
366
|
+
* ..destroy*() and we've \
|
|
367
|
+
* begun the termination \
|
|
368
|
+
* process. \
|
|
369
|
+
* This flag is needed to avoid \
|
|
370
|
+
* rk_terminate from being \
|
|
371
|
+
* 0 when destroy_flags() \
|
|
372
|
+
* is called with flags=0 \
|
|
373
|
+
* and prior to _F_TERMINATE \
|
|
374
|
+
* has been set. */
|
|
375
|
+
#define RD_KAFKA_DESTROY_F_IMMEDIATE \
|
|
376
|
+
0x4 /**< Immediate non-blocking \
|
|
377
|
+
* destruction without waiting \
|
|
378
|
+
* for all resources \
|
|
379
|
+
* to be cleaned up. \
|
|
380
|
+
* WARNING: Memory and resource \
|
|
381
|
+
* leaks possible. \
|
|
382
|
+
* This flag automatically sets \
|
|
383
|
+
* .._NO_CONSUMER_CLOSE. */
|
|
384
|
+
|
|
385
|
+
|
|
386
|
+
rwlock_t rk_lock;
|
|
387
|
+
rd_kafka_type_t rk_type;
|
|
388
|
+
struct timeval rk_tv_state_change;
|
|
389
|
+
|
|
390
|
+
rd_atomic64_t rk_ts_last_poll; /**< Timestamp of last application
|
|
391
|
+
* consumer_poll() call
|
|
392
|
+
* (or equivalent).
|
|
393
|
+
* Used to enforce
|
|
394
|
+
* max.poll.interval.ms.
|
|
395
|
+
* Set to INT64_MAX while polling
|
|
396
|
+
* to avoid reaching
|
|
397
|
+
* max.poll.interval.ms. during that time
|
|
398
|
+
* frame. Only relevant for consumer. */
|
|
399
|
+
|
|
400
|
+
/* First fatal error. */
|
|
401
|
+
struct {
|
|
402
|
+
rd_atomic32_t err; /**< rd_kafka_resp_err_t */
|
|
403
|
+
char *errstr; /**< Protected by rk_lock */
|
|
404
|
+
int cnt; /**< Number of errors raised, only
|
|
405
|
+
* the first one is stored. */
|
|
406
|
+
} rk_fatal;
|
|
407
|
+
|
|
408
|
+
rd_atomic32_t rk_last_throttle; /* Last throttle_time_ms value
|
|
409
|
+
* from broker. */
|
|
410
|
+
|
|
411
|
+
/* Locks: rd_kafka_*lock() */
|
|
412
|
+
rd_ts_t rk_ts_metadata; /* Timestamp of most recent
|
|
413
|
+
* metadata. */
|
|
414
|
+
|
|
415
|
+
rd_ts_t rk_ts_full_metadata; /* Timestamp of most
|
|
416
|
+
* recent full
|
|
417
|
+
* metadata */
|
|
418
|
+
struct rd_kafka_metadata_cache rk_metadata_cache; /* Metadata cache */
|
|
419
|
+
|
|
420
|
+
char *rk_clusterid; /* ClusterId from metadata */
|
|
421
|
+
int32_t rk_controllerid; /* ControllerId from metadata */
|
|
422
|
+
|
|
423
|
+
/**< Producer: Delivery report mode */
|
|
424
|
+
enum {
|
|
425
|
+
RD_KAFKA_DR_MODE_NONE, /**< No delivery reports */
|
|
426
|
+
RD_KAFKA_DR_MODE_CB, /**< Delivery reports through callback */
|
|
427
|
+
RD_KAFKA_DR_MODE_EVENT, /**< Delivery reports through event
|
|
428
|
+
API*/
|
|
429
|
+
} rk_drmode;
|
|
430
|
+
|
|
431
|
+
/* Simple consumer count:
|
|
432
|
+
* >0: Running in legacy / Simple Consumer mode,
|
|
433
|
+
* 0: No consumers running
|
|
434
|
+
* <0: Running in High level consumer mode */
|
|
435
|
+
rd_atomic32_t rk_simple_cnt;
|
|
436
|
+
|
|
437
|
+
/**
|
|
438
|
+
* Exactly Once Semantics and Idempotent Producer
|
|
439
|
+
*
|
|
440
|
+
* @locks rk_lock
|
|
441
|
+
*/
|
|
442
|
+
struct {
|
|
443
|
+
/*
|
|
444
|
+
* Idempotence
|
|
445
|
+
*/
|
|
446
|
+
rd_kafka_idemp_state_t idemp_state; /**< Idempotent Producer
|
|
447
|
+
* state */
|
|
448
|
+
rd_ts_t ts_idemp_state; /**< Last state change */
|
|
449
|
+
rd_kafka_pid_t pid; /**< Current Producer ID and Epoch */
|
|
450
|
+
int epoch_cnt; /**< Number of times pid/epoch changed */
|
|
451
|
+
rd_atomic32_t inflight_toppar_cnt; /**< Current number of
|
|
452
|
+
* toppars with inflight
|
|
453
|
+
* requests. */
|
|
454
|
+
rd_kafka_timer_t pid_tmr; /**< PID FSM timer */
|
|
455
|
+
|
|
456
|
+
/*
|
|
457
|
+
* Transactions
|
|
458
|
+
*
|
|
459
|
+
* All field access is from the rdkafka main thread,
|
|
460
|
+
* unless a specific lock is mentioned in the doc string.
|
|
461
|
+
*
|
|
462
|
+
*/
|
|
463
|
+
rd_atomic32_t txn_may_enq; /**< Transaction state allows
|
|
464
|
+
* application to enqueue
|
|
465
|
+
* (produce) messages. */
|
|
466
|
+
|
|
467
|
+
rd_kafkap_str_t *transactional_id; /**< transactional.id */
|
|
468
|
+
rd_kafka_txn_state_t txn_state; /**< Transactional state.
|
|
469
|
+
* @locks rk_lock */
|
|
470
|
+
rd_ts_t ts_txn_state; /**< Last state change.
|
|
471
|
+
* @locks rk_lock */
|
|
472
|
+
rd_kafka_broker_t *txn_coord; /**< Transaction coordinator,
|
|
473
|
+
* this is a logical broker.*/
|
|
474
|
+
rd_kafka_broker_t *txn_curr_coord; /**< Current actual coord
|
|
475
|
+
* broker.
|
|
476
|
+
* This is only used to
|
|
477
|
+
* check if the coord
|
|
478
|
+
* changes. */
|
|
479
|
+
rd_kafka_broker_monitor_t txn_coord_mon; /**< Monitor for
|
|
480
|
+
* coordinator to
|
|
481
|
+
* take action when
|
|
482
|
+
* the broker state
|
|
483
|
+
* changes. */
|
|
484
|
+
rd_bool_t txn_requires_epoch_bump; /**< Coordinator epoch bump
|
|
485
|
+
* required to recover from
|
|
486
|
+
* idempotent producer
|
|
487
|
+
* fatal error. */
|
|
488
|
+
|
|
489
|
+
/**< Blocking transactional API application call
|
|
490
|
+
* currently being handled, its state, reply queue and how
|
|
491
|
+
* to handle timeout.
|
|
492
|
+
* Only one transactional API call is allowed at any time.
|
|
493
|
+
* Protected by the rk_lock. */
|
|
494
|
+
struct {
|
|
495
|
+
char name[64]; /**< API name, e.g.,
|
|
496
|
+
* send_offsets_to_transaction.
|
|
497
|
+
* This is used to make sure
|
|
498
|
+
* conflicting APIs are not
|
|
499
|
+
* called simultaneously. */
|
|
500
|
+
rd_bool_t calling; /**< API is being actively called.
|
|
501
|
+
* I.e., application is blocking
|
|
502
|
+
* on a txn API call.
|
|
503
|
+
* This is used to make sure
|
|
504
|
+
* no concurrent API calls are
|
|
505
|
+
* being made. */
|
|
506
|
+
rd_kafka_error_t *error; /**< Last error from background
|
|
507
|
+
* processing. This is only
|
|
508
|
+
* set if the application's
|
|
509
|
+
* API call timed out.
|
|
510
|
+
* It will be returned on
|
|
511
|
+
* the next call. */
|
|
512
|
+
rd_bool_t has_result; /**< Indicates whether an API
|
|
513
|
+
* result (possibly
|
|
514
|
+
* intermediate) has been set.
|
|
515
|
+
*/
|
|
516
|
+
cnd_t cnd; /**< Application thread will
|
|
517
|
+
* block on this cnd waiting
|
|
518
|
+
* for a result to be set. */
|
|
519
|
+
mtx_t lock; /**< Protects all fields of
|
|
520
|
+
* txn_curr_api. */
|
|
521
|
+
} txn_curr_api;
|
|
522
|
+
|
|
523
|
+
|
|
524
|
+
int txn_req_cnt; /**< Number of transaction
|
|
525
|
+
* requests sent.
|
|
526
|
+
* This is incremented when a
|
|
527
|
+
* AddPartitionsToTxn or
|
|
528
|
+
* AddOffsetsToTxn request
|
|
529
|
+
* has been sent for the
|
|
530
|
+
* current transaction,
|
|
531
|
+
* to keep track of
|
|
532
|
+
* whether the broker is
|
|
533
|
+
* aware of the current
|
|
534
|
+
* transaction and thus
|
|
535
|
+
* requires an EndTxn request
|
|
536
|
+
* on abort or not. */
|
|
537
|
+
|
|
538
|
+
/**< Timer to trigger registration of pending partitions */
|
|
539
|
+
rd_kafka_timer_t txn_register_parts_tmr;
|
|
540
|
+
|
|
541
|
+
/**< Lock for txn_pending_rktps and txn_waitresp_rktps */
|
|
542
|
+
mtx_t txn_pending_lock;
|
|
543
|
+
|
|
544
|
+
/**< Partitions pending being added to transaction. */
|
|
545
|
+
rd_kafka_toppar_tqhead_t txn_pending_rktps;
|
|
546
|
+
|
|
547
|
+
/**< Partitions in-flight added to transaction. */
|
|
548
|
+
rd_kafka_toppar_tqhead_t txn_waitresp_rktps;
|
|
549
|
+
|
|
550
|
+
/**< Partitions added and registered to transaction. */
|
|
551
|
+
rd_kafka_toppar_tqhead_t txn_rktps;
|
|
552
|
+
|
|
553
|
+
/**< Number of messages that failed delivery.
|
|
554
|
+
* If this number is >0 on transaction_commit then an
|
|
555
|
+
* abortable transaction error will be raised.
|
|
556
|
+
* Is reset to zero on each begin_transaction(). */
|
|
557
|
+
rd_atomic64_t txn_dr_fails;
|
|
558
|
+
|
|
559
|
+
/**< Current transaction error. */
|
|
560
|
+
rd_kafka_resp_err_t txn_err;
|
|
561
|
+
|
|
562
|
+
/**< Current transaction error string, if any. */
|
|
563
|
+
char *txn_errstr;
|
|
564
|
+
|
|
565
|
+
/**< Last InitProducerIdRequest error. */
|
|
566
|
+
rd_kafka_resp_err_t txn_init_err;
|
|
567
|
+
|
|
568
|
+
/**< Waiting for transaction coordinator query response */
|
|
569
|
+
rd_bool_t txn_wait_coord;
|
|
570
|
+
|
|
571
|
+
/**< Transaction coordinator query timer */
|
|
572
|
+
rd_kafka_timer_t txn_coord_tmr;
|
|
573
|
+
} rk_eos;
|
|
574
|
+
|
|
575
|
+
rd_atomic32_t rk_flushing; /**< Application is calling flush(). */
|
|
576
|
+
|
|
577
|
+
/**
|
|
578
|
+
* Consumer state
|
|
579
|
+
*
|
|
580
|
+
* @locality rdkafka main thread
|
|
581
|
+
* @locks_required none
|
|
582
|
+
*/
|
|
583
|
+
struct {
|
|
584
|
+
/** Application consumer queue for messages, events and errors.
|
|
585
|
+
* (typically points to rkcg_q) */
|
|
586
|
+
rd_kafka_q_t *q;
|
|
587
|
+
/** Current assigned partitions through assign() et.al. */
|
|
588
|
+
rd_kafka_assignment_t assignment;
|
|
589
|
+
/** Waiting for this number of commits to finish. */
|
|
590
|
+
int wait_commit_cnt;
|
|
591
|
+
} rk_consumer;
|
|
592
|
+
|
|
593
|
+
/**<
|
|
594
|
+
* Coordinator cache.
|
|
595
|
+
*
|
|
596
|
+
* @locks none
|
|
597
|
+
* @locality rdkafka main thread
|
|
598
|
+
*/
|
|
599
|
+
rd_kafka_coord_cache_t rk_coord_cache; /**< Coordinator cache */
|
|
600
|
+
|
|
601
|
+
TAILQ_HEAD(, rd_kafka_coord_req_s)
|
|
602
|
+
rk_coord_reqs; /**< Coordinator
|
|
603
|
+
* requests */
|
|
604
|
+
|
|
605
|
+
|
|
606
|
+
struct {
|
|
607
|
+
mtx_t lock; /* Protects acces to this struct */
|
|
608
|
+
cnd_t cnd; /* For waking up blocking injectors */
|
|
609
|
+
unsigned int cnt; /* Current message count */
|
|
610
|
+
size_t size; /* Current message size sum */
|
|
611
|
+
unsigned int max_cnt; /* Max limit */
|
|
612
|
+
size_t max_size; /* Max limit */
|
|
613
|
+
} rk_curr_msgs;
|
|
614
|
+
|
|
615
|
+
rd_kafka_timers_t rk_timers;
|
|
616
|
+
|
|
617
|
+
/** Metadata refresh timer */
|
|
618
|
+
rd_kafka_timer_t metadata_refresh_tmr;
|
|
619
|
+
/** 1s interval timer */
|
|
620
|
+
rd_kafka_timer_t one_s_tmr;
|
|
621
|
+
/** Rebootstrap timer.
|
|
622
|
+
* Will add bootstrap brokers again
|
|
623
|
+
* when it's fired. */
|
|
624
|
+
rd_kafka_timer_t rebootstrap_tmr;
|
|
625
|
+
|
|
626
|
+
thrd_t rk_thread;
|
|
627
|
+
|
|
628
|
+
int rk_initialized; /**< Will be > 0 when the rd_kafka_t
|
|
629
|
+
* instance has been fully initialized. */
|
|
630
|
+
|
|
631
|
+
int rk_init_wait_cnt; /**< Number of background threads that
|
|
632
|
+
* need to finish initialization. */
|
|
633
|
+
cnd_t rk_init_cnd; /**< Cond-var used to wait for main thread
|
|
634
|
+
* to finish its initialization before
|
|
635
|
+
* before rd_kafka_new() returns. */
|
|
636
|
+
mtx_t rk_init_lock; /**< Lock for rk_init_wait and _cmd */
|
|
637
|
+
|
|
638
|
+
rd_ts_t rk_ts_created; /**< Timestamp (monotonic clock) of
|
|
639
|
+
* rd_kafka_t creation. */
|
|
640
|
+
|
|
641
|
+
/**
|
|
642
|
+
* Background thread and queue,
|
|
643
|
+
* enabled by setting `background_event_cb()`.
|
|
644
|
+
*/
|
|
645
|
+
struct {
|
|
646
|
+
rd_kafka_q_t *q; /**< Queue served by background thread. */
|
|
647
|
+
thrd_t thread; /**< Background thread. */
|
|
648
|
+
int calling; /**< Indicates whether the event callback
|
|
649
|
+
* is being called, reset back to 0
|
|
650
|
+
* when the callback returns.
|
|
651
|
+
* This can be used for troubleshooting
|
|
652
|
+
* purposes. */
|
|
653
|
+
} rk_background;
|
|
654
|
+
|
|
655
|
+
|
|
656
|
+
/*
|
|
657
|
+
* Logs, events or actions to rate limit / suppress
|
|
658
|
+
*/
|
|
659
|
+
struct {
|
|
660
|
+
/**< Log: No brokers support Idempotent Producer */
|
|
661
|
+
rd_interval_t no_idemp_brokers;
|
|
662
|
+
|
|
663
|
+
/**< Sparse connections: randomly select broker
|
|
664
|
+
* to bring up. This interval should allow
|
|
665
|
+
* for a previous connection to be established,
|
|
666
|
+
* which varies between different environments:
|
|
667
|
+
* Use 10 < reconnect.backoff.jitter.ms / 2 < 1000.
|
|
668
|
+
*/
|
|
669
|
+
rd_interval_t sparse_connect_random;
|
|
670
|
+
|
|
671
|
+
/** Sparse connection timer: fires after remaining time of
|
|
672
|
+
* `sparse_connect_random` interval + 1ms.
|
|
673
|
+
*/
|
|
674
|
+
rd_kafka_timer_t sparse_connect_random_tmr;
|
|
675
|
+
|
|
676
|
+
/**< Lock for sparse_connect_random */
|
|
677
|
+
mtx_t sparse_connect_lock;
|
|
678
|
+
|
|
679
|
+
/**< Broker metadata refresh interval:
|
|
680
|
+
* this is rate-limiting the number of topic-less
|
|
681
|
+
* broker/cluster metadata refreshes when there are no
|
|
682
|
+
* topics to refresh.
|
|
683
|
+
* Will be refreshed every topic.metadata.refresh.interval.ms
|
|
684
|
+
* but no more often than every 10s.
|
|
685
|
+
* No locks: only accessed by rdkafka main thread. */
|
|
686
|
+
rd_interval_t broker_metadata_refresh;
|
|
687
|
+
|
|
688
|
+
/**< Suppression for allow.auto.create.topics=false not being
|
|
689
|
+
* supported by the broker. */
|
|
690
|
+
rd_interval_t allow_auto_create_topics;
|
|
691
|
+
} rk_suppress;
|
|
692
|
+
|
|
693
|
+
struct {
|
|
694
|
+
void *handle; /**< Provider-specific handle struct pointer.
|
|
695
|
+
* Typically assigned in provider's .init() */
|
|
696
|
+
rd_kafka_q_t *callback_q; /**< SASL callback queue, if any. */
|
|
697
|
+
} rk_sasl;
|
|
698
|
+
|
|
699
|
+
struct {
|
|
700
|
+
/* Fields for the control flow - unless guarded by lock, only
|
|
701
|
+
* accessed from main thread. */
|
|
702
|
+
/**< Current state of the telemetry state machine. */
|
|
703
|
+
rd_kafka_telemetry_state_t state;
|
|
704
|
+
/**< Preferred broker for sending telemetry (Lock protected). */
|
|
705
|
+
rd_kafka_broker_t *preferred_broker;
|
|
706
|
+
/**< Timer for all the requests we schedule. */
|
|
707
|
+
rd_kafka_timer_t request_timer;
|
|
708
|
+
/**< Lock for preferred telemetry broker and state. */
|
|
709
|
+
mtx_t lock;
|
|
710
|
+
/**< Used to wait for termination (Lock protected). */
|
|
711
|
+
cnd_t termination_cnd;
|
|
712
|
+
|
|
713
|
+
/* Fields obtained from broker as a result of GetSubscriptions -
|
|
714
|
+
* only accessed from main thread.
|
|
715
|
+
*/
|
|
716
|
+
rd_kafka_Uuid_t client_instance_id;
|
|
717
|
+
int32_t subscription_id;
|
|
718
|
+
rd_kafka_compression_t *accepted_compression_types;
|
|
719
|
+
size_t accepted_compression_types_cnt;
|
|
720
|
+
int32_t push_interval_ms;
|
|
721
|
+
int32_t telemetry_max_bytes;
|
|
722
|
+
rd_bool_t delta_temporality;
|
|
723
|
+
char **requested_metrics;
|
|
724
|
+
size_t requested_metrics_cnt;
|
|
725
|
+
/* TODO: Use rd_list_t to store the metrics */
|
|
726
|
+
int *matched_metrics;
|
|
727
|
+
size_t matched_metrics_cnt;
|
|
728
|
+
|
|
729
|
+
struct {
|
|
730
|
+
rd_ts_t ts_last; /**< Timestamp of last push */
|
|
731
|
+
rd_ts_t ts_start; /**< Timestamp from when collection
|
|
732
|
+
* started */
|
|
733
|
+
/** Total rebalance latency (ms) up to previous push */
|
|
734
|
+
uint64_t rebalance_latency_total;
|
|
735
|
+
} rk_historic_c;
|
|
736
|
+
|
|
737
|
+
struct {
|
|
738
|
+
rd_avg_t rk_avg_poll_idle_ratio;
|
|
739
|
+
rd_avg_t rk_avg_commit_latency; /**< Current commit
|
|
740
|
+
* latency avg */
|
|
741
|
+
rd_avg_t
|
|
742
|
+
rk_avg_rebalance_latency; /**< Current rebalance
|
|
743
|
+
* latency avg */
|
|
744
|
+
} rd_avg_current;
|
|
745
|
+
|
|
746
|
+
struct {
|
|
747
|
+
rd_avg_t rk_avg_poll_idle_ratio;
|
|
748
|
+
rd_avg_t rk_avg_commit_latency; /**< Rolled over commit
|
|
749
|
+
* latency avg */
|
|
750
|
+
rd_avg_t
|
|
751
|
+
rk_avg_rebalance_latency; /**< Rolled over rebalance
|
|
752
|
+
* latency avg */
|
|
753
|
+
} rd_avg_rollover;
|
|
754
|
+
|
|
755
|
+
} rk_telemetry;
|
|
756
|
+
|
|
757
|
+
/* Test mocks */
|
|
758
|
+
struct {
|
|
759
|
+
rd_kafka_mock_cluster_t *cluster; /**< Mock cluster, created
|
|
760
|
+
* by test.mock.num.brokers
|
|
761
|
+
*/
|
|
762
|
+
rd_atomic32_t cluster_cnt; /**< Total number of mock
|
|
763
|
+
* clusters, created either
|
|
764
|
+
* through
|
|
765
|
+
* test.mock.num.brokers
|
|
766
|
+
* or mock_cluster_new().
|
|
767
|
+
*/
|
|
768
|
+
|
|
769
|
+
} rk_mock;
|
|
770
|
+
};
|
|
771
|
+
|
|
772
|
+
#define rd_kafka_wrlock(rk) rwlock_wrlock(&(rk)->rk_lock)
|
|
773
|
+
#define rd_kafka_rdlock(rk) rwlock_rdlock(&(rk)->rk_lock)
|
|
774
|
+
#define rd_kafka_rdunlock(rk) rwlock_rdunlock(&(rk)->rk_lock)
|
|
775
|
+
#define rd_kafka_wrunlock(rk) rwlock_wrunlock(&(rk)->rk_lock)
|
|
776
|
+
|
|
777
|
+
|
|
778
|
+
/**
|
|
779
|
+
* @brief Add \p cnt messages and of total size \p size bytes to the
|
|
780
|
+
* internal bookkeeping of current message counts.
|
|
781
|
+
* If the total message count or size after add would exceed the
|
|
782
|
+
* configured limits \c queue.buffering.max.messages and
|
|
783
|
+
* \c queue.buffering.max.kbytes then depending on the value of
|
|
784
|
+
* \p block the function either blocks until enough space is available
|
|
785
|
+
* if \p block is 1, else immediately returns
|
|
786
|
+
* RD_KAFKA_RESP_ERR__QUEUE_FULL.
|
|
787
|
+
*
|
|
788
|
+
* @param rdmtx If non-null and \p block is set and blocking is to ensue,
|
|
789
|
+
* then unlock this mutex for the duration of the blocking
|
|
790
|
+
* and then reacquire with a read-lock.
|
|
791
|
+
*/
|
|
792
|
+
static RD_INLINE RD_UNUSED rd_kafka_resp_err_t
|
|
793
|
+
rd_kafka_curr_msgs_add(rd_kafka_t *rk,
|
|
794
|
+
unsigned int cnt,
|
|
795
|
+
size_t size,
|
|
796
|
+
int block,
|
|
797
|
+
rwlock_t *rdlock) {
|
|
798
|
+
|
|
799
|
+
if (rk->rk_type != RD_KAFKA_PRODUCER)
|
|
800
|
+
return RD_KAFKA_RESP_ERR_NO_ERROR;
|
|
801
|
+
|
|
802
|
+
mtx_lock(&rk->rk_curr_msgs.lock);
|
|
803
|
+
while (
|
|
804
|
+
unlikely((rk->rk_curr_msgs.max_cnt > 0 &&
|
|
805
|
+
rk->rk_curr_msgs.cnt + cnt > rk->rk_curr_msgs.max_cnt) ||
|
|
806
|
+
(unsigned long long)(rk->rk_curr_msgs.size + size) >
|
|
807
|
+
(unsigned long long)rk->rk_curr_msgs.max_size)) {
|
|
808
|
+
if (!block) {
|
|
809
|
+
mtx_unlock(&rk->rk_curr_msgs.lock);
|
|
810
|
+
return RD_KAFKA_RESP_ERR__QUEUE_FULL;
|
|
811
|
+
}
|
|
812
|
+
|
|
813
|
+
if (rdlock)
|
|
814
|
+
rwlock_rdunlock(rdlock);
|
|
815
|
+
|
|
816
|
+
cnd_wait(&rk->rk_curr_msgs.cnd, &rk->rk_curr_msgs.lock);
|
|
817
|
+
|
|
818
|
+
if (rdlock)
|
|
819
|
+
rwlock_rdlock(rdlock);
|
|
820
|
+
}
|
|
821
|
+
|
|
822
|
+
rk->rk_curr_msgs.cnt += cnt;
|
|
823
|
+
rk->rk_curr_msgs.size += size;
|
|
824
|
+
mtx_unlock(&rk->rk_curr_msgs.lock);
|
|
825
|
+
|
|
826
|
+
return RD_KAFKA_RESP_ERR_NO_ERROR;
|
|
827
|
+
}
|
|
828
|
+
|
|
829
|
+
|
|
830
|
+
/**
|
|
831
|
+
* @brief Subtract \p cnt messages of total size \p size from the
|
|
832
|
+
* current bookkeeping and broadcast a wakeup on the condvar
|
|
833
|
+
* for any waiting & blocking threads.
|
|
834
|
+
*/
|
|
835
|
+
static RD_INLINE RD_UNUSED void
|
|
836
|
+
rd_kafka_curr_msgs_sub(rd_kafka_t *rk, unsigned int cnt, size_t size) {
|
|
837
|
+
int broadcast = 0;
|
|
838
|
+
|
|
839
|
+
if (rk->rk_type != RD_KAFKA_PRODUCER)
|
|
840
|
+
return;
|
|
841
|
+
|
|
842
|
+
mtx_lock(&rk->rk_curr_msgs.lock);
|
|
843
|
+
rd_kafka_assert(NULL, rk->rk_curr_msgs.cnt >= cnt &&
|
|
844
|
+
rk->rk_curr_msgs.size >= size);
|
|
845
|
+
|
|
846
|
+
/* If the subtraction would pass one of the thresholds
|
|
847
|
+
* broadcast a wake-up to any waiting listeners. */
|
|
848
|
+
if ((rk->rk_curr_msgs.cnt - cnt == 0) ||
|
|
849
|
+
(rk->rk_curr_msgs.cnt >= rk->rk_curr_msgs.max_cnt &&
|
|
850
|
+
rk->rk_curr_msgs.cnt - cnt < rk->rk_curr_msgs.max_cnt) ||
|
|
851
|
+
(rk->rk_curr_msgs.size >= rk->rk_curr_msgs.max_size &&
|
|
852
|
+
rk->rk_curr_msgs.size - size < rk->rk_curr_msgs.max_size))
|
|
853
|
+
broadcast = 1;
|
|
854
|
+
|
|
855
|
+
rk->rk_curr_msgs.cnt -= cnt;
|
|
856
|
+
rk->rk_curr_msgs.size -= size;
|
|
857
|
+
|
|
858
|
+
if (unlikely(broadcast))
|
|
859
|
+
cnd_broadcast(&rk->rk_curr_msgs.cnd);
|
|
860
|
+
|
|
861
|
+
mtx_unlock(&rk->rk_curr_msgs.lock);
|
|
862
|
+
}
|
|
863
|
+
|
|
864
|
+
static RD_INLINE RD_UNUSED void
|
|
865
|
+
rd_kafka_curr_msgs_get(rd_kafka_t *rk, unsigned int *cntp, size_t *sizep) {
|
|
866
|
+
if (rk->rk_type != RD_KAFKA_PRODUCER) {
|
|
867
|
+
*cntp = 0;
|
|
868
|
+
*sizep = 0;
|
|
869
|
+
return;
|
|
870
|
+
}
|
|
871
|
+
|
|
872
|
+
mtx_lock(&rk->rk_curr_msgs.lock);
|
|
873
|
+
*cntp = rk->rk_curr_msgs.cnt;
|
|
874
|
+
*sizep = rk->rk_curr_msgs.size;
|
|
875
|
+
mtx_unlock(&rk->rk_curr_msgs.lock);
|
|
876
|
+
}
|
|
877
|
+
|
|
878
|
+
static RD_INLINE RD_UNUSED int rd_kafka_curr_msgs_cnt(rd_kafka_t *rk) {
|
|
879
|
+
int cnt;
|
|
880
|
+
if (rk->rk_type != RD_KAFKA_PRODUCER)
|
|
881
|
+
return 0;
|
|
882
|
+
|
|
883
|
+
mtx_lock(&rk->rk_curr_msgs.lock);
|
|
884
|
+
cnt = rk->rk_curr_msgs.cnt;
|
|
885
|
+
mtx_unlock(&rk->rk_curr_msgs.lock);
|
|
886
|
+
|
|
887
|
+
return cnt;
|
|
888
|
+
}
|
|
889
|
+
|
|
890
|
+
/**
|
|
891
|
+
* @brief Wait until \p tspec for curr_msgs to reach 0.
|
|
892
|
+
*
|
|
893
|
+
* @returns rd_true if zero is reached, or rd_false on timeout.
|
|
894
|
+
* The remaining messages are returned in \p *curr_msgsp
|
|
895
|
+
*/
|
|
896
|
+
static RD_INLINE RD_UNUSED rd_bool_t
|
|
897
|
+
rd_kafka_curr_msgs_wait_zero(rd_kafka_t *rk,
|
|
898
|
+
int timeout_ms,
|
|
899
|
+
unsigned int *curr_msgsp) {
|
|
900
|
+
unsigned int cnt;
|
|
901
|
+
rd_ts_t abs_timeout = rd_timeout_init(timeout_ms);
|
|
902
|
+
|
|
903
|
+
mtx_lock(&rk->rk_curr_msgs.lock);
|
|
904
|
+
while ((cnt = rk->rk_curr_msgs.cnt) > 0) {
|
|
905
|
+
if (cnd_timedwait_abs(&rk->rk_curr_msgs.cnd,
|
|
906
|
+
&rk->rk_curr_msgs.lock,
|
|
907
|
+
abs_timeout) == thrd_timedout)
|
|
908
|
+
break;
|
|
909
|
+
}
|
|
910
|
+
mtx_unlock(&rk->rk_curr_msgs.lock);
|
|
911
|
+
|
|
912
|
+
*curr_msgsp = cnt;
|
|
913
|
+
return cnt == 0;
|
|
914
|
+
}
|
|
915
|
+
|
|
916
|
+
void rd_kafka_decommissioned_broker_thread_join(rd_kafka_t *rk,
|
|
917
|
+
void *rkb_decommissioned);
|
|
918
|
+
|
|
919
|
+
void rd_kafka_destroy_final(rd_kafka_t *rk);
|
|
920
|
+
|
|
921
|
+
void rd_kafka_global_init(void);
|
|
922
|
+
|
|
923
|
+
/**
|
|
924
|
+
* @returns true if \p rk handle is terminating.
|
|
925
|
+
*
|
|
926
|
+
* @remark If consumer_close() is called from destroy*() it will be
|
|
927
|
+
* called prior to _F_TERMINATE being set and will thus not
|
|
928
|
+
* be able to use rd_kafka_terminating() to know it is shutting down.
|
|
929
|
+
* That code should instead just check that rk_terminate is non-zero
|
|
930
|
+
* (the _F_DESTROY_CALLED flag will be set).
|
|
931
|
+
*/
|
|
932
|
+
#define rd_kafka_terminating(rk) \
|
|
933
|
+
(rd_atomic32_get(&(rk)->rk_terminate) & RD_KAFKA_DESTROY_F_TERMINATE)
|
|
934
|
+
|
|
935
|
+
/**
|
|
936
|
+
* @returns the destroy flags set matching \p flags, which might be
|
|
937
|
+
* a subset of the flags.
|
|
938
|
+
*/
|
|
939
|
+
#define rd_kafka_destroy_flags_check(rk, flags) \
|
|
940
|
+
(rd_atomic32_get(&(rk)->rk_terminate) & (flags))
|
|
941
|
+
|
|
942
|
+
/**
|
|
943
|
+
* @returns true if no consumer callbacks, or standard consumer_close
|
|
944
|
+
* behaviour, should be triggered. */
|
|
945
|
+
#define rd_kafka_destroy_flags_no_consumer_close(rk) \
|
|
946
|
+
rd_kafka_destroy_flags_check(rk, RD_KAFKA_DESTROY_F_NO_CONSUMER_CLOSE)
|
|
947
|
+
|
|
948
|
+
#define rd_kafka_is_simple_consumer(rk) \
|
|
949
|
+
(rd_atomic32_get(&(rk)->rk_simple_cnt) > 0)
|
|
950
|
+
int rd_kafka_simple_consumer_add(rd_kafka_t *rk);
|
|
951
|
+
|
|
952
|
+
|
|
953
|
+
/**
|
|
954
|
+
* @returns true if idempotency is enabled (producer only).
|
|
955
|
+
*/
|
|
956
|
+
#define rd_kafka_is_idempotent(rk) ((rk)->rk_conf.eos.idempotence)
|
|
957
|
+
|
|
958
|
+
/**
|
|
959
|
+
* @returns true if the producer is transactional (producer only).
|
|
960
|
+
*/
|
|
961
|
+
#define rd_kafka_is_transactional(rk) \
|
|
962
|
+
((rk)->rk_conf.eos.transactional_id != NULL)
|
|
963
|
+
|
|
964
|
+
|
|
965
|
+
#define RD_KAFKA_PURGE_F_ABORT_TXN \
|
|
966
|
+
0x100 /**< Internal flag used when \
|
|
967
|
+
* aborting transaction */
|
|
968
|
+
#define RD_KAFKA_PURGE_F_MASK 0x107
|
|
969
|
+
const char *rd_kafka_purge_flags2str(int flags);
|
|
970
|
+
|
|
971
|
+
|
|
972
|
+
#include "rdkafka_topic.h"
|
|
973
|
+
#include "rdkafka_partition.h"
|
|
974
|
+
|
|
975
|
+
|
|
976
|
+
|
|
977
|
+
/**
|
|
978
|
+
* Debug contexts
|
|
979
|
+
*/
|
|
980
|
+
#define RD_KAFKA_DBG_GENERIC 0x1
|
|
981
|
+
#define RD_KAFKA_DBG_BROKER 0x2
|
|
982
|
+
#define RD_KAFKA_DBG_TOPIC 0x4
|
|
983
|
+
#define RD_KAFKA_DBG_METADATA 0x8
|
|
984
|
+
#define RD_KAFKA_DBG_FEATURE 0x10
|
|
985
|
+
#define RD_KAFKA_DBG_QUEUE 0x20
|
|
986
|
+
#define RD_KAFKA_DBG_MSG 0x40
|
|
987
|
+
#define RD_KAFKA_DBG_PROTOCOL 0x80
|
|
988
|
+
#define RD_KAFKA_DBG_CGRP 0x100
|
|
989
|
+
#define RD_KAFKA_DBG_SECURITY 0x200
|
|
990
|
+
#define RD_KAFKA_DBG_FETCH 0x400
|
|
991
|
+
#define RD_KAFKA_DBG_INTERCEPTOR 0x800
|
|
992
|
+
#define RD_KAFKA_DBG_PLUGIN 0x1000
|
|
993
|
+
#define RD_KAFKA_DBG_CONSUMER 0x2000
|
|
994
|
+
#define RD_KAFKA_DBG_ADMIN 0x4000
|
|
995
|
+
#define RD_KAFKA_DBG_EOS 0x8000
|
|
996
|
+
#define RD_KAFKA_DBG_MOCK 0x10000
|
|
997
|
+
#define RD_KAFKA_DBG_ASSIGNOR 0x20000
|
|
998
|
+
#define RD_KAFKA_DBG_CONF 0x40000
|
|
999
|
+
#define RD_KAFKA_DBG_TELEMETRY 0x80000
|
|
1000
|
+
#define RD_KAFKA_DBG_ALL 0xfffff
|
|
1001
|
+
#define RD_KAFKA_DBG_NONE 0x0
|
|
1002
|
+
|
|
1003
|
+
/* Jitter Percent for exponential retry backoff */
|
|
1004
|
+
#define RD_KAFKA_RETRY_JITTER_PERCENT 20
|
|
1005
|
+
|
|
1006
|
+
void rd_kafka_log0(const rd_kafka_conf_t *conf,
|
|
1007
|
+
const rd_kafka_t *rk,
|
|
1008
|
+
const char *extra,
|
|
1009
|
+
int level,
|
|
1010
|
+
int ctx,
|
|
1011
|
+
const char *fac,
|
|
1012
|
+
const char *fmt,
|
|
1013
|
+
...) RD_FORMAT(printf, 7, 8);
|
|
1014
|
+
|
|
1015
|
+
#define rd_kafka_log(rk, level, fac, ...) \
|
|
1016
|
+
rd_kafka_log0(&rk->rk_conf, rk, NULL, level, RD_KAFKA_DBG_NONE, fac, \
|
|
1017
|
+
__VA_ARGS__)
|
|
1018
|
+
|
|
1019
|
+
#define rd_kafka_conf_is_dbg(conf, ctx) \
|
|
1020
|
+
unlikely((conf).debug &(RD_KAFKA_DBG_##ctx))
|
|
1021
|
+
|
|
1022
|
+
#define rd_kafka_is_dbg(rk, ctx) (rd_kafka_conf_is_dbg(rk->rk_conf, ctx))
|
|
1023
|
+
|
|
1024
|
+
#define rd_kafka_dbg(rk, ctx, fac, ...) \
|
|
1025
|
+
do { \
|
|
1026
|
+
if (rd_kafka_is_dbg(rk, ctx)) \
|
|
1027
|
+
rd_kafka_log0(&rk->rk_conf, rk, NULL, LOG_DEBUG, \
|
|
1028
|
+
(RD_KAFKA_DBG_##ctx), fac, __VA_ARGS__); \
|
|
1029
|
+
} while (0)
|
|
1030
|
+
|
|
1031
|
+
/* dbg() not requiring an rk, just the conf object, for early logging */
|
|
1032
|
+
#define rd_kafka_dbg0(conf, ctx, fac, ...) \
|
|
1033
|
+
do { \
|
|
1034
|
+
if (rd_kafka_conf_is_dbg(*conf, ctx)) \
|
|
1035
|
+
rd_kafka_log0(conf, NULL, NULL, LOG_DEBUG, \
|
|
1036
|
+
(RD_KAFKA_DBG_##ctx), fac, __VA_ARGS__); \
|
|
1037
|
+
} while (0)
|
|
1038
|
+
|
|
1039
|
+
/* NOTE: The local copy of _logname is needed due rkb_logname_lock lock-ordering
|
|
1040
|
+
* when logging another broker's name in the message. */
|
|
1041
|
+
#define rd_rkb_log0(rkb, level, ctx, fac, ...) \
|
|
1042
|
+
do { \
|
|
1043
|
+
char _logname[RD_KAFKA_NODENAME_SIZE]; \
|
|
1044
|
+
mtx_lock(&(rkb)->rkb_logname_lock); \
|
|
1045
|
+
rd_strlcpy(_logname, rkb->rkb_logname, sizeof(_logname)); \
|
|
1046
|
+
mtx_unlock(&(rkb)->rkb_logname_lock); \
|
|
1047
|
+
rd_kafka_log0(&(rkb)->rkb_rk->rk_conf, (rkb)->rkb_rk, \
|
|
1048
|
+
_logname, level, ctx, fac, __VA_ARGS__); \
|
|
1049
|
+
} while (0)
|
|
1050
|
+
|
|
1051
|
+
#define rd_rkb_log(rkb, level, fac, ...) \
|
|
1052
|
+
rd_rkb_log0(rkb, level, RD_KAFKA_DBG_NONE, fac, __VA_ARGS__)
|
|
1053
|
+
|
|
1054
|
+
#define rd_rkb_is_dbg(rkb, ctx) rd_kafka_is_dbg((rkb)->rkb_rk, ctx)
|
|
1055
|
+
|
|
1056
|
+
#define rd_rkb_dbg(rkb, ctx, fac, ...) \
|
|
1057
|
+
do { \
|
|
1058
|
+
if (rd_rkb_is_dbg(rkb, ctx)) { \
|
|
1059
|
+
rd_rkb_log0(rkb, LOG_DEBUG, (RD_KAFKA_DBG_##ctx), fac, \
|
|
1060
|
+
__VA_ARGS__); \
|
|
1061
|
+
} \
|
|
1062
|
+
} while (0)
|
|
1063
|
+
|
|
1064
|
+
|
|
1065
|
+
|
|
1066
|
+
extern rd_kafka_resp_err_t RD_TLS rd_kafka_last_error_code;
|
|
1067
|
+
|
|
1068
|
+
static RD_UNUSED RD_INLINE rd_kafka_resp_err_t
|
|
1069
|
+
rd_kafka_set_last_error(rd_kafka_resp_err_t err, int errnox) {
|
|
1070
|
+
if (errnox) {
|
|
1071
|
+
/* MSVC:
|
|
1072
|
+
* This is the correct way to set errno on Windows,
|
|
1073
|
+
* but it is still pointless due to different errnos in
|
|
1074
|
+
* in different runtimes:
|
|
1075
|
+
* https://social.msdn.microsoft.com/Forums/vstudio/en-US/b4500c0d-1b69-40c7-9ef5-08da1025b5bf/setting-errno-from-within-a-dll?forum=vclanguage/
|
|
1076
|
+
* errno is thus highly deprecated, and buggy, on Windows
|
|
1077
|
+
* when using librdkafka as a dynamically loaded DLL. */
|
|
1078
|
+
rd_set_errno(errnox);
|
|
1079
|
+
}
|
|
1080
|
+
rd_kafka_last_error_code = err;
|
|
1081
|
+
return err;
|
|
1082
|
+
}
|
|
1083
|
+
|
|
1084
|
+
|
|
1085
|
+
int rd_kafka_set_fatal_error0(rd_kafka_t *rk,
|
|
1086
|
+
rd_dolock_t do_lock,
|
|
1087
|
+
rd_kafka_resp_err_t err,
|
|
1088
|
+
const char *fmt,
|
|
1089
|
+
...) RD_FORMAT(printf, 4, 5);
|
|
1090
|
+
#define rd_kafka_set_fatal_error(rk, err, fmt, ...) \
|
|
1091
|
+
rd_kafka_set_fatal_error0(rk, RD_DO_LOCK, err, fmt, __VA_ARGS__)
|
|
1092
|
+
|
|
1093
|
+
rd_kafka_error_t *rd_kafka_get_fatal_error(rd_kafka_t *rk);
|
|
1094
|
+
|
|
1095
|
+
#define rd_kafka_producer_can_have_fatal_errors(rk) \
|
|
1096
|
+
(rk->rk_type == RD_KAFKA_PRODUCER && rk->rk_conf.eos.idempotence)
|
|
1097
|
+
|
|
1098
|
+
#define rd_kafka_consumer_can_have_fatal_errors(rk) \
|
|
1099
|
+
(rk->rk_type == RD_KAFKA_CONSUMER && \
|
|
1100
|
+
(rk->rk_conf.group_instance_id || \
|
|
1101
|
+
rk->rk_conf.group_protocol == RD_KAFKA_GROUP_PROTOCOL_CONSUMER))
|
|
1102
|
+
|
|
1103
|
+
static RD_INLINE RD_UNUSED rd_kafka_resp_err_t
|
|
1104
|
+
rd_kafka_fatal_error_code(rd_kafka_t *rk) {
|
|
1105
|
+
/* This is an optimization to avoid an atomic read which are costly
|
|
1106
|
+
* on some platforms:
|
|
1107
|
+
* Fatal errors are currently raised by:
|
|
1108
|
+
* 1) the idempotent producer
|
|
1109
|
+
* 2) static consumers (group.instance.id)
|
|
1110
|
+
* 3) Group using consumer protocol (Introduced in KIP-848). See exact
|
|
1111
|
+
* errors in rd_kafka_cgrp_handle_ConsumerGroupHeartbeat() */
|
|
1112
|
+
if (rd_kafka_producer_can_have_fatal_errors(rk) ||
|
|
1113
|
+
rd_kafka_consumer_can_have_fatal_errors(rk))
|
|
1114
|
+
return rd_atomic32_get(&rk->rk_fatal.err);
|
|
1115
|
+
|
|
1116
|
+
return RD_KAFKA_RESP_ERR_NO_ERROR;
|
|
1117
|
+
}
|
|
1118
|
+
|
|
1119
|
+
|
|
1120
|
+
extern rd_atomic32_t rd_kafka_thread_cnt_curr;
|
|
1121
|
+
extern char RD_TLS rd_kafka_thread_name[64];
|
|
1122
|
+
|
|
1123
|
+
void rd_kafka_set_thread_name(const char *fmt, ...) RD_FORMAT(printf, 1, 2);
|
|
1124
|
+
void rd_kafka_set_thread_sysname(const char *fmt, ...) RD_FORMAT(printf, 1, 2);
|
|
1125
|
+
|
|
1126
|
+
int rd_kafka_path_is_dir(const char *path);
|
|
1127
|
+
rd_bool_t rd_kafka_dir_is_empty(const char *path);
|
|
1128
|
+
|
|
1129
|
+
rd_kafka_op_res_t rd_kafka_poll_cb(rd_kafka_t *rk,
|
|
1130
|
+
rd_kafka_q_t *rkq,
|
|
1131
|
+
rd_kafka_op_t *rko,
|
|
1132
|
+
rd_kafka_q_cb_type_t cb_type,
|
|
1133
|
+
void *opaque);
|
|
1134
|
+
|
|
1135
|
+
rd_kafka_resp_err_t rd_kafka_subscribe_rkt(rd_kafka_topic_t *rkt);
|
|
1136
|
+
|
|
1137
|
+
|
|
1138
|
+
/**
|
|
1139
|
+
* @returns the number of milliseconds the maximum poll interval
|
|
1140
|
+
* was exceeded, or 0 if not exceeded.
|
|
1141
|
+
*
|
|
1142
|
+
* @remark Only relevant for high-level consumer.
|
|
1143
|
+
*
|
|
1144
|
+
* @locality any
|
|
1145
|
+
* @locks none
|
|
1146
|
+
*/
|
|
1147
|
+
static RD_INLINE RD_UNUSED int rd_kafka_max_poll_exceeded(rd_kafka_t *rk) {
|
|
1148
|
+
rd_ts_t last_poll;
|
|
1149
|
+
int exceeded;
|
|
1150
|
+
|
|
1151
|
+
if (rk->rk_type != RD_KAFKA_CONSUMER)
|
|
1152
|
+
return 0;
|
|
1153
|
+
|
|
1154
|
+
last_poll = rd_atomic64_get(&rk->rk_ts_last_poll);
|
|
1155
|
+
|
|
1156
|
+
/* Application is blocked in librdkafka function, see
|
|
1157
|
+
* rd_kafka_app_poll_start(). */
|
|
1158
|
+
if (last_poll == INT64_MAX)
|
|
1159
|
+
return 0;
|
|
1160
|
+
|
|
1161
|
+
exceeded = (int)((rd_clock() - last_poll) / 1000ll) -
|
|
1162
|
+
rk->rk_conf.max_poll_interval_ms;
|
|
1163
|
+
|
|
1164
|
+
if (unlikely(exceeded > 0))
|
|
1165
|
+
return exceeded;
|
|
1166
|
+
|
|
1167
|
+
return 0;
|
|
1168
|
+
}
|
|
1169
|
+
|
|
1170
|
+
/**
|
|
1171
|
+
* @brief Call on entry to blocking polling function to indicate
|
|
1172
|
+
* that the application is blocked waiting for librdkafka
|
|
1173
|
+
* and that max.poll.interval.ms should not be enforced.
|
|
1174
|
+
*
|
|
1175
|
+
* Call app_polled() Upon return from the function calling
|
|
1176
|
+
* this function to register the application's last time of poll.
|
|
1177
|
+
*
|
|
1178
|
+
* @remark Only relevant for high-level consumer.
|
|
1179
|
+
*
|
|
1180
|
+
* @locality any
|
|
1181
|
+
* @locks none
|
|
1182
|
+
*/
|
|
1183
|
+
static RD_INLINE RD_UNUSED void rd_kafka_app_poll_start(rd_kafka_t *rk,
|
|
1184
|
+
rd_kafka_q_t *rkq,
|
|
1185
|
+
rd_ts_t now,
|
|
1186
|
+
rd_bool_t is_blocking) {
|
|
1187
|
+
if (rk->rk_type != RD_KAFKA_CONSUMER)
|
|
1188
|
+
return;
|
|
1189
|
+
|
|
1190
|
+
if (!now)
|
|
1191
|
+
now = rd_clock();
|
|
1192
|
+
if (is_blocking)
|
|
1193
|
+
rd_atomic64_set(&rk->rk_ts_last_poll, INT64_MAX);
|
|
1194
|
+
if (rkq->rkq_ts_last_poll_end) {
|
|
1195
|
+
int64_t poll_idle_ratio = 0;
|
|
1196
|
+
rd_ts_t poll_interval = now - rkq->rkq_ts_last_poll_start;
|
|
1197
|
+
if (poll_interval) {
|
|
1198
|
+
rd_ts_t idle_interval = rkq->rkq_ts_last_poll_end -
|
|
1199
|
+
rkq->rkq_ts_last_poll_start;
|
|
1200
|
+
poll_idle_ratio =
|
|
1201
|
+
idle_interval * 1000000 / poll_interval;
|
|
1202
|
+
}
|
|
1203
|
+
rd_avg_add(
|
|
1204
|
+
&rk->rk_telemetry.rd_avg_current.rk_avg_poll_idle_ratio,
|
|
1205
|
+
poll_idle_ratio);
|
|
1206
|
+
rkq->rkq_ts_last_poll_start = now;
|
|
1207
|
+
rkq->rkq_ts_last_poll_end = 0;
|
|
1208
|
+
}
|
|
1209
|
+
}
|
|
1210
|
+
|
|
1211
|
+
/**
|
|
1212
|
+
* @brief Set the last application poll time to now.
|
|
1213
|
+
*
|
|
1214
|
+
* @remark Only relevant for high-level consumer.
|
|
1215
|
+
*
|
|
1216
|
+
* @locality any
|
|
1217
|
+
* @locks none
|
|
1218
|
+
*/
|
|
1219
|
+
static RD_INLINE RD_UNUSED void rd_kafka_app_polled(rd_kafka_t *rk,
|
|
1220
|
+
rd_kafka_q_t *rkq) {
|
|
1221
|
+
if (rk->rk_type == RD_KAFKA_CONSUMER) {
|
|
1222
|
+
rd_ts_t now = rd_clock();
|
|
1223
|
+
rd_atomic64_set(&rk->rk_ts_last_poll, now);
|
|
1224
|
+
if (unlikely(rk->rk_cgrp &&
|
|
1225
|
+
rk->rk_cgrp->rkcg_group_protocol ==
|
|
1226
|
+
RD_KAFKA_GROUP_PROTOCOL_CONSUMER &&
|
|
1227
|
+
rk->rk_cgrp->rkcg_flags &
|
|
1228
|
+
RD_KAFKA_CGRP_F_MAX_POLL_EXCEEDED)) {
|
|
1229
|
+
rd_kafka_cgrp_consumer_expedite_next_heartbeat(
|
|
1230
|
+
rk->rk_cgrp,
|
|
1231
|
+
"app polled after poll interval exceeded");
|
|
1232
|
+
}
|
|
1233
|
+
if (!rkq->rkq_ts_last_poll_end)
|
|
1234
|
+
rkq->rkq_ts_last_poll_end = now;
|
|
1235
|
+
rd_dassert(rkq->rkq_ts_last_poll_end >=
|
|
1236
|
+
rkq->rkq_ts_last_poll_start);
|
|
1237
|
+
}
|
|
1238
|
+
}
|
|
1239
|
+
|
|
1240
|
+
|
|
1241
|
+
|
|
1242
|
+
void rd_kafka_term_sig_handler(int sig);
|
|
1243
|
+
|
|
1244
|
+
/**
|
|
1245
|
+
* rdkafka_background.c
|
|
1246
|
+
*/
|
|
1247
|
+
int rd_kafka_background_thread_main(void *arg);
|
|
1248
|
+
rd_kafka_resp_err_t rd_kafka_background_thread_create(rd_kafka_t *rk,
|
|
1249
|
+
char *errstr,
|
|
1250
|
+
size_t errstr_size);
|
|
1251
|
+
|
|
1252
|
+
void rd_kafka_rebootstrap(rd_kafka_t *rk);
|
|
1253
|
+
|
|
1254
|
+
void rd_kafka_rebootstrap_tmr_start_maybe(rd_kafka_t *rk);
|
|
1255
|
+
|
|
1256
|
+
int rd_kafka_rebootstrap_tmr_stop(rd_kafka_t *rk);
|
|
1257
|
+
|
|
1258
|
+
void rd_kafka_reset_any_broker_down_reported(rd_kafka_t *rk);
|
|
1259
|
+
|
|
1260
|
+
#endif /* _RDKAFKA_INT_H_ */
|