@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,807 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* librdkafka - Apache Kafka C library
|
|
3
|
+
*
|
|
4
|
+
* Copyright (c) 2018-2022, Magnus Edenhill
|
|
5
|
+
* All rights reserved.
|
|
6
|
+
*
|
|
7
|
+
* Redistribution and use in source and binary forms, with or without
|
|
8
|
+
* modification, are permitted provided that the following conditions are met:
|
|
9
|
+
*
|
|
10
|
+
* 1. Redistributions of source code must retain the above copyright notice,
|
|
11
|
+
* this list of conditions and the following disclaimer.
|
|
12
|
+
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
13
|
+
* this list of conditions and the following disclaimer in the documentation
|
|
14
|
+
* and/or other materials provided with the distribution.
|
|
15
|
+
*
|
|
16
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
17
|
+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
18
|
+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
19
|
+
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
20
|
+
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
21
|
+
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
22
|
+
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
23
|
+
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
24
|
+
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
25
|
+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
26
|
+
* POSSIBILITY OF SUCH DAMAGE.
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
#include "rd.h"
|
|
30
|
+
#include "rdkafka_int.h"
|
|
31
|
+
#include "rdkafka_idempotence.h"
|
|
32
|
+
#include "rdkafka_txnmgr.h"
|
|
33
|
+
#include "rdkafka_request.h"
|
|
34
|
+
#include "rdunittest.h"
|
|
35
|
+
|
|
36
|
+
#include <stdarg.h>
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* @name Idempotent Producer logic
|
|
40
|
+
*
|
|
41
|
+
*
|
|
42
|
+
* Unrecoverable idempotent producer errors that could jeopardize the
|
|
43
|
+
* idempotency guarantees if the producer was to continue operating
|
|
44
|
+
* are treated as fatal errors, unless the producer is transactional in which
|
|
45
|
+
* case the current transaction will fail (also known as an abortable error)
|
|
46
|
+
* but the producer will not raise a fatal error.
|
|
47
|
+
*
|
|
48
|
+
*/
|
|
49
|
+
|
|
50
|
+
static void rd_kafka_idemp_pid_timer_restart(rd_kafka_t *rk,
|
|
51
|
+
rd_bool_t immediate,
|
|
52
|
+
const char *reason);
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* @brief Set the producer's idempotence state.
|
|
57
|
+
* @locks rd_kafka_wrlock() MUST be held
|
|
58
|
+
*/
|
|
59
|
+
void rd_kafka_idemp_set_state(rd_kafka_t *rk,
|
|
60
|
+
rd_kafka_idemp_state_t new_state) {
|
|
61
|
+
|
|
62
|
+
if (rk->rk_eos.idemp_state == new_state)
|
|
63
|
+
return;
|
|
64
|
+
|
|
65
|
+
if (rd_kafka_fatal_error_code(rk) &&
|
|
66
|
+
new_state != RD_KAFKA_IDEMP_STATE_FATAL_ERROR &&
|
|
67
|
+
new_state != RD_KAFKA_IDEMP_STATE_TERM &&
|
|
68
|
+
new_state != RD_KAFKA_IDEMP_STATE_DRAIN_RESET &&
|
|
69
|
+
new_state != RD_KAFKA_IDEMP_STATE_DRAIN_BUMP) {
|
|
70
|
+
rd_kafka_dbg(rk, EOS, "IDEMPSTATE",
|
|
71
|
+
"Denying state change %s -> %s since a "
|
|
72
|
+
"fatal error has been raised",
|
|
73
|
+
rd_kafka_idemp_state2str(rk->rk_eos.idemp_state),
|
|
74
|
+
rd_kafka_idemp_state2str(new_state));
|
|
75
|
+
rd_kafka_idemp_set_state(rk, RD_KAFKA_IDEMP_STATE_FATAL_ERROR);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
rd_kafka_dbg(rk, EOS, "IDEMPSTATE",
|
|
80
|
+
"Idempotent producer state change %s -> %s",
|
|
81
|
+
rd_kafka_idemp_state2str(rk->rk_eos.idemp_state),
|
|
82
|
+
rd_kafka_idemp_state2str(new_state));
|
|
83
|
+
|
|
84
|
+
rk->rk_eos.idemp_state = new_state;
|
|
85
|
+
rk->rk_eos.ts_idemp_state = rd_clock();
|
|
86
|
+
|
|
87
|
+
/* Inform transaction manager of state change */
|
|
88
|
+
if (rd_kafka_is_transactional(rk))
|
|
89
|
+
rd_kafka_txn_idemp_state_change(rk, new_state);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* @brief Find a usable broker suitable for acquiring Pid
|
|
96
|
+
* or Coordinator query.
|
|
97
|
+
*
|
|
98
|
+
* @locks rd_kafka_wrlock() MUST be held
|
|
99
|
+
*
|
|
100
|
+
* @returns a broker with increased refcount, or NULL on error.
|
|
101
|
+
*/
|
|
102
|
+
rd_kafka_broker_t *rd_kafka_idemp_broker_any(rd_kafka_t *rk,
|
|
103
|
+
rd_kafka_resp_err_t *errp,
|
|
104
|
+
char *errstr,
|
|
105
|
+
size_t errstr_size) {
|
|
106
|
+
rd_kafka_broker_t *rkb;
|
|
107
|
+
int up_cnt;
|
|
108
|
+
|
|
109
|
+
rkb = rd_kafka_broker_any_up(rk, &up_cnt,
|
|
110
|
+
rd_kafka_broker_filter_non_idempotent,
|
|
111
|
+
NULL, "acquire ProducerID");
|
|
112
|
+
if (rkb)
|
|
113
|
+
return rkb;
|
|
114
|
+
|
|
115
|
+
if (up_cnt > 0) {
|
|
116
|
+
*errp = RD_KAFKA_RESP_ERR__UNSUPPORTED_FEATURE;
|
|
117
|
+
rd_snprintf(errstr, errstr_size,
|
|
118
|
+
"%s not supported by "
|
|
119
|
+
"any of the %d connected broker(s): requires "
|
|
120
|
+
"Apache Kafka broker version >= 0.11.0",
|
|
121
|
+
rd_kafka_is_transactional(rk)
|
|
122
|
+
? "Transactions"
|
|
123
|
+
: "Idempotent producer",
|
|
124
|
+
up_cnt);
|
|
125
|
+
} else {
|
|
126
|
+
*errp = RD_KAFKA_RESP_ERR__TRANSPORT;
|
|
127
|
+
rd_snprintf(errstr, errstr_size,
|
|
128
|
+
"No brokers available for %s (%d broker(s) known)",
|
|
129
|
+
rd_kafka_is_transactional(rk)
|
|
130
|
+
? "Transactions"
|
|
131
|
+
: "Idempotent producer",
|
|
132
|
+
rd_atomic32_get(&rk->rk_broker_cnt));
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
rd_kafka_dbg(rk, EOS, "PIDBROKER", "%s", errstr);
|
|
136
|
+
|
|
137
|
+
return NULL;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* @brief Check if an error needs special attention, possibly
|
|
144
|
+
* raising a fatal error.
|
|
145
|
+
*
|
|
146
|
+
* @param is_fatal if true, force fatal error regardless of error code.
|
|
147
|
+
*
|
|
148
|
+
* @returns rd_true if a fatal error was triggered, else rd_false.
|
|
149
|
+
*
|
|
150
|
+
* @locks rd_kafka_wrlock() MUST be held
|
|
151
|
+
* @locality rdkafka main thread
|
|
152
|
+
*/
|
|
153
|
+
rd_bool_t rd_kafka_idemp_check_error(rd_kafka_t *rk,
|
|
154
|
+
rd_kafka_resp_err_t err,
|
|
155
|
+
const char *errstr,
|
|
156
|
+
rd_bool_t is_fatal) {
|
|
157
|
+
const char *preface = "";
|
|
158
|
+
|
|
159
|
+
switch (err) {
|
|
160
|
+
case RD_KAFKA_RESP_ERR__UNSUPPORTED_FEATURE:
|
|
161
|
+
case RD_KAFKA_RESP_ERR_INVALID_TRANSACTION_TIMEOUT:
|
|
162
|
+
case RD_KAFKA_RESP_ERR_TRANSACTIONAL_ID_AUTHORIZATION_FAILED:
|
|
163
|
+
case RD_KAFKA_RESP_ERR_CLUSTER_AUTHORIZATION_FAILED:
|
|
164
|
+
is_fatal = rd_true;
|
|
165
|
+
break;
|
|
166
|
+
|
|
167
|
+
case RD_KAFKA_RESP_ERR_INVALID_PRODUCER_EPOCH:
|
|
168
|
+
case RD_KAFKA_RESP_ERR_PRODUCER_FENCED:
|
|
169
|
+
is_fatal = rd_true;
|
|
170
|
+
/* Normalize error */
|
|
171
|
+
err = RD_KAFKA_RESP_ERR__FENCED;
|
|
172
|
+
preface = "Producer fenced by newer instance: ";
|
|
173
|
+
break;
|
|
174
|
+
|
|
175
|
+
default:
|
|
176
|
+
break;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
if (!is_fatal)
|
|
180
|
+
return rd_false;
|
|
181
|
+
|
|
182
|
+
if (rd_kafka_is_transactional(rk))
|
|
183
|
+
rd_kafka_txn_set_fatal_error(rk, RD_DONT_LOCK, err, "%s%s",
|
|
184
|
+
preface, errstr);
|
|
185
|
+
else
|
|
186
|
+
rd_kafka_set_fatal_error0(rk, RD_DONT_LOCK, err, "%s%s",
|
|
187
|
+
preface, errstr);
|
|
188
|
+
|
|
189
|
+
rd_kafka_idemp_set_state(rk, RD_KAFKA_IDEMP_STATE_FATAL_ERROR);
|
|
190
|
+
|
|
191
|
+
return rd_true;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* @brief State machine for PID acquisition for the idempotent
|
|
198
|
+
* and transactional producers.
|
|
199
|
+
*
|
|
200
|
+
* @locality rdkafka main thread
|
|
201
|
+
* @locks rd_kafka_wrlock() MUST be held.
|
|
202
|
+
*/
|
|
203
|
+
void rd_kafka_idemp_pid_fsm(rd_kafka_t *rk) {
|
|
204
|
+
rd_kafka_resp_err_t err;
|
|
205
|
+
char errstr[512];
|
|
206
|
+
rd_kafka_broker_t *rkb;
|
|
207
|
+
rd_bool_t is_fatal = rd_false;
|
|
208
|
+
|
|
209
|
+
/* If a fatal error has been raised we do not
|
|
210
|
+
* attempt to acquire a PID. */
|
|
211
|
+
if (unlikely(rd_kafka_fatal_error_code(rk)))
|
|
212
|
+
return;
|
|
213
|
+
|
|
214
|
+
redo:
|
|
215
|
+
switch (rk->rk_eos.idemp_state) {
|
|
216
|
+
case RD_KAFKA_IDEMP_STATE_INIT:
|
|
217
|
+
case RD_KAFKA_IDEMP_STATE_TERM:
|
|
218
|
+
case RD_KAFKA_IDEMP_STATE_FATAL_ERROR:
|
|
219
|
+
break;
|
|
220
|
+
|
|
221
|
+
case RD_KAFKA_IDEMP_STATE_REQ_PID:
|
|
222
|
+
/* Request (new) PID */
|
|
223
|
+
|
|
224
|
+
/* The idempotent producer may ask any broker for a PID,
|
|
225
|
+
* while the transactional producer needs to ask its
|
|
226
|
+
* transaction coordinator for a PID. */
|
|
227
|
+
if (!rd_kafka_is_transactional(rk) ||
|
|
228
|
+
rk->rk_eos.txn_curr_coord) {
|
|
229
|
+
rd_kafka_idemp_set_state(
|
|
230
|
+
rk, RD_KAFKA_IDEMP_STATE_WAIT_TRANSPORT);
|
|
231
|
+
goto redo;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
/*
|
|
236
|
+
* Look up transaction coordinator.
|
|
237
|
+
* When the coordinator is known this FSM will be called again.
|
|
238
|
+
*/
|
|
239
|
+
if (rd_kafka_txn_coord_query(rk, "Acquire PID"))
|
|
240
|
+
return; /* Fatal error */
|
|
241
|
+
break;
|
|
242
|
+
|
|
243
|
+
case RD_KAFKA_IDEMP_STATE_WAIT_TRANSPORT:
|
|
244
|
+
/* Waiting for broker/coordinator to become available */
|
|
245
|
+
if (rd_kafka_is_transactional(rk)) {
|
|
246
|
+
/* Check that a proper coordinator broker has
|
|
247
|
+
* been assigned by inspecting txn_curr_coord
|
|
248
|
+
* (the real broker) rather than txn_coord
|
|
249
|
+
* (the logical broker). */
|
|
250
|
+
if (!rk->rk_eos.txn_curr_coord) {
|
|
251
|
+
/*
|
|
252
|
+
* Can happen if the coordinator wasn't set or
|
|
253
|
+
* wasn't up initially and has been set to NULL
|
|
254
|
+
* after a COORDINATOR_NOT_AVAILABLE error in
|
|
255
|
+
* FindCoordinatorResponse. When the coordinator
|
|
256
|
+
* is known this FSM will be called again.
|
|
257
|
+
*/
|
|
258
|
+
rd_kafka_txn_coord_query(
|
|
259
|
+
rk, "Awaiting coordinator");
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
rkb = rk->rk_eos.txn_coord;
|
|
263
|
+
rd_kafka_broker_keep(rkb);
|
|
264
|
+
|
|
265
|
+
} else {
|
|
266
|
+
rkb = rd_kafka_idemp_broker_any(rk, &err, errstr,
|
|
267
|
+
sizeof(errstr));
|
|
268
|
+
|
|
269
|
+
if (!rkb && rd_kafka_idemp_check_error(rk, err, errstr,
|
|
270
|
+
rd_false))
|
|
271
|
+
return; /* Fatal error */
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
if (!rkb || !rd_kafka_broker_is_up(rkb)) {
|
|
275
|
+
/* The coordinator broker monitor will re-trigger
|
|
276
|
+
* the fsm sooner if txn_coord has a state change,
|
|
277
|
+
* else rely on the timer to retry. */
|
|
278
|
+
rd_kafka_idemp_pid_timer_restart(
|
|
279
|
+
rk, rd_false,
|
|
280
|
+
rkb ? "No broker available" : "Coordinator not up");
|
|
281
|
+
|
|
282
|
+
if (rkb)
|
|
283
|
+
rd_kafka_broker_destroy(rkb);
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
if (rd_kafka_is_transactional(rk)) {
|
|
288
|
+
int err_of = 0;
|
|
289
|
+
|
|
290
|
+
/* If this is a transactional producer and the
|
|
291
|
+
* PID-epoch needs to be bumped we'll require KIP-360
|
|
292
|
+
* support on the broker, else raise a fatal error. */
|
|
293
|
+
|
|
294
|
+
if (rd_kafka_pid_valid(rk->rk_eos.pid)) {
|
|
295
|
+
rd_rkb_dbg(rkb, EOS, "GETPID",
|
|
296
|
+
"Requesting ProducerId bump for %s",
|
|
297
|
+
rd_kafka_pid2str(rk->rk_eos.pid));
|
|
298
|
+
err_of = rd_snprintf(errstr, sizeof(errstr),
|
|
299
|
+
"Failed to request "
|
|
300
|
+
"ProducerId bump: ");
|
|
301
|
+
rd_assert(err_of < 0 ||
|
|
302
|
+
err_of < (int)sizeof(errstr));
|
|
303
|
+
} else {
|
|
304
|
+
rd_rkb_dbg(rkb, EOS, "GETPID",
|
|
305
|
+
"Acquiring ProducerId");
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
err = rd_kafka_InitProducerIdRequest(
|
|
309
|
+
rkb, rk->rk_conf.eos.transactional_id,
|
|
310
|
+
rk->rk_conf.eos.transaction_timeout_ms,
|
|
311
|
+
rd_kafka_pid_valid(rk->rk_eos.pid) ? &rk->rk_eos.pid
|
|
312
|
+
: NULL,
|
|
313
|
+
errstr + err_of, sizeof(errstr) - err_of,
|
|
314
|
+
RD_KAFKA_REPLYQ(rk->rk_ops, 0),
|
|
315
|
+
rd_kafka_handle_InitProducerId, NULL);
|
|
316
|
+
|
|
317
|
+
if (err == RD_KAFKA_RESP_ERR__UNSUPPORTED_FEATURE &&
|
|
318
|
+
rd_kafka_pid_valid(rk->rk_eos.pid))
|
|
319
|
+
is_fatal = rd_true;
|
|
320
|
+
} else {
|
|
321
|
+
rd_rkb_dbg(rkb, EOS, "GETPID", "Acquiring ProducerId");
|
|
322
|
+
|
|
323
|
+
err = rd_kafka_InitProducerIdRequest(
|
|
324
|
+
rkb, NULL, -1, NULL, errstr, sizeof(errstr),
|
|
325
|
+
RD_KAFKA_REPLYQ(rk->rk_ops, 0),
|
|
326
|
+
rd_kafka_handle_InitProducerId, NULL);
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
if (err) {
|
|
330
|
+
rd_rkb_dbg(rkb, EOS, "GETPID",
|
|
331
|
+
"Can't acquire ProducerId from "
|
|
332
|
+
"this broker: %s",
|
|
333
|
+
errstr);
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
rd_kafka_broker_destroy(rkb);
|
|
337
|
+
|
|
338
|
+
if (err) {
|
|
339
|
+
if (rd_kafka_idemp_check_error(rk, err, errstr,
|
|
340
|
+
is_fatal))
|
|
341
|
+
return; /* Fatal error */
|
|
342
|
+
|
|
343
|
+
/* The coordinator broker monitor will re-trigger
|
|
344
|
+
* the fsm sooner if txn_coord has a state change,
|
|
345
|
+
* else rely on the timer to retry. */
|
|
346
|
+
rd_kafka_idemp_pid_timer_restart(rk, rd_false, errstr);
|
|
347
|
+
return;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
rd_kafka_idemp_set_state(rk, RD_KAFKA_IDEMP_STATE_WAIT_PID);
|
|
351
|
+
break;
|
|
352
|
+
|
|
353
|
+
case RD_KAFKA_IDEMP_STATE_WAIT_PID:
|
|
354
|
+
/* PID requested, waiting for reply */
|
|
355
|
+
break;
|
|
356
|
+
|
|
357
|
+
case RD_KAFKA_IDEMP_STATE_ASSIGNED:
|
|
358
|
+
/* New PID assigned */
|
|
359
|
+
break;
|
|
360
|
+
|
|
361
|
+
case RD_KAFKA_IDEMP_STATE_DRAIN_RESET:
|
|
362
|
+
/* Wait for outstanding ProduceRequests to finish
|
|
363
|
+
* before resetting and re-requesting a new PID. */
|
|
364
|
+
break;
|
|
365
|
+
|
|
366
|
+
case RD_KAFKA_IDEMP_STATE_DRAIN_BUMP:
|
|
367
|
+
/* Wait for outstanding ProduceRequests to finish
|
|
368
|
+
* before bumping the current epoch. */
|
|
369
|
+
break;
|
|
370
|
+
|
|
371
|
+
case RD_KAFKA_IDEMP_STATE_WAIT_TXN_ABORT:
|
|
372
|
+
/* Wait for txnmgr to abort its current transaction
|
|
373
|
+
* and then trigger a drain & reset or bump. */
|
|
374
|
+
break;
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
|
|
379
|
+
/**
|
|
380
|
+
* @brief Timed PID retrieval timer callback.
|
|
381
|
+
*
|
|
382
|
+
* @locality rdkafka main thread
|
|
383
|
+
* @locks none
|
|
384
|
+
*/
|
|
385
|
+
static void rd_kafka_idemp_pid_timer_cb(rd_kafka_timers_t *rkts, void *arg) {
|
|
386
|
+
rd_kafka_t *rk = arg;
|
|
387
|
+
|
|
388
|
+
rd_kafka_wrlock(rk);
|
|
389
|
+
rd_kafka_idemp_pid_fsm(rk);
|
|
390
|
+
rd_kafka_wrunlock(rk);
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
|
|
394
|
+
/**
|
|
395
|
+
* @brief Restart the pid retrieval timer.
|
|
396
|
+
*
|
|
397
|
+
* @param immediate If true, request a pid as soon as possible,
|
|
398
|
+
* else use the default interval (500ms).
|
|
399
|
+
* @locality any
|
|
400
|
+
* @locks none
|
|
401
|
+
*/
|
|
402
|
+
static void rd_kafka_idemp_pid_timer_restart(rd_kafka_t *rk,
|
|
403
|
+
rd_bool_t immediate,
|
|
404
|
+
const char *reason) {
|
|
405
|
+
rd_kafka_dbg(rk, EOS, "TXN", "Starting PID FSM timer%s: %s",
|
|
406
|
+
immediate ? " (fire immediately)" : "", reason);
|
|
407
|
+
rd_kafka_timer_start_oneshot(&rk->rk_timers, &rk->rk_eos.pid_tmr,
|
|
408
|
+
rd_true,
|
|
409
|
+
1000 * (immediate ? 1 : 500 /*500ms*/),
|
|
410
|
+
rd_kafka_idemp_pid_timer_cb, rk);
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
|
|
414
|
+
/**
|
|
415
|
+
* @brief Handle failure to acquire a PID from broker.
|
|
416
|
+
*
|
|
417
|
+
* @locality rdkafka main thread
|
|
418
|
+
* @locks none
|
|
419
|
+
*/
|
|
420
|
+
void rd_kafka_idemp_request_pid_failed(rd_kafka_broker_t *rkb,
|
|
421
|
+
rd_kafka_resp_err_t err) {
|
|
422
|
+
rd_kafka_t *rk = rkb->rkb_rk;
|
|
423
|
+
char errstr[512];
|
|
424
|
+
|
|
425
|
+
rd_rkb_dbg(rkb, EOS, "GETPID", "Failed to acquire PID: %s",
|
|
426
|
+
rd_kafka_err2str(err));
|
|
427
|
+
|
|
428
|
+
if (err == RD_KAFKA_RESP_ERR__DESTROY)
|
|
429
|
+
return; /* Ignore */
|
|
430
|
+
|
|
431
|
+
rd_assert(thrd_is_current(rk->rk_thread));
|
|
432
|
+
|
|
433
|
+
rd_snprintf(errstr, sizeof(errstr),
|
|
434
|
+
"Failed to acquire %s PID from broker %s: %s",
|
|
435
|
+
rd_kafka_is_transactional(rk) ? "transactional"
|
|
436
|
+
: "idempotence",
|
|
437
|
+
rd_kafka_broker_name(rkb), rd_kafka_err2str(err));
|
|
438
|
+
|
|
439
|
+
rd_kafka_wrlock(rk);
|
|
440
|
+
|
|
441
|
+
if (rd_kafka_idemp_check_error(rk, err, errstr, rd_false)) {
|
|
442
|
+
rd_kafka_wrunlock(rk);
|
|
443
|
+
return; /* Fatal error */
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
RD_UT_COVERAGE(0);
|
|
447
|
+
|
|
448
|
+
if (rd_kafka_is_transactional(rk) &&
|
|
449
|
+
(err == RD_KAFKA_RESP_ERR_NOT_COORDINATOR ||
|
|
450
|
+
err == RD_KAFKA_RESP_ERR_COORDINATOR_NOT_AVAILABLE))
|
|
451
|
+
rd_kafka_txn_coord_set(rk, NULL, "%s", errstr);
|
|
452
|
+
|
|
453
|
+
/* This error code is read by init_transactions() for propagation
|
|
454
|
+
* to the application. */
|
|
455
|
+
rk->rk_eos.txn_init_err = err;
|
|
456
|
+
|
|
457
|
+
rd_kafka_idemp_set_state(rk, RD_KAFKA_IDEMP_STATE_REQ_PID);
|
|
458
|
+
|
|
459
|
+
rd_kafka_wrunlock(rk);
|
|
460
|
+
|
|
461
|
+
rd_kafka_log(rk, LOG_WARNING, "GETPID", "%s: retrying", errstr);
|
|
462
|
+
|
|
463
|
+
/* Restart acquisition after a short wait */
|
|
464
|
+
rd_kafka_idemp_pid_timer_restart(rk, rd_false, errstr);
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
|
|
468
|
+
/**
|
|
469
|
+
* @brief Update Producer ID from InitProducerId response.
|
|
470
|
+
*
|
|
471
|
+
* @locality rdkafka main thread
|
|
472
|
+
* @locks none
|
|
473
|
+
*/
|
|
474
|
+
void rd_kafka_idemp_pid_update(rd_kafka_broker_t *rkb,
|
|
475
|
+
const rd_kafka_pid_t pid) {
|
|
476
|
+
rd_kafka_t *rk = rkb->rkb_rk;
|
|
477
|
+
|
|
478
|
+
rd_kafka_wrlock(rk);
|
|
479
|
+
if (rk->rk_eos.idemp_state != RD_KAFKA_IDEMP_STATE_WAIT_PID) {
|
|
480
|
+
rd_rkb_dbg(rkb, EOS, "GETPID",
|
|
481
|
+
"Ignoring InitProduceId response (%s) "
|
|
482
|
+
"in state %s",
|
|
483
|
+
rd_kafka_pid2str(pid),
|
|
484
|
+
rd_kafka_idemp_state2str(rk->rk_eos.idemp_state));
|
|
485
|
+
rd_kafka_wrunlock(rk);
|
|
486
|
+
return;
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
if (!rd_kafka_pid_valid(pid)) {
|
|
490
|
+
rd_kafka_wrunlock(rk);
|
|
491
|
+
rd_rkb_log(rkb, LOG_WARNING, "GETPID",
|
|
492
|
+
"Acquired invalid PID{%" PRId64 ",%hd}: ignoring",
|
|
493
|
+
pid.id, pid.epoch);
|
|
494
|
+
rd_kafka_idemp_request_pid_failed(rkb,
|
|
495
|
+
RD_KAFKA_RESP_ERR__BAD_MSG);
|
|
496
|
+
return;
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
if (rd_kafka_pid_valid(rk->rk_eos.pid))
|
|
500
|
+
rd_kafka_dbg(rk, EOS, "GETPID", "Acquired %s (previous %s)",
|
|
501
|
+
rd_kafka_pid2str(pid),
|
|
502
|
+
rd_kafka_pid2str(rk->rk_eos.pid));
|
|
503
|
+
else
|
|
504
|
+
rd_kafka_dbg(rk, EOS, "GETPID", "Acquired %s",
|
|
505
|
+
rd_kafka_pid2str(pid));
|
|
506
|
+
rk->rk_eos.pid = pid;
|
|
507
|
+
rk->rk_eos.epoch_cnt++;
|
|
508
|
+
|
|
509
|
+
/* The idempotence state change will trigger the transaction manager,
|
|
510
|
+
* see rd_kafka_txn_idemp_state_change(). */
|
|
511
|
+
rd_kafka_idemp_set_state(rk, RD_KAFKA_IDEMP_STATE_ASSIGNED);
|
|
512
|
+
|
|
513
|
+
rd_kafka_wrunlock(rk);
|
|
514
|
+
|
|
515
|
+
/* Wake up all broker threads (that may have messages to send
|
|
516
|
+
* that were waiting for a Producer ID). */
|
|
517
|
+
rd_kafka_all_brokers_wakeup(rk, RD_KAFKA_BROKER_STATE_INIT,
|
|
518
|
+
"PID updated");
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
|
|
522
|
+
/**
|
|
523
|
+
* @brief Call when all partition request queues
|
|
524
|
+
* are drained to reset and re-request a new PID.
|
|
525
|
+
*
|
|
526
|
+
* @locality any
|
|
527
|
+
* @locks none
|
|
528
|
+
*/
|
|
529
|
+
static void rd_kafka_idemp_drain_done(rd_kafka_t *rk) {
|
|
530
|
+
rd_bool_t restart_tmr = rd_false;
|
|
531
|
+
rd_bool_t wakeup_brokers = rd_false;
|
|
532
|
+
|
|
533
|
+
rd_kafka_wrlock(rk);
|
|
534
|
+
if (rk->rk_eos.idemp_state == RD_KAFKA_IDEMP_STATE_DRAIN_RESET) {
|
|
535
|
+
rd_kafka_dbg(rk, EOS, "DRAIN", "All partitions drained");
|
|
536
|
+
rd_kafka_idemp_set_state(rk, RD_KAFKA_IDEMP_STATE_REQ_PID);
|
|
537
|
+
restart_tmr = rd_true;
|
|
538
|
+
|
|
539
|
+
} else if (rk->rk_eos.idemp_state == RD_KAFKA_IDEMP_STATE_DRAIN_BUMP &&
|
|
540
|
+
rd_kafka_pid_valid(rk->rk_eos.pid)) {
|
|
541
|
+
|
|
542
|
+
if (rd_kafka_is_transactional(rk)) {
|
|
543
|
+
/* The epoch bump needs to be performed by the
|
|
544
|
+
* coordinator by sending it an InitPid request. */
|
|
545
|
+
rd_kafka_dbg(rk, EOS, "DRAIN",
|
|
546
|
+
"All partitions drained, asking "
|
|
547
|
+
"coordinator to bump epoch (currently %s)",
|
|
548
|
+
rd_kafka_pid2str(rk->rk_eos.pid));
|
|
549
|
+
rd_kafka_idemp_set_state(rk,
|
|
550
|
+
RD_KAFKA_IDEMP_STATE_REQ_PID);
|
|
551
|
+
restart_tmr = rd_true;
|
|
552
|
+
|
|
553
|
+
} else {
|
|
554
|
+
/* The idempotent producer can bump its own epoch */
|
|
555
|
+
rk->rk_eos.pid = rd_kafka_pid_bump(rk->rk_eos.pid);
|
|
556
|
+
rd_kafka_dbg(rk, EOS, "DRAIN",
|
|
557
|
+
"All partitions drained, bumped "
|
|
558
|
+
"epoch to %s",
|
|
559
|
+
rd_kafka_pid2str(rk->rk_eos.pid));
|
|
560
|
+
rd_kafka_idemp_set_state(rk,
|
|
561
|
+
RD_KAFKA_IDEMP_STATE_ASSIGNED);
|
|
562
|
+
wakeup_brokers = rd_true;
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
rd_kafka_wrunlock(rk);
|
|
566
|
+
|
|
567
|
+
/* Restart timer to eventually trigger a re-request */
|
|
568
|
+
if (restart_tmr)
|
|
569
|
+
rd_kafka_idemp_pid_timer_restart(rk, rd_true, "Drain done");
|
|
570
|
+
|
|
571
|
+
/* Wake up all broker threads (that may have messages to send
|
|
572
|
+
* that were waiting for a Producer ID). */
|
|
573
|
+
if (wakeup_brokers)
|
|
574
|
+
rd_kafka_all_brokers_wakeup(rk, RD_KAFKA_BROKER_STATE_INIT,
|
|
575
|
+
"message drain done");
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
/**
|
|
579
|
+
* @brief Check if in-flight toppars drain is done, if so transition to
|
|
580
|
+
* next state.
|
|
581
|
+
*
|
|
582
|
+
* @locality any
|
|
583
|
+
* @locks none
|
|
584
|
+
*/
|
|
585
|
+
static RD_INLINE void rd_kafka_idemp_check_drain_done(rd_kafka_t *rk) {
|
|
586
|
+
if (rd_atomic32_get(&rk->rk_eos.inflight_toppar_cnt) == 0)
|
|
587
|
+
rd_kafka_idemp_drain_done(rk);
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
|
|
591
|
+
/**
|
|
592
|
+
* @brief Schedule a reset and re-request of PID when the
|
|
593
|
+
* local ProduceRequest queues have been fully drained.
|
|
594
|
+
*
|
|
595
|
+
* The PID is not reset until the queues are fully drained.
|
|
596
|
+
*
|
|
597
|
+
* @locality any
|
|
598
|
+
* @locks none
|
|
599
|
+
*/
|
|
600
|
+
void rd_kafka_idemp_drain_reset(rd_kafka_t *rk, const char *reason) {
|
|
601
|
+
rd_kafka_wrlock(rk);
|
|
602
|
+
rd_kafka_dbg(rk, EOS, "DRAIN",
|
|
603
|
+
"Beginning partition drain for %s reset "
|
|
604
|
+
"for %d partition(s) with in-flight requests: %s",
|
|
605
|
+
rd_kafka_pid2str(rk->rk_eos.pid),
|
|
606
|
+
rd_atomic32_get(&rk->rk_eos.inflight_toppar_cnt), reason);
|
|
607
|
+
rd_kafka_idemp_set_state(rk, RD_KAFKA_IDEMP_STATE_DRAIN_RESET);
|
|
608
|
+
rd_kafka_wrunlock(rk);
|
|
609
|
+
|
|
610
|
+
/* Check right away if the drain could be done. */
|
|
611
|
+
rd_kafka_idemp_check_drain_done(rk);
|
|
612
|
+
}
|
|
613
|
+
|
|
614
|
+
|
|
615
|
+
/**
|
|
616
|
+
* @brief Schedule an epoch bump when the local ProduceRequest queues
|
|
617
|
+
* have been fully drained.
|
|
618
|
+
*
|
|
619
|
+
* The PID is not bumped until the queues are fully drained and the current
|
|
620
|
+
* transaction is aborted (if any).
|
|
621
|
+
*
|
|
622
|
+
* @param allow_txn_abort If this is a transactional producer and this flag is
|
|
623
|
+
* true then we trigger an abortable txn error to abort
|
|
624
|
+
* the current transaction first. The txnmgr will later
|
|
625
|
+
* call us back with this flag set to false to go ahead
|
|
626
|
+
* with the epoch bump.
|
|
627
|
+
* @param fmt is a human-readable reason for the bump
|
|
628
|
+
*
|
|
629
|
+
*
|
|
630
|
+
* @locality any
|
|
631
|
+
* @locks none
|
|
632
|
+
*/
|
|
633
|
+
void rd_kafka_idemp_drain_epoch_bump0(rd_kafka_t *rk,
|
|
634
|
+
rd_bool_t allow_txn_abort,
|
|
635
|
+
rd_kafka_resp_err_t err,
|
|
636
|
+
const char *fmt,
|
|
637
|
+
...) {
|
|
638
|
+
va_list ap;
|
|
639
|
+
char buf[256];
|
|
640
|
+
rd_bool_t requires_txn_abort =
|
|
641
|
+
allow_txn_abort && rd_kafka_is_transactional(rk);
|
|
642
|
+
|
|
643
|
+
va_start(ap, fmt);
|
|
644
|
+
rd_vsnprintf(buf, sizeof(buf), fmt, ap);
|
|
645
|
+
va_end(ap);
|
|
646
|
+
|
|
647
|
+
rd_kafka_wrlock(rk);
|
|
648
|
+
|
|
649
|
+
|
|
650
|
+
if (requires_txn_abort) {
|
|
651
|
+
rd_kafka_dbg(rk, EOS, "DRAIN",
|
|
652
|
+
"Need transaction abort before beginning "
|
|
653
|
+
"partition drain in state %s for %s epoch bump "
|
|
654
|
+
"for %d partition(s) with in-flight requests: %s",
|
|
655
|
+
rd_kafka_idemp_state2str(rk->rk_eos.idemp_state),
|
|
656
|
+
rd_kafka_pid2str(rk->rk_eos.pid),
|
|
657
|
+
rd_atomic32_get(&rk->rk_eos.inflight_toppar_cnt),
|
|
658
|
+
buf);
|
|
659
|
+
rd_kafka_idemp_set_state(rk,
|
|
660
|
+
RD_KAFKA_IDEMP_STATE_WAIT_TXN_ABORT);
|
|
661
|
+
|
|
662
|
+
} else {
|
|
663
|
+
rd_kafka_dbg(rk, EOS, "DRAIN",
|
|
664
|
+
"Beginning partition drain in state %s "
|
|
665
|
+
"for %s epoch bump "
|
|
666
|
+
"for %d partition(s) with in-flight requests: %s",
|
|
667
|
+
rd_kafka_idemp_state2str(rk->rk_eos.idemp_state),
|
|
668
|
+
rd_kafka_pid2str(rk->rk_eos.pid),
|
|
669
|
+
rd_atomic32_get(&rk->rk_eos.inflight_toppar_cnt),
|
|
670
|
+
buf);
|
|
671
|
+
|
|
672
|
+
rd_kafka_idemp_set_state(rk, RD_KAFKA_IDEMP_STATE_DRAIN_BUMP);
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
rd_kafka_wrunlock(rk);
|
|
676
|
+
|
|
677
|
+
if (requires_txn_abort) {
|
|
678
|
+
/* Transactions: bumping the epoch requires the current
|
|
679
|
+
* transaction to be aborted first. */
|
|
680
|
+
rd_kafka_txn_set_abortable_error_with_bump(rk, err, "%s", buf);
|
|
681
|
+
|
|
682
|
+
} else {
|
|
683
|
+
/* Idempotent producer: check right away if the drain could
|
|
684
|
+
* be done. */
|
|
685
|
+
rd_kafka_idemp_check_drain_done(rk);
|
|
686
|
+
}
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
/**
|
|
690
|
+
* @brief Mark partition as waiting-to-drain.
|
|
691
|
+
*
|
|
692
|
+
* @locks toppar_lock MUST be held
|
|
693
|
+
* @locality broker thread (leader or not)
|
|
694
|
+
*/
|
|
695
|
+
void rd_kafka_idemp_drain_toppar(rd_kafka_toppar_t *rktp, const char *reason) {
|
|
696
|
+
if (rktp->rktp_eos.wait_drain)
|
|
697
|
+
return;
|
|
698
|
+
|
|
699
|
+
rd_kafka_dbg(rktp->rktp_rkt->rkt_rk, EOS | RD_KAFKA_DBG_TOPIC, "DRAIN",
|
|
700
|
+
"%.*s [%" PRId32 "] beginning partition drain: %s",
|
|
701
|
+
RD_KAFKAP_STR_PR(rktp->rktp_rkt->rkt_topic),
|
|
702
|
+
rktp->rktp_partition, reason);
|
|
703
|
+
rktp->rktp_eos.wait_drain = rd_true;
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
|
|
707
|
+
/**
|
|
708
|
+
* @brief Mark partition as no longer having a ProduceRequest in-flight.
|
|
709
|
+
*
|
|
710
|
+
* @locality any
|
|
711
|
+
* @locks none
|
|
712
|
+
*/
|
|
713
|
+
void rd_kafka_idemp_inflight_toppar_sub(rd_kafka_t *rk,
|
|
714
|
+
rd_kafka_toppar_t *rktp) {
|
|
715
|
+
int r = rd_atomic32_sub(&rk->rk_eos.inflight_toppar_cnt, 1);
|
|
716
|
+
|
|
717
|
+
if (r == 0) {
|
|
718
|
+
/* Check if we're waiting for the partitions to drain
|
|
719
|
+
* before resetting the PID, and if so trigger a reset
|
|
720
|
+
* since this was the last drained one. */
|
|
721
|
+
rd_kafka_idemp_drain_done(rk);
|
|
722
|
+
} else {
|
|
723
|
+
rd_assert(r >= 0);
|
|
724
|
+
}
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
|
|
728
|
+
/**
|
|
729
|
+
* @brief Mark partition as having a ProduceRequest in-flight.
|
|
730
|
+
*
|
|
731
|
+
* @locality toppar handler thread
|
|
732
|
+
* @locks none
|
|
733
|
+
*/
|
|
734
|
+
void rd_kafka_idemp_inflight_toppar_add(rd_kafka_t *rk,
|
|
735
|
+
rd_kafka_toppar_t *rktp) {
|
|
736
|
+
rd_atomic32_add(&rk->rk_eos.inflight_toppar_cnt, 1);
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
|
|
740
|
+
|
|
741
|
+
/**
|
|
742
|
+
* @brief Start idempotent producer (asynchronously).
|
|
743
|
+
*
|
|
744
|
+
* @locality rdkafka main thread
|
|
745
|
+
* @locks none
|
|
746
|
+
*/
|
|
747
|
+
void rd_kafka_idemp_start(rd_kafka_t *rk, rd_bool_t immediate) {
|
|
748
|
+
|
|
749
|
+
if (rd_kafka_terminating(rk))
|
|
750
|
+
return;
|
|
751
|
+
|
|
752
|
+
rd_kafka_wrlock(rk);
|
|
753
|
+
/* Don't restart PID acquisition if there's already an outstanding
|
|
754
|
+
* request. */
|
|
755
|
+
if (rk->rk_eos.idemp_state != RD_KAFKA_IDEMP_STATE_WAIT_PID)
|
|
756
|
+
rd_kafka_idemp_set_state(rk, RD_KAFKA_IDEMP_STATE_REQ_PID);
|
|
757
|
+
rd_kafka_wrunlock(rk);
|
|
758
|
+
|
|
759
|
+
/* Schedule request timer */
|
|
760
|
+
rd_kafka_idemp_pid_timer_restart(rk, immediate,
|
|
761
|
+
"Starting idempotent producer");
|
|
762
|
+
}
|
|
763
|
+
|
|
764
|
+
|
|
765
|
+
/**
|
|
766
|
+
* @brief Initialize the idempotent producer.
|
|
767
|
+
*
|
|
768
|
+
* @remark Must be called from rd_kafka_new() and only once.
|
|
769
|
+
* @locality rdkafka main thread
|
|
770
|
+
* @locks none / not needed from rd_kafka_new()
|
|
771
|
+
*/
|
|
772
|
+
void rd_kafka_idemp_init(rd_kafka_t *rk) {
|
|
773
|
+
rd_assert(thrd_is_current(rk->rk_thread));
|
|
774
|
+
|
|
775
|
+
rd_atomic32_init(&rk->rk_eos.inflight_toppar_cnt, 0);
|
|
776
|
+
rd_kafka_pid_reset(&rk->rk_eos.pid);
|
|
777
|
+
|
|
778
|
+
/* The transactional producer acquires the PID
|
|
779
|
+
* from init_transactions(), for non-transactional producers
|
|
780
|
+
* the PID can be acquired right away. */
|
|
781
|
+
if (rd_kafka_is_transactional(rk))
|
|
782
|
+
rd_kafka_txns_init(rk);
|
|
783
|
+
else
|
|
784
|
+
/* There are no available brokers this early,
|
|
785
|
+
* so just set the state to indicate that we want to
|
|
786
|
+
* acquire a PID as soon as possible and start
|
|
787
|
+
* the timer. */
|
|
788
|
+
rd_kafka_idemp_start(rk, rd_false /*non-immediate*/);
|
|
789
|
+
}
|
|
790
|
+
|
|
791
|
+
|
|
792
|
+
/**
|
|
793
|
+
* @brief Terminate and clean up idempotent producer
|
|
794
|
+
*
|
|
795
|
+
* @locality rdkafka main thread
|
|
796
|
+
* @locks rd_kafka_wrlock() MUST be held
|
|
797
|
+
*/
|
|
798
|
+
void rd_kafka_idemp_term(rd_kafka_t *rk) {
|
|
799
|
+
rd_assert(thrd_is_current(rk->rk_thread));
|
|
800
|
+
|
|
801
|
+
rd_kafka_wrlock(rk);
|
|
802
|
+
if (rd_kafka_is_transactional(rk))
|
|
803
|
+
rd_kafka_txns_term(rk);
|
|
804
|
+
rd_kafka_idemp_set_state(rk, RD_KAFKA_IDEMP_STATE_TERM);
|
|
805
|
+
rd_kafka_wrunlock(rk);
|
|
806
|
+
rd_kafka_timer_stop(&rk->rk_timers, &rk->rk_eos.pid_tmr, 1);
|
|
807
|
+
}
|