@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
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
|
|
31
31
|
#include "rdkafka_int.h"
|
|
32
32
|
#include "rdkafka_feature.h"
|
|
33
|
+
#include "rdunittest.h"
|
|
33
34
|
|
|
34
35
|
#include <stdlib.h>
|
|
35
36
|
|
|
@@ -74,8 +75,8 @@ static const struct rd_kafka_feature_map {
|
|
|
74
75
|
.feature = RD_KAFKA_FEATURE_MSGVER1,
|
|
75
76
|
.depends =
|
|
76
77
|
{
|
|
77
|
-
{RD_KAFKAP_Produce, 2,
|
|
78
|
-
{RD_KAFKAP_Fetch, 2,
|
|
78
|
+
{RD_KAFKAP_Produce, 2, RD_KAFKAP_RPC_VERSION_MAX},
|
|
79
|
+
{RD_KAFKAP_Fetch, 2, RD_KAFKAP_RPC_VERSION_MAX},
|
|
79
80
|
{-1},
|
|
80
81
|
},
|
|
81
82
|
},
|
|
@@ -84,8 +85,8 @@ static const struct rd_kafka_feature_map {
|
|
|
84
85
|
.feature = RD_KAFKA_FEATURE_MSGVER2,
|
|
85
86
|
.depends =
|
|
86
87
|
{
|
|
87
|
-
{RD_KAFKAP_Produce, 3,
|
|
88
|
-
{RD_KAFKAP_Fetch, 4,
|
|
88
|
+
{RD_KAFKAP_Produce, 3, RD_KAFKAP_RPC_VERSION_MAX},
|
|
89
|
+
{RD_KAFKAP_Fetch, 4, RD_KAFKAP_RPC_VERSION_MAX},
|
|
89
90
|
{-1},
|
|
90
91
|
},
|
|
91
92
|
},
|
|
@@ -97,7 +98,7 @@ static const struct rd_kafka_feature_map {
|
|
|
97
98
|
.feature = RD_KAFKA_FEATURE_APIVERSION,
|
|
98
99
|
.depends =
|
|
99
100
|
{
|
|
100
|
-
{RD_KAFKAP_ApiVersion, 0,
|
|
101
|
+
{RD_KAFKAP_ApiVersion, 0, RD_KAFKAP_RPC_VERSION_MAX},
|
|
101
102
|
{-1},
|
|
102
103
|
},
|
|
103
104
|
},
|
|
@@ -106,22 +107,34 @@ static const struct rd_kafka_feature_map {
|
|
|
106
107
|
.feature = RD_KAFKA_FEATURE_BROKER_GROUP_COORD,
|
|
107
108
|
.depends =
|
|
108
109
|
{
|
|
109
|
-
{RD_KAFKAP_FindCoordinator, 0,
|
|
110
|
+
{RD_KAFKAP_FindCoordinator, 0, RD_KAFKAP_RPC_VERSION_MAX},
|
|
110
111
|
{-1},
|
|
111
112
|
},
|
|
112
113
|
},
|
|
113
114
|
{
|
|
114
|
-
/* @brief >=0.9.0: Broker-based balanced consumer groups. */
|
|
115
|
+
/* @brief >=0.9.0: Broker-based balanced consumer groups (classic). */
|
|
115
116
|
.feature = RD_KAFKA_FEATURE_BROKER_BALANCED_CONSUMER,
|
|
116
117
|
.depends =
|
|
117
118
|
{
|
|
118
|
-
{RD_KAFKAP_FindCoordinator, 0,
|
|
119
|
-
{RD_KAFKAP_OffsetCommit, 1,
|
|
120
|
-
{RD_KAFKAP_OffsetFetch, 1,
|
|
121
|
-
{RD_KAFKAP_JoinGroup, 0,
|
|
122
|
-
{RD_KAFKAP_SyncGroup, 0,
|
|
123
|
-
{RD_KAFKAP_Heartbeat, 0,
|
|
124
|
-
{RD_KAFKAP_LeaveGroup, 0,
|
|
119
|
+
{RD_KAFKAP_FindCoordinator, 0, RD_KAFKAP_RPC_VERSION_MAX},
|
|
120
|
+
{RD_KAFKAP_OffsetCommit, 1, RD_KAFKAP_RPC_VERSION_MAX},
|
|
121
|
+
{RD_KAFKAP_OffsetFetch, 1, RD_KAFKAP_RPC_VERSION_MAX},
|
|
122
|
+
{RD_KAFKAP_JoinGroup, 0, RD_KAFKAP_RPC_VERSION_MAX},
|
|
123
|
+
{RD_KAFKAP_SyncGroup, 0, RD_KAFKAP_RPC_VERSION_MAX},
|
|
124
|
+
{RD_KAFKAP_Heartbeat, 0, RD_KAFKAP_RPC_VERSION_MAX},
|
|
125
|
+
{RD_KAFKAP_LeaveGroup, 0, RD_KAFKAP_RPC_VERSION_MAX},
|
|
126
|
+
{-1},
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
/* @brief Broker-based balanced consumer groups (KIP 848). */
|
|
131
|
+
.feature = RD_KAFKA_FEATURE_BROKER_BALANCED_CONSUMER,
|
|
132
|
+
.depends =
|
|
133
|
+
{
|
|
134
|
+
{RD_KAFKAP_ConsumerGroupHeartbeat, 0,
|
|
135
|
+
RD_KAFKAP_RPC_VERSION_MAX},
|
|
136
|
+
{RD_KAFKAP_OffsetCommit, 9, RD_KAFKAP_RPC_VERSION_MAX},
|
|
137
|
+
{RD_KAFKAP_OffsetFetch, 9, RD_KAFKAP_RPC_VERSION_MAX},
|
|
125
138
|
{-1},
|
|
126
139
|
},
|
|
127
140
|
},
|
|
@@ -130,8 +143,8 @@ static const struct rd_kafka_feature_map {
|
|
|
130
143
|
.feature = RD_KAFKA_FEATURE_THROTTLETIME,
|
|
131
144
|
.depends =
|
|
132
145
|
{
|
|
133
|
-
{RD_KAFKAP_Produce, 1,
|
|
134
|
-
{RD_KAFKAP_Fetch, 1,
|
|
146
|
+
{RD_KAFKAP_Produce, 1, RD_KAFKAP_RPC_VERSION_MAX},
|
|
147
|
+
{RD_KAFKAP_Fetch, 1, RD_KAFKAP_RPC_VERSION_MAX},
|
|
135
148
|
{-1},
|
|
136
149
|
},
|
|
137
150
|
|
|
@@ -145,7 +158,18 @@ static const struct rd_kafka_feature_map {
|
|
|
145
158
|
.feature = RD_KAFKA_FEATURE_SASL_GSSAPI,
|
|
146
159
|
.depends =
|
|
147
160
|
{
|
|
148
|
-
{RD_KAFKAP_JoinGroup, 0,
|
|
161
|
+
{RD_KAFKAP_JoinGroup, 0, RD_KAFKAP_RPC_VERSION_MAX},
|
|
162
|
+
{-1},
|
|
163
|
+
},
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
/* @brief >=0.10.0: SASL (GSSAPI) authentication.
|
|
167
|
+
* Fallback in case JoinGroup is removed along with the
|
|
168
|
+
* "classic" consumer group protocol. */
|
|
169
|
+
.feature = RD_KAFKA_FEATURE_SASL_GSSAPI,
|
|
170
|
+
.depends =
|
|
171
|
+
{
|
|
172
|
+
{RD_KAFKAP_SaslHandshake, 0, RD_KAFKAP_RPC_VERSION_MAX},
|
|
149
173
|
{-1},
|
|
150
174
|
},
|
|
151
175
|
},
|
|
@@ -156,7 +180,7 @@ static const struct rd_kafka_feature_map {
|
|
|
156
180
|
.feature = RD_KAFKA_FEATURE_SASL_HANDSHAKE,
|
|
157
181
|
.depends =
|
|
158
182
|
{
|
|
159
|
-
{RD_KAFKAP_SaslHandshake, 0,
|
|
183
|
+
{RD_KAFKAP_SaslHandshake, 0, RD_KAFKAP_RPC_VERSION_MAX},
|
|
160
184
|
{-1},
|
|
161
185
|
},
|
|
162
186
|
},
|
|
@@ -170,7 +194,7 @@ static const struct rd_kafka_feature_map {
|
|
|
170
194
|
.feature = RD_KAFKA_FEATURE_LZ4,
|
|
171
195
|
.depends =
|
|
172
196
|
{
|
|
173
|
-
{RD_KAFKAP_FindCoordinator, 0,
|
|
197
|
+
{RD_KAFKAP_FindCoordinator, 0, RD_KAFKAP_RPC_VERSION_MAX},
|
|
174
198
|
{-1},
|
|
175
199
|
},
|
|
176
200
|
},
|
|
@@ -179,14 +203,14 @@ static const struct rd_kafka_feature_map {
|
|
|
179
203
|
.feature = RD_KAFKA_FEATURE_OFFSET_TIME,
|
|
180
204
|
.depends =
|
|
181
205
|
{
|
|
182
|
-
{RD_KAFKAP_ListOffsets, 1,
|
|
206
|
+
{RD_KAFKAP_ListOffsets, 1, RD_KAFKAP_RPC_VERSION_MAX},
|
|
183
207
|
{-1},
|
|
184
208
|
}},
|
|
185
209
|
{/* @brief >=0.11.0.0: Idempotent Producer*/
|
|
186
210
|
.feature = RD_KAFKA_FEATURE_IDEMPOTENT_PRODUCER,
|
|
187
211
|
.depends =
|
|
188
212
|
{
|
|
189
|
-
{RD_KAFKAP_InitProducerId, 0,
|
|
213
|
+
{RD_KAFKAP_InitProducerId, 0, RD_KAFKAP_RPC_VERSION_MAX},
|
|
190
214
|
{-1},
|
|
191
215
|
}},
|
|
192
216
|
{
|
|
@@ -194,8 +218,8 @@ static const struct rd_kafka_feature_map {
|
|
|
194
218
|
.feature = RD_KAFKA_FEATURE_ZSTD,
|
|
195
219
|
.depends =
|
|
196
220
|
{
|
|
197
|
-
{RD_KAFKAP_Produce, 7,
|
|
198
|
-
{RD_KAFKAP_Fetch, 10,
|
|
221
|
+
{RD_KAFKAP_Produce, 7, RD_KAFKAP_RPC_VERSION_MAX},
|
|
222
|
+
{RD_KAFKAP_Fetch, 10, RD_KAFKAP_RPC_VERSION_MAX},
|
|
199
223
|
{-1},
|
|
200
224
|
},
|
|
201
225
|
},
|
|
@@ -204,8 +228,8 @@ static const struct rd_kafka_feature_map {
|
|
|
204
228
|
.feature = RD_KAFKA_FEATURE_SASL_AUTH_REQ,
|
|
205
229
|
.depends =
|
|
206
230
|
{
|
|
207
|
-
{RD_KAFKAP_SaslHandshake, 1,
|
|
208
|
-
{RD_KAFKAP_SaslAuthenticate, 0,
|
|
231
|
+
{RD_KAFKAP_SaslHandshake, 1, RD_KAFKAP_RPC_VERSION_MAX},
|
|
232
|
+
{RD_KAFKAP_SaslAuthenticate, 0, RD_KAFKAP_RPC_VERSION_MAX},
|
|
209
233
|
{-1},
|
|
210
234
|
},
|
|
211
235
|
},
|
|
@@ -273,20 +297,20 @@ int rd_kafka_get_legacy_ApiVersions(const char *broker_version,
|
|
|
273
297
|
struct rd_kafka_ApiVersion **apisp,
|
|
274
298
|
size_t *api_cntp,
|
|
275
299
|
const char *fallback) {
|
|
300
|
+
#define _VERMAP(PFX, APIS) \
|
|
301
|
+
{ PFX, APIS, RD_ARRAYSIZE(APIS) }
|
|
276
302
|
static const struct {
|
|
277
303
|
const char *pfx;
|
|
278
304
|
struct rd_kafka_ApiVersion *apis;
|
|
279
305
|
size_t api_cnt;
|
|
280
|
-
} vermap[] = {
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
_VERMAP("", rd_kafka_ApiVersion_Queryable),
|
|
289
|
-
{NULL}};
|
|
306
|
+
} vermap[] = {_VERMAP("0.9.0", rd_kafka_ApiVersion_0_9_0),
|
|
307
|
+
_VERMAP("0.8.2", rd_kafka_ApiVersion_0_8_2),
|
|
308
|
+
_VERMAP("0.8.1", rd_kafka_ApiVersion_0_8_1),
|
|
309
|
+
_VERMAP("0.8.0", rd_kafka_ApiVersion_0_8_0),
|
|
310
|
+
{"0.7.", NULL}, /* Unsupported */
|
|
311
|
+
{"0.6.", NULL}, /* Unsupported */
|
|
312
|
+
_VERMAP("", rd_kafka_ApiVersion_Queryable),
|
|
313
|
+
{NULL}};
|
|
290
314
|
int i;
|
|
291
315
|
int fallback_i = -1;
|
|
292
316
|
int ret = 0;
|
|
@@ -459,3 +483,416 @@ const char *rd_kafka_features2str(int features) {
|
|
|
459
483
|
|
|
460
484
|
return ret[reti];
|
|
461
485
|
}
|
|
486
|
+
|
|
487
|
+
int rd_ut_features_check_assert_features(const char *testname,
|
|
488
|
+
int features,
|
|
489
|
+
rd_bool_t all_enabled) {
|
|
490
|
+
int i;
|
|
491
|
+
for (i = 0; rd_kafka_feature_map[i].feature != 0; i++) {
|
|
492
|
+
rd_bool_t enabled =
|
|
493
|
+
(features & rd_kafka_feature_map[i].feature) > 0;
|
|
494
|
+
RD_UT_ASSERT(
|
|
495
|
+
enabled == all_enabled,
|
|
496
|
+
"%s: Feature \"%s\" should %sbe enabled", testname,
|
|
497
|
+
rd_kafka_features2str(rd_kafka_feature_map[i].feature),
|
|
498
|
+
all_enabled ? "" : "not ");
|
|
499
|
+
}
|
|
500
|
+
return 0;
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
int rd_ut_features_check(void) {
|
|
504
|
+
rd_kafka_t rk = RD_ZERO_INIT;
|
|
505
|
+
rd_kafka_broker_t rkb = RD_ZERO_INIT;
|
|
506
|
+
rkb.rkb_rk = &rk;
|
|
507
|
+
int features;
|
|
508
|
+
int fails = 0;
|
|
509
|
+
|
|
510
|
+
/* ApiVersions must be sorted in these structs */
|
|
511
|
+
|
|
512
|
+
/* No ApiVersions for testing matching no feature */
|
|
513
|
+
struct rd_kafka_ApiVersion api_versions_none[] = {0};
|
|
514
|
+
|
|
515
|
+
/* ApiVersions removed in KIP-896 */
|
|
516
|
+
struct rd_kafka_ApiVersion api_versions_kip_896[] = {
|
|
517
|
+
{
|
|
518
|
+
.ApiKey = RD_KAFKAP_Produce,
|
|
519
|
+
.MinVer = 3,
|
|
520
|
+
.MaxVer = 12,
|
|
521
|
+
},
|
|
522
|
+
{
|
|
523
|
+
.ApiKey = RD_KAFKAP_Fetch,
|
|
524
|
+
.MinVer = 4,
|
|
525
|
+
.MaxVer = 17,
|
|
526
|
+
},
|
|
527
|
+
{
|
|
528
|
+
.ApiKey = RD_KAFKAP_ListOffsets,
|
|
529
|
+
.MinVer = 1,
|
|
530
|
+
.MaxVer = 10,
|
|
531
|
+
},
|
|
532
|
+
{
|
|
533
|
+
.ApiKey = RD_KAFKAP_Metadata,
|
|
534
|
+
.MinVer = 0,
|
|
535
|
+
.MaxVer = 13,
|
|
536
|
+
},
|
|
537
|
+
{
|
|
538
|
+
.ApiKey = RD_KAFKAP_OffsetCommit,
|
|
539
|
+
.MinVer = 2,
|
|
540
|
+
.MaxVer = 9,
|
|
541
|
+
},
|
|
542
|
+
{
|
|
543
|
+
.ApiKey = RD_KAFKAP_OffsetFetch,
|
|
544
|
+
.MinVer = 1,
|
|
545
|
+
.MaxVer = 9,
|
|
546
|
+
},
|
|
547
|
+
{
|
|
548
|
+
.ApiKey = RD_KAFKAP_FindCoordinator,
|
|
549
|
+
.MinVer = 0,
|
|
550
|
+
.MaxVer = 6,
|
|
551
|
+
},
|
|
552
|
+
{
|
|
553
|
+
.ApiKey = RD_KAFKAP_JoinGroup,
|
|
554
|
+
.MinVer = 2,
|
|
555
|
+
.MaxVer = 9,
|
|
556
|
+
},
|
|
557
|
+
{
|
|
558
|
+
.ApiKey = RD_KAFKAP_Heartbeat,
|
|
559
|
+
.MinVer = 0,
|
|
560
|
+
.MaxVer = 4,
|
|
561
|
+
},
|
|
562
|
+
{
|
|
563
|
+
.ApiKey = RD_KAFKAP_LeaveGroup,
|
|
564
|
+
.MinVer = 0,
|
|
565
|
+
.MaxVer = 5,
|
|
566
|
+
},
|
|
567
|
+
{
|
|
568
|
+
.ApiKey = RD_KAFKAP_SyncGroup,
|
|
569
|
+
.MinVer = 0,
|
|
570
|
+
.MaxVer = 5,
|
|
571
|
+
},
|
|
572
|
+
{
|
|
573
|
+
.ApiKey = RD_KAFKAP_SaslHandshake,
|
|
574
|
+
.MinVer = 0,
|
|
575
|
+
.MaxVer = 1,
|
|
576
|
+
},
|
|
577
|
+
{
|
|
578
|
+
.ApiKey = RD_KAFKAP_ApiVersion,
|
|
579
|
+
.MinVer = 0,
|
|
580
|
+
.MaxVer = 4,
|
|
581
|
+
},
|
|
582
|
+
{
|
|
583
|
+
.ApiKey = RD_KAFKAP_InitProducerId,
|
|
584
|
+
.MinVer = 0,
|
|
585
|
+
.MaxVer = 5,
|
|
586
|
+
},
|
|
587
|
+
{
|
|
588
|
+
.ApiKey = RD_KAFKAP_SaslAuthenticate,
|
|
589
|
+
.MinVer = 0,
|
|
590
|
+
.MaxVer = 2,
|
|
591
|
+
},
|
|
592
|
+
};
|
|
593
|
+
|
|
594
|
+
/* ApiVersions to remove in next Apache Kafka version
|
|
595
|
+
* (see baseline in KIP-896) */
|
|
596
|
+
struct rd_kafka_ApiVersion api_versions_next_apache_kafka_next[] = {
|
|
597
|
+
{
|
|
598
|
+
.ApiKey = RD_KAFKAP_Produce,
|
|
599
|
+
.MinVer = 7,
|
|
600
|
+
.MaxVer = 12,
|
|
601
|
+
},
|
|
602
|
+
{
|
|
603
|
+
.ApiKey = RD_KAFKAP_Fetch,
|
|
604
|
+
.MinVer = 10,
|
|
605
|
+
.MaxVer = 17,
|
|
606
|
+
},
|
|
607
|
+
{
|
|
608
|
+
.ApiKey = RD_KAFKAP_ListOffsets,
|
|
609
|
+
.MinVer = 4,
|
|
610
|
+
.MaxVer = 10,
|
|
611
|
+
},
|
|
612
|
+
{
|
|
613
|
+
.ApiKey = RD_KAFKAP_Metadata,
|
|
614
|
+
.MinVer = 7,
|
|
615
|
+
.MaxVer = 13,
|
|
616
|
+
},
|
|
617
|
+
{
|
|
618
|
+
.ApiKey = RD_KAFKAP_OffsetCommit,
|
|
619
|
+
.MinVer = 6,
|
|
620
|
+
.MaxVer = 9,
|
|
621
|
+
},
|
|
622
|
+
{
|
|
623
|
+
.ApiKey = RD_KAFKAP_OffsetFetch,
|
|
624
|
+
.MinVer = 5,
|
|
625
|
+
.MaxVer = 9,
|
|
626
|
+
},
|
|
627
|
+
{
|
|
628
|
+
.ApiKey = RD_KAFKAP_FindCoordinator,
|
|
629
|
+
.MinVer = 2,
|
|
630
|
+
.MaxVer = 6,
|
|
631
|
+
},
|
|
632
|
+
{
|
|
633
|
+
.ApiKey = RD_KAFKAP_JoinGroup,
|
|
634
|
+
.MinVer = 3,
|
|
635
|
+
.MaxVer = 9,
|
|
636
|
+
},
|
|
637
|
+
{
|
|
638
|
+
.ApiKey = RD_KAFKAP_Heartbeat,
|
|
639
|
+
.MinVer = 2,
|
|
640
|
+
.MaxVer = 4,
|
|
641
|
+
},
|
|
642
|
+
{
|
|
643
|
+
.ApiKey = RD_KAFKAP_LeaveGroup,
|
|
644
|
+
.MinVer = 2,
|
|
645
|
+
.MaxVer = 5,
|
|
646
|
+
},
|
|
647
|
+
{
|
|
648
|
+
.ApiKey = RD_KAFKAP_SyncGroup,
|
|
649
|
+
.MinVer = 2,
|
|
650
|
+
.MaxVer = 5,
|
|
651
|
+
},
|
|
652
|
+
{
|
|
653
|
+
.ApiKey = RD_KAFKAP_SaslHandshake,
|
|
654
|
+
.MinVer = 1,
|
|
655
|
+
.MaxVer = 1,
|
|
656
|
+
},
|
|
657
|
+
{
|
|
658
|
+
.ApiKey = RD_KAFKAP_ApiVersion,
|
|
659
|
+
.MinVer = 2,
|
|
660
|
+
.MaxVer = 4,
|
|
661
|
+
},
|
|
662
|
+
{
|
|
663
|
+
.ApiKey = RD_KAFKAP_InitProducerId,
|
|
664
|
+
.MinVer = 1,
|
|
665
|
+
.MaxVer = 5,
|
|
666
|
+
},
|
|
667
|
+
{
|
|
668
|
+
.ApiKey = RD_KAFKAP_SaslAuthenticate,
|
|
669
|
+
.MinVer = 0,
|
|
670
|
+
.MaxVer = 2,
|
|
671
|
+
},
|
|
672
|
+
};
|
|
673
|
+
|
|
674
|
+
/* ApiVersions don't overlap with those enabling the feature.
|
|
675
|
+
* At least one condition isn't matching */
|
|
676
|
+
struct rd_kafka_ApiVersion api_versions_no_overlap[] = {
|
|
677
|
+
{
|
|
678
|
+
.ApiKey = RD_KAFKAP_Produce,
|
|
679
|
+
.MinVer = 2,
|
|
680
|
+
.MaxVer = 2,
|
|
681
|
+
},
|
|
682
|
+
{
|
|
683
|
+
.ApiKey = RD_KAFKAP_Fetch,
|
|
684
|
+
.MinVer = 0,
|
|
685
|
+
.MaxVer = 0,
|
|
686
|
+
},
|
|
687
|
+
{
|
|
688
|
+
.ApiKey = RD_KAFKAP_ListOffsets,
|
|
689
|
+
.MinVer = 0,
|
|
690
|
+
.MaxVer = 0,
|
|
691
|
+
},
|
|
692
|
+
{
|
|
693
|
+
.ApiKey = RD_KAFKAP_Metadata,
|
|
694
|
+
.MinVer = 7,
|
|
695
|
+
.MaxVer = 13,
|
|
696
|
+
},
|
|
697
|
+
{
|
|
698
|
+
.ApiKey = RD_KAFKAP_OffsetCommit,
|
|
699
|
+
.MinVer = 6,
|
|
700
|
+
.MaxVer = 9,
|
|
701
|
+
},
|
|
702
|
+
{
|
|
703
|
+
.ApiKey = RD_KAFKAP_OffsetFetch,
|
|
704
|
+
.MinVer = 5,
|
|
705
|
+
.MaxVer = 8,
|
|
706
|
+
},
|
|
707
|
+
{
|
|
708
|
+
.ApiKey = RD_KAFKAP_Heartbeat,
|
|
709
|
+
.MinVer = 2,
|
|
710
|
+
.MaxVer = 4,
|
|
711
|
+
},
|
|
712
|
+
{
|
|
713
|
+
.ApiKey = RD_KAFKAP_LeaveGroup,
|
|
714
|
+
.MinVer = 2,
|
|
715
|
+
.MaxVer = 5,
|
|
716
|
+
},
|
|
717
|
+
{
|
|
718
|
+
.ApiKey = RD_KAFKAP_SyncGroup,
|
|
719
|
+
.MinVer = 2,
|
|
720
|
+
.MaxVer = 5,
|
|
721
|
+
},
|
|
722
|
+
{
|
|
723
|
+
.ApiKey = RD_KAFKAP_SaslAuthenticate,
|
|
724
|
+
.MinVer = 0,
|
|
725
|
+
.MaxVer = 2,
|
|
726
|
+
},
|
|
727
|
+
};
|
|
728
|
+
|
|
729
|
+
/* ApiVersions where the maximum version corresponds to
|
|
730
|
+
* the minimum version necessary for enabling all features. */
|
|
731
|
+
struct rd_kafka_ApiVersion api_versions_overlap_by_one[] = {
|
|
732
|
+
{
|
|
733
|
+
.ApiKey = RD_KAFKAP_Produce,
|
|
734
|
+
.MinVer = 3,
|
|
735
|
+
.MaxVer = 7,
|
|
736
|
+
},
|
|
737
|
+
{
|
|
738
|
+
.ApiKey = RD_KAFKAP_Fetch,
|
|
739
|
+
.MinVer = 4,
|
|
740
|
+
.MaxVer = 10,
|
|
741
|
+
},
|
|
742
|
+
{
|
|
743
|
+
.ApiKey = RD_KAFKAP_ListOffsets,
|
|
744
|
+
.MinVer = 1,
|
|
745
|
+
.MaxVer = 1,
|
|
746
|
+
},
|
|
747
|
+
{
|
|
748
|
+
.ApiKey = RD_KAFKAP_Metadata,
|
|
749
|
+
.MinVer = 0,
|
|
750
|
+
.MaxVer = 13,
|
|
751
|
+
},
|
|
752
|
+
{
|
|
753
|
+
.ApiKey = RD_KAFKAP_OffsetCommit,
|
|
754
|
+
.MinVer = 2,
|
|
755
|
+
.MaxVer = 9,
|
|
756
|
+
},
|
|
757
|
+
{
|
|
758
|
+
.ApiKey = RD_KAFKAP_OffsetFetch,
|
|
759
|
+
.MinVer = 1,
|
|
760
|
+
.MaxVer = 9,
|
|
761
|
+
},
|
|
762
|
+
{
|
|
763
|
+
.ApiKey = RD_KAFKAP_FindCoordinator,
|
|
764
|
+
.MinVer = 0,
|
|
765
|
+
.MaxVer = 0,
|
|
766
|
+
},
|
|
767
|
+
{
|
|
768
|
+
.ApiKey = RD_KAFKAP_JoinGroup,
|
|
769
|
+
.MinVer = 0,
|
|
770
|
+
.MaxVer = 0,
|
|
771
|
+
},
|
|
772
|
+
{
|
|
773
|
+
.ApiKey = RD_KAFKAP_Heartbeat,
|
|
774
|
+
.MinVer = 0,
|
|
775
|
+
.MaxVer = 0,
|
|
776
|
+
},
|
|
777
|
+
{
|
|
778
|
+
.ApiKey = RD_KAFKAP_LeaveGroup,
|
|
779
|
+
.MinVer = 0,
|
|
780
|
+
.MaxVer = 0,
|
|
781
|
+
},
|
|
782
|
+
{
|
|
783
|
+
.ApiKey = RD_KAFKAP_SyncGroup,
|
|
784
|
+
.MinVer = 0,
|
|
785
|
+
.MaxVer = 0,
|
|
786
|
+
},
|
|
787
|
+
{
|
|
788
|
+
.ApiKey = RD_KAFKAP_SaslHandshake,
|
|
789
|
+
.MinVer = 0,
|
|
790
|
+
.MaxVer = 1,
|
|
791
|
+
},
|
|
792
|
+
{
|
|
793
|
+
.ApiKey = RD_KAFKAP_ApiVersion,
|
|
794
|
+
.MinVer = 0,
|
|
795
|
+
.MaxVer = 0,
|
|
796
|
+
},
|
|
797
|
+
{
|
|
798
|
+
.ApiKey = RD_KAFKAP_InitProducerId,
|
|
799
|
+
.MinVer = 0,
|
|
800
|
+
.MaxVer = 0,
|
|
801
|
+
},
|
|
802
|
+
{
|
|
803
|
+
.ApiKey = RD_KAFKAP_SaslAuthenticate,
|
|
804
|
+
.MinVer = 0,
|
|
805
|
+
.MaxVer = 0,
|
|
806
|
+
},
|
|
807
|
+
};
|
|
808
|
+
|
|
809
|
+
/* ApiVersions where the classic way of enabling SASL_GSSAPI
|
|
810
|
+
* or BROKER_BALANCED_CONSUMER was removed. */
|
|
811
|
+
struct rd_kafka_ApiVersion api_versions_kip_848[] = {
|
|
812
|
+
{
|
|
813
|
+
.ApiKey = RD_KAFKAP_OffsetCommit,
|
|
814
|
+
.MinVer = 6,
|
|
815
|
+
.MaxVer = 9,
|
|
816
|
+
},
|
|
817
|
+
{
|
|
818
|
+
.ApiKey = RD_KAFKAP_OffsetFetch,
|
|
819
|
+
.MinVer = 5,
|
|
820
|
+
.MaxVer = 9,
|
|
821
|
+
},
|
|
822
|
+
{
|
|
823
|
+
.ApiKey = RD_KAFKAP_SaslHandshake,
|
|
824
|
+
.MinVer = 0,
|
|
825
|
+
.MaxVer = 1,
|
|
826
|
+
},
|
|
827
|
+
{
|
|
828
|
+
.ApiKey = RD_KAFKAP_ConsumerGroupHeartbeat,
|
|
829
|
+
.MinVer = 0,
|
|
830
|
+
.MaxVer = 1,
|
|
831
|
+
},
|
|
832
|
+
};
|
|
833
|
+
|
|
834
|
+
/* With empty ApiVersions. */
|
|
835
|
+
features = rd_kafka_features_check(&rkb, api_versions_none,
|
|
836
|
+
RD_ARRAY_SIZE(api_versions_none));
|
|
837
|
+
fails += rd_ut_features_check_assert_features("no API versions",
|
|
838
|
+
features, rd_false);
|
|
839
|
+
|
|
840
|
+
/* Without KIP-896 removed versions. */
|
|
841
|
+
features = rd_kafka_features_check(&rkb, api_versions_kip_896,
|
|
842
|
+
RD_ARRAY_SIZE(api_versions_kip_896));
|
|
843
|
+
fails += rd_ut_features_check_assert_features("KIP-896 API versions",
|
|
844
|
+
features, rd_true);
|
|
845
|
+
|
|
846
|
+
/* Without versions to remove in next Apache Kafka major version. */
|
|
847
|
+
features = rd_kafka_features_check(
|
|
848
|
+
&rkb, api_versions_next_apache_kafka_next,
|
|
849
|
+
RD_ARRAY_SIZE(api_versions_next_apache_kafka_next));
|
|
850
|
+
fails += rd_ut_features_check_assert_features(
|
|
851
|
+
"next Apache Kafka API versions", features, rd_true);
|
|
852
|
+
|
|
853
|
+
/* With a RPC version range non overlapping with the one necessary
|
|
854
|
+
* for the feature. */
|
|
855
|
+
features =
|
|
856
|
+
rd_kafka_features_check(&rkb, api_versions_no_overlap,
|
|
857
|
+
RD_ARRAY_SIZE(api_versions_no_overlap));
|
|
858
|
+
fails += rd_ut_features_check_assert_features(
|
|
859
|
+
"not overlapping API versions", features, rd_false);
|
|
860
|
+
|
|
861
|
+
/* Only a single RPC version is overlapping with broker
|
|
862
|
+
* supported ones. */
|
|
863
|
+
features =
|
|
864
|
+
rd_kafka_features_check(&rkb, api_versions_overlap_by_one,
|
|
865
|
+
RD_ARRAY_SIZE(api_versions_overlap_by_one));
|
|
866
|
+
fails += rd_ut_features_check_assert_features(
|
|
867
|
+
"overlapping API versions by one version", features, rd_true);
|
|
868
|
+
|
|
869
|
+
/* Even when removing the classic protocol and its APIs,
|
|
870
|
+
* these features must be enabled. */
|
|
871
|
+
features = rd_kafka_features_check(&rkb, api_versions_kip_848,
|
|
872
|
+
RD_ARRAY_SIZE(api_versions_kip_848));
|
|
873
|
+
if (!(features & RD_KAFKA_FEATURE_BROKER_BALANCED_CONSUMER) ||
|
|
874
|
+
!(features & RD_KAFKA_FEATURE_SASL_GSSAPI)) {
|
|
875
|
+
fails++;
|
|
876
|
+
}
|
|
877
|
+
|
|
878
|
+
|
|
879
|
+
if (fails)
|
|
880
|
+
return fails;
|
|
881
|
+
|
|
882
|
+
RD_UT_PASS();
|
|
883
|
+
}
|
|
884
|
+
|
|
885
|
+
/**
|
|
886
|
+
* @name Unit tests
|
|
887
|
+
* @{
|
|
888
|
+
*
|
|
889
|
+
*/
|
|
890
|
+
int unittest_feature(void) {
|
|
891
|
+
int fails = 0;
|
|
892
|
+
|
|
893
|
+
fails += rd_ut_features_check();
|
|
894
|
+
|
|
895
|
+
return fails;
|
|
896
|
+
}
|
|
897
|
+
|
|
898
|
+
/**@}*/
|
|
@@ -677,7 +677,7 @@ static rd_kafka_resp_err_t rd_kafka_fetch_reply_handle_partition(
|
|
|
677
677
|
* desynchronized clusters): if so ignore it. */
|
|
678
678
|
tver_skel.rktp = rktp;
|
|
679
679
|
tver = rd_list_find(request->rkbuf_rktp_vers, &tver_skel,
|
|
680
|
-
|
|
680
|
+
rd_kafka_toppar_ver_cmp);
|
|
681
681
|
rd_kafka_assert(NULL, tver);
|
|
682
682
|
if (tver->rktp != rktp || tver->version < fetch_version) {
|
|
683
683
|
rd_rkb_dbg(rkb, MSG, "DROP",
|
|
@@ -1227,7 +1227,7 @@ int rd_kafka_broker_fetch_toppars(rd_kafka_broker_t *rkb, rd_ts_t now) {
|
|
|
1227
1227
|
* @locality any
|
|
1228
1228
|
* @locks toppar_lock() MUST be held
|
|
1229
1229
|
*/
|
|
1230
|
-
rd_bool_t rd_kafka_toppar_fetch_decide_start_from_next_fetch_start(
|
|
1230
|
+
static rd_bool_t rd_kafka_toppar_fetch_decide_start_from_next_fetch_start(
|
|
1231
1231
|
rd_kafka_toppar_t *rktp) {
|
|
1232
1232
|
return rktp->rktp_op_version > rktp->rktp_fetch_version ||
|
|
1233
1233
|
rd_kafka_fetch_pos_cmp(&rktp->rktp_next_fetch_start,
|
|
@@ -1235,6 +1235,26 @@ rd_bool_t rd_kafka_toppar_fetch_decide_start_from_next_fetch_start(
|
|
|
1235
1235
|
rktp->rktp_offsets.fetch_pos.offset == RD_KAFKA_OFFSET_INVALID;
|
|
1236
1236
|
}
|
|
1237
1237
|
|
|
1238
|
+
/**
|
|
1239
|
+
* @brief Return next fetch start position:
|
|
1240
|
+
* if it should start fetching from next fetch start
|
|
1241
|
+
* or continue with current fetch pos.
|
|
1242
|
+
*
|
|
1243
|
+
* @param rktp The toppar
|
|
1244
|
+
*
|
|
1245
|
+
* @returns Next fetch start position
|
|
1246
|
+
*
|
|
1247
|
+
* @locality any
|
|
1248
|
+
* @locks toppar_lock() MUST be held
|
|
1249
|
+
*/
|
|
1250
|
+
rd_kafka_fetch_pos_t
|
|
1251
|
+
rd_kafka_toppar_fetch_decide_next_fetch_start_pos(rd_kafka_toppar_t *rktp) {
|
|
1252
|
+
if (rd_kafka_toppar_fetch_decide_start_from_next_fetch_start(rktp))
|
|
1253
|
+
return rktp->rktp_next_fetch_start;
|
|
1254
|
+
else
|
|
1255
|
+
return rktp->rktp_offsets.fetch_pos;
|
|
1256
|
+
}
|
|
1257
|
+
|
|
1238
1258
|
/**
|
|
1239
1259
|
* @brief Decide whether this toppar should be on the fetch list or not.
|
|
1240
1260
|
*
|
|
@@ -33,8 +33,8 @@
|
|
|
33
33
|
|
|
34
34
|
int rd_kafka_broker_fetch_toppars(rd_kafka_broker_t *rkb, rd_ts_t now);
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
rd_kafka_fetch_pos_t
|
|
37
|
+
rd_kafka_toppar_fetch_decide_next_fetch_start_pos(rd_kafka_toppar_t *rktp);
|
|
38
38
|
|
|
39
39
|
rd_ts_t rd_kafka_toppar_fetch_decide(rd_kafka_toppar_t *rktp,
|
|
40
40
|
rd_kafka_broker_t *rkb,
|