@platformatic/rdkafka 4.0.1 → 4.1.0
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/README.md +5 -5
- package/bench/seed.sh +0 -0
- package/binding.gyp +8 -1
- package/ci/prepublish.js +0 -1
- package/config.d.ts +126 -10
- package/configure +0 -0
- package/deps/librdkafka/.semaphore/run-all-tests.yml +77 -0
- package/deps/librdkafka/.semaphore/semaphore-integration.yml +250 -0
- package/deps/librdkafka/.semaphore/semaphore.yml +67 -44
- package/deps/librdkafka/.semaphore/verify-linux-packages.yml +41 -0
- package/deps/librdkafka/CHANGELOG.md +471 -1
- package/deps/librdkafka/CONFIGURATION.md +29 -9
- package/deps/librdkafka/INTRODUCTION.md +909 -601
- package/deps/librdkafka/LICENSES.txt +592 -1
- package/deps/librdkafka/Makefile +2 -1
- package/deps/librdkafka/_mkltmpuuWEwa.c +13 -0
- package/deps/librdkafka/configure +0 -0
- package/deps/librdkafka/debian/rules +0 -0
- package/deps/librdkafka/dev-conf.sh +0 -0
- package/deps/librdkafka/examples/consumer.c +18 -8
- package/deps/librdkafka/examples/describe_consumer_groups.c +25 -6
- package/deps/librdkafka/examples/incremental_alter_configs.c +4 -5
- package/deps/librdkafka/examples/kafkatest_verifiable_client.cpp +26 -42
- package/deps/librdkafka/examples/openssl_engine_example.cpp +3 -4
- package/deps/librdkafka/examples/producer.cpp +2 -2
- package/deps/librdkafka/examples/user_scram.c +4 -5
- package/deps/librdkafka/examples/win_ssl_cert_store.cpp +4 -3
- package/deps/librdkafka/lds-gen.py +0 -0
- package/deps/librdkafka/mklove/Makefile.base +0 -0
- package/deps/librdkafka/packaging/RELEASE.md +8 -0
- package/deps/librdkafka/packaging/alpine/build-alpine.sh +0 -0
- package/deps/librdkafka/packaging/cp/README.md +4 -1
- package/deps/librdkafka/packaging/cp/check_features.c +12 -4
- package/deps/librdkafka/packaging/cp/verify-deb.sh +6 -6
- package/deps/librdkafka/packaging/cp/verify-packages.sh +52 -31
- package/deps/librdkafka/packaging/cp/verify-rpm.sh +6 -13
- package/deps/librdkafka/packaging/debian/rules +0 -0
- package/deps/librdkafka/packaging/get_version.py +0 -0
- package/deps/librdkafka/packaging/homebrew/brew-update-pr.sh +0 -0
- package/deps/librdkafka/packaging/mingw-w64/{travis-before-install.sh → export-variables.sh} +0 -7
- package/deps/librdkafka/packaging/mingw-w64/semaphoreci-build.sh +1 -1
- package/deps/librdkafka/packaging/nuget/artifact.py +0 -0
- package/deps/librdkafka/packaging/nuget/cleanup-s3.py +0 -0
- package/deps/librdkafka/packaging/nuget/nuget.sh +0 -0
- package/deps/librdkafka/packaging/nuget/packaging.py +0 -0
- package/deps/librdkafka/packaging/nuget/push-to-nuget.sh +0 -0
- package/deps/librdkafka/packaging/nuget/release.py +0 -0
- package/deps/librdkafka/packaging/nuget/requirements.txt +3 -3
- package/deps/librdkafka/packaging/rpm/mock-on-docker.sh +0 -0
- package/deps/librdkafka/packaging/rpm/tests/run-test.sh +0 -0
- package/deps/librdkafka/packaging/rpm/tests/test-on-docker.sh +0 -0
- package/deps/librdkafka/packaging/tools/build-configurations-checks.sh +3 -1
- package/deps/librdkafka/packaging/tools/build-deb-package.sh +0 -0
- package/deps/librdkafka/packaging/tools/build-debian.sh +0 -0
- package/deps/librdkafka/packaging/tools/build-manylinux.sh +0 -0
- package/deps/librdkafka/packaging/tools/build-release-artifacts.sh +0 -0
- package/deps/librdkafka/packaging/tools/distro-build.sh +0 -0
- package/deps/librdkafka/packaging/tools/gh-release-checksums.py +0 -0
- package/deps/librdkafka/packaging/tools/rdutcoverage.sh +0 -0
- package/deps/librdkafka/packaging/tools/run-in-docker.sh +28 -0
- package/deps/librdkafka/packaging/tools/run-integration-tests.sh +31 -0
- package/deps/librdkafka/packaging/tools/run-style-check.sh +4 -0
- package/deps/librdkafka/packaging/tools/style-format.sh +6 -5
- package/deps/librdkafka/packaging/tools/update_rpcs_max_versions.py +100 -0
- package/deps/librdkafka/service.yml +154 -0
- package/deps/librdkafka/src/generate_proto.sh +0 -0
- package/deps/librdkafka/src/rd.h +145 -2
- package/deps/librdkafka/src/rdaddr.h +6 -7
- package/deps/librdkafka/src/rdatomic.h +15 -11
- package/deps/librdkafka/src/rdavg.h +3 -2
- package/deps/librdkafka/src/rdbase64.c +33 -2
- package/deps/librdkafka/src/rdbase64.h +2 -0
- package/deps/librdkafka/src/rdendian.h +10 -9
- package/deps/librdkafka/src/rdhttp.c +418 -100
- package/deps/librdkafka/src/rdhttp.h +23 -5
- package/deps/librdkafka/src/rdkafka.c +299 -145
- package/deps/librdkafka/src/rdkafka.h +89 -6
- package/deps/librdkafka/src/rdkafka_admin.c +482 -105
- package/deps/librdkafka/src/rdkafka_admin.h +42 -0
- package/deps/librdkafka/src/rdkafka_broker.c +463 -312
- package/deps/librdkafka/src/rdkafka_broker.h +68 -10
- package/deps/librdkafka/src/rdkafka_buf.c +8 -5
- package/deps/librdkafka/src/rdkafka_buf.h +4 -3
- package/deps/librdkafka/src/rdkafka_cert.c +25 -1
- package/deps/librdkafka/src/rdkafka_cert.h +4 -3
- package/deps/librdkafka/src/rdkafka_cgrp.c +468 -143
- package/deps/librdkafka/src/rdkafka_cgrp.h +36 -2
- package/deps/librdkafka/src/rdkafka_conf.c +526 -102
- package/deps/librdkafka/src/rdkafka_conf.h +68 -4
- package/deps/librdkafka/src/rdkafka_feature.c +472 -35
- package/deps/librdkafka/src/rdkafka_feature.h +2 -0
- package/deps/librdkafka/src/rdkafka_fetcher.c +22 -2
- package/deps/librdkafka/src/rdkafka_fetcher.h +2 -2
- package/deps/librdkafka/src/rdkafka_int.h +84 -46
- package/deps/librdkafka/src/rdkafka_metadata.c +221 -136
- package/deps/librdkafka/src/rdkafka_metadata.h +15 -11
- package/deps/librdkafka/src/rdkafka_metadata_cache.c +279 -73
- package/deps/librdkafka/src/rdkafka_mock.c +795 -19
- package/deps/librdkafka/src/rdkafka_mock.h +119 -0
- package/deps/librdkafka/src/rdkafka_mock_cgrp.c +1298 -132
- package/deps/librdkafka/src/rdkafka_mock_handlers.c +345 -49
- package/deps/librdkafka/src/rdkafka_mock_int.h +180 -61
- package/deps/librdkafka/src/rdkafka_msg.c +35 -19
- package/deps/librdkafka/src/rdkafka_msg.h +3 -3
- package/deps/librdkafka/src/rdkafka_msgset_writer.c +14 -10
- package/deps/librdkafka/src/rdkafka_offset.c +33 -5
- package/deps/librdkafka/src/rdkafka_op.c +1 -1
- package/deps/librdkafka/src/rdkafka_op.h +45 -21
- package/deps/librdkafka/src/rdkafka_partition.c +118 -23
- package/deps/librdkafka/src/rdkafka_partition.h +16 -7
- package/deps/librdkafka/src/rdkafka_proto.h +4 -1
- package/deps/librdkafka/src/rdkafka_protocol.h +1 -0
- package/deps/librdkafka/src/rdkafka_queue.c +125 -48
- package/deps/librdkafka/src/rdkafka_queue.h +19 -0
- package/deps/librdkafka/src/rdkafka_range_assignor.c +1 -1
- package/deps/librdkafka/src/rdkafka_request.c +336 -64
- package/deps/librdkafka/src/rdkafka_request.h +24 -1
- package/deps/librdkafka/src/rdkafka_sasl.c +5 -3
- package/deps/librdkafka/src/rdkafka_sasl_oauthbearer.c +14 -10
- package/deps/librdkafka/src/rdkafka_sasl_oauthbearer_oidc.c +1166 -89
- package/deps/librdkafka/src/rdkafka_sasl_oauthbearer_oidc.h +13 -3
- package/deps/librdkafka/src/rdkafka_sasl_plain.c +3 -3
- package/deps/librdkafka/src/rdkafka_sasl_scram.c +4 -3
- package/deps/librdkafka/src/rdkafka_ssl.c +306 -81
- package/deps/librdkafka/src/rdkafka_ssl.h +22 -0
- package/deps/librdkafka/src/rdkafka_sticky_assignor.c +4 -0
- package/deps/librdkafka/src/rdkafka_telemetry.c +80 -23
- package/deps/librdkafka/src/rdkafka_telemetry_encode.c +5 -1
- package/deps/librdkafka/src/rdkafka_telemetry_encode.h +20 -20
- package/deps/librdkafka/src/rdkafka_topic.c +220 -137
- package/deps/librdkafka/src/rdkafka_topic.h +14 -8
- package/deps/librdkafka/src/rdkafka_transport.c +59 -47
- package/deps/librdkafka/src/rdkafka_transport.h +5 -0
- package/deps/librdkafka/src/rdkafka_txnmgr.c +6 -1
- package/deps/librdkafka/src/rdmap.c +6 -1
- package/deps/librdkafka/src/rdrand.c +11 -1
- package/deps/librdkafka/src/rdtime.h +48 -17
- package/deps/librdkafka/src/rdunittest.c +42 -25
- package/deps/librdkafka/src/rdunittest.h +2 -0
- package/deps/librdkafka/src/rdwin32.h +1 -1
- package/deps/librdkafka/src/regexp.c +47 -42
- package/deps/librdkafka/src/tinycthread_extra.c +45 -21
- package/deps/librdkafka/src/tinycthread_extra.h +7 -3
- package/deps/librdkafka/src-cpp/rdkafkacpp.h +28 -2
- package/deps/librdkafka/tests/0001-multiobj.c +4 -0
- package/deps/librdkafka/tests/0004-conf.c +103 -36
- package/deps/librdkafka/tests/0009-mock_cluster.c +1 -0
- package/deps/librdkafka/tests/0011-produce_batch.c +2 -1
- package/deps/librdkafka/tests/0016-client_swname.c +18 -3
- package/deps/librdkafka/tests/0017-compression.c +6 -8
- package/deps/librdkafka/tests/0018-cgrp_term.c +8 -3
- package/deps/librdkafka/tests/0021-rkt_destroy.c +1 -0
- package/deps/librdkafka/tests/0022-consume_batch.c +4 -1
- package/deps/librdkafka/tests/0026-consume_pause.c +12 -14
- package/deps/librdkafka/tests/0028-long_topicnames.c +1 -1
- package/deps/librdkafka/tests/0029-assign_offset.c +6 -8
- package/deps/librdkafka/tests/0030-offset_commit.c +2 -2
- package/deps/librdkafka/tests/0033-regex_subscribe.c +33 -17
- package/deps/librdkafka/tests/0034-offset_reset.c +25 -4
- package/deps/librdkafka/tests/0036-partial_fetch.c +1 -0
- package/deps/librdkafka/tests/0038-performance.c +1 -0
- package/deps/librdkafka/tests/0040-io_event.c +11 -5
- package/deps/librdkafka/tests/0041-fetch_max_bytes.c +1 -0
- package/deps/librdkafka/tests/0044-partition_cnt.c +3 -2
- package/deps/librdkafka/tests/0045-subscribe_update.c +284 -20
- package/deps/librdkafka/tests/0047-partial_buf_tmout.c +1 -0
- package/deps/librdkafka/tests/0048-partitioner.c +1 -1
- package/deps/librdkafka/tests/0050-subscribe_adds.c +1 -0
- package/deps/librdkafka/tests/0051-assign_adds.c +1 -0
- package/deps/librdkafka/tests/0052-msg_timestamps.c +22 -4
- package/deps/librdkafka/tests/0053-stats_cb.cpp +12 -20
- package/deps/librdkafka/tests/0055-producer_latency.c +176 -3
- package/deps/librdkafka/tests/0056-balanced_group_mt.c +6 -2
- package/deps/librdkafka/tests/0058-log.cpp +3 -3
- package/deps/librdkafka/tests/0059-bsearch.cpp +8 -4
- package/deps/librdkafka/tests/0061-consumer_lag.cpp +25 -5
- package/deps/librdkafka/tests/0067-empty_topic.cpp +3 -0
- package/deps/librdkafka/tests/0068-produce_timeout.c +21 -23
- package/deps/librdkafka/tests/0069-consumer_add_parts.c +3 -7
- package/deps/librdkafka/tests/0075-retry.c +38 -1
- package/deps/librdkafka/tests/0076-produce_retry.c +2 -0
- package/deps/librdkafka/tests/0077-compaction.c +8 -2
- package/deps/librdkafka/tests/0080-admin_ut.c +34 -4
- package/deps/librdkafka/tests/0081-admin.c +455 -155
- package/deps/librdkafka/tests/0082-fetch_max_bytes.cpp +4 -0
- package/deps/librdkafka/tests/0083-cb_event.c +8 -3
- package/deps/librdkafka/tests/0084-destroy_flags.c +14 -18
- package/deps/librdkafka/tests/0085-headers.cpp +4 -0
- package/deps/librdkafka/tests/0086-purge.c +40 -7
- package/deps/librdkafka/tests/0088-produce_metadata_timeout.c +1 -1
- package/deps/librdkafka/tests/0089-max_poll_interval.c +12 -7
- package/deps/librdkafka/tests/0090-idempotence.c +1 -2
- package/deps/librdkafka/tests/0091-max_poll_interval_timeout.c +5 -7
- package/deps/librdkafka/tests/0092-mixed_msgver.c +6 -0
- package/deps/librdkafka/tests/0093-holb.c +8 -5
- package/deps/librdkafka/tests/0094-idempotence_msg_timeout.c +1 -0
- package/deps/librdkafka/tests/0097-ssl_verify.cpp +262 -70
- package/deps/librdkafka/tests/0098-consumer-txn.cpp +16 -16
- package/deps/librdkafka/tests/0099-commit_metadata.c +1 -1
- package/deps/librdkafka/tests/0101-fetch-from-follower.cpp +1 -1
- package/deps/librdkafka/tests/0102-static_group_rebalance.c +317 -16
- package/deps/librdkafka/tests/0103-transactions.c +7 -7
- package/deps/librdkafka/tests/0104-fetch_from_follower_mock.c +1 -0
- package/deps/librdkafka/tests/0105-transactions_mock.c +18 -11
- package/deps/librdkafka/tests/0106-cgrp_sess_timeout.c +35 -14
- package/deps/librdkafka/tests/0107-topic_recreate.c +2 -2
- package/deps/librdkafka/tests/0109-auto_create_topics.cpp +86 -26
- package/deps/librdkafka/tests/0110-batch_size.cpp +1 -2
- package/deps/librdkafka/tests/0112-assign_unknown_part.c +3 -14
- package/deps/librdkafka/tests/0113-cooperative_rebalance.cpp +248 -104
- package/deps/librdkafka/tests/0114-sticky_partitioning.cpp +3 -3
- package/deps/librdkafka/tests/0115-producer_auth.cpp +4 -1
- package/deps/librdkafka/tests/0116-kafkaconsumer_close.cpp +7 -5
- package/deps/librdkafka/tests/0117-mock_errors.c +15 -5
- package/deps/librdkafka/tests/0118-commit_rebalance.c +41 -8
- package/deps/librdkafka/tests/0119-consumer_auth.cpp +20 -1
- package/deps/librdkafka/tests/0120-asymmetric_subscription.c +8 -3
- package/deps/librdkafka/tests/0125-immediate_flush.c +1 -1
- package/deps/librdkafka/tests/0126-oauthbearer_oidc.c +323 -8
- package/deps/librdkafka/tests/0129-fetch_aborted_msgs.c +1 -0
- package/deps/librdkafka/tests/0132-strategy_ordering.c +12 -4
- package/deps/librdkafka/tests/0133-ssl_keys.c +28 -6
- package/deps/librdkafka/tests/0137-barrier_batch_consume.c +24 -14
- package/deps/librdkafka/tests/0139-offset_validation_mock.c +510 -2
- package/deps/librdkafka/tests/0140-commit_metadata.cpp +1 -1
- package/deps/librdkafka/tests/0142-reauthentication.c +37 -17
- package/deps/librdkafka/tests/0143-exponential_backoff_mock.c +39 -40
- package/deps/librdkafka/tests/0146-metadata_mock.c +76 -15
- package/deps/librdkafka/tests/0147-consumer_group_consumer_mock.c +952 -0
- package/deps/librdkafka/tests/0148-offset_fetch_commit_error_mock.c +563 -0
- package/deps/librdkafka/tests/0149-broker-same-host-port.c +140 -0
- package/deps/librdkafka/tests/0150-telemetry_mock.c +9 -6
- 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/CMakeLists.txt +6 -0
- package/deps/librdkafka/tests/LibrdkafkaTestApp.py +34 -9
- package/deps/librdkafka/tests/autotest.sh +0 -0
- package/deps/librdkafka/tests/broker_version_tests.py +0 -0
- package/deps/librdkafka/tests/buildbox.sh +0 -0
- package/deps/librdkafka/tests/cleanup-checker-tests.sh +0 -0
- package/deps/librdkafka/tests/cluster_testing.py +0 -0
- package/deps/librdkafka/tests/delete-test-topics.sh +0 -0
- package/deps/librdkafka/tests/fixtures/oauthbearer/jwt_assertion_template.json +10 -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 +42 -101
- package/deps/librdkafka/tests/fixtures/ssl/client2.intermediate.key +46 -0
- package/deps/librdkafka/tests/fixtures/ssl/client2.key +41 -29
- package/deps/librdkafka/tests/fixtures/ssl/create_keys.sh +112 -37
- package/deps/librdkafka/tests/gen-ssl-certs.sh +0 -0
- package/deps/librdkafka/tests/interactive_broker_version.py +0 -0
- package/deps/librdkafka/tests/java/Makefile +2 -1
- package/deps/librdkafka/tests/java/run-class.sh +0 -0
- package/deps/librdkafka/tests/lz4_manual_test.sh +0 -0
- package/deps/librdkafka/tests/multi-broker-version-test.sh +0 -0
- package/deps/librdkafka/tests/parse-refcnt.sh +0 -0
- package/deps/librdkafka/tests/performance_plot.py +0 -0
- package/deps/librdkafka/tests/requirements.txt +1 -1
- package/deps/librdkafka/tests/run-all-tests.sh +79 -0
- package/deps/librdkafka/tests/run-consumer-tests.sh +0 -0
- package/deps/librdkafka/tests/run-producer-tests.sh +0 -0
- package/deps/librdkafka/tests/run-test-batches.py +157 -0
- package/deps/librdkafka/tests/run-test.sh +0 -0
- package/deps/librdkafka/tests/sasl_test.py +0 -0
- package/deps/librdkafka/tests/test.c +478 -18
- package/deps/librdkafka/tests/test.h +62 -13
- package/deps/librdkafka/tests/testcpp.cpp +6 -1
- package/deps/librdkafka/tests/testcpp.h +30 -2
- package/deps/librdkafka/tests/testshared.h +16 -2
- package/deps/librdkafka/tests/tools/stats/graph.py +0 -0
- package/deps/librdkafka/tests/tools/stats/to_csv.py +1 -1
- package/deps/librdkafka/tests/trivup/trivup-0.14.0.tar.gz +0 -0
- package/deps/librdkafka/tests/until-fail.sh +0 -0
- package/deps/librdkafka/tests/xxxx-metadata.cpp +1 -1
- package/deps/librdkafka/vcpkg.json +1 -1
- package/deps/librdkafka/win32/setup-msys2.ps1 +24 -8
- package/deps/librdkafka/win32/setup-vcpkg.ps1 +28 -6
- package/deps/librdkafka/win32/tests/tests.vcxproj +6 -0
- package/deps/librdkafka/win32/wingetopt.h +5 -4
- package/errors.d.ts +27 -1
- package/lib/error.js +29 -3
- package/make_docs.sh +0 -0
- package/package.json +11 -11
- package/run_docker.sh +0 -0
- package/src/callbacks.cc +6 -9
- package/src/callbacks.h +1 -5
- package/test/kafka-consumer-worker.js +10 -7
- package/test/kafka-consumer.spec.js +32 -21
- package/ci/update-version.js +0 -123
- package/deps/librdkafka/.semaphore/project.yml +0 -43
- package/deps/librdkafka/.semaphore/project_public.yml +0 -20
- package/deps/librdkafka/win32/install-openssl.ps1 +0 -33
|
@@ -61,4 +61,26 @@ int rd_kafka_ssl_hmac(rd_kafka_broker_t *rkb,
|
|
|
61
61
|
int itcnt,
|
|
62
62
|
rd_chariov_t *out);
|
|
63
63
|
|
|
64
|
+
int rd_kafka_ssl_read_cert_chain_from_BIO(BIO *in,
|
|
65
|
+
STACK_OF(X509) * chainp,
|
|
66
|
+
pem_password_cb *password_cb,
|
|
67
|
+
void *password_cb_opaque);
|
|
68
|
+
|
|
69
|
+
int rd_kafka_ssl_probe_and_set_default_ca_location(rd_kafka_t *rk,
|
|
70
|
+
const char *ctx_identifier,
|
|
71
|
+
SSL_CTX *ctx);
|
|
72
|
+
|
|
73
|
+
char *rd_kafka_ssl_error0(rd_kafka_t *rk,
|
|
74
|
+
rd_kafka_broker_t *rkb,
|
|
75
|
+
const char *ctx_identifier,
|
|
76
|
+
char *errstr,
|
|
77
|
+
size_t errstr_size);
|
|
78
|
+
|
|
79
|
+
#ifdef _WIN32
|
|
80
|
+
int rd_kafka_ssl_win_load_cert_stores(rd_kafka_t *rk,
|
|
81
|
+
const char *ctx_identifier,
|
|
82
|
+
SSL_CTX *ctx,
|
|
83
|
+
const char *store_names);
|
|
84
|
+
#endif
|
|
85
|
+
|
|
64
86
|
#endif /* _RDKAFKA_SSL_H_ */
|
|
@@ -3027,6 +3027,10 @@ static int ut_testLargeAssignmentWithMultipleConsumersLeaving(
|
|
|
3027
3027
|
rd_kafka_t *rk,
|
|
3028
3028
|
const rd_kafka_assignor_t *rkas,
|
|
3029
3029
|
rd_kafka_assignor_ut_rack_config_t parametrization) {
|
|
3030
|
+
if (rd_unittest_with_valgrind)
|
|
3031
|
+
RD_UT_SKIP(
|
|
3032
|
+
"Skipping large assignment test when using Valgrind");
|
|
3033
|
+
|
|
3030
3034
|
rd_kafka_resp_err_t err;
|
|
3031
3035
|
char errstr[512];
|
|
3032
3036
|
rd_kafka_metadata_t *metadata;
|
|
@@ -33,6 +33,7 @@
|
|
|
33
33
|
#include "nanopb/pb.h"
|
|
34
34
|
#include "rdkafka_lz4.h"
|
|
35
35
|
#include "snappy.h"
|
|
36
|
+
#include "rdunittest.h"
|
|
36
37
|
|
|
37
38
|
#if WITH_ZSTD
|
|
38
39
|
#include "rdkafka_zstd.h"
|
|
@@ -51,10 +52,8 @@
|
|
|
51
52
|
static int
|
|
52
53
|
rd_kafka_filter_broker_by_GetTelemetrySubscription(rd_kafka_broker_t *rkb,
|
|
53
54
|
void *opaque) {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
rkb, RD_KAFKAP_GetTelemetrySubscriptions, 0, 0, &features,
|
|
57
|
-
rd_false) != -1)
|
|
55
|
+
if (rd_kafka_broker_ApiVersion_at_least_no_lock(
|
|
56
|
+
rkb, RD_KAFKAP_GetTelemetrySubscriptions, 0))
|
|
58
57
|
return 0;
|
|
59
58
|
return 1;
|
|
60
59
|
}
|
|
@@ -173,6 +172,9 @@ static void update_matched_metrics(rd_kafka_t *rk, size_t j) {
|
|
|
173
172
|
|
|
174
173
|
static void rd_kafka_match_requested_metrics(rd_kafka_t *rk) {
|
|
175
174
|
size_t metrics_cnt = RD_KAFKA_TELEMETRY_METRIC_CNT(rk), i;
|
|
175
|
+
rd_bool_t is_metric_included[RD_MAX(
|
|
176
|
+
(int)RD_KAFKA_TELEMETRY_PRODUCER_METRIC__CNT,
|
|
177
|
+
(int)RD_KAFKA_TELEMETRY_CONSUMER_METRIC__CNT)] = {0};
|
|
176
178
|
const rd_kafka_telemetry_metric_info_t *info =
|
|
177
179
|
RD_KAFKA_TELEMETRY_METRIC_INFO(rk);
|
|
178
180
|
|
|
@@ -193,6 +195,9 @@ static void rd_kafka_match_requested_metrics(rd_kafka_t *rk) {
|
|
|
193
195
|
j;
|
|
194
196
|
|
|
195
197
|
for (j = 0; j < metrics_cnt; j++) {
|
|
198
|
+
if (is_metric_included[j])
|
|
199
|
+
continue;
|
|
200
|
+
|
|
196
201
|
/* Prefix matching the requested metrics with the
|
|
197
202
|
* available metrics. */
|
|
198
203
|
char full_metric_name
|
|
@@ -205,8 +210,10 @@ static void rd_kafka_match_requested_metrics(rd_kafka_t *rk) {
|
|
|
205
210
|
rk->rk_telemetry.requested_metrics[i],
|
|
206
211
|
name_len) == 0;
|
|
207
212
|
|
|
208
|
-
if (name_matches)
|
|
213
|
+
if (name_matches) {
|
|
209
214
|
update_matched_metrics(rk, j);
|
|
215
|
+
is_metric_included[j] = rd_true;
|
|
216
|
+
}
|
|
210
217
|
}
|
|
211
218
|
}
|
|
212
219
|
|
|
@@ -266,6 +273,24 @@ rd_kafka_push_telemetry_payload_compress(rd_kafka_t *rk,
|
|
|
266
273
|
rd_slice_t payload_slice;
|
|
267
274
|
size_t i;
|
|
268
275
|
rd_kafka_resp_err_t r = RD_KAFKA_RESP_ERR_NO_ERROR;
|
|
276
|
+
|
|
277
|
+
if (payload->rbuf_len == 0) {
|
|
278
|
+
/* We can only initialize the slice to compress
|
|
279
|
+
* if not empty. */
|
|
280
|
+
rd_kafka_dbg(rk, TELEMETRY, "PUSH",
|
|
281
|
+
"Empty payload. "
|
|
282
|
+
"Sending uncompressed payload");
|
|
283
|
+
|
|
284
|
+
/* It's not important the payload isn't actually a segment
|
|
285
|
+
* inside the buffer, as size is 0, we can send any allocated
|
|
286
|
+
* memory here, but we chose the buffer because it's
|
|
287
|
+
* freed like the other COMPRESSION_NONE case, without
|
|
288
|
+
* memory leaks. */
|
|
289
|
+
*compressed_payload = payload;
|
|
290
|
+
*compressed_payload_size = 0;
|
|
291
|
+
return RD_KAFKA_COMPRESSION_NONE;
|
|
292
|
+
}
|
|
293
|
+
|
|
269
294
|
rd_slice_init_full(&payload_slice, payload);
|
|
270
295
|
for (i = 0; i < rk->rk_telemetry.accepted_compression_types_cnt; i++) {
|
|
271
296
|
rd_kafka_compression_t compression_type =
|
|
@@ -359,21 +384,24 @@ static void rd_kafka_send_push_telemetry(rd_kafka_t *rk,
|
|
|
359
384
|
compressed_metrics_payload_size,
|
|
360
385
|
rk->rk_telemetry.telemetry_max_bytes);
|
|
361
386
|
}
|
|
387
|
+
|
|
388
|
+
rd_kafka_dbg(
|
|
389
|
+
rk, TELEMETRY, "PUSH",
|
|
390
|
+
"Sending PushTelemetryRequest with terminating = %s",
|
|
391
|
+
RD_STR_ToF(terminating));
|
|
392
|
+
rd_kafka_PushTelemetryRequest(
|
|
393
|
+
rkb, &rk->rk_telemetry.client_instance_id,
|
|
394
|
+
rk->rk_telemetry.subscription_id, terminating,
|
|
395
|
+
compression_used, compressed_metrics_payload,
|
|
396
|
+
compressed_metrics_payload_size, NULL, 0,
|
|
397
|
+
RD_KAFKA_REPLYQ(rk->rk_ops, 0),
|
|
398
|
+
rd_kafka_handle_PushTelemetry, NULL);
|
|
362
399
|
} else {
|
|
363
|
-
|
|
364
|
-
"
|
|
400
|
+
rd_kafka_log(rk, LOG_WARNING, "PUSH",
|
|
401
|
+
"Telemetry metrics encode error, not sending "
|
|
402
|
+
"metrics");
|
|
365
403
|
}
|
|
366
404
|
|
|
367
|
-
rd_kafka_dbg(rk, TELEMETRY, "PUSH",
|
|
368
|
-
"Sending PushTelemetryRequest with terminating = %s",
|
|
369
|
-
RD_STR_ToF(terminating));
|
|
370
|
-
rd_kafka_PushTelemetryRequest(
|
|
371
|
-
rkb, &rk->rk_telemetry.client_instance_id,
|
|
372
|
-
rk->rk_telemetry.subscription_id, terminating, compression_used,
|
|
373
|
-
compressed_metrics_payload, compressed_metrics_payload_size, NULL,
|
|
374
|
-
0, RD_KAFKA_REPLYQ(rk->rk_ops, 0), rd_kafka_handle_PushTelemetry,
|
|
375
|
-
NULL);
|
|
376
|
-
|
|
377
405
|
if (metrics_payload)
|
|
378
406
|
rd_buf_destroy_free(metrics_payload);
|
|
379
407
|
if (compression_used != RD_KAFKA_COMPRESSION_NONE)
|
|
@@ -388,7 +416,7 @@ static void rd_kafka_send_push_telemetry(rd_kafka_t *rk,
|
|
|
388
416
|
* @brief Progress the telemetry state machine.
|
|
389
417
|
*
|
|
390
418
|
* @locks none
|
|
391
|
-
* @locks_acquired
|
|
419
|
+
* @locks_acquired rd_kafka_rdlock()
|
|
392
420
|
* @locality main thread
|
|
393
421
|
*/
|
|
394
422
|
static void rd_kafka_telemetry_fsm(rd_kafka_t *rk) {
|
|
@@ -464,7 +492,7 @@ void rd_kafka_telemetry_fsm_tmr_cb(rd_kafka_timers_t *rkts, void *rk) {
|
|
|
464
492
|
* @brief Handles parsed GetTelemetrySubscriptions response.
|
|
465
493
|
*
|
|
466
494
|
* @locks none
|
|
467
|
-
* @locks_acquired
|
|
495
|
+
* @locks_acquired rd_kafka_rdlock()
|
|
468
496
|
* @locality main thread
|
|
469
497
|
*/
|
|
470
498
|
void rd_kafka_handle_get_telemetry_subscriptions(rd_kafka_t *rk,
|
|
@@ -501,10 +529,12 @@ void rd_kafka_handle_get_telemetry_subscriptions(rd_kafka_t *rk,
|
|
|
501
529
|
if (rk->rk_telemetry.rk_historic_c.ts_start == 0) {
|
|
502
530
|
rk->rk_telemetry.rk_historic_c.ts_start = now_ns;
|
|
503
531
|
rk->rk_telemetry.rk_historic_c.ts_last = now_ns;
|
|
532
|
+
rd_kafka_rdlock(rk);
|
|
504
533
|
TAILQ_FOREACH(rkb, &rk->rk_brokers, rkb_link) {
|
|
505
534
|
rkb->rkb_telemetry.rkb_historic_c.connects =
|
|
506
535
|
rd_atomic32_get(&rkb->rkb_c.connects);
|
|
507
536
|
}
|
|
537
|
+
rd_kafka_rdunlock(rk);
|
|
508
538
|
}
|
|
509
539
|
|
|
510
540
|
} else {
|
|
@@ -617,6 +647,7 @@ void rd_kafka_telemetry_await_termination(rd_kafka_t *rk) {
|
|
|
617
647
|
return;
|
|
618
648
|
}
|
|
619
649
|
|
|
650
|
+
mtx_lock(&rk->rk_telemetry.lock);
|
|
620
651
|
rko = rd_kafka_op_new(RD_KAFKA_OP_TERMINATE_TELEMETRY);
|
|
621
652
|
rko->rko_rk = rk;
|
|
622
653
|
rd_kafka_q_enq(rk->rk_ops, rko);
|
|
@@ -624,12 +655,8 @@ void rd_kafka_telemetry_await_termination(rd_kafka_t *rk) {
|
|
|
624
655
|
/* Await termination sequence completion. */
|
|
625
656
|
rd_kafka_dbg(rk, TELEMETRY, "TERM",
|
|
626
657
|
"Awaiting termination of telemetry.");
|
|
627
|
-
mtx_lock(&rk->rk_telemetry.lock);
|
|
628
658
|
cnd_timedwait_ms(&rk->rk_telemetry.termination_cnd,
|
|
629
659
|
&rk->rk_telemetry.lock,
|
|
630
|
-
/* TODO(milind): Evaluate this timeout after completion
|
|
631
|
-
of all metrics push, is it too much, or too less if
|
|
632
|
-
we include serialization? */
|
|
633
660
|
1000 /* timeout for waiting */);
|
|
634
661
|
mtx_unlock(&rk->rk_telemetry.lock);
|
|
635
662
|
rd_kafka_dbg(rk, TELEMETRY, "TERM",
|
|
@@ -701,3 +728,33 @@ void rd_kafka_set_telemetry_broker_maybe(rd_kafka_t *rk,
|
|
|
701
728
|
&rk->rk_timers, &rk->rk_telemetry.request_timer, rd_false,
|
|
702
729
|
0 /* immediate */, rd_kafka_telemetry_fsm_tmr_cb, (void *)rk);
|
|
703
730
|
}
|
|
731
|
+
|
|
732
|
+
/**
|
|
733
|
+
* @brief Overlapping prefixes should not match the metrics
|
|
734
|
+
* multiple times.
|
|
735
|
+
*/
|
|
736
|
+
int unit_test_telemetry_match_requested_metrics_no_duplicates(void) {
|
|
737
|
+
rd_kafka_t *rk = rd_kafka_new(RD_KAFKA_PRODUCER, NULL, NULL, 0);
|
|
738
|
+
rk->rk_telemetry.requested_metrics_cnt = 3;
|
|
739
|
+
rk->rk_telemetry.requested_metrics =
|
|
740
|
+
rd_calloc(rk->rk_telemetry.requested_metrics_cnt, sizeof(char *));
|
|
741
|
+
rk->rk_telemetry.requested_metrics[0] = rd_strdup("org");
|
|
742
|
+
rk->rk_telemetry.requested_metrics[1] = rd_strdup("org.apache");
|
|
743
|
+
rk->rk_telemetry.requested_metrics[2] = rd_strdup("org.apache.kafka");
|
|
744
|
+
rd_kafka_match_requested_metrics(rk);
|
|
745
|
+
|
|
746
|
+
RD_UT_ASSERT(rk->rk_telemetry.matched_metrics_cnt ==
|
|
747
|
+
RD_KAFKA_TELEMETRY_PRODUCER_METRIC__CNT,
|
|
748
|
+
"Expected %d matched metrics, got %" PRIusz,
|
|
749
|
+
RD_KAFKA_TELEMETRY_PRODUCER_METRIC__CNT,
|
|
750
|
+
rk->rk_telemetry.matched_metrics_cnt);
|
|
751
|
+
rd_kafka_destroy(rk);
|
|
752
|
+
return 0;
|
|
753
|
+
}
|
|
754
|
+
|
|
755
|
+
|
|
756
|
+
int unittest_telemetry(void) {
|
|
757
|
+
int fails = 0;
|
|
758
|
+
fails += unit_test_telemetry_match_requested_metrics_no_duplicates();
|
|
759
|
+
return fails;
|
|
760
|
+
}
|
|
@@ -713,6 +713,10 @@ static void serialize_Metric(
|
|
|
713
713
|
* @brief Encodes the metrics to opentelemetry_proto_metrics_v1_MetricsData and
|
|
714
714
|
* returns the serialized data. Currently only supports encoding of connection
|
|
715
715
|
* creation total by default
|
|
716
|
+
*
|
|
717
|
+
* @locks none
|
|
718
|
+
* @locks_acquired rd_kafka_rdlock()
|
|
719
|
+
* @locality main thread
|
|
716
720
|
*/
|
|
717
721
|
rd_buf_t *rd_kafka_telemetry_encode_metrics(rd_kafka_t *rk) {
|
|
718
722
|
rd_buf_t *rbuf = NULL;
|
|
@@ -731,7 +735,7 @@ rd_buf_t *rd_kafka_telemetry_encode_metrics(rd_kafka_t *rk) {
|
|
|
731
735
|
size_t i, metric_idx = 0;
|
|
732
736
|
|
|
733
737
|
if (!metrics_to_encode_count)
|
|
734
|
-
return
|
|
738
|
+
return rd_buf_new(1, 1);
|
|
735
739
|
|
|
736
740
|
opentelemetry_proto_metrics_v1_MetricsData metrics_data =
|
|
737
741
|
opentelemetry_proto_metrics_v1_MetricsData_init_zero;
|
|
@@ -163,16 +163,16 @@ static const rd_kafka_telemetry_metric_info_t
|
|
|
163
163
|
{.name = "producer.record.queue.time.avg",
|
|
164
164
|
.description = "The average time in ms a record spends in the "
|
|
165
165
|
"producer queue.",
|
|
166
|
-
.unit
|
|
167
|
-
.is_int
|
|
166
|
+
.unit = "ms",
|
|
167
|
+
.is_int = rd_false,
|
|
168
168
|
.is_per_broker = rd_false,
|
|
169
169
|
.type = RD_KAFKA_TELEMETRY_METRIC_TYPE_GAUGE},
|
|
170
170
|
[RD_KAFKA_TELEMETRY_METRIC_PRODUCER_RECORD_QUEUE_TIME_MAX] =
|
|
171
171
|
{.name = "producer.record.queue.time.max",
|
|
172
172
|
.description = "The maximum time in ms a record spends in the "
|
|
173
173
|
"producer queue.",
|
|
174
|
-
.unit
|
|
175
|
-
.is_int
|
|
174
|
+
.unit = "ms",
|
|
175
|
+
.is_int = rd_true,
|
|
176
176
|
.is_per_broker = rd_false,
|
|
177
177
|
.type = RD_KAFKA_TELEMETRY_METRIC_TYPE_GAUGE},
|
|
178
178
|
[RD_KAFKA_TELEMETRY_METRIC_PRODUCER_PRODUCE_LATENCY_AVG] =
|
|
@@ -224,33 +224,33 @@ static const rd_kafka_telemetry_metric_info_t RD_KAFKA_TELEMETRY_CONSUMER_METRIC
|
|
|
224
224
|
.is_per_broker = rd_true,
|
|
225
225
|
.type = RD_KAFKA_TELEMETRY_METRIC_TYPE_GAUGE},
|
|
226
226
|
[RD_KAFKA_TELEMETRY_METRIC_CONSUMER_COORDINATOR_ASSIGNED_PARTITIONS] =
|
|
227
|
-
{.name
|
|
228
|
-
.description
|
|
229
|
-
|
|
227
|
+
{.name = "consumer.coordinator.assigned.partitions",
|
|
228
|
+
.description = "The number of partitions currently assigned "
|
|
229
|
+
"to this consumer.",
|
|
230
230
|
.unit = "1",
|
|
231
231
|
.is_int = rd_true,
|
|
232
232
|
.is_per_broker = rd_false,
|
|
233
233
|
.type = RD_KAFKA_TELEMETRY_METRIC_TYPE_GAUGE},
|
|
234
234
|
[RD_KAFKA_TELEMETRY_METRIC_CONSUMER_COORDINATOR_REBALANCE_LATENCY_AVG] =
|
|
235
|
-
{.name
|
|
236
|
-
.description
|
|
237
|
-
|
|
235
|
+
{.name = "consumer.coordinator.rebalance.latency.avg",
|
|
236
|
+
.description = "The average rebalance latency in ms for the "
|
|
237
|
+
"consumer coordinator.",
|
|
238
238
|
.unit = "ms",
|
|
239
239
|
.is_int = rd_false,
|
|
240
240
|
.is_per_broker = rd_false,
|
|
241
241
|
.type = RD_KAFKA_TELEMETRY_METRIC_TYPE_GAUGE},
|
|
242
242
|
[RD_KAFKA_TELEMETRY_METRIC_CONSUMER_COORDINATOR_REBALANCE_LATENCY_MAX] =
|
|
243
|
-
{.name
|
|
244
|
-
.description
|
|
245
|
-
|
|
243
|
+
{.name = "consumer.coordinator.rebalance.latency.max",
|
|
244
|
+
.description = "The maximum rebalance latency in ms for the "
|
|
245
|
+
"consumer coordinator.",
|
|
246
246
|
.unit = "ms",
|
|
247
247
|
.is_int = rd_true,
|
|
248
248
|
.is_per_broker = rd_false,
|
|
249
249
|
.type = RD_KAFKA_TELEMETRY_METRIC_TYPE_GAUGE},
|
|
250
250
|
[RD_KAFKA_TELEMETRY_METRIC_CONSUMER_COORDINATOR_REBALANCE_LATENCY_TOTAL] =
|
|
251
|
-
{.name
|
|
252
|
-
.description
|
|
253
|
-
|
|
251
|
+
{.name = "consumer.coordinator.rebalance.latency.total",
|
|
252
|
+
.description = "The total rebalance latency in ms for the "
|
|
253
|
+
"consumer coordinator.",
|
|
254
254
|
.unit = "ms",
|
|
255
255
|
.is_int = rd_true,
|
|
256
256
|
.is_per_broker = rd_false,
|
|
@@ -282,16 +282,16 @@ static const rd_kafka_telemetry_metric_info_t RD_KAFKA_TELEMETRY_CONSUMER_METRIC
|
|
|
282
282
|
{.name = "consumer.coordinator.commit.latency.avg",
|
|
283
283
|
.description = "The average commit latency in ms for the consumer "
|
|
284
284
|
"coordinator.",
|
|
285
|
-
.unit
|
|
286
|
-
.is_int
|
|
285
|
+
.unit = "ms",
|
|
286
|
+
.is_int = rd_false,
|
|
287
287
|
.is_per_broker = rd_false,
|
|
288
288
|
.type = RD_KAFKA_TELEMETRY_METRIC_TYPE_GAUGE},
|
|
289
289
|
[RD_KAFKA_TELEMETRY_METRIC_CONSUMER_COORDINATOR_COMMIT_LATENCY_MAX] =
|
|
290
290
|
{.name = "consumer.coordinator.commit.latency.max",
|
|
291
291
|
.description = "The maximum commit latency in ms for the consumer "
|
|
292
292
|
"coordinator.",
|
|
293
|
-
.unit
|
|
294
|
-
.is_int
|
|
293
|
+
.unit = "ms",
|
|
294
|
+
.is_int = rd_true,
|
|
295
295
|
.is_per_broker = rd_false,
|
|
296
296
|
.type = RD_KAFKA_TELEMETRY_METRIC_TYPE_GAUGE},
|
|
297
297
|
};
|