@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,552 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* librdkafka - Apache Kafka C library
|
|
3
|
+
*
|
|
4
|
+
* Copyright (c) 2023, Confluent Inc.
|
|
5
|
+
* All rights reserved.
|
|
6
|
+
*
|
|
7
|
+
* Redistribution and use in source and binary forms, with or without
|
|
8
|
+
* modification, are permitted provided that the following conditions are met:
|
|
9
|
+
*
|
|
10
|
+
* 1. Redistributions of source code must retain the above copyright notice,
|
|
11
|
+
* this list of conditions and the following disclaimer.
|
|
12
|
+
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
13
|
+
* this list of conditions and the following disclaimer in the documentation
|
|
14
|
+
* and/or other materials provided with the distribution.
|
|
15
|
+
*
|
|
16
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
17
|
+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
18
|
+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
19
|
+
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
20
|
+
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
21
|
+
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
22
|
+
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
23
|
+
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
24
|
+
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
25
|
+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
26
|
+
* POSSIBILITY OF SUCH DAMAGE.
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
#include "test.h"
|
|
30
|
+
#include "../src/rdkafka_proto.h"
|
|
31
|
+
#include "../src/rdkafka_mock.h"
|
|
32
|
+
|
|
33
|
+
const int32_t retry_ms = 100;
|
|
34
|
+
const int32_t retry_max_ms = 1000;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* @brief find_coordinator test
|
|
38
|
+
* We fail the request with RD_KAFKA_RESP_ERR_GROUP_COORDINATOR_NOT_AVAILABLE,
|
|
39
|
+
* so that the request is tried via the intervalled mechanism. The intervalling
|
|
40
|
+
* is done at 500 ms, with a 20% jitter. However, the actual code to retry the
|
|
41
|
+
* request runs inside rd_kafka_cgrp_serve that is called every one second,
|
|
42
|
+
* hence, the retry actually happens always in 1 second, no matter what the
|
|
43
|
+
* jitter is. This will be fixed once rd_kafka_cgrp_serve is timer triggered.
|
|
44
|
+
* The exponential backoff does not apply in this case we just apply the jitter
|
|
45
|
+
* to the backoff of intervalled query The retry count is non - deterministic as
|
|
46
|
+
* fresh request spawned on its own.
|
|
47
|
+
*/
|
|
48
|
+
static void test_find_coordinator(rd_kafka_mock_cluster_t *mcluster,
|
|
49
|
+
const char *topic,
|
|
50
|
+
rd_kafka_conf_t *conf) {
|
|
51
|
+
rd_kafka_mock_request_t **requests = NULL;
|
|
52
|
+
size_t request_cnt = 0;
|
|
53
|
+
int64_t previous_request_ts = -1;
|
|
54
|
+
int32_t retry_count = 0;
|
|
55
|
+
int32_t num_retries = 4;
|
|
56
|
+
const int32_t low = 1000;
|
|
57
|
+
int32_t buffer = 200; // 200 ms buffer added
|
|
58
|
+
rd_kafka_t *consumer;
|
|
59
|
+
rd_kafka_message_t *rkm;
|
|
60
|
+
size_t i;
|
|
61
|
+
|
|
62
|
+
SUB_TEST();
|
|
63
|
+
test_conf_set(conf, "auto.offset.reset", "earliest");
|
|
64
|
+
test_conf_set(conf, "enable.auto.commit", "false");
|
|
65
|
+
|
|
66
|
+
consumer = test_create_consumer(topic, NULL, conf, NULL);
|
|
67
|
+
|
|
68
|
+
rd_kafka_mock_push_request_errors(
|
|
69
|
+
mcluster, RD_KAFKAP_FindCoordinator, num_retries,
|
|
70
|
+
RD_KAFKA_RESP_ERR_GROUP_COORDINATOR_NOT_AVAILABLE,
|
|
71
|
+
RD_KAFKA_RESP_ERR_GROUP_COORDINATOR_NOT_AVAILABLE,
|
|
72
|
+
RD_KAFKA_RESP_ERR_GROUP_COORDINATOR_NOT_AVAILABLE,
|
|
73
|
+
RD_KAFKA_RESP_ERR_GROUP_COORDINATOR_NOT_AVAILABLE);
|
|
74
|
+
/* This will trigger a find_coordinator request */
|
|
75
|
+
rkm = rd_kafka_consumer_poll(consumer, 10 * 1000);
|
|
76
|
+
if (rkm)
|
|
77
|
+
rd_kafka_message_destroy(rkm);
|
|
78
|
+
rd_sleep(4);
|
|
79
|
+
requests = rd_kafka_mock_get_requests(mcluster, &request_cnt);
|
|
80
|
+
for (i = 0; (i < request_cnt) && (retry_count < num_retries); i++) {
|
|
81
|
+
TEST_SAY("Broker Id : %d API Key : %d Timestamp : %" PRId64
|
|
82
|
+
"\n",
|
|
83
|
+
rd_kafka_mock_request_id(requests[i]),
|
|
84
|
+
rd_kafka_mock_request_api_key(requests[i]),
|
|
85
|
+
rd_kafka_mock_request_timestamp(requests[i]));
|
|
86
|
+
|
|
87
|
+
if (rd_kafka_mock_request_api_key(requests[i]) !=
|
|
88
|
+
RD_KAFKAP_FindCoordinator)
|
|
89
|
+
continue;
|
|
90
|
+
|
|
91
|
+
if (previous_request_ts != -1) {
|
|
92
|
+
int64_t time_difference =
|
|
93
|
+
(rd_kafka_mock_request_timestamp(requests[i]) -
|
|
94
|
+
previous_request_ts) /
|
|
95
|
+
1000;
|
|
96
|
+
TEST_ASSERT(((time_difference > low - buffer) &&
|
|
97
|
+
(time_difference < low + buffer)),
|
|
98
|
+
"Time difference should be close "
|
|
99
|
+
"to 1 second, it is %" PRId64
|
|
100
|
+
" ms instead.\n",
|
|
101
|
+
time_difference);
|
|
102
|
+
retry_count++;
|
|
103
|
+
}
|
|
104
|
+
previous_request_ts =
|
|
105
|
+
rd_kafka_mock_request_timestamp(requests[i]);
|
|
106
|
+
}
|
|
107
|
+
rd_kafka_destroy(consumer);
|
|
108
|
+
rd_kafka_mock_request_destroy_array(requests, request_cnt);
|
|
109
|
+
rd_kafka_mock_clear_requests(mcluster);
|
|
110
|
+
SUB_TEST_PASS();
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/** @brief Max Jitter is 20 percent each side so buffer chosen
|
|
114
|
+
* is +- a fixed error to account for latency delays. */
|
|
115
|
+
static void check_time_difference(int64_t time_difference, int retry_count) {
|
|
116
|
+
int32_t error = retry_ms / 2;
|
|
117
|
+
int64_t low = (1 << retry_count) * retry_ms * 0.8 - error;
|
|
118
|
+
int64_t high = (1 << retry_count) * retry_ms * 1.2 + error;
|
|
119
|
+
if (high > (retry_max_ms * 1.2 + error))
|
|
120
|
+
high = retry_max_ms * 1.2 + error;
|
|
121
|
+
if (low > (retry_max_ms * 0.8 - error))
|
|
122
|
+
low = retry_max_ms * 0.8 - error;
|
|
123
|
+
TEST_ASSERT((time_difference < high) && (time_difference > low),
|
|
124
|
+
"Time difference is not respected, should "
|
|
125
|
+
"be between %" PRId64 " and %" PRId64
|
|
126
|
+
" where time difference is %" PRId64 "\n",
|
|
127
|
+
low, high, time_difference);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Exponential Backoff needs to be checked for the request_type. Also the
|
|
132
|
+
* request_type should only be retried if one previous has failed for correct
|
|
133
|
+
* execution.
|
|
134
|
+
*/
|
|
135
|
+
static void helper_exponential_backoff(rd_kafka_mock_cluster_t *mcluster,
|
|
136
|
+
int32_t request_type) {
|
|
137
|
+
rd_kafka_mock_request_t **requests = NULL;
|
|
138
|
+
size_t request_cnt = 0;
|
|
139
|
+
int64_t previous_request_ts = -1;
|
|
140
|
+
int32_t retry_count = 0;
|
|
141
|
+
size_t i;
|
|
142
|
+
requests = rd_kafka_mock_get_requests(mcluster, &request_cnt);
|
|
143
|
+
for (i = 0; i < request_cnt; i++) {
|
|
144
|
+
TEST_SAY("Broker Id : %d API Key : %d Timestamp : %" PRId64
|
|
145
|
+
"\n",
|
|
146
|
+
rd_kafka_mock_request_id(requests[i]),
|
|
147
|
+
rd_kafka_mock_request_api_key(requests[i]),
|
|
148
|
+
rd_kafka_mock_request_timestamp(requests[i]));
|
|
149
|
+
|
|
150
|
+
if (rd_kafka_mock_request_api_key(requests[i]) != request_type)
|
|
151
|
+
continue;
|
|
152
|
+
|
|
153
|
+
if (previous_request_ts != -1) {
|
|
154
|
+
int64_t time_difference =
|
|
155
|
+
(rd_kafka_mock_request_timestamp(requests[i]) -
|
|
156
|
+
previous_request_ts) /
|
|
157
|
+
1000;
|
|
158
|
+
check_time_difference(time_difference, retry_count);
|
|
159
|
+
retry_count++;
|
|
160
|
+
}
|
|
161
|
+
previous_request_ts =
|
|
162
|
+
rd_kafka_mock_request_timestamp(requests[i]);
|
|
163
|
+
}
|
|
164
|
+
rd_kafka_mock_request_destroy_array(requests, request_cnt);
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* @brief offset_commit test
|
|
168
|
+
* We fail the request with RD_KAFKA_RESP_ERR_COORDINATOR_LOAD_IN_PROGRESS so
|
|
169
|
+
* that the request is retried with the exponential backoff. The max retries
|
|
170
|
+
* allowed is 2 for offset_commit. The RPC calls rd_kafka_buf_retry for its
|
|
171
|
+
* retry attempt so this tests all such RPCs which depend on it for retrying.
|
|
172
|
+
* The retry number of request is deterministic i.e no fresh requests are
|
|
173
|
+
* spawned on its own. Also the max retries is 2 for Offset Commit.
|
|
174
|
+
*/
|
|
175
|
+
static void test_offset_commit(rd_kafka_mock_cluster_t *mcluster,
|
|
176
|
+
const char *topic,
|
|
177
|
+
rd_kafka_conf_t *conf) {
|
|
178
|
+
rd_kafka_t *consumer;
|
|
179
|
+
rd_kafka_message_t *rkm;
|
|
180
|
+
rd_kafka_topic_partition_list_t *offsets;
|
|
181
|
+
rd_kafka_topic_partition_t *rktpar;
|
|
182
|
+
SUB_TEST();
|
|
183
|
+
test_conf_set(conf, "auto.offset.reset", "earliest");
|
|
184
|
+
test_conf_set(conf, "enable.auto.commit", "false");
|
|
185
|
+
|
|
186
|
+
consumer = test_create_consumer(topic, NULL, conf, NULL);
|
|
187
|
+
test_consumer_subscribe(consumer, topic);
|
|
188
|
+
rkm = rd_kafka_consumer_poll(consumer, 10 * 1000);
|
|
189
|
+
if (rkm)
|
|
190
|
+
rd_kafka_message_destroy(rkm);
|
|
191
|
+
rd_sleep(4);
|
|
192
|
+
rd_kafka_mock_push_request_errors(
|
|
193
|
+
mcluster, RD_KAFKAP_OffsetCommit, 2,
|
|
194
|
+
RD_KAFKA_RESP_ERR_COORDINATOR_LOAD_IN_PROGRESS,
|
|
195
|
+
RD_KAFKA_RESP_ERR_COORDINATOR_LOAD_IN_PROGRESS);
|
|
196
|
+
|
|
197
|
+
offsets = rd_kafka_topic_partition_list_new(1);
|
|
198
|
+
rktpar = rd_kafka_topic_partition_list_add(offsets, topic, 0);
|
|
199
|
+
/* Setting Offset to an arbitrary number */
|
|
200
|
+
rktpar->offset = 4;
|
|
201
|
+
/* rd_kafka_commit will trigger OffsetCommit RPC call */
|
|
202
|
+
rd_kafka_commit(consumer, offsets, 0);
|
|
203
|
+
rd_kafka_topic_partition_list_destroy(offsets);
|
|
204
|
+
rd_sleep(3);
|
|
205
|
+
|
|
206
|
+
helper_exponential_backoff(mcluster, RD_KAFKAP_OffsetCommit);
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
rd_kafka_destroy(consumer);
|
|
210
|
+
rd_kafka_mock_clear_requests(mcluster);
|
|
211
|
+
SUB_TEST_PASS();
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* @brief produce test
|
|
216
|
+
* We fail the request with RD_KAFKA_RESP_ERR_NOT_ENOUGH_REPLICAS so
|
|
217
|
+
* that the request is retried with the exponential backoff. The exponential
|
|
218
|
+
* backoff is capped at retry_max_ms with jitter. The retry number of request is
|
|
219
|
+
* deterministic i.e no fresh requests are spawned on its own.
|
|
220
|
+
*/
|
|
221
|
+
static void test_produce(rd_kafka_mock_cluster_t *mcluster,
|
|
222
|
+
const char *topic,
|
|
223
|
+
rd_kafka_conf_t *conf) {
|
|
224
|
+
rd_kafka_t *producer;
|
|
225
|
+
rd_kafka_topic_t *rkt;
|
|
226
|
+
SUB_TEST();
|
|
227
|
+
rd_kafka_conf_set_dr_msg_cb(conf, test_dr_msg_cb);
|
|
228
|
+
|
|
229
|
+
producer = test_create_handle(RD_KAFKA_PRODUCER, conf);
|
|
230
|
+
rkt = test_create_producer_topic(producer, topic, NULL);
|
|
231
|
+
test_wait_topic_exists(producer, topic, 5000);
|
|
232
|
+
|
|
233
|
+
rd_kafka_mock_push_request_errors(
|
|
234
|
+
mcluster, RD_KAFKAP_Produce, 7,
|
|
235
|
+
RD_KAFKA_RESP_ERR_NOT_ENOUGH_REPLICAS,
|
|
236
|
+
RD_KAFKA_RESP_ERR_NOT_ENOUGH_REPLICAS,
|
|
237
|
+
RD_KAFKA_RESP_ERR_NOT_ENOUGH_REPLICAS,
|
|
238
|
+
RD_KAFKA_RESP_ERR_NOT_ENOUGH_REPLICAS,
|
|
239
|
+
RD_KAFKA_RESP_ERR_NOT_ENOUGH_REPLICAS,
|
|
240
|
+
RD_KAFKA_RESP_ERR_NOT_ENOUGH_REPLICAS,
|
|
241
|
+
RD_KAFKA_RESP_ERR_NOT_ENOUGH_REPLICAS);
|
|
242
|
+
|
|
243
|
+
test_produce_msgs(producer, rkt, 0, RD_KAFKA_PARTITION_UA, 0, 1,
|
|
244
|
+
"hello", 5);
|
|
245
|
+
rd_sleep(3);
|
|
246
|
+
|
|
247
|
+
helper_exponential_backoff(mcluster, RD_KAFKAP_Produce);
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
rd_kafka_topic_destroy(rkt);
|
|
251
|
+
rd_kafka_destroy(producer);
|
|
252
|
+
rd_kafka_mock_clear_requests(mcluster);
|
|
253
|
+
SUB_TEST_PASS();
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* Helper function for find coordinator trigger with the given request_type, the
|
|
258
|
+
* find coordinator request should be triggered after a failing request of
|
|
259
|
+
* request_type.
|
|
260
|
+
*/
|
|
261
|
+
static void helper_find_coordinator_trigger(rd_kafka_mock_cluster_t *mcluster,
|
|
262
|
+
int32_t request_type) {
|
|
263
|
+
rd_kafka_mock_request_t **requests = NULL;
|
|
264
|
+
size_t request_cnt = 0;
|
|
265
|
+
int32_t num_request = 0;
|
|
266
|
+
size_t i;
|
|
267
|
+
requests = rd_kafka_mock_get_requests(mcluster, &request_cnt);
|
|
268
|
+
for (i = 0; i < request_cnt; i++) {
|
|
269
|
+
TEST_SAY("Broker Id : %d API Key : %d Timestamp : %" PRId64
|
|
270
|
+
"\n",
|
|
271
|
+
rd_kafka_mock_request_id(requests[i]),
|
|
272
|
+
rd_kafka_mock_request_api_key(requests[i]),
|
|
273
|
+
rd_kafka_mock_request_timestamp(requests[i]));
|
|
274
|
+
if (num_request == 0) {
|
|
275
|
+
if (rd_kafka_mock_request_api_key(requests[i]) ==
|
|
276
|
+
request_type) {
|
|
277
|
+
num_request++;
|
|
278
|
+
}
|
|
279
|
+
} else if (num_request == 1) {
|
|
280
|
+
if (rd_kafka_mock_request_api_key(requests[i]) ==
|
|
281
|
+
RD_KAFKAP_FindCoordinator) {
|
|
282
|
+
TEST_SAY(
|
|
283
|
+
"FindCoordinator request made after "
|
|
284
|
+
"failing request with NOT_COORDINATOR "
|
|
285
|
+
"error.\n");
|
|
286
|
+
break;
|
|
287
|
+
} else if (rd_kafka_mock_request_api_key(requests[i]) ==
|
|
288
|
+
request_type) {
|
|
289
|
+
num_request++;
|
|
290
|
+
TEST_FAIL(
|
|
291
|
+
"Second request made without any "
|
|
292
|
+
"FindCoordinator request.");
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
rd_kafka_mock_request_destroy_array(requests, request_cnt);
|
|
297
|
+
if (num_request != 1)
|
|
298
|
+
TEST_FAIL("No request was made.");
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* @brief heartbeat-find_coordinator test
|
|
302
|
+
* We fail the request with RD_KAFKA_RESP_ERR_NOT_COORDINATOR_FOR_GROUP so that
|
|
303
|
+
* the FindCoordinator request is triggered.
|
|
304
|
+
*/
|
|
305
|
+
static void test_heartbeat_find_coordinator(rd_kafka_mock_cluster_t *mcluster,
|
|
306
|
+
const char *topic,
|
|
307
|
+
rd_kafka_conf_t *conf) {
|
|
308
|
+
rd_kafka_t *consumer;
|
|
309
|
+
rd_kafka_message_t *rkm;
|
|
310
|
+
int ApiKey;
|
|
311
|
+
SUB_TEST();
|
|
312
|
+
test_conf_set(conf, "auto.offset.reset", "earliest");
|
|
313
|
+
test_conf_set(conf, "enable.auto.commit", "false");
|
|
314
|
+
|
|
315
|
+
consumer = test_create_consumer(topic, NULL, conf, NULL);
|
|
316
|
+
|
|
317
|
+
if (test_consumer_group_protocol_classic()) {
|
|
318
|
+
ApiKey = RD_KAFKAP_Heartbeat;
|
|
319
|
+
} else {
|
|
320
|
+
ApiKey = RD_KAFKAP_ConsumerGroupHeartbeat;
|
|
321
|
+
}
|
|
322
|
+
rd_kafka_mock_push_request_errors(
|
|
323
|
+
mcluster, ApiKey, 1, RD_KAFKA_RESP_ERR_NOT_COORDINATOR_FOR_GROUP);
|
|
324
|
+
|
|
325
|
+
rd_kafka_mock_clear_requests(mcluster);
|
|
326
|
+
test_consumer_subscribe(consumer, topic);
|
|
327
|
+
/* This will trigger a find_coordinator request */
|
|
328
|
+
rkm = rd_kafka_consumer_poll(consumer, 10 * 1000);
|
|
329
|
+
if (rkm)
|
|
330
|
+
rd_kafka_message_destroy(rkm);
|
|
331
|
+
rd_sleep(6);
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
helper_find_coordinator_trigger(mcluster, ApiKey);
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
rd_kafka_destroy(consumer);
|
|
338
|
+
rd_kafka_mock_clear_requests(mcluster);
|
|
339
|
+
SUB_TEST_PASS();
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
/**
|
|
343
|
+
* @brief joingroup-find_coordinator test
|
|
344
|
+
* We fail the request with RD_KAFKA_RESP_ERR_NOT_COORDINATOR_FOR_GROUP so that
|
|
345
|
+
* the FindCoordinator request is triggered.
|
|
346
|
+
*/
|
|
347
|
+
static void test_joingroup_find_coordinator(rd_kafka_mock_cluster_t *mcluster,
|
|
348
|
+
const char *topic,
|
|
349
|
+
rd_kafka_conf_t *conf) {
|
|
350
|
+
rd_kafka_t *consumer;
|
|
351
|
+
rd_kafka_message_t *rkm;
|
|
352
|
+
SUB_TEST();
|
|
353
|
+
test_conf_set(conf, "auto.offset.reset", "earliest");
|
|
354
|
+
test_conf_set(conf, "enable.auto.commit", "false");
|
|
355
|
+
|
|
356
|
+
consumer = test_create_consumer(topic, NULL, conf, NULL);
|
|
357
|
+
rd_kafka_mock_push_request_errors(
|
|
358
|
+
mcluster, RD_KAFKAP_JoinGroup, 1,
|
|
359
|
+
RD_KAFKA_RESP_ERR_NOT_COORDINATOR_FOR_GROUP);
|
|
360
|
+
rd_kafka_mock_clear_requests(mcluster);
|
|
361
|
+
test_consumer_subscribe(consumer, topic);
|
|
362
|
+
/* This will trigger a find_coordinator request */
|
|
363
|
+
rkm = rd_kafka_consumer_poll(consumer, 10 * 1000);
|
|
364
|
+
if (rkm)
|
|
365
|
+
rd_kafka_message_destroy(rkm);
|
|
366
|
+
rd_sleep(4);
|
|
367
|
+
|
|
368
|
+
helper_find_coordinator_trigger(mcluster, RD_KAFKAP_JoinGroup);
|
|
369
|
+
|
|
370
|
+
rd_kafka_destroy(consumer);
|
|
371
|
+
rd_kafka_mock_clear_requests(mcluster);
|
|
372
|
+
SUB_TEST_PASS();
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
/**
|
|
376
|
+
* @brief produce-fast_leader_query test
|
|
377
|
+
* We fail a Produce request with RD_KAFKA_RESP_ERR_NOT_LEADER_OR_FOLLOWER, so
|
|
378
|
+
* that it triggers a fast leader query (a Metadata request). We don't update
|
|
379
|
+
* the leader in this test, so the Metadata is always stale from the client's
|
|
380
|
+
* perspective, and the fast leader query carries on, being backed off
|
|
381
|
+
* exponentially until the max retry time is reached. The retry number of
|
|
382
|
+
* request is non deterministic as it will keep retrying till the leader change.
|
|
383
|
+
*/
|
|
384
|
+
static void test_produce_fast_leader_query(rd_kafka_mock_cluster_t *mcluster,
|
|
385
|
+
const char *topic,
|
|
386
|
+
rd_kafka_conf_t *conf) {
|
|
387
|
+
rd_kafka_mock_request_t **requests = NULL;
|
|
388
|
+
size_t request_cnt = 0;
|
|
389
|
+
int64_t previous_request_ts = -1;
|
|
390
|
+
int32_t retry_count = 0;
|
|
391
|
+
rd_bool_t produced = rd_false;
|
|
392
|
+
rd_kafka_t *producer;
|
|
393
|
+
rd_kafka_topic_t *rkt;
|
|
394
|
+
size_t i;
|
|
395
|
+
SUB_TEST();
|
|
396
|
+
rd_kafka_conf_set_dr_msg_cb(conf, test_dr_msg_cb);
|
|
397
|
+
|
|
398
|
+
producer = test_create_handle(RD_KAFKA_PRODUCER, conf);
|
|
399
|
+
rkt = test_create_producer_topic(producer, topic, NULL);
|
|
400
|
+
test_wait_topic_exists(producer, topic, 5000);
|
|
401
|
+
|
|
402
|
+
rd_kafka_mock_push_request_errors(
|
|
403
|
+
mcluster, RD_KAFKAP_Produce, 1,
|
|
404
|
+
RD_KAFKA_RESP_ERR_NOT_LEADER_OR_FOLLOWER);
|
|
405
|
+
rd_kafka_mock_clear_requests(mcluster);
|
|
406
|
+
test_produce_msgs(producer, rkt, 0, RD_KAFKA_PARTITION_UA, 0, 1,
|
|
407
|
+
"hello", 1);
|
|
408
|
+
rd_sleep(10);
|
|
409
|
+
requests = rd_kafka_mock_get_requests(mcluster, &request_cnt);
|
|
410
|
+
|
|
411
|
+
for (i = 0; i < request_cnt; i++) {
|
|
412
|
+
TEST_SAY("Broker Id : %d API Key : %d Timestamp : %" PRId64
|
|
413
|
+
"\n",
|
|
414
|
+
rd_kafka_mock_request_id(requests[i]),
|
|
415
|
+
rd_kafka_mock_request_api_key(requests[i]),
|
|
416
|
+
rd_kafka_mock_request_timestamp(requests[i]));
|
|
417
|
+
|
|
418
|
+
if (!produced && rd_kafka_mock_request_api_key(requests[i]) ==
|
|
419
|
+
RD_KAFKAP_Produce)
|
|
420
|
+
produced = rd_true;
|
|
421
|
+
else if (rd_kafka_mock_request_api_key(requests[i]) ==
|
|
422
|
+
RD_KAFKAP_Metadata &&
|
|
423
|
+
produced) {
|
|
424
|
+
if (previous_request_ts != -1) {
|
|
425
|
+
int64_t time_difference =
|
|
426
|
+
(rd_kafka_mock_request_timestamp(
|
|
427
|
+
requests[i]) -
|
|
428
|
+
previous_request_ts) /
|
|
429
|
+
1000;
|
|
430
|
+
check_time_difference(time_difference,
|
|
431
|
+
retry_count);
|
|
432
|
+
retry_count++;
|
|
433
|
+
}
|
|
434
|
+
previous_request_ts =
|
|
435
|
+
rd_kafka_mock_request_timestamp(requests[i]);
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
rd_kafka_topic_destroy(rkt);
|
|
439
|
+
rd_kafka_destroy(producer);
|
|
440
|
+
rd_kafka_mock_request_destroy_array(requests, request_cnt);
|
|
441
|
+
rd_kafka_mock_clear_requests(mcluster);
|
|
442
|
+
SUB_TEST_PASS();
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
/**
|
|
446
|
+
* @brief fetch-fast_leader_query test
|
|
447
|
+
* We fail a Fetch request by causing a leader change (the leader is the same,
|
|
448
|
+
* but with a different leader epoch). It triggers fast leader query (Metadata
|
|
449
|
+
* request). The request is able to obtain an updated leader, and hence, the
|
|
450
|
+
* fast leader query terminates after one Metadata request.
|
|
451
|
+
*/
|
|
452
|
+
static void test_fetch_fast_leader_query(rd_kafka_mock_cluster_t *mcluster,
|
|
453
|
+
const char *topic,
|
|
454
|
+
rd_kafka_conf_t *conf) {
|
|
455
|
+
rd_kafka_mock_request_t **requests = NULL;
|
|
456
|
+
size_t request_cnt = 0;
|
|
457
|
+
rd_bool_t previous_request_was_Fetch = rd_false;
|
|
458
|
+
rd_bool_t Metadata_after_Fetch = rd_false;
|
|
459
|
+
rd_kafka_t *consumer;
|
|
460
|
+
rd_kafka_message_t *rkm;
|
|
461
|
+
size_t i;
|
|
462
|
+
SUB_TEST();
|
|
463
|
+
test_conf_set(conf, "auto.offset.reset", "earliest");
|
|
464
|
+
test_conf_set(conf, "enable.auto.commit", "false");
|
|
465
|
+
|
|
466
|
+
consumer = test_create_consumer(topic, NULL, conf, NULL);
|
|
467
|
+
|
|
468
|
+
test_consumer_subscribe(consumer, topic);
|
|
469
|
+
rkm = rd_kafka_consumer_poll(consumer, 10 * 1000);
|
|
470
|
+
|
|
471
|
+
if (rkm)
|
|
472
|
+
rd_kafka_message_destroy(rkm);
|
|
473
|
+
rd_kafka_mock_clear_requests(mcluster);
|
|
474
|
+
|
|
475
|
+
rd_kafka_mock_partition_set_leader(mcluster, topic, 0, 1);
|
|
476
|
+
rkm = rd_kafka_consumer_poll(consumer, 10 * 1000);
|
|
477
|
+
if (rkm)
|
|
478
|
+
rd_kafka_message_destroy(rkm);
|
|
479
|
+
rd_sleep(3);
|
|
480
|
+
requests = rd_kafka_mock_get_requests(mcluster, &request_cnt);
|
|
481
|
+
for (i = 0; i < request_cnt; i++) {
|
|
482
|
+
TEST_SAY("Broker Id : %d API Key : %d Timestamp : %" PRId64
|
|
483
|
+
"\n",
|
|
484
|
+
rd_kafka_mock_request_id(requests[i]),
|
|
485
|
+
rd_kafka_mock_request_api_key(requests[i]),
|
|
486
|
+
rd_kafka_mock_request_timestamp(requests[i]));
|
|
487
|
+
|
|
488
|
+
if (rd_kafka_mock_request_api_key(requests[i]) ==
|
|
489
|
+
RD_KAFKAP_Fetch)
|
|
490
|
+
previous_request_was_Fetch = rd_true;
|
|
491
|
+
else if (rd_kafka_mock_request_api_key(requests[i]) ==
|
|
492
|
+
RD_KAFKAP_Metadata &&
|
|
493
|
+
previous_request_was_Fetch) {
|
|
494
|
+
Metadata_after_Fetch = rd_true;
|
|
495
|
+
break;
|
|
496
|
+
} else if (rd_kafka_mock_request_api_key(requests[i]) !=
|
|
497
|
+
RD_KAFKAP_ConsumerGroupHeartbeat)
|
|
498
|
+
previous_request_was_Fetch = rd_false;
|
|
499
|
+
}
|
|
500
|
+
rd_kafka_destroy(consumer);
|
|
501
|
+
rd_kafka_mock_request_destroy_array(requests, request_cnt);
|
|
502
|
+
rd_kafka_mock_clear_requests(mcluster);
|
|
503
|
+
TEST_ASSERT(
|
|
504
|
+
Metadata_after_Fetch,
|
|
505
|
+
"Metadata Request should have been made after fetch atleast once.");
|
|
506
|
+
SUB_TEST_PASS();
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
/**
|
|
510
|
+
* @brief Exponential Backoff (KIP 580)
|
|
511
|
+
* We test all the pipelines which affect the retry mechanism for both
|
|
512
|
+
* intervalled queries where jitter is added and backed off queries where both
|
|
513
|
+
* jitter and exponential backoff is applied with the max being retry_max_ms.
|
|
514
|
+
*/
|
|
515
|
+
int main_0143_exponential_backoff_mock(int argc, char **argv) {
|
|
516
|
+
const char *topic = test_mk_topic_name("topic", 1);
|
|
517
|
+
rd_kafka_mock_cluster_t *mcluster;
|
|
518
|
+
rd_kafka_conf_t *conf;
|
|
519
|
+
const char *bootstraps;
|
|
520
|
+
|
|
521
|
+
TEST_SKIP_MOCK_CLUSTER(0);
|
|
522
|
+
|
|
523
|
+
mcluster = test_mock_cluster_new(1, &bootstraps);
|
|
524
|
+
rd_kafka_mock_start_request_tracking(mcluster);
|
|
525
|
+
rd_kafka_mock_topic_create(mcluster, topic, 1, 1);
|
|
526
|
+
|
|
527
|
+
test_conf_init(&conf, NULL, 30);
|
|
528
|
+
/* This test may be slower when running with CI or Helgrind,
|
|
529
|
+
* restart the timeout. */
|
|
530
|
+
test_timeout_set(100);
|
|
531
|
+
test_conf_set(conf, "bootstrap.servers", bootstraps);
|
|
532
|
+
test_conf_set(conf, "topic.metadata.refresh.interval.ms", "-1");
|
|
533
|
+
|
|
534
|
+
test_produce(mcluster, topic, rd_kafka_conf_dup(conf));
|
|
535
|
+
test_find_coordinator(mcluster, topic, rd_kafka_conf_dup(conf));
|
|
536
|
+
test_offset_commit(mcluster, topic, rd_kafka_conf_dup(conf));
|
|
537
|
+
test_heartbeat_find_coordinator(mcluster, topic,
|
|
538
|
+
rd_kafka_conf_dup(conf));
|
|
539
|
+
test_fetch_fast_leader_query(mcluster, topic, rd_kafka_conf_dup(conf));
|
|
540
|
+
test_produce_fast_leader_query(mcluster, topic,
|
|
541
|
+
rd_kafka_conf_dup(conf));
|
|
542
|
+
|
|
543
|
+
/* No JoinGroup RPC in KIP 848 protocol. */
|
|
544
|
+
if (test_consumer_group_protocol_classic()) {
|
|
545
|
+
test_joingroup_find_coordinator(mcluster, topic,
|
|
546
|
+
rd_kafka_conf_dup(conf));
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
test_mock_cluster_destroy(mcluster);
|
|
550
|
+
rd_kafka_conf_destroy(conf);
|
|
551
|
+
return 0;
|
|
552
|
+
}
|