@ohos-ports/confluentinc-kafka-javascript 1.10.0-beta.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/CHANGELOG.md +457 -0
- package/LICENSE.kafkajs +31 -0
- package/LICENSE.node-rdkafka +25 -0
- package/LICENSE.txt +20 -0
- package/README.md +133 -0
- package/binding.gyp +184 -0
- package/build/Release/confluent-kafka-javascript.node +0 -0
- package/build/deps/librdkafka++.so.1 +0 -0
- package/build/deps/librdkafka.Makefile +6 -0
- package/build/deps/librdkafka.so.1 +0 -0
- package/build/deps/librdkafka.target.mk +55 -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 +35 -0
- package/deps/librdkafka/.gdbmacros +19 -0
- package/deps/librdkafka/CHANGELOG.md +2477 -0
- package/deps/librdkafka/CMakeLists.txt +291 -0
- package/deps/librdkafka/CODE_OF_CONDUCT.md +46 -0
- package/deps/librdkafka/CONFIGURATION.md +212 -0
- package/deps/librdkafka/CONTRIBUTING.md +431 -0
- package/deps/librdkafka/Doxyfile +2375 -0
- package/deps/librdkafka/INTRODUCTION.md +2752 -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 +201 -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 +341 -0
- package/deps/librdkafka/dev-conf.sh +123 -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/service.yml +182 -0
- package/deps/librdkafka/src/CMakeLists.txt +379 -0
- package/deps/librdkafka/src/Makefile +105 -0
- package/deps/librdkafka/src/README.lz4.md +30 -0
- package/deps/librdkafka/src/cJSON.c +3191 -0
- package/deps/librdkafka/src/cJSON.h +306 -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 +592 -0
- package/deps/librdkafka/src/rdaddr.c +255 -0
- package/deps/librdkafka/src/rdaddr.h +202 -0
- package/deps/librdkafka/src/rdatomic.h +262 -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 +831 -0
- package/deps/librdkafka/src/rdhttp.h +101 -0
- package/deps/librdkafka/src/rdinterval.h +177 -0
- package/deps/librdkafka/src/rdkafka.c +7287 -0
- package/deps/librdkafka/src/rdkafka.h +11795 -0
- package/deps/librdkafka/src/rdkafka_admin.c +10165 -0
- package/deps/librdkafka/src/rdkafka_admin.h +658 -0
- package/deps/librdkafka/src/rdkafka_assignment.c +1282 -0
- package/deps/librdkafka/src/rdkafka_assignment.h +73 -0
- package/deps/librdkafka/src/rdkafka_assignor.c +1800 -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 +222 -0
- package/deps/librdkafka/src/rdkafka_broker.c +6736 -0
- package/deps/librdkafka/src/rdkafka_broker.h +851 -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 +8310 -0
- package/deps/librdkafka/src/rdkafka_cgrp.h +589 -0
- package/deps/librdkafka/src/rdkafka_conf.c +5177 -0
- package/deps/librdkafka/src/rdkafka_conf.h +746 -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 +3820 -0
- package/deps/librdkafka/src/rdkafka_fetcher.h +62 -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 +1505 -0
- package/deps/librdkafka/src/rdkafka_interceptor.c +842 -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 +2347 -0
- package/deps/librdkafka/src/rdkafka_metadata.h +350 -0
- package/deps/librdkafka/src/rdkafka_metadata_cache.c +1183 -0
- package/deps/librdkafka/src/rdkafka_mock.c +4514 -0
- package/deps/librdkafka/src/rdkafka_mock.h +867 -0
- package/deps/librdkafka/src/rdkafka_mock_cgrp.c +1877 -0
- package/deps/librdkafka/src/rdkafka_mock_handlers.c +5255 -0
- package/deps/librdkafka/src/rdkafka_mock_int.h +1005 -0
- package/deps/librdkafka/src/rdkafka_mock_sharegrp.c +1207 -0
- package/deps/librdkafka/src/rdkafka_msg.c +2619 -0
- package/deps/librdkafka/src/rdkafka_msg.h +629 -0
- package/deps/librdkafka/src/rdkafka_msgbatch.h +62 -0
- package/deps/librdkafka/src/rdkafka_msgset.h +105 -0
- package/deps/librdkafka/src/rdkafka_msgset_reader.c +2099 -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 +1219 -0
- package/deps/librdkafka/src/rdkafka_op.h +1065 -0
- package/deps/librdkafka/src/rdkafka_partition.c +5109 -0
- package/deps/librdkafka/src/rdkafka_partition.h +1215 -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 +739 -0
- package/deps/librdkafka/src/rdkafka_protocol.h +131 -0
- package/deps/librdkafka/src/rdkafka_queue.c +1351 -0
- package/deps/librdkafka/src/rdkafka_queue.h +1235 -0
- package/deps/librdkafka/src/rdkafka_range_assignor.c +1748 -0
- package/deps/librdkafka/src/rdkafka_request.c +7298 -0
- package/deps/librdkafka/src/rdkafka_request.h +761 -0
- package/deps/librdkafka/src/rdkafka_roundrobin_assignor.c +123 -0
- package/deps/librdkafka/src/rdkafka_sasl.c +589 -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 +1827 -0
- package/deps/librdkafka/src/rdkafka_sasl_oauthbearer_oidc.h +52 -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_share_acknowledgement.c +1445 -0
- package/deps/librdkafka/src/rdkafka_share_acknowledgement.h +373 -0
- package/deps/librdkafka/src/rdkafka_ssl.c +2235 -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 +411 -0
- package/deps/librdkafka/src/rdkafka_telemetry.c +761 -0
- package/deps/librdkafka/src/rdkafka_telemetry.h +52 -0
- package/deps/librdkafka/src/rdkafka_telemetry_decode.c +1307 -0
- package/deps/librdkafka/src/rdkafka_telemetry_decode.h +59 -0
- package/deps/librdkafka/src/rdkafka_telemetry_encode.c +1309 -0
- package/deps/librdkafka/src/rdkafka_telemetry_encode.h +459 -0
- package/deps/librdkafka/src/rdkafka_timer.c +407 -0
- package/deps/librdkafka/src/rdkafka_timer.h +117 -0
- package/deps/librdkafka/src/rdkafka_topic.c +2382 -0
- package/deps/librdkafka/src/rdkafka_topic.h +369 -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 +593 -0
- package/deps/librdkafka/src/rdlist.h +444 -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 +151 -0
- package/deps/librdkafka/src/rdrand.h +72 -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 +564 -0
- package/deps/librdkafka/src/rdunittest.h +232 -0
- package/deps/librdkafka/src/rdunittest_acknowledge.c +1177 -0
- package/deps/librdkafka/src/rdunittest_fetcher.c +1211 -0
- package/deps/librdkafka/src/rdunittest_msgset_errors.c +1521 -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 +210 -0
- package/deps/librdkafka/src/tinycthread_extra.h +218 -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 +272 -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 +444 -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 +331 -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 +529 -0
- package/deps/librdkafka/tests/0065-yield.cpp +140 -0
- package/deps/librdkafka/tests/0066-plugins.cpp +143 -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 +366 -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 +674 -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 +1164 -0
- package/deps/librdkafka/tests/0127-fetch_queue_backoff.cpp +165 -0
- package/deps/librdkafka/tests/0128-sasl_callback_queue.cpp +217 -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 +279 -0
- package/deps/librdkafka/tests/0136-resolve_cb.c +181 -0
- package/deps/librdkafka/tests/0137-barrier_batch_consume.c +752 -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 +931 -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 +1210 -0
- package/deps/librdkafka/tests/0148-offset_fetch_commit_error_mock.c +569 -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/0155-share_group_heartbeat_mock.c +2695 -0
- package/deps/librdkafka/tests/0156-share_consumer_fetch_mock.c +1551 -0
- package/deps/librdkafka/tests/0157-share_consumer_ack_mock.c +1788 -0
- package/deps/librdkafka/tests/0158-share_consumer_transactions_mock.c +467 -0
- package/deps/librdkafka/tests/0170-share_consumer_subscription.c +2192 -0
- package/deps/librdkafka/tests/0171-share_consumer_consume.c +2150 -0
- package/deps/librdkafka/tests/0172-share_consumer_acknowledge.c +1919 -0
- package/deps/librdkafka/tests/0173-share_consumer_commit_async.c +2735 -0
- package/deps/librdkafka/tests/0174-share_consumer_concurrency.c +1434 -0
- package/deps/librdkafka/tests/0175-share_consumer_groups.c +574 -0
- package/deps/librdkafka/tests/0176-share_consumer_commit_sync.c +2986 -0
- package/deps/librdkafka/tests/0177-share_consumer_transactions.c +1815 -0
- package/deps/librdkafka/tests/0178-share_consumer_close.c +2102 -0
- package/deps/librdkafka/tests/0179-share_consumer_destroy.c +2482 -0
- package/deps/librdkafka/tests/0180-share_consumer_config.c +1677 -0
- package/deps/librdkafka/tests/0181-share_consumer_topic_delete.c +354 -0
- package/deps/librdkafka/tests/0182-share_consumer_error_handling_mock.c +3358 -0
- package/deps/librdkafka/tests/0183-share_consumer_leader_change_mock.c +1234 -0
- package/deps/librdkafka/tests/0184-share_consumer_topic_recreate.c +1356 -0
- package/deps/librdkafka/tests/0185-share_consumer_max_poll_interval.c +557 -0
- package/deps/librdkafka/tests/0186-share_consumer_fatal_error.c +360 -0
- package/deps/librdkafka/tests/0190-share_consumer_telemetry.c +387 -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 +193 -0
- package/deps/librdkafka/tests/LibrdkafkaTestApp.py +291 -0
- package/deps/librdkafka/tests/Makefile +182 -0
- package/deps/librdkafka/tests/README.md +514 -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 +203 -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 +81 -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 +141 -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/share_telemetry_verify/share-otel-collector-config.yaml +28 -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 +8376 -0
- package/deps/librdkafka/tests/test.conf.example +27 -0
- package/deps/librdkafka/tests/test.h +1150 -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.15.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 +282 -0
- package/deps/librdkafka/win32/librdkafkacpp/librdkafkacpp.vcxproj +104 -0
- package/deps/librdkafka/win32/msbuild.ps1 +58 -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 +278 -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 +83 -0
- package/deps/windows-install.py +80 -0
- package/index.d.ts +3 -0
- package/lib/admin.js +732 -0
- package/lib/client.js +679 -0
- package/lib/error.js +501 -0
- package/lib/index.js +8 -0
- package/lib/kafka-consumer-stream.js +399 -0
- package/lib/kafka-consumer.js +798 -0
- package/lib/kafkajs/_admin.js +1052 -0
- package/lib/kafkajs/_common.js +887 -0
- package/lib/kafkajs/_consumer.js +2156 -0
- package/lib/kafkajs/_consumer_cache.js +310 -0
- package/lib/kafkajs/_error.js +298 -0
- package/lib/kafkajs/_kafka.js +125 -0
- package/lib/kafkajs/_linked-list.js +220 -0
- package/lib/kafkajs/_producer.js +863 -0
- package/lib/kafkajs/index.js +5 -0
- package/lib/producer/high-level-producer.js +400 -0
- package/lib/producer-stream.js +337 -0
- package/lib/producer.js +405 -0
- package/lib/rdkafka.js +44 -0
- package/lib/tools/ref-counter.js +53 -0
- package/lib/topic-partition.js +91 -0
- package/lib/topic.js +43 -0
- package/lib/util.js +55 -0
- package/librdkafka.js +12 -0
- package/package.json +85 -0
- package/shim/source_location +54 -0
- package/src/admin.cc +1597 -0
- package/src/admin.h +112 -0
- package/src/binding.cc +76 -0
- package/src/binding.h +25 -0
- package/src/callbacks.cc +676 -0
- package/src/callbacks.h +302 -0
- package/src/common.cc +1628 -0
- package/src/common.h +192 -0
- package/src/config.cc +219 -0
- package/src/config.h +61 -0
- package/src/connection.cc +703 -0
- package/src/connection.h +117 -0
- package/src/errors.cc +119 -0
- package/src/errors.h +60 -0
- package/src/kafka-consumer.cc +1539 -0
- package/src/kafka-consumer.h +147 -0
- package/src/producer.cc +917 -0
- package/src/producer.h +124 -0
- package/src/topic.cc +173 -0
- package/src/topic.h +54 -0
- package/src/workers.cc +1714 -0
- package/src/workers.h +690 -0
- package/types/config.d.ts +1269 -0
- package/types/errors.d.ts +373 -0
- package/types/kafkajs.d.ts +568 -0
- package/types/rdkafka.d.ts +571 -0
- package/util/configure.js +32 -0
- package/util/generate-docs.sh +18 -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,898 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* librdkafka - Apache Kafka C library
|
|
3
|
+
*
|
|
4
|
+
* Copyright (c) 2016-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
|
+
|
|
31
|
+
#include "rdkafka_int.h"
|
|
32
|
+
#include "rdkafka_feature.h"
|
|
33
|
+
#include "rdunittest.h"
|
|
34
|
+
|
|
35
|
+
#include <stdlib.h>
|
|
36
|
+
|
|
37
|
+
static const char *rd_kafka_feature_names[] = {"MsgVer1",
|
|
38
|
+
"ApiVersion",
|
|
39
|
+
"BrokerBalancedConsumer",
|
|
40
|
+
"ThrottleTime",
|
|
41
|
+
"Sasl",
|
|
42
|
+
"SaslHandshake",
|
|
43
|
+
"BrokerGroupCoordinator",
|
|
44
|
+
"LZ4",
|
|
45
|
+
"OffsetTime",
|
|
46
|
+
"MsgVer2",
|
|
47
|
+
"IdempotentProducer",
|
|
48
|
+
"ZSTD",
|
|
49
|
+
"SaslAuthReq",
|
|
50
|
+
"UnitTest",
|
|
51
|
+
NULL};
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
static const struct rd_kafka_feature_map {
|
|
55
|
+
/* RD_KAFKA_FEATURE_... */
|
|
56
|
+
int feature;
|
|
57
|
+
|
|
58
|
+
/* Depends on the following ApiVersions overlapping with
|
|
59
|
+
* what the broker supports: */
|
|
60
|
+
struct rd_kafka_ApiVersion depends[RD_KAFKAP__NUM];
|
|
61
|
+
|
|
62
|
+
} rd_kafka_feature_map[] = {
|
|
63
|
+
/**
|
|
64
|
+
* @brief List of features and the ApiVersions they depend on.
|
|
65
|
+
*
|
|
66
|
+
* The dependency list consists of the ApiKey followed by this
|
|
67
|
+
* client's supported minimum and maximum API versions.
|
|
68
|
+
* As long as this list and its versions overlaps with the
|
|
69
|
+
* broker supported API versions the feature will be enabled.
|
|
70
|
+
*/
|
|
71
|
+
{
|
|
72
|
+
|
|
73
|
+
/* @brief >=0.10.0: Message.MagicByte version 1:
|
|
74
|
+
* Relative offsets (KIP-31) and message timestamps (KIP-32). */
|
|
75
|
+
.feature = RD_KAFKA_FEATURE_MSGVER1,
|
|
76
|
+
.depends =
|
|
77
|
+
{
|
|
78
|
+
{RD_KAFKAP_Produce, 2, RD_KAFKAP_RPC_VERSION_MAX},
|
|
79
|
+
{RD_KAFKAP_Fetch, 2, RD_KAFKAP_RPC_VERSION_MAX},
|
|
80
|
+
{-1},
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
/* @brief >=0.11.0: Message.MagicByte version 2 */
|
|
85
|
+
.feature = RD_KAFKA_FEATURE_MSGVER2,
|
|
86
|
+
.depends =
|
|
87
|
+
{
|
|
88
|
+
{RD_KAFKAP_Produce, 3, RD_KAFKAP_RPC_VERSION_MAX},
|
|
89
|
+
{RD_KAFKAP_Fetch, 4, RD_KAFKAP_RPC_VERSION_MAX},
|
|
90
|
+
{-1},
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
/* @brief >=0.10.0: ApiVersionQuery support.
|
|
95
|
+
* @remark This is a bit of chicken-and-egg problem but needs to be
|
|
96
|
+
* set by feature_check() to avoid the feature being cleared
|
|
97
|
+
* even when broker supports it. */
|
|
98
|
+
.feature = RD_KAFKA_FEATURE_APIVERSION,
|
|
99
|
+
.depends =
|
|
100
|
+
{
|
|
101
|
+
{RD_KAFKAP_ApiVersion, 0, RD_KAFKAP_RPC_VERSION_MAX},
|
|
102
|
+
{-1},
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
/* @brief >=0.8.2.0: Broker-based Group coordinator */
|
|
107
|
+
.feature = RD_KAFKA_FEATURE_BROKER_GROUP_COORD,
|
|
108
|
+
.depends =
|
|
109
|
+
{
|
|
110
|
+
{RD_KAFKAP_FindCoordinator, 0, RD_KAFKAP_RPC_VERSION_MAX},
|
|
111
|
+
{-1},
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
/* @brief >=0.9.0: Broker-based balanced consumer groups (classic). */
|
|
116
|
+
.feature = RD_KAFKA_FEATURE_BROKER_BALANCED_CONSUMER,
|
|
117
|
+
.depends =
|
|
118
|
+
{
|
|
119
|
+
{RD_KAFKAP_FindCoordinator, 0, RD_KAFKAP_RPC_VERSION_MAX},
|
|
120
|
+
{RD_KAFKAP_OffsetCommit, 1, RD_KAFKAP_RPC_VERSION_MAX},
|
|
121
|
+
{RD_KAFKAP_OffsetFetch, 1, RD_KAFKAP_RPC_VERSION_MAX},
|
|
122
|
+
{RD_KAFKAP_JoinGroup, 0, RD_KAFKAP_RPC_VERSION_MAX},
|
|
123
|
+
{RD_KAFKAP_SyncGroup, 0, RD_KAFKAP_RPC_VERSION_MAX},
|
|
124
|
+
{RD_KAFKAP_Heartbeat, 0, RD_KAFKAP_RPC_VERSION_MAX},
|
|
125
|
+
{RD_KAFKAP_LeaveGroup, 0, RD_KAFKAP_RPC_VERSION_MAX},
|
|
126
|
+
{-1},
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
/* @brief Broker-based balanced consumer groups (KIP 848). */
|
|
131
|
+
.feature = RD_KAFKA_FEATURE_BROKER_BALANCED_CONSUMER,
|
|
132
|
+
.depends =
|
|
133
|
+
{
|
|
134
|
+
{RD_KAFKAP_ConsumerGroupHeartbeat, 0,
|
|
135
|
+
RD_KAFKAP_RPC_VERSION_MAX},
|
|
136
|
+
{RD_KAFKAP_OffsetCommit, 9, RD_KAFKAP_RPC_VERSION_MAX},
|
|
137
|
+
{RD_KAFKAP_OffsetFetch, 9, RD_KAFKAP_RPC_VERSION_MAX},
|
|
138
|
+
{-1},
|
|
139
|
+
},
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
/* @brief >=0.9.0: ThrottleTime */
|
|
143
|
+
.feature = RD_KAFKA_FEATURE_THROTTLETIME,
|
|
144
|
+
.depends =
|
|
145
|
+
{
|
|
146
|
+
{RD_KAFKAP_Produce, 1, RD_KAFKAP_RPC_VERSION_MAX},
|
|
147
|
+
{RD_KAFKAP_Fetch, 1, RD_KAFKAP_RPC_VERSION_MAX},
|
|
148
|
+
{-1},
|
|
149
|
+
},
|
|
150
|
+
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
/* @brief >=0.9.0: SASL (GSSAPI) authentication.
|
|
154
|
+
* Since SASL is not using the Kafka protocol
|
|
155
|
+
* we must use something else to map us to the
|
|
156
|
+
* proper broker version support:
|
|
157
|
+
* JoinGroup was released along with SASL in 0.9.0. */
|
|
158
|
+
.feature = RD_KAFKA_FEATURE_SASL_GSSAPI,
|
|
159
|
+
.depends =
|
|
160
|
+
{
|
|
161
|
+
{RD_KAFKAP_JoinGroup, 0, RD_KAFKAP_RPC_VERSION_MAX},
|
|
162
|
+
{-1},
|
|
163
|
+
},
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
/* @brief >=0.10.0: SASL (GSSAPI) authentication.
|
|
167
|
+
* Fallback in case JoinGroup is removed along with the
|
|
168
|
+
* "classic" consumer group protocol. */
|
|
169
|
+
.feature = RD_KAFKA_FEATURE_SASL_GSSAPI,
|
|
170
|
+
.depends =
|
|
171
|
+
{
|
|
172
|
+
{RD_KAFKAP_SaslHandshake, 0, RD_KAFKAP_RPC_VERSION_MAX},
|
|
173
|
+
{-1},
|
|
174
|
+
},
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
/* @brief >=0.10.0: SASL mechanism handshake (KIP-43)
|
|
178
|
+
* to automatically support other mechanisms
|
|
179
|
+
* than GSSAPI, such as PLAIN. */
|
|
180
|
+
.feature = RD_KAFKA_FEATURE_SASL_HANDSHAKE,
|
|
181
|
+
.depends =
|
|
182
|
+
{
|
|
183
|
+
{RD_KAFKAP_SaslHandshake, 0, RD_KAFKAP_RPC_VERSION_MAX},
|
|
184
|
+
{-1},
|
|
185
|
+
},
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
/* @brief >=0.8.2: LZ4 compression.
|
|
189
|
+
* Since LZ4 initially did not rely on a specific API
|
|
190
|
+
* type or version (it does in >=0.10.0)
|
|
191
|
+
* we must use something else to map us to the
|
|
192
|
+
* proper broker version support:
|
|
193
|
+
* GrooupCoordinator was released in 0.8.2 */
|
|
194
|
+
.feature = RD_KAFKA_FEATURE_LZ4,
|
|
195
|
+
.depends =
|
|
196
|
+
{
|
|
197
|
+
{RD_KAFKAP_FindCoordinator, 0, RD_KAFKAP_RPC_VERSION_MAX},
|
|
198
|
+
{-1},
|
|
199
|
+
},
|
|
200
|
+
},
|
|
201
|
+
{/* @brief >=0.10.1.0: Offset v1 (KIP-79)
|
|
202
|
+
* Time-based offset requests */
|
|
203
|
+
.feature = RD_KAFKA_FEATURE_OFFSET_TIME,
|
|
204
|
+
.depends =
|
|
205
|
+
{
|
|
206
|
+
{RD_KAFKAP_ListOffsets, 1, RD_KAFKAP_RPC_VERSION_MAX},
|
|
207
|
+
{-1},
|
|
208
|
+
}},
|
|
209
|
+
{/* @brief >=0.11.0.0: Idempotent Producer*/
|
|
210
|
+
.feature = RD_KAFKA_FEATURE_IDEMPOTENT_PRODUCER,
|
|
211
|
+
.depends =
|
|
212
|
+
{
|
|
213
|
+
{RD_KAFKAP_InitProducerId, 0, RD_KAFKAP_RPC_VERSION_MAX},
|
|
214
|
+
{-1},
|
|
215
|
+
}},
|
|
216
|
+
{
|
|
217
|
+
/* @brief >=2.1.0-IV2: Support ZStandard Compression Codec (KIP-110) */
|
|
218
|
+
.feature = RD_KAFKA_FEATURE_ZSTD,
|
|
219
|
+
.depends =
|
|
220
|
+
{
|
|
221
|
+
{RD_KAFKAP_Produce, 7, RD_KAFKAP_RPC_VERSION_MAX},
|
|
222
|
+
{RD_KAFKAP_Fetch, 10, RD_KAFKAP_RPC_VERSION_MAX},
|
|
223
|
+
{-1},
|
|
224
|
+
},
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
/* @brief >=1.0.0: SaslAuthenticateRequest */
|
|
228
|
+
.feature = RD_KAFKA_FEATURE_SASL_AUTH_REQ,
|
|
229
|
+
.depends =
|
|
230
|
+
{
|
|
231
|
+
{RD_KAFKAP_SaslHandshake, 1, RD_KAFKAP_RPC_VERSION_MAX},
|
|
232
|
+
{RD_KAFKAP_SaslAuthenticate, 0, RD_KAFKAP_RPC_VERSION_MAX},
|
|
233
|
+
{-1},
|
|
234
|
+
},
|
|
235
|
+
},
|
|
236
|
+
{.feature = 0}, /* sentinel */
|
|
237
|
+
};
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* @brief In absence of KIP-35 support in earlier broker versions we provide
|
|
243
|
+
* hardcoded lists that corresponds to older broker versions.
|
|
244
|
+
*/
|
|
245
|
+
|
|
246
|
+
/* >= 0.10.0.0: dummy for all future versions that support ApiVersionRequest */
|
|
247
|
+
static struct rd_kafka_ApiVersion rd_kafka_ApiVersion_Queryable[] = {
|
|
248
|
+
{RD_KAFKAP_ApiVersion, 0, 0}};
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
/* =~ 0.9.0 */
|
|
252
|
+
static struct rd_kafka_ApiVersion rd_kafka_ApiVersion_0_9_0[] = {
|
|
253
|
+
{RD_KAFKAP_Produce, 0, 1}, {RD_KAFKAP_Fetch, 0, 1},
|
|
254
|
+
{RD_KAFKAP_ListOffsets, 0, 0}, {RD_KAFKAP_Metadata, 0, 0},
|
|
255
|
+
{RD_KAFKAP_OffsetCommit, 0, 2}, {RD_KAFKAP_OffsetFetch, 0, 1},
|
|
256
|
+
{RD_KAFKAP_FindCoordinator, 0, 0}, {RD_KAFKAP_JoinGroup, 0, 0},
|
|
257
|
+
{RD_KAFKAP_Heartbeat, 0, 0}, {RD_KAFKAP_LeaveGroup, 0, 0},
|
|
258
|
+
{RD_KAFKAP_SyncGroup, 0, 0}, {RD_KAFKAP_DescribeGroups, 0, 0},
|
|
259
|
+
{RD_KAFKAP_ListGroups, 0, 0}};
|
|
260
|
+
|
|
261
|
+
/* =~ 0.8.2 */
|
|
262
|
+
static struct rd_kafka_ApiVersion rd_kafka_ApiVersion_0_8_2[] = {
|
|
263
|
+
{RD_KAFKAP_Produce, 0, 0}, {RD_KAFKAP_Fetch, 0, 0},
|
|
264
|
+
{RD_KAFKAP_ListOffsets, 0, 0}, {RD_KAFKAP_Metadata, 0, 0},
|
|
265
|
+
{RD_KAFKAP_OffsetCommit, 0, 1}, {RD_KAFKAP_OffsetFetch, 0, 1},
|
|
266
|
+
{RD_KAFKAP_FindCoordinator, 0, 0}};
|
|
267
|
+
|
|
268
|
+
/* =~ 0.8.1 */
|
|
269
|
+
static struct rd_kafka_ApiVersion rd_kafka_ApiVersion_0_8_1[] = {
|
|
270
|
+
{RD_KAFKAP_Produce, 0, 0}, {RD_KAFKAP_Fetch, 0, 0},
|
|
271
|
+
{RD_KAFKAP_ListOffsets, 0, 0}, {RD_KAFKAP_Metadata, 0, 0},
|
|
272
|
+
{RD_KAFKAP_OffsetCommit, 0, 1}, {RD_KAFKAP_OffsetFetch, 0, 0}};
|
|
273
|
+
|
|
274
|
+
/* =~ 0.8.0 */
|
|
275
|
+
static struct rd_kafka_ApiVersion rd_kafka_ApiVersion_0_8_0[] = {
|
|
276
|
+
{RD_KAFKAP_Produce, 0, 0},
|
|
277
|
+
{RD_KAFKAP_Fetch, 0, 0},
|
|
278
|
+
{RD_KAFKAP_ListOffsets, 0, 0},
|
|
279
|
+
{RD_KAFKAP_Metadata, 0, 0}};
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* @brief Returns the ApiVersion list for legacy broker versions that do not
|
|
284
|
+
* support the ApiVersionQuery request. E.g., brokers <0.10.0.
|
|
285
|
+
*
|
|
286
|
+
* @param broker_version Broker version to match (longest prefix matching).
|
|
287
|
+
* @param use_default If no match is found return the default APIs (but return
|
|
288
|
+
* 0).
|
|
289
|
+
*
|
|
290
|
+
* @returns 1 if \p broker_version was recognized: \p *apisp will point to
|
|
291
|
+
* the ApiVersion list and *api_cntp will be set to its element count.
|
|
292
|
+
* 0 if \p broker_version was not recognized: \p *apisp remains
|
|
293
|
+
* unchanged.
|
|
294
|
+
*
|
|
295
|
+
*/
|
|
296
|
+
int rd_kafka_get_legacy_ApiVersions(const char *broker_version,
|
|
297
|
+
struct rd_kafka_ApiVersion **apisp,
|
|
298
|
+
size_t *api_cntp,
|
|
299
|
+
const char *fallback) {
|
|
300
|
+
#define _VERMAP(PFX, APIS) \
|
|
301
|
+
{ PFX, APIS, RD_ARRAYSIZE(APIS) }
|
|
302
|
+
static const struct {
|
|
303
|
+
const char *pfx;
|
|
304
|
+
struct rd_kafka_ApiVersion *apis;
|
|
305
|
+
size_t api_cnt;
|
|
306
|
+
} vermap[] = {_VERMAP("0.9.0", rd_kafka_ApiVersion_0_9_0),
|
|
307
|
+
_VERMAP("0.8.2", rd_kafka_ApiVersion_0_8_2),
|
|
308
|
+
_VERMAP("0.8.1", rd_kafka_ApiVersion_0_8_1),
|
|
309
|
+
_VERMAP("0.8.0", rd_kafka_ApiVersion_0_8_0),
|
|
310
|
+
{"0.7.", NULL}, /* Unsupported */
|
|
311
|
+
{"0.6.", NULL}, /* Unsupported */
|
|
312
|
+
_VERMAP("", rd_kafka_ApiVersion_Queryable),
|
|
313
|
+
{NULL}};
|
|
314
|
+
int i;
|
|
315
|
+
int fallback_i = -1;
|
|
316
|
+
int ret = 0;
|
|
317
|
+
|
|
318
|
+
*apisp = NULL;
|
|
319
|
+
*api_cntp = 0;
|
|
320
|
+
|
|
321
|
+
for (i = 0; vermap[i].pfx; i++) {
|
|
322
|
+
if (!strncmp(vermap[i].pfx, broker_version,
|
|
323
|
+
strlen(vermap[i].pfx))) {
|
|
324
|
+
if (!vermap[i].apis)
|
|
325
|
+
return 0;
|
|
326
|
+
*apisp = vermap[i].apis;
|
|
327
|
+
*api_cntp = vermap[i].api_cnt;
|
|
328
|
+
ret = 1;
|
|
329
|
+
break;
|
|
330
|
+
} else if (fallback && !strcmp(vermap[i].pfx, fallback))
|
|
331
|
+
fallback_i = i;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
if (!*apisp && fallback) {
|
|
335
|
+
rd_kafka_assert(NULL, fallback_i != -1);
|
|
336
|
+
*apisp = vermap[fallback_i].apis;
|
|
337
|
+
*api_cntp = vermap[fallback_i].api_cnt;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
return ret;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
|
|
344
|
+
/**
|
|
345
|
+
* @returns 1 if the provided broker version (probably)
|
|
346
|
+
* supports api.version.request.
|
|
347
|
+
*/
|
|
348
|
+
int rd_kafka_ApiVersion_is_queryable(const char *broker_version) {
|
|
349
|
+
struct rd_kafka_ApiVersion *apis;
|
|
350
|
+
size_t api_cnt;
|
|
351
|
+
|
|
352
|
+
|
|
353
|
+
if (!rd_kafka_get_legacy_ApiVersions(broker_version, &apis, &api_cnt,
|
|
354
|
+
0))
|
|
355
|
+
return 0;
|
|
356
|
+
|
|
357
|
+
return apis == rd_kafka_ApiVersion_Queryable;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
|
|
361
|
+
|
|
362
|
+
/**
|
|
363
|
+
* @brief Check if match's versions overlaps with \p apis.
|
|
364
|
+
*
|
|
365
|
+
* @returns 1 if true, else 0.
|
|
366
|
+
* @remark \p apis must be sorted using rd_kafka_ApiVersion_key_cmp()
|
|
367
|
+
*/
|
|
368
|
+
static RD_INLINE int
|
|
369
|
+
rd_kafka_ApiVersion_check(const struct rd_kafka_ApiVersion *apis,
|
|
370
|
+
size_t api_cnt,
|
|
371
|
+
const struct rd_kafka_ApiVersion *match) {
|
|
372
|
+
const struct rd_kafka_ApiVersion *api;
|
|
373
|
+
|
|
374
|
+
api = bsearch(match, apis, api_cnt, sizeof(*apis),
|
|
375
|
+
rd_kafka_ApiVersion_key_cmp);
|
|
376
|
+
if (unlikely(!api))
|
|
377
|
+
return 0;
|
|
378
|
+
|
|
379
|
+
return match->MinVer <= api->MaxVer && api->MinVer <= match->MaxVer;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
|
|
383
|
+
/**
|
|
384
|
+
* @brief Compare broker's supported API versions to our feature request map
|
|
385
|
+
* and enable/disable features accordingly.
|
|
386
|
+
*
|
|
387
|
+
* @param broker_apis Broker's supported APIs. If NULL the
|
|
388
|
+
* \p broker.version.fallback configuration property will specify a
|
|
389
|
+
* default legacy version to use.
|
|
390
|
+
* @param broker_api_cnt Number of elements in \p broker_apis
|
|
391
|
+
*
|
|
392
|
+
* @returns the supported features (bitmask) to enable.
|
|
393
|
+
*/
|
|
394
|
+
int rd_kafka_features_check(rd_kafka_broker_t *rkb,
|
|
395
|
+
struct rd_kafka_ApiVersion *broker_apis,
|
|
396
|
+
size_t broker_api_cnt) {
|
|
397
|
+
int features = 0;
|
|
398
|
+
int i;
|
|
399
|
+
|
|
400
|
+
/* Scan through features. */
|
|
401
|
+
for (i = 0; rd_kafka_feature_map[i].feature != 0; i++) {
|
|
402
|
+
const struct rd_kafka_ApiVersion *match;
|
|
403
|
+
int fails = 0;
|
|
404
|
+
|
|
405
|
+
/* For each feature check that all its API dependencies
|
|
406
|
+
* can be fullfilled. */
|
|
407
|
+
|
|
408
|
+
for (match = &rd_kafka_feature_map[i].depends[0];
|
|
409
|
+
match->ApiKey != -1; match++) {
|
|
410
|
+
int r;
|
|
411
|
+
|
|
412
|
+
r = rd_kafka_ApiVersion_check(broker_apis,
|
|
413
|
+
broker_api_cnt, match);
|
|
414
|
+
|
|
415
|
+
rd_rkb_dbg(rkb, FEATURE, "APIVERSION",
|
|
416
|
+
" Feature %s: %s (%hd..%hd) "
|
|
417
|
+
"%ssupported by broker",
|
|
418
|
+
rd_kafka_features2str(
|
|
419
|
+
rd_kafka_feature_map[i].feature),
|
|
420
|
+
rd_kafka_ApiKey2str(match->ApiKey),
|
|
421
|
+
match->MinVer, match->MaxVer,
|
|
422
|
+
r ? "" : "NOT ");
|
|
423
|
+
|
|
424
|
+
fails += !r;
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
rd_rkb_dbg(
|
|
428
|
+
rkb, FEATURE, "APIVERSION", "%s feature %s",
|
|
429
|
+
fails ? "Disabling" : "Enabling",
|
|
430
|
+
rd_kafka_features2str(rd_kafka_feature_map[i].feature));
|
|
431
|
+
|
|
432
|
+
|
|
433
|
+
if (!fails)
|
|
434
|
+
features |= rd_kafka_feature_map[i].feature;
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
return features;
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
|
|
441
|
+
|
|
442
|
+
/**
|
|
443
|
+
* @brief Make an allocated and sorted copy of \p src.
|
|
444
|
+
*/
|
|
445
|
+
void rd_kafka_ApiVersions_copy(const struct rd_kafka_ApiVersion *src,
|
|
446
|
+
size_t src_cnt,
|
|
447
|
+
struct rd_kafka_ApiVersion **dstp,
|
|
448
|
+
size_t *dst_cntp) {
|
|
449
|
+
*dstp = rd_memdup(src, sizeof(*src) * src_cnt);
|
|
450
|
+
*dst_cntp = src_cnt;
|
|
451
|
+
qsort(*dstp, *dst_cntp, sizeof(**dstp), rd_kafka_ApiVersion_key_cmp);
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
|
|
455
|
+
|
|
456
|
+
/**
|
|
457
|
+
* @returns a human-readable feature flag string.
|
|
458
|
+
*/
|
|
459
|
+
const char *rd_kafka_features2str(int features) {
|
|
460
|
+
static RD_TLS char ret[4][256];
|
|
461
|
+
size_t of = 0;
|
|
462
|
+
static RD_TLS int reti = 0;
|
|
463
|
+
int i;
|
|
464
|
+
|
|
465
|
+
reti = (reti + 1) % 4;
|
|
466
|
+
|
|
467
|
+
*ret[reti] = '\0';
|
|
468
|
+
for (i = 0; rd_kafka_feature_names[i]; i++) {
|
|
469
|
+
int r;
|
|
470
|
+
if (!(features & (1 << i)))
|
|
471
|
+
continue;
|
|
472
|
+
|
|
473
|
+
r = rd_snprintf(ret[reti] + of, sizeof(ret[reti]) - of, "%s%s",
|
|
474
|
+
of == 0 ? "" : ",", rd_kafka_feature_names[i]);
|
|
475
|
+
if ((size_t)r > sizeof(ret[reti]) - of) {
|
|
476
|
+
/* Out of space */
|
|
477
|
+
memcpy(&ret[reti][sizeof(ret[reti]) - 3], "..", 3);
|
|
478
|
+
break;
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
of += r;
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
return ret[reti];
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
int rd_ut_features_check_assert_features(const char *testname,
|
|
488
|
+
int features,
|
|
489
|
+
rd_bool_t all_enabled) {
|
|
490
|
+
int i;
|
|
491
|
+
for (i = 0; rd_kafka_feature_map[i].feature != 0; i++) {
|
|
492
|
+
rd_bool_t enabled =
|
|
493
|
+
(features & rd_kafka_feature_map[i].feature) > 0;
|
|
494
|
+
RD_UT_ASSERT(
|
|
495
|
+
enabled == all_enabled,
|
|
496
|
+
"%s: Feature \"%s\" should %sbe enabled", testname,
|
|
497
|
+
rd_kafka_features2str(rd_kafka_feature_map[i].feature),
|
|
498
|
+
all_enabled ? "" : "not ");
|
|
499
|
+
}
|
|
500
|
+
return 0;
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
int rd_ut_features_check(void) {
|
|
504
|
+
rd_kafka_t rk = RD_ZERO_INIT;
|
|
505
|
+
rd_kafka_broker_t rkb = RD_ZERO_INIT;
|
|
506
|
+
rkb.rkb_rk = &rk;
|
|
507
|
+
int features;
|
|
508
|
+
int fails = 0;
|
|
509
|
+
|
|
510
|
+
/* ApiVersions must be sorted in these structs */
|
|
511
|
+
|
|
512
|
+
/* No ApiVersions for testing matching no feature */
|
|
513
|
+
struct rd_kafka_ApiVersion api_versions_none[] = {0};
|
|
514
|
+
|
|
515
|
+
/* ApiVersions removed in KIP-896 */
|
|
516
|
+
struct rd_kafka_ApiVersion api_versions_kip_896[] = {
|
|
517
|
+
{
|
|
518
|
+
.ApiKey = RD_KAFKAP_Produce,
|
|
519
|
+
.MinVer = 3,
|
|
520
|
+
.MaxVer = 12,
|
|
521
|
+
},
|
|
522
|
+
{
|
|
523
|
+
.ApiKey = RD_KAFKAP_Fetch,
|
|
524
|
+
.MinVer = 4,
|
|
525
|
+
.MaxVer = 17,
|
|
526
|
+
},
|
|
527
|
+
{
|
|
528
|
+
.ApiKey = RD_KAFKAP_ListOffsets,
|
|
529
|
+
.MinVer = 1,
|
|
530
|
+
.MaxVer = 10,
|
|
531
|
+
},
|
|
532
|
+
{
|
|
533
|
+
.ApiKey = RD_KAFKAP_Metadata,
|
|
534
|
+
.MinVer = 0,
|
|
535
|
+
.MaxVer = 13,
|
|
536
|
+
},
|
|
537
|
+
{
|
|
538
|
+
.ApiKey = RD_KAFKAP_OffsetCommit,
|
|
539
|
+
.MinVer = 2,
|
|
540
|
+
.MaxVer = 9,
|
|
541
|
+
},
|
|
542
|
+
{
|
|
543
|
+
.ApiKey = RD_KAFKAP_OffsetFetch,
|
|
544
|
+
.MinVer = 1,
|
|
545
|
+
.MaxVer = 9,
|
|
546
|
+
},
|
|
547
|
+
{
|
|
548
|
+
.ApiKey = RD_KAFKAP_FindCoordinator,
|
|
549
|
+
.MinVer = 0,
|
|
550
|
+
.MaxVer = 6,
|
|
551
|
+
},
|
|
552
|
+
{
|
|
553
|
+
.ApiKey = RD_KAFKAP_JoinGroup,
|
|
554
|
+
.MinVer = 2,
|
|
555
|
+
.MaxVer = 9,
|
|
556
|
+
},
|
|
557
|
+
{
|
|
558
|
+
.ApiKey = RD_KAFKAP_Heartbeat,
|
|
559
|
+
.MinVer = 0,
|
|
560
|
+
.MaxVer = 4,
|
|
561
|
+
},
|
|
562
|
+
{
|
|
563
|
+
.ApiKey = RD_KAFKAP_LeaveGroup,
|
|
564
|
+
.MinVer = 0,
|
|
565
|
+
.MaxVer = 5,
|
|
566
|
+
},
|
|
567
|
+
{
|
|
568
|
+
.ApiKey = RD_KAFKAP_SyncGroup,
|
|
569
|
+
.MinVer = 0,
|
|
570
|
+
.MaxVer = 5,
|
|
571
|
+
},
|
|
572
|
+
{
|
|
573
|
+
.ApiKey = RD_KAFKAP_SaslHandshake,
|
|
574
|
+
.MinVer = 0,
|
|
575
|
+
.MaxVer = 1,
|
|
576
|
+
},
|
|
577
|
+
{
|
|
578
|
+
.ApiKey = RD_KAFKAP_ApiVersion,
|
|
579
|
+
.MinVer = 0,
|
|
580
|
+
.MaxVer = 4,
|
|
581
|
+
},
|
|
582
|
+
{
|
|
583
|
+
.ApiKey = RD_KAFKAP_InitProducerId,
|
|
584
|
+
.MinVer = 0,
|
|
585
|
+
.MaxVer = 5,
|
|
586
|
+
},
|
|
587
|
+
{
|
|
588
|
+
.ApiKey = RD_KAFKAP_SaslAuthenticate,
|
|
589
|
+
.MinVer = 0,
|
|
590
|
+
.MaxVer = 2,
|
|
591
|
+
},
|
|
592
|
+
};
|
|
593
|
+
|
|
594
|
+
/* ApiVersions to remove in next Apache Kafka version
|
|
595
|
+
* (see baseline in KIP-896) */
|
|
596
|
+
struct rd_kafka_ApiVersion api_versions_next_apache_kafka_next[] = {
|
|
597
|
+
{
|
|
598
|
+
.ApiKey = RD_KAFKAP_Produce,
|
|
599
|
+
.MinVer = 7,
|
|
600
|
+
.MaxVer = 12,
|
|
601
|
+
},
|
|
602
|
+
{
|
|
603
|
+
.ApiKey = RD_KAFKAP_Fetch,
|
|
604
|
+
.MinVer = 10,
|
|
605
|
+
.MaxVer = 17,
|
|
606
|
+
},
|
|
607
|
+
{
|
|
608
|
+
.ApiKey = RD_KAFKAP_ListOffsets,
|
|
609
|
+
.MinVer = 4,
|
|
610
|
+
.MaxVer = 10,
|
|
611
|
+
},
|
|
612
|
+
{
|
|
613
|
+
.ApiKey = RD_KAFKAP_Metadata,
|
|
614
|
+
.MinVer = 7,
|
|
615
|
+
.MaxVer = 13,
|
|
616
|
+
},
|
|
617
|
+
{
|
|
618
|
+
.ApiKey = RD_KAFKAP_OffsetCommit,
|
|
619
|
+
.MinVer = 6,
|
|
620
|
+
.MaxVer = 9,
|
|
621
|
+
},
|
|
622
|
+
{
|
|
623
|
+
.ApiKey = RD_KAFKAP_OffsetFetch,
|
|
624
|
+
.MinVer = 5,
|
|
625
|
+
.MaxVer = 9,
|
|
626
|
+
},
|
|
627
|
+
{
|
|
628
|
+
.ApiKey = RD_KAFKAP_FindCoordinator,
|
|
629
|
+
.MinVer = 2,
|
|
630
|
+
.MaxVer = 6,
|
|
631
|
+
},
|
|
632
|
+
{
|
|
633
|
+
.ApiKey = RD_KAFKAP_JoinGroup,
|
|
634
|
+
.MinVer = 3,
|
|
635
|
+
.MaxVer = 9,
|
|
636
|
+
},
|
|
637
|
+
{
|
|
638
|
+
.ApiKey = RD_KAFKAP_Heartbeat,
|
|
639
|
+
.MinVer = 2,
|
|
640
|
+
.MaxVer = 4,
|
|
641
|
+
},
|
|
642
|
+
{
|
|
643
|
+
.ApiKey = RD_KAFKAP_LeaveGroup,
|
|
644
|
+
.MinVer = 2,
|
|
645
|
+
.MaxVer = 5,
|
|
646
|
+
},
|
|
647
|
+
{
|
|
648
|
+
.ApiKey = RD_KAFKAP_SyncGroup,
|
|
649
|
+
.MinVer = 2,
|
|
650
|
+
.MaxVer = 5,
|
|
651
|
+
},
|
|
652
|
+
{
|
|
653
|
+
.ApiKey = RD_KAFKAP_SaslHandshake,
|
|
654
|
+
.MinVer = 1,
|
|
655
|
+
.MaxVer = 1,
|
|
656
|
+
},
|
|
657
|
+
{
|
|
658
|
+
.ApiKey = RD_KAFKAP_ApiVersion,
|
|
659
|
+
.MinVer = 2,
|
|
660
|
+
.MaxVer = 4,
|
|
661
|
+
},
|
|
662
|
+
{
|
|
663
|
+
.ApiKey = RD_KAFKAP_InitProducerId,
|
|
664
|
+
.MinVer = 1,
|
|
665
|
+
.MaxVer = 5,
|
|
666
|
+
},
|
|
667
|
+
{
|
|
668
|
+
.ApiKey = RD_KAFKAP_SaslAuthenticate,
|
|
669
|
+
.MinVer = 0,
|
|
670
|
+
.MaxVer = 2,
|
|
671
|
+
},
|
|
672
|
+
};
|
|
673
|
+
|
|
674
|
+
/* ApiVersions don't overlap with those enabling the feature.
|
|
675
|
+
* At least one condition isn't matching */
|
|
676
|
+
struct rd_kafka_ApiVersion api_versions_no_overlap[] = {
|
|
677
|
+
{
|
|
678
|
+
.ApiKey = RD_KAFKAP_Produce,
|
|
679
|
+
.MinVer = 2,
|
|
680
|
+
.MaxVer = 2,
|
|
681
|
+
},
|
|
682
|
+
{
|
|
683
|
+
.ApiKey = RD_KAFKAP_Fetch,
|
|
684
|
+
.MinVer = 0,
|
|
685
|
+
.MaxVer = 0,
|
|
686
|
+
},
|
|
687
|
+
{
|
|
688
|
+
.ApiKey = RD_KAFKAP_ListOffsets,
|
|
689
|
+
.MinVer = 0,
|
|
690
|
+
.MaxVer = 0,
|
|
691
|
+
},
|
|
692
|
+
{
|
|
693
|
+
.ApiKey = RD_KAFKAP_Metadata,
|
|
694
|
+
.MinVer = 7,
|
|
695
|
+
.MaxVer = 13,
|
|
696
|
+
},
|
|
697
|
+
{
|
|
698
|
+
.ApiKey = RD_KAFKAP_OffsetCommit,
|
|
699
|
+
.MinVer = 6,
|
|
700
|
+
.MaxVer = 9,
|
|
701
|
+
},
|
|
702
|
+
{
|
|
703
|
+
.ApiKey = RD_KAFKAP_OffsetFetch,
|
|
704
|
+
.MinVer = 5,
|
|
705
|
+
.MaxVer = 8,
|
|
706
|
+
},
|
|
707
|
+
{
|
|
708
|
+
.ApiKey = RD_KAFKAP_Heartbeat,
|
|
709
|
+
.MinVer = 2,
|
|
710
|
+
.MaxVer = 4,
|
|
711
|
+
},
|
|
712
|
+
{
|
|
713
|
+
.ApiKey = RD_KAFKAP_LeaveGroup,
|
|
714
|
+
.MinVer = 2,
|
|
715
|
+
.MaxVer = 5,
|
|
716
|
+
},
|
|
717
|
+
{
|
|
718
|
+
.ApiKey = RD_KAFKAP_SyncGroup,
|
|
719
|
+
.MinVer = 2,
|
|
720
|
+
.MaxVer = 5,
|
|
721
|
+
},
|
|
722
|
+
{
|
|
723
|
+
.ApiKey = RD_KAFKAP_SaslAuthenticate,
|
|
724
|
+
.MinVer = 0,
|
|
725
|
+
.MaxVer = 2,
|
|
726
|
+
},
|
|
727
|
+
};
|
|
728
|
+
|
|
729
|
+
/* ApiVersions where the maximum version corresponds to
|
|
730
|
+
* the minimum version necessary for enabling all features. */
|
|
731
|
+
struct rd_kafka_ApiVersion api_versions_overlap_by_one[] = {
|
|
732
|
+
{
|
|
733
|
+
.ApiKey = RD_KAFKAP_Produce,
|
|
734
|
+
.MinVer = 3,
|
|
735
|
+
.MaxVer = 7,
|
|
736
|
+
},
|
|
737
|
+
{
|
|
738
|
+
.ApiKey = RD_KAFKAP_Fetch,
|
|
739
|
+
.MinVer = 4,
|
|
740
|
+
.MaxVer = 10,
|
|
741
|
+
},
|
|
742
|
+
{
|
|
743
|
+
.ApiKey = RD_KAFKAP_ListOffsets,
|
|
744
|
+
.MinVer = 1,
|
|
745
|
+
.MaxVer = 1,
|
|
746
|
+
},
|
|
747
|
+
{
|
|
748
|
+
.ApiKey = RD_KAFKAP_Metadata,
|
|
749
|
+
.MinVer = 0,
|
|
750
|
+
.MaxVer = 13,
|
|
751
|
+
},
|
|
752
|
+
{
|
|
753
|
+
.ApiKey = RD_KAFKAP_OffsetCommit,
|
|
754
|
+
.MinVer = 2,
|
|
755
|
+
.MaxVer = 9,
|
|
756
|
+
},
|
|
757
|
+
{
|
|
758
|
+
.ApiKey = RD_KAFKAP_OffsetFetch,
|
|
759
|
+
.MinVer = 1,
|
|
760
|
+
.MaxVer = 9,
|
|
761
|
+
},
|
|
762
|
+
{
|
|
763
|
+
.ApiKey = RD_KAFKAP_FindCoordinator,
|
|
764
|
+
.MinVer = 0,
|
|
765
|
+
.MaxVer = 0,
|
|
766
|
+
},
|
|
767
|
+
{
|
|
768
|
+
.ApiKey = RD_KAFKAP_JoinGroup,
|
|
769
|
+
.MinVer = 0,
|
|
770
|
+
.MaxVer = 0,
|
|
771
|
+
},
|
|
772
|
+
{
|
|
773
|
+
.ApiKey = RD_KAFKAP_Heartbeat,
|
|
774
|
+
.MinVer = 0,
|
|
775
|
+
.MaxVer = 0,
|
|
776
|
+
},
|
|
777
|
+
{
|
|
778
|
+
.ApiKey = RD_KAFKAP_LeaveGroup,
|
|
779
|
+
.MinVer = 0,
|
|
780
|
+
.MaxVer = 0,
|
|
781
|
+
},
|
|
782
|
+
{
|
|
783
|
+
.ApiKey = RD_KAFKAP_SyncGroup,
|
|
784
|
+
.MinVer = 0,
|
|
785
|
+
.MaxVer = 0,
|
|
786
|
+
},
|
|
787
|
+
{
|
|
788
|
+
.ApiKey = RD_KAFKAP_SaslHandshake,
|
|
789
|
+
.MinVer = 0,
|
|
790
|
+
.MaxVer = 1,
|
|
791
|
+
},
|
|
792
|
+
{
|
|
793
|
+
.ApiKey = RD_KAFKAP_ApiVersion,
|
|
794
|
+
.MinVer = 0,
|
|
795
|
+
.MaxVer = 0,
|
|
796
|
+
},
|
|
797
|
+
{
|
|
798
|
+
.ApiKey = RD_KAFKAP_InitProducerId,
|
|
799
|
+
.MinVer = 0,
|
|
800
|
+
.MaxVer = 0,
|
|
801
|
+
},
|
|
802
|
+
{
|
|
803
|
+
.ApiKey = RD_KAFKAP_SaslAuthenticate,
|
|
804
|
+
.MinVer = 0,
|
|
805
|
+
.MaxVer = 0,
|
|
806
|
+
},
|
|
807
|
+
};
|
|
808
|
+
|
|
809
|
+
/* ApiVersions where the classic way of enabling SASL_GSSAPI
|
|
810
|
+
* or BROKER_BALANCED_CONSUMER was removed. */
|
|
811
|
+
struct rd_kafka_ApiVersion api_versions_kip_848[] = {
|
|
812
|
+
{
|
|
813
|
+
.ApiKey = RD_KAFKAP_OffsetCommit,
|
|
814
|
+
.MinVer = 6,
|
|
815
|
+
.MaxVer = 9,
|
|
816
|
+
},
|
|
817
|
+
{
|
|
818
|
+
.ApiKey = RD_KAFKAP_OffsetFetch,
|
|
819
|
+
.MinVer = 5,
|
|
820
|
+
.MaxVer = 9,
|
|
821
|
+
},
|
|
822
|
+
{
|
|
823
|
+
.ApiKey = RD_KAFKAP_SaslHandshake,
|
|
824
|
+
.MinVer = 0,
|
|
825
|
+
.MaxVer = 1,
|
|
826
|
+
},
|
|
827
|
+
{
|
|
828
|
+
.ApiKey = RD_KAFKAP_ConsumerGroupHeartbeat,
|
|
829
|
+
.MinVer = 0,
|
|
830
|
+
.MaxVer = 1,
|
|
831
|
+
},
|
|
832
|
+
};
|
|
833
|
+
|
|
834
|
+
/* With empty ApiVersions. */
|
|
835
|
+
features = rd_kafka_features_check(&rkb, api_versions_none,
|
|
836
|
+
RD_ARRAY_SIZE(api_versions_none));
|
|
837
|
+
fails += rd_ut_features_check_assert_features("no API versions",
|
|
838
|
+
features, rd_false);
|
|
839
|
+
|
|
840
|
+
/* Without KIP-896 removed versions. */
|
|
841
|
+
features = rd_kafka_features_check(&rkb, api_versions_kip_896,
|
|
842
|
+
RD_ARRAY_SIZE(api_versions_kip_896));
|
|
843
|
+
fails += rd_ut_features_check_assert_features("KIP-896 API versions",
|
|
844
|
+
features, rd_true);
|
|
845
|
+
|
|
846
|
+
/* Without versions to remove in next Apache Kafka major version. */
|
|
847
|
+
features = rd_kafka_features_check(
|
|
848
|
+
&rkb, api_versions_next_apache_kafka_next,
|
|
849
|
+
RD_ARRAY_SIZE(api_versions_next_apache_kafka_next));
|
|
850
|
+
fails += rd_ut_features_check_assert_features(
|
|
851
|
+
"next Apache Kafka API versions", features, rd_true);
|
|
852
|
+
|
|
853
|
+
/* With a RPC version range non overlapping with the one necessary
|
|
854
|
+
* for the feature. */
|
|
855
|
+
features =
|
|
856
|
+
rd_kafka_features_check(&rkb, api_versions_no_overlap,
|
|
857
|
+
RD_ARRAY_SIZE(api_versions_no_overlap));
|
|
858
|
+
fails += rd_ut_features_check_assert_features(
|
|
859
|
+
"not overlapping API versions", features, rd_false);
|
|
860
|
+
|
|
861
|
+
/* Only a single RPC version is overlapping with broker
|
|
862
|
+
* supported ones. */
|
|
863
|
+
features =
|
|
864
|
+
rd_kafka_features_check(&rkb, api_versions_overlap_by_one,
|
|
865
|
+
RD_ARRAY_SIZE(api_versions_overlap_by_one));
|
|
866
|
+
fails += rd_ut_features_check_assert_features(
|
|
867
|
+
"overlapping API versions by one version", features, rd_true);
|
|
868
|
+
|
|
869
|
+
/* Even when removing the classic protocol and its APIs,
|
|
870
|
+
* these features must be enabled. */
|
|
871
|
+
features = rd_kafka_features_check(&rkb, api_versions_kip_848,
|
|
872
|
+
RD_ARRAY_SIZE(api_versions_kip_848));
|
|
873
|
+
if (!(features & RD_KAFKA_FEATURE_BROKER_BALANCED_CONSUMER) ||
|
|
874
|
+
!(features & RD_KAFKA_FEATURE_SASL_GSSAPI)) {
|
|
875
|
+
fails++;
|
|
876
|
+
}
|
|
877
|
+
|
|
878
|
+
|
|
879
|
+
if (fails)
|
|
880
|
+
return fails;
|
|
881
|
+
|
|
882
|
+
RD_UT_PASS();
|
|
883
|
+
}
|
|
884
|
+
|
|
885
|
+
/**
|
|
886
|
+
* @name Unit tests
|
|
887
|
+
* @{
|
|
888
|
+
*
|
|
889
|
+
*/
|
|
890
|
+
int unittest_feature(void) {
|
|
891
|
+
int fails = 0;
|
|
892
|
+
|
|
893
|
+
fails += rd_ut_features_check();
|
|
894
|
+
|
|
895
|
+
return fails;
|
|
896
|
+
}
|
|
897
|
+
|
|
898
|
+
/**@}*/
|