@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,651 @@
|
|
|
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
|
+
#include "test.h"
|
|
29
|
+
|
|
30
|
+
#include "../src/rdkafka_proto.h"
|
|
31
|
+
|
|
32
|
+
typedef struct {
|
|
33
|
+
int16_t ApiKey;
|
|
34
|
+
int64_t
|
|
35
|
+
expected_diff_ms /* Expected time difference from last request */;
|
|
36
|
+
int64_t jitter_percent; /* Jitter to be accounted for while checking
|
|
37
|
+
expected diff*/
|
|
38
|
+
int broker_id; /* Broker id of request. */
|
|
39
|
+
} rd_kafka_telemetry_expected_request_t;
|
|
40
|
+
|
|
41
|
+
static void test_telemetry_check_protocol_request_times(
|
|
42
|
+
rd_kafka_mock_cluster_t *mcluster,
|
|
43
|
+
rd_kafka_telemetry_expected_request_t *requests_expected,
|
|
44
|
+
size_t expected_cnt) {
|
|
45
|
+
int64_t prev_timestamp = -1;
|
|
46
|
+
int64_t curr_timestamp = -1;
|
|
47
|
+
size_t expected_idx = 0;
|
|
48
|
+
size_t actual_idx = 0;
|
|
49
|
+
const int buffer = 500 /* constant buffer time. */;
|
|
50
|
+
|
|
51
|
+
rd_kafka_mock_request_t **requests = NULL;
|
|
52
|
+
size_t request_cnt;
|
|
53
|
+
|
|
54
|
+
if (expected_cnt < 1)
|
|
55
|
+
return;
|
|
56
|
+
|
|
57
|
+
requests = rd_kafka_mock_get_requests(mcluster, &request_cnt);
|
|
58
|
+
|
|
59
|
+
TEST_ASSERT(request_cnt >= expected_cnt,
|
|
60
|
+
"Expected at least %" PRIusz " requests, have %" PRIusz,
|
|
61
|
+
expected_cnt, request_cnt);
|
|
62
|
+
|
|
63
|
+
for (expected_idx = 0, actual_idx = 0;
|
|
64
|
+
expected_idx < expected_cnt && actual_idx < request_cnt;
|
|
65
|
+
actual_idx++) {
|
|
66
|
+
rd_kafka_mock_request_t *request_actual = requests[actual_idx];
|
|
67
|
+
int16_t actual_ApiKey =
|
|
68
|
+
rd_kafka_mock_request_api_key(request_actual);
|
|
69
|
+
int actual_broker_id = rd_kafka_mock_request_id(request_actual);
|
|
70
|
+
rd_kafka_telemetry_expected_request_t request_expected =
|
|
71
|
+
requests_expected[expected_idx];
|
|
72
|
+
|
|
73
|
+
if (actual_ApiKey != RD_KAFKAP_GetTelemetrySubscriptions &&
|
|
74
|
+
actual_ApiKey != RD_KAFKAP_PushTelemetry)
|
|
75
|
+
continue;
|
|
76
|
+
|
|
77
|
+
TEST_ASSERT(actual_ApiKey == request_expected.ApiKey,
|
|
78
|
+
"request[%" PRIusz
|
|
79
|
+
"]: Expected ApiKey %s, "
|
|
80
|
+
"got ApiKey %s",
|
|
81
|
+
expected_idx,
|
|
82
|
+
rd_kafka_ApiKey2str(request_expected.ApiKey),
|
|
83
|
+
rd_kafka_ApiKey2str(actual_ApiKey));
|
|
84
|
+
|
|
85
|
+
if (request_expected.broker_id != -1)
|
|
86
|
+
TEST_ASSERT(request_expected.broker_id ==
|
|
87
|
+
actual_broker_id,
|
|
88
|
+
"request[%" PRIusz
|
|
89
|
+
"]: Expected request to be "
|
|
90
|
+
"sent to broker %d, was sent to %d",
|
|
91
|
+
expected_idx, request_expected.broker_id,
|
|
92
|
+
actual_broker_id);
|
|
93
|
+
|
|
94
|
+
prev_timestamp = curr_timestamp;
|
|
95
|
+
curr_timestamp =
|
|
96
|
+
rd_kafka_mock_request_timestamp(request_actual);
|
|
97
|
+
if (prev_timestamp != -1 &&
|
|
98
|
+
request_expected.expected_diff_ms != -1) {
|
|
99
|
+
int64_t diff_ms =
|
|
100
|
+
(curr_timestamp - prev_timestamp) / 1000;
|
|
101
|
+
int64_t expected_diff_low =
|
|
102
|
+
request_expected.expected_diff_ms *
|
|
103
|
+
(100 - request_expected.jitter_percent) / 100 -
|
|
104
|
+
buffer;
|
|
105
|
+
int64_t expected_diff_hi =
|
|
106
|
+
request_expected.expected_diff_ms *
|
|
107
|
+
(100 + request_expected.jitter_percent) / 100 +
|
|
108
|
+
buffer;
|
|
109
|
+
|
|
110
|
+
TEST_ASSERT(diff_ms > expected_diff_low,
|
|
111
|
+
"request[%" PRIusz
|
|
112
|
+
"]: Expected difference to be "
|
|
113
|
+
"more than %" PRId64 ", was %" PRId64,
|
|
114
|
+
expected_idx, expected_diff_low, diff_ms);
|
|
115
|
+
TEST_ASSERT(diff_ms < expected_diff_hi,
|
|
116
|
+
"request[%" PRIusz
|
|
117
|
+
"]: Expected difference to be "
|
|
118
|
+
"less than %" PRId64 ", was %" PRId64,
|
|
119
|
+
expected_idx, expected_diff_hi, diff_ms);
|
|
120
|
+
}
|
|
121
|
+
expected_idx++;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
if (expected_idx < expected_cnt) {
|
|
125
|
+
TEST_FAIL("Expected %lu requests, got %lu", expected_cnt,
|
|
126
|
+
expected_idx);
|
|
127
|
+
}
|
|
128
|
+
rd_kafka_mock_request_destroy_array(requests, request_cnt);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
static void
|
|
132
|
+
test_poll_timeout(rd_kafka_t *rk, int64_t duration_ms, const char *topic) {
|
|
133
|
+
int64_t start_time = test_clock(), now, iteration_start_time = 0;
|
|
134
|
+
rd_kafka_topic_t *rkt = NULL;
|
|
135
|
+
rd_kafka_type_t type = rd_kafka_type(rk);
|
|
136
|
+
if (type == RD_KAFKA_PRODUCER)
|
|
137
|
+
rkt = test_create_topic_object(rk, topic, NULL);
|
|
138
|
+
|
|
139
|
+
now = test_clock();
|
|
140
|
+
while ((now - start_time) / 1000 < duration_ms) {
|
|
141
|
+
if (now - iteration_start_time < 500 * 1000) {
|
|
142
|
+
int64_t sleep_interval =
|
|
143
|
+
500 * 1000 - (now - iteration_start_time);
|
|
144
|
+
if (sleep_interval >
|
|
145
|
+
start_time + duration_ms * 1000 - now)
|
|
146
|
+
sleep_interval =
|
|
147
|
+
start_time + duration_ms * 1000 - now;
|
|
148
|
+
rd_usleep(sleep_interval, 0);
|
|
149
|
+
}
|
|
150
|
+
iteration_start_time = test_clock();
|
|
151
|
+
/* Generate some metrics to report */
|
|
152
|
+
if (type == RD_KAFKA_CONSUMER) {
|
|
153
|
+
test_consumer_poll_timeout("Consume", rk, 0, -1, -1, 1,
|
|
154
|
+
NULL, 10000);
|
|
155
|
+
} else {
|
|
156
|
+
test_produce_msgs(rk, rkt, 0, 0, 0, 10, NULL, 64);
|
|
157
|
+
}
|
|
158
|
+
now = test_clock();
|
|
159
|
+
}
|
|
160
|
+
if (rkt)
|
|
161
|
+
rd_kafka_topic_destroy(rkt);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
static rd_kafka_mock_cluster_t *create_mcluster(const char **bootstraps,
|
|
165
|
+
char **expected_metrics,
|
|
166
|
+
size_t expected_metrics_cnt,
|
|
167
|
+
int64_t push_interval,
|
|
168
|
+
const char *topic) {
|
|
169
|
+
rd_kafka_mock_cluster_t *mcluster =
|
|
170
|
+
test_mock_cluster_new(2, bootstraps);
|
|
171
|
+
if (expected_metrics_cnt)
|
|
172
|
+
rd_kafka_mock_telemetry_set_requested_metrics(
|
|
173
|
+
mcluster, expected_metrics, expected_metrics_cnt);
|
|
174
|
+
rd_kafka_mock_telemetry_set_push_interval(mcluster, push_interval);
|
|
175
|
+
rd_kafka_mock_topic_create(mcluster, topic, 1, 2);
|
|
176
|
+
rd_kafka_mock_group_initial_rebalance_delay_ms(mcluster, 0);
|
|
177
|
+
rd_kafka_mock_partition_set_leader(mcluster, topic, 0, 1);
|
|
178
|
+
rd_kafka_mock_coordinator_set(mcluster, "group", topic, 1);
|
|
179
|
+
|
|
180
|
+
/* Seed the topic so the consumer has always messages to read */
|
|
181
|
+
test_produce_msgs_easy_v(topic, 0, 0, 0, 100, 0, "bootstrap.servers",
|
|
182
|
+
*bootstraps, "batch.num.messages", "10", NULL);
|
|
183
|
+
|
|
184
|
+
rd_kafka_mock_start_request_tracking(mcluster);
|
|
185
|
+
return mcluster;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
static rd_kafka_t *
|
|
189
|
+
create_handle(const char *bootstraps, rd_kafka_type_t type, const char *topic) {
|
|
190
|
+
rd_kafka_conf_t *conf;
|
|
191
|
+
rd_kafka_t *rk;
|
|
192
|
+
test_conf_init(&conf, NULL, 30);
|
|
193
|
+
test_conf_set(conf, "bootstrap.servers", bootstraps);
|
|
194
|
+
|
|
195
|
+
if (type == RD_KAFKA_CONSUMER) {
|
|
196
|
+
test_conf_set(conf, "group.id", topic);
|
|
197
|
+
test_conf_set(conf, "auto.offset.reset", "earliest");
|
|
198
|
+
rk = test_create_handle(RD_KAFKA_CONSUMER, conf);
|
|
199
|
+
test_consumer_subscribe(rk, topic);
|
|
200
|
+
} else {
|
|
201
|
+
rd_kafka_conf_set_dr_msg_cb(conf, test_dr_msg_cb);
|
|
202
|
+
rk = test_create_handle(RD_KAFKA_PRODUCER, conf);
|
|
203
|
+
}
|
|
204
|
+
return rk;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* @brief Tests the 'happy path' of GetTelemetrySubscriptions, followed by
|
|
209
|
+
* successful PushTelemetry requests.
|
|
210
|
+
* See `requests_expected` for detailed expected flow.
|
|
211
|
+
*/
|
|
212
|
+
static void
|
|
213
|
+
do_test_telemetry_get_subscription_push_telemetry(rd_kafka_type_t type) {
|
|
214
|
+
const char *bootstraps;
|
|
215
|
+
rd_kafka_mock_cluster_t *mcluster;
|
|
216
|
+
char *expected_metrics[] = {"*"};
|
|
217
|
+
rd_kafka_t *rk = NULL;
|
|
218
|
+
const int64_t push_interval = 5000;
|
|
219
|
+
const char *topic = test_mk_topic_name(__FUNCTION__, 1);
|
|
220
|
+
|
|
221
|
+
rd_kafka_telemetry_expected_request_t requests_expected[] = {
|
|
222
|
+
/* T= 0 : The initial GetTelemetrySubscriptions request. */
|
|
223
|
+
{.ApiKey = RD_KAFKAP_GetTelemetrySubscriptions,
|
|
224
|
+
.broker_id = -1,
|
|
225
|
+
.expected_diff_ms = -1,
|
|
226
|
+
.jitter_percent = 0},
|
|
227
|
+
/* T = push_interval + jitter : The first PushTelemetry request */
|
|
228
|
+
{.ApiKey = RD_KAFKAP_PushTelemetry,
|
|
229
|
+
.broker_id = -1,
|
|
230
|
+
.expected_diff_ms = push_interval,
|
|
231
|
+
.jitter_percent = 30},
|
|
232
|
+
/* T = push_interval*2 + jitter : The second PushTelemetry request.
|
|
233
|
+
*/
|
|
234
|
+
{.ApiKey = RD_KAFKAP_PushTelemetry,
|
|
235
|
+
.broker_id = -1,
|
|
236
|
+
.expected_diff_ms = push_interval,
|
|
237
|
+
.jitter_percent = 30},
|
|
238
|
+
};
|
|
239
|
+
|
|
240
|
+
SUB_TEST("type %s",
|
|
241
|
+
type == RD_KAFKA_PRODUCER ? "PRODUCER" : "CONSUMER");
|
|
242
|
+
|
|
243
|
+
mcluster = create_mcluster(&bootstraps, expected_metrics,
|
|
244
|
+
RD_ARRAY_SIZE(expected_metrics),
|
|
245
|
+
push_interval, topic);
|
|
246
|
+
|
|
247
|
+
rk = create_handle(bootstraps, type, topic);
|
|
248
|
+
|
|
249
|
+
/* Poll for enough time for two pushes to be triggered, and a little
|
|
250
|
+
* extra, so 2.5 x push interval. */
|
|
251
|
+
test_poll_timeout(rk, push_interval * 2.5, topic);
|
|
252
|
+
|
|
253
|
+
test_telemetry_check_protocol_request_times(
|
|
254
|
+
mcluster, requests_expected, RD_ARRAY_SIZE(requests_expected));
|
|
255
|
+
|
|
256
|
+
/* Clean up. */
|
|
257
|
+
rd_kafka_destroy(rk);
|
|
258
|
+
test_mock_cluster_destroy(mcluster);
|
|
259
|
+
|
|
260
|
+
SUB_TEST_PASS();
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* @brief When there are no subscriptions, GetTelemetrySubscriptions should be
|
|
266
|
+
* resent after the push interval until there are subscriptions.
|
|
267
|
+
* See `requests_expected` for detailed expected flow.
|
|
268
|
+
*/
|
|
269
|
+
static void
|
|
270
|
+
do_test_telemetry_empty_subscriptions_list(rd_kafka_type_t type,
|
|
271
|
+
char *subscription_regex) {
|
|
272
|
+
const char *bootstraps;
|
|
273
|
+
rd_kafka_mock_cluster_t *mcluster;
|
|
274
|
+
char *expected_metrics[] = {subscription_regex};
|
|
275
|
+
rd_kafka_t *rk = NULL;
|
|
276
|
+
const int64_t push_interval = 5000;
|
|
277
|
+
const char *topic = test_mk_topic_name(__FUNCTION__, 1);
|
|
278
|
+
|
|
279
|
+
rd_kafka_telemetry_expected_request_t requests_expected[] = {
|
|
280
|
+
/* T= 0 : The initial GetTelemetrySubscriptions request, returns
|
|
281
|
+
* empty subscription. */
|
|
282
|
+
{.ApiKey = RD_KAFKAP_GetTelemetrySubscriptions,
|
|
283
|
+
.broker_id = -1,
|
|
284
|
+
.expected_diff_ms = -1,
|
|
285
|
+
.jitter_percent = 0},
|
|
286
|
+
/* T = push_interval : The second GetTelemetrySubscriptions request,
|
|
287
|
+
* returns non-empty subscription */
|
|
288
|
+
{.ApiKey = RD_KAFKAP_GetTelemetrySubscriptions,
|
|
289
|
+
.broker_id = -1,
|
|
290
|
+
.expected_diff_ms = push_interval,
|
|
291
|
+
.jitter_percent = 0},
|
|
292
|
+
/* T = push_interval*2 + jitter : The first PushTelemetry request.
|
|
293
|
+
*/
|
|
294
|
+
{.ApiKey = RD_KAFKAP_PushTelemetry,
|
|
295
|
+
.broker_id = -1,
|
|
296
|
+
.expected_diff_ms = push_interval,
|
|
297
|
+
.jitter_percent = 30},
|
|
298
|
+
};
|
|
299
|
+
|
|
300
|
+
|
|
301
|
+
SUB_TEST("type %s, subscription regex: %s",
|
|
302
|
+
type == RD_KAFKA_PRODUCER ? "PRODUCER" : "CONSUMER",
|
|
303
|
+
subscription_regex);
|
|
304
|
+
|
|
305
|
+
mcluster = create_mcluster(&bootstraps, NULL, 0, push_interval, topic);
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
rk = create_handle(bootstraps, type, topic);
|
|
309
|
+
|
|
310
|
+
/* Poll for enough time so that the first GetTelemetrySubscription
|
|
311
|
+
* request is triggered. */
|
|
312
|
+
test_poll_timeout(rk, (push_interval * 0.5), topic);
|
|
313
|
+
|
|
314
|
+
/* Set expected_metrics before the second GetTelemetrySubscription is
|
|
315
|
+
* triggered. */
|
|
316
|
+
rd_kafka_mock_telemetry_set_requested_metrics(mcluster,
|
|
317
|
+
expected_metrics, 1);
|
|
318
|
+
|
|
319
|
+
/* Poll for enough time so that the second GetTelemetrySubscriptions and
|
|
320
|
+
* subsequent PushTelemetry request is triggered. */
|
|
321
|
+
test_poll_timeout(rk, (push_interval * 2), topic);
|
|
322
|
+
|
|
323
|
+
test_telemetry_check_protocol_request_times(mcluster, requests_expected,
|
|
324
|
+
3);
|
|
325
|
+
|
|
326
|
+
/* Clean up. */
|
|
327
|
+
rd_kafka_destroy(rk);
|
|
328
|
+
test_mock_cluster_destroy(mcluster);
|
|
329
|
+
|
|
330
|
+
SUB_TEST_PASS();
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* @brief When a client is terminating, PushIntervalMs is overriden and a final
|
|
335
|
+
* push telemetry request should be sent immediately.
|
|
336
|
+
* See `requests_expected` for detailed expected flow.
|
|
337
|
+
*/
|
|
338
|
+
static void do_test_telemetry_terminating_push(rd_kafka_type_t type) {
|
|
339
|
+
const char *bootstraps;
|
|
340
|
+
rd_kafka_mock_cluster_t *mcluster;
|
|
341
|
+
char *expected_metrics[] = {"*"};
|
|
342
|
+
rd_kafka_t *rk = NULL;
|
|
343
|
+
const int64_t wait_before_termination = 2000;
|
|
344
|
+
|
|
345
|
+
const char *topic = test_mk_topic_name(__FUNCTION__, 1);
|
|
346
|
+
const int64_t push_interval = 5000; /* Needs to be comfortably larger
|
|
347
|
+
than wait_before_termination. */
|
|
348
|
+
|
|
349
|
+
rd_kafka_telemetry_expected_request_t requests_expected[] = {
|
|
350
|
+
/* T= 0 : The initial GetTelemetrySubscriptions request. */
|
|
351
|
+
{.ApiKey = RD_KAFKAP_GetTelemetrySubscriptions,
|
|
352
|
+
.broker_id = -1,
|
|
353
|
+
.expected_diff_ms = -1,
|
|
354
|
+
.jitter_percent = 0},
|
|
355
|
+
/* T = wait_before_termination : The second PushTelemetry request is
|
|
356
|
+
* sent immediately (terminating).
|
|
357
|
+
*/
|
|
358
|
+
{.ApiKey = RD_KAFKAP_PushTelemetry,
|
|
359
|
+
.broker_id = -1,
|
|
360
|
+
.expected_diff_ms = wait_before_termination,
|
|
361
|
+
.jitter_percent = 30},
|
|
362
|
+
};
|
|
363
|
+
|
|
364
|
+
SUB_TEST("type %s",
|
|
365
|
+
type == RD_KAFKA_PRODUCER ? "PRODUCER" : "CONSUMER");
|
|
366
|
+
|
|
367
|
+
mcluster = create_mcluster(&bootstraps, expected_metrics,
|
|
368
|
+
RD_ARRAY_SIZE(expected_metrics),
|
|
369
|
+
push_interval, topic);
|
|
370
|
+
|
|
371
|
+
rk = create_handle(bootstraps, type, topic);
|
|
372
|
+
|
|
373
|
+
/* Poll for enough time so that the initial GetTelemetrySubscriptions
|
|
374
|
+
* can be sent and handled, and keep polling till it's time to
|
|
375
|
+
* terminate. */
|
|
376
|
+
test_poll_timeout(rk, wait_before_termination, topic);
|
|
377
|
+
|
|
378
|
+
/* Destroy the client to trigger a terminating push request
|
|
379
|
+
* immediately. */
|
|
380
|
+
rd_kafka_destroy(rk);
|
|
381
|
+
|
|
382
|
+
test_telemetry_check_protocol_request_times(mcluster, requests_expected,
|
|
383
|
+
2);
|
|
384
|
+
|
|
385
|
+
/* Clean up. */
|
|
386
|
+
test_mock_cluster_destroy(mcluster);
|
|
387
|
+
|
|
388
|
+
SUB_TEST_PASS();
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
/**
|
|
392
|
+
* @brief Preferred broker should be 'sticky' and should not change unless the
|
|
393
|
+
* old preferred broker goes down.
|
|
394
|
+
* See `requests_expected` for detailed expected flow.
|
|
395
|
+
*/
|
|
396
|
+
void do_test_telemetry_preferred_broker_change(rd_kafka_type_t type) {
|
|
397
|
+
const char *bootstraps;
|
|
398
|
+
rd_kafka_mock_cluster_t *mcluster;
|
|
399
|
+
char *expected_metrics[] = {"*"};
|
|
400
|
+
rd_kafka_t *rk = NULL;
|
|
401
|
+
const char *topic = test_mk_topic_name(__FUNCTION__, 1);
|
|
402
|
+
const int64_t push_interval = 5000;
|
|
403
|
+
const struct rd_kafka_metadata *md;
|
|
404
|
+
|
|
405
|
+
rd_kafka_telemetry_expected_request_t requests_expected[] = {
|
|
406
|
+
/* T= 0 : The initial GetTelemetrySubscriptions request. */
|
|
407
|
+
{.ApiKey = RD_KAFKAP_GetTelemetrySubscriptions,
|
|
408
|
+
.broker_id = 1,
|
|
409
|
+
.expected_diff_ms = -1,
|
|
410
|
+
.jitter_percent = 0},
|
|
411
|
+
/* T = push_interval + jitter : The first PushTelemetry request,
|
|
412
|
+
* sent to the preferred broker 1.
|
|
413
|
+
*/
|
|
414
|
+
{.ApiKey = RD_KAFKAP_PushTelemetry,
|
|
415
|
+
.broker_id = 1,
|
|
416
|
+
.expected_diff_ms = push_interval,
|
|
417
|
+
.jitter_percent = 30},
|
|
418
|
+
/* T = 2*push_interval + jitter : The second PushTelemetry request,
|
|
419
|
+
* sent to the preferred broker 1.
|
|
420
|
+
*/
|
|
421
|
+
{.ApiKey = RD_KAFKAP_PushTelemetry,
|
|
422
|
+
.broker_id = 1,
|
|
423
|
+
.expected_diff_ms = push_interval,
|
|
424
|
+
.jitter_percent = 30},
|
|
425
|
+
/* T = 3*push_interval + jitter: The old preferred broker is set
|
|
426
|
+
* down, and this is the first PushTelemetry request to the new
|
|
427
|
+
* preferred broker.
|
|
428
|
+
*/
|
|
429
|
+
{.ApiKey = RD_KAFKAP_PushTelemetry,
|
|
430
|
+
.broker_id = 2,
|
|
431
|
+
.expected_diff_ms = push_interval,
|
|
432
|
+
.jitter_percent = 30},
|
|
433
|
+
/* T = 4*push_interval + jitter + arbitraryT + jitter2 : The second
|
|
434
|
+
* PushTelemetry request to the new preferred broker. The old
|
|
435
|
+
* broker will be up, but the preferred broker will not chnage.
|
|
436
|
+
*/
|
|
437
|
+
{.ApiKey = RD_KAFKAP_PushTelemetry,
|
|
438
|
+
.broker_id = 2,
|
|
439
|
+
.expected_diff_ms = push_interval,
|
|
440
|
+
.jitter_percent = 30},
|
|
441
|
+
};
|
|
442
|
+
|
|
443
|
+
SUB_TEST("type %s",
|
|
444
|
+
type == RD_KAFKA_PRODUCER ? "PRODUCER" : "CONSUMER");
|
|
445
|
+
|
|
446
|
+
mcluster = create_mcluster(&bootstraps, expected_metrics,
|
|
447
|
+
RD_ARRAY_SIZE(expected_metrics),
|
|
448
|
+
push_interval, topic);
|
|
449
|
+
/* Set broker 2 down, to make sure broker 1 is the first preferred
|
|
450
|
+
* broker. */
|
|
451
|
+
rd_kafka_mock_broker_set_down(mcluster, 2);
|
|
452
|
+
|
|
453
|
+
test_curr->is_fatal_cb = test_error_is_not_fatal_cb;
|
|
454
|
+
rk = create_handle(bootstraps, type, topic);
|
|
455
|
+
|
|
456
|
+
/* Poll for enough time that the initial GetTelemetrySubscription can be
|
|
457
|
+
* sent and the first PushTelemetry request can be scheduled. */
|
|
458
|
+
test_poll_timeout(rk, 0.5 * push_interval, topic);
|
|
459
|
+
|
|
460
|
+
/* Poll for enough time that 2 PushTelemetry requests can be sent. Set
|
|
461
|
+
* the all brokers up during this time, but the preferred broker (1)
|
|
462
|
+
* should remain sticky. */
|
|
463
|
+
rd_kafka_mock_broker_set_up(mcluster, 2);
|
|
464
|
+
/* Refresh metadata so we're sure broker 2 is present */
|
|
465
|
+
TEST_CALL_ERR__(rd_kafka_metadata(rk, 0, NULL, &md, 5000));
|
|
466
|
+
RD_IF_FREE(md, rd_kafka_metadata_destroy);
|
|
467
|
+
test_poll_timeout(rk, 2 * push_interval, topic);
|
|
468
|
+
|
|
469
|
+
/* Set the preferred broker (1) down. */
|
|
470
|
+
rd_kafka_mock_broker_set_down(mcluster, 1);
|
|
471
|
+
/* Change partition leader to broker 2. */
|
|
472
|
+
rd_kafka_mock_partition_set_leader(mcluster, topic, 0, 2);
|
|
473
|
+
/* Change coordinator to broker 2. */
|
|
474
|
+
rd_kafka_mock_coordinator_set(mcluster, "group", topic, 2);
|
|
475
|
+
|
|
476
|
+
/* Poll for enough time that 1 PushTelemetry request can be sent. */
|
|
477
|
+
test_poll_timeout(rk, 1.25 * push_interval, topic);
|
|
478
|
+
|
|
479
|
+
/* Poll for enough time that 1 PushTelemetry request can be sent. Set
|
|
480
|
+
* the all brokers up during this time, but the preferred broker (2)
|
|
481
|
+
* should remain sticky. */
|
|
482
|
+
rd_kafka_mock_broker_set_up(mcluster, 1);
|
|
483
|
+
test_poll_timeout(rk, 1.25 * push_interval, topic);
|
|
484
|
+
|
|
485
|
+
test_telemetry_check_protocol_request_times(mcluster, requests_expected,
|
|
486
|
+
5);
|
|
487
|
+
|
|
488
|
+
/* Clean up. */
|
|
489
|
+
rd_kafka_destroy(rk);
|
|
490
|
+
test_mock_cluster_destroy(mcluster);
|
|
491
|
+
|
|
492
|
+
SUB_TEST_PASS();
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
/**
|
|
496
|
+
* @brief Subscription Id change at the broker should trigger a new
|
|
497
|
+
* GetTelemetrySubscriptions request.
|
|
498
|
+
*/
|
|
499
|
+
void do_test_subscription_id_change(rd_kafka_type_t type) {
|
|
500
|
+
const char *bootstraps;
|
|
501
|
+
rd_kafka_mock_cluster_t *mcluster;
|
|
502
|
+
char *expected_metrics[] = {"*"};
|
|
503
|
+
rd_kafka_t *rk = NULL;
|
|
504
|
+
const char *topic = test_mk_topic_name(__FUNCTION__, 1);
|
|
505
|
+
const int64_t push_interval = 2000;
|
|
506
|
+
|
|
507
|
+
rd_kafka_telemetry_expected_request_t requests_expected[] = {
|
|
508
|
+
/* T= 0 : The initial GetTelemetrySubscriptions request. */
|
|
509
|
+
{.ApiKey = RD_KAFKAP_GetTelemetrySubscriptions,
|
|
510
|
+
.broker_id = -1,
|
|
511
|
+
.expected_diff_ms = -1,
|
|
512
|
+
.jitter_percent = 0},
|
|
513
|
+
/* T = push_interval + jitter : The first PushTelemetry request,
|
|
514
|
+
* sent to the preferred broker 1.
|
|
515
|
+
*/
|
|
516
|
+
{.ApiKey = RD_KAFKAP_PushTelemetry,
|
|
517
|
+
.broker_id = -1,
|
|
518
|
+
.expected_diff_ms = push_interval,
|
|
519
|
+
.jitter_percent = 30},
|
|
520
|
+
/* T = 2*push_interval + jitter : The second PushTelemetry request,
|
|
521
|
+
* which will fail with unknown subscription id.
|
|
522
|
+
*/
|
|
523
|
+
{.ApiKey = RD_KAFKAP_PushTelemetry,
|
|
524
|
+
.broker_id = -1,
|
|
525
|
+
.expected_diff_ms = push_interval,
|
|
526
|
+
.jitter_percent = 30},
|
|
527
|
+
/* New GetTelemetrySubscriptions request will be sent immediately.
|
|
528
|
+
*/
|
|
529
|
+
{.ApiKey = RD_KAFKAP_GetTelemetrySubscriptions,
|
|
530
|
+
.broker_id = -1,
|
|
531
|
+
.expected_diff_ms = 0,
|
|
532
|
+
.jitter_percent = 0},
|
|
533
|
+
/* T = 3*push_interval + jitter : The third PushTelemetry request,
|
|
534
|
+
* sent to the preferred broker 1 with new subscription id.
|
|
535
|
+
*/
|
|
536
|
+
{.ApiKey = RD_KAFKAP_PushTelemetry,
|
|
537
|
+
.broker_id = -1,
|
|
538
|
+
.expected_diff_ms = push_interval,
|
|
539
|
+
.jitter_percent = 30},
|
|
540
|
+
};
|
|
541
|
+
|
|
542
|
+
SUB_TEST("type %s",
|
|
543
|
+
type == RD_KAFKA_PRODUCER ? "PRODUCER" : "CONSUMER");
|
|
544
|
+
|
|
545
|
+
mcluster = create_mcluster(&bootstraps, expected_metrics,
|
|
546
|
+
RD_ARRAY_SIZE(expected_metrics),
|
|
547
|
+
push_interval, topic);
|
|
548
|
+
|
|
549
|
+
rk = create_handle(bootstraps, type, topic);
|
|
550
|
+
|
|
551
|
+
test_poll_timeout(rk, push_interval * 1.5, topic);
|
|
552
|
+
|
|
553
|
+
rd_kafka_mock_push_request_errors(
|
|
554
|
+
mcluster, RD_KAFKAP_PushTelemetry, 1,
|
|
555
|
+
RD_KAFKA_RESP_ERR_UNKNOWN_SUBSCRIPTION_ID);
|
|
556
|
+
|
|
557
|
+
test_poll_timeout(rk, push_interval * 2.5, topic);
|
|
558
|
+
|
|
559
|
+
test_telemetry_check_protocol_request_times(
|
|
560
|
+
mcluster, requests_expected, RD_ARRAY_SIZE(requests_expected));
|
|
561
|
+
|
|
562
|
+
/* Clean up. */
|
|
563
|
+
rd_kafka_destroy(rk);
|
|
564
|
+
test_mock_cluster_destroy(mcluster);
|
|
565
|
+
|
|
566
|
+
SUB_TEST_PASS();
|
|
567
|
+
}
|
|
568
|
+
|
|
569
|
+
|
|
570
|
+
/**
|
|
571
|
+
* @brief Invalid record from broker should stop metrics
|
|
572
|
+
*/
|
|
573
|
+
void do_test_invalid_record(rd_kafka_type_t type) {
|
|
574
|
+
const char *bootstraps;
|
|
575
|
+
rd_kafka_mock_cluster_t *mcluster;
|
|
576
|
+
char *expected_metrics[] = {"*"};
|
|
577
|
+
rd_kafka_t *rk = NULL;
|
|
578
|
+
const int64_t push_interval = 2000;
|
|
579
|
+
const char *topic = test_mk_topic_name(__FUNCTION__, 1);
|
|
580
|
+
|
|
581
|
+
rd_kafka_telemetry_expected_request_t requests_expected[] = {
|
|
582
|
+
/* T= 0 : The initial GetTelemetrySubscriptions request. */
|
|
583
|
+
{.ApiKey = RD_KAFKAP_GetTelemetrySubscriptions,
|
|
584
|
+
.broker_id = -1,
|
|
585
|
+
.expected_diff_ms = -1,
|
|
586
|
+
.jitter_percent = 0},
|
|
587
|
+
/* T = push_interval + jitter : The first PushTelemetry request,
|
|
588
|
+
* sent to the preferred broker 1.
|
|
589
|
+
*/
|
|
590
|
+
{.ApiKey = RD_KAFKAP_PushTelemetry,
|
|
591
|
+
.broker_id = -1,
|
|
592
|
+
.expected_diff_ms = push_interval,
|
|
593
|
+
.jitter_percent = 20},
|
|
594
|
+
/* T = 2*push_interval : The second PushTelemetry request,
|
|
595
|
+
* which will fail with RD_KAFKA_RESP_ERR_INVALID_RECORD and no
|
|
596
|
+
* further telemetry requests would be sent.
|
|
597
|
+
*/
|
|
598
|
+
{.ApiKey = RD_KAFKAP_PushTelemetry,
|
|
599
|
+
.broker_id = -1,
|
|
600
|
+
.expected_diff_ms = push_interval,
|
|
601
|
+
.jitter_percent = 0},
|
|
602
|
+
};
|
|
603
|
+
SUB_TEST("type %s",
|
|
604
|
+
type == RD_KAFKA_PRODUCER ? "PRODUCER" : "CONSUMER");
|
|
605
|
+
|
|
606
|
+
mcluster = create_mcluster(&bootstraps, expected_metrics,
|
|
607
|
+
RD_ARRAY_SIZE(expected_metrics),
|
|
608
|
+
push_interval, topic);
|
|
609
|
+
|
|
610
|
+
rd_kafka_mock_push_request_errors(mcluster, RD_KAFKAP_PushTelemetry, 2,
|
|
611
|
+
RD_KAFKA_RESP_ERR_NO_ERROR,
|
|
612
|
+
RD_KAFKA_RESP_ERR_INVALID_RECORD);
|
|
613
|
+
|
|
614
|
+
rk = create_handle(bootstraps, type, topic);
|
|
615
|
+
|
|
616
|
+
test_poll_timeout(rk, push_interval * 2.5, topic);
|
|
617
|
+
|
|
618
|
+
test_telemetry_check_protocol_request_times(
|
|
619
|
+
mcluster, requests_expected, RD_ARRAY_SIZE(requests_expected));
|
|
620
|
+
|
|
621
|
+
/* Clean up. */
|
|
622
|
+
rd_kafka_destroy(rk);
|
|
623
|
+
test_mock_cluster_destroy(mcluster);
|
|
624
|
+
|
|
625
|
+
SUB_TEST_PASS();
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
|
|
629
|
+
int main_0150_telemetry_mock(int argc, char **argv) {
|
|
630
|
+
int type;
|
|
631
|
+
|
|
632
|
+
if (test_needs_auth()) {
|
|
633
|
+
TEST_SKIP("Mock cluster does not support SSL/SASL\n");
|
|
634
|
+
return 0;
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
for (type = RD_KAFKA_PRODUCER; type <= RD_KAFKA_CONSUMER; type++) {
|
|
638
|
+
do_test_telemetry_get_subscription_push_telemetry(type);
|
|
639
|
+
// All metrics are subscribed
|
|
640
|
+
do_test_telemetry_empty_subscriptions_list(type, "*");
|
|
641
|
+
// No metrics are subscribed
|
|
642
|
+
do_test_telemetry_empty_subscriptions_list(
|
|
643
|
+
type, "non-existent-metric");
|
|
644
|
+
do_test_telemetry_terminating_push(type);
|
|
645
|
+
do_test_telemetry_preferred_broker_change(type);
|
|
646
|
+
do_test_subscription_id_change(type);
|
|
647
|
+
do_test_invalid_record(type);
|
|
648
|
+
};
|
|
649
|
+
|
|
650
|
+
return 0;
|
|
651
|
+
}
|