@platformatic/rdkafka 4.0.1 → 4.1.0-alpha.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/README.md +5 -5
- package/bench/seed.sh +0 -0
- package/binding.gyp +8 -1
- package/ci/prepublish.js +4 -4
- 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/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 +10 -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/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
|
@@ -110,6 +110,23 @@ static void test_find_coordinator(rd_kafka_mock_cluster_t *mcluster,
|
|
|
110
110
|
SUB_TEST_PASS();
|
|
111
111
|
}
|
|
112
112
|
|
|
113
|
+
/** @brief Max Jitter is 20 percent each side so buffer chosen
|
|
114
|
+
* is +- a fixed error to account for latency delays. */
|
|
115
|
+
static void check_time_difference(int64_t time_difference, int retry_count) {
|
|
116
|
+
int32_t error = retry_ms / 2;
|
|
117
|
+
int64_t low = (1 << retry_count) * retry_ms * 0.8 - error;
|
|
118
|
+
int64_t high = (1 << retry_count) * retry_ms * 1.2 + error;
|
|
119
|
+
if (high > (retry_max_ms * 1.2 + error))
|
|
120
|
+
high = retry_max_ms * 1.2 + error;
|
|
121
|
+
if (low > (retry_max_ms * 0.8 - error))
|
|
122
|
+
low = retry_max_ms * 0.8 - error;
|
|
123
|
+
TEST_ASSERT((time_difference < high) && (time_difference > low),
|
|
124
|
+
"Time difference is not respected, should "
|
|
125
|
+
"be between %" PRId64 " and %" PRId64
|
|
126
|
+
" where time difference is %" PRId64 "\n",
|
|
127
|
+
low, high, time_difference);
|
|
128
|
+
}
|
|
129
|
+
|
|
113
130
|
/**
|
|
114
131
|
* Exponential Backoff needs to be checked for the request_type. Also the
|
|
115
132
|
* request_type should only be retried if one previous has failed for correct
|
|
@@ -138,22 +155,7 @@ static void helper_exponential_backoff(rd_kafka_mock_cluster_t *mcluster,
|
|
|
138
155
|
(rd_kafka_mock_request_timestamp(requests[i]) -
|
|
139
156
|
previous_request_ts) /
|
|
140
157
|
1000;
|
|
141
|
-
|
|
142
|
-
* is 25 percent to account for latency delays */
|
|
143
|
-
int64_t low =
|
|
144
|
-
((1 << retry_count) * (retry_ms)*75) / 100;
|
|
145
|
-
int64_t high =
|
|
146
|
-
((1 << retry_count) * (retry_ms)*125) / 100;
|
|
147
|
-
if (high > ((retry_max_ms * 125) / 100))
|
|
148
|
-
high = (retry_max_ms * 125) / 100;
|
|
149
|
-
if (low > ((retry_max_ms * 75) / 100))
|
|
150
|
-
low = (retry_max_ms * 75) / 100;
|
|
151
|
-
TEST_ASSERT((time_difference < high) &&
|
|
152
|
-
(time_difference > low),
|
|
153
|
-
"Time difference is not respected, should "
|
|
154
|
-
"be between %" PRId64 " and %" PRId64
|
|
155
|
-
" where time difference is %" PRId64 "\n",
|
|
156
|
-
low, high, time_difference);
|
|
158
|
+
check_time_difference(time_difference, retry_count);
|
|
157
159
|
retry_count++;
|
|
158
160
|
}
|
|
159
161
|
previous_request_ts =
|
|
@@ -226,6 +228,7 @@ static void test_produce(rd_kafka_mock_cluster_t *mcluster,
|
|
|
226
228
|
|
|
227
229
|
producer = test_create_handle(RD_KAFKA_PRODUCER, conf);
|
|
228
230
|
rkt = test_create_producer_topic(producer, topic, NULL);
|
|
231
|
+
test_wait_topic_exists(producer, topic, 5000);
|
|
229
232
|
|
|
230
233
|
rd_kafka_mock_push_request_errors(
|
|
231
234
|
mcluster, RD_KAFKAP_Produce, 7,
|
|
@@ -304,15 +307,20 @@ static void test_heartbeat_find_coordinator(rd_kafka_mock_cluster_t *mcluster,
|
|
|
304
307
|
rd_kafka_conf_t *conf) {
|
|
305
308
|
rd_kafka_t *consumer;
|
|
306
309
|
rd_kafka_message_t *rkm;
|
|
310
|
+
int ApiKey;
|
|
307
311
|
SUB_TEST();
|
|
308
312
|
test_conf_set(conf, "auto.offset.reset", "earliest");
|
|
309
313
|
test_conf_set(conf, "enable.auto.commit", "false");
|
|
310
314
|
|
|
311
315
|
consumer = test_create_consumer(topic, NULL, conf, NULL);
|
|
312
316
|
|
|
317
|
+
if (test_consumer_group_protocol_classic()) {
|
|
318
|
+
ApiKey = RD_KAFKAP_Heartbeat;
|
|
319
|
+
} else {
|
|
320
|
+
ApiKey = RD_KAFKAP_ConsumerGroupHeartbeat;
|
|
321
|
+
}
|
|
313
322
|
rd_kafka_mock_push_request_errors(
|
|
314
|
-
mcluster,
|
|
315
|
-
RD_KAFKA_RESP_ERR_NOT_COORDINATOR_FOR_GROUP);
|
|
323
|
+
mcluster, ApiKey, 1, RD_KAFKA_RESP_ERR_NOT_COORDINATOR_FOR_GROUP);
|
|
316
324
|
|
|
317
325
|
rd_kafka_mock_clear_requests(mcluster);
|
|
318
326
|
test_consumer_subscribe(consumer, topic);
|
|
@@ -323,7 +331,7 @@ static void test_heartbeat_find_coordinator(rd_kafka_mock_cluster_t *mcluster,
|
|
|
323
331
|
rd_sleep(6);
|
|
324
332
|
|
|
325
333
|
|
|
326
|
-
helper_find_coordinator_trigger(mcluster,
|
|
334
|
+
helper_find_coordinator_trigger(mcluster, ApiKey);
|
|
327
335
|
|
|
328
336
|
|
|
329
337
|
rd_kafka_destroy(consumer);
|
|
@@ -389,6 +397,7 @@ static void test_produce_fast_leader_query(rd_kafka_mock_cluster_t *mcluster,
|
|
|
389
397
|
|
|
390
398
|
producer = test_create_handle(RD_KAFKA_PRODUCER, conf);
|
|
391
399
|
rkt = test_create_producer_topic(producer, topic, NULL);
|
|
400
|
+
test_wait_topic_exists(producer, topic, 5000);
|
|
392
401
|
|
|
393
402
|
rd_kafka_mock_push_request_errors(
|
|
394
403
|
mcluster, RD_KAFKAP_Produce, 1,
|
|
@@ -418,24 +427,8 @@ static void test_produce_fast_leader_query(rd_kafka_mock_cluster_t *mcluster,
|
|
|
418
427
|
requests[i]) -
|
|
419
428
|
previous_request_ts) /
|
|
420
429
|
1000;
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
* delays */
|
|
424
|
-
int64_t low =
|
|
425
|
-
((1 << retry_count) * (retry_ms)*75) / 100;
|
|
426
|
-
int64_t high =
|
|
427
|
-
((1 << retry_count) * (retry_ms)*125) / 100;
|
|
428
|
-
if (high > ((retry_max_ms * 125) / 100))
|
|
429
|
-
high = (retry_max_ms * 125) / 100;
|
|
430
|
-
if (low > ((retry_max_ms * 75) / 100))
|
|
431
|
-
low = (retry_max_ms * 75) / 100;
|
|
432
|
-
TEST_ASSERT(
|
|
433
|
-
(time_difference < high) &&
|
|
434
|
-
(time_difference > low),
|
|
435
|
-
"Time difference is not respected, should "
|
|
436
|
-
"be between %" PRId64 " and %" PRId64
|
|
437
|
-
" where time difference is %" PRId64 "\n",
|
|
438
|
-
low, high, time_difference);
|
|
430
|
+
check_time_difference(time_difference,
|
|
431
|
+
retry_count);
|
|
439
432
|
retry_count++;
|
|
440
433
|
}
|
|
441
434
|
previous_request_ts =
|
|
@@ -500,7 +493,8 @@ static void test_fetch_fast_leader_query(rd_kafka_mock_cluster_t *mcluster,
|
|
|
500
493
|
previous_request_was_Fetch) {
|
|
501
494
|
Metadata_after_Fetch = rd_true;
|
|
502
495
|
break;
|
|
503
|
-
} else
|
|
496
|
+
} else if (rd_kafka_mock_request_api_key(requests[i]) !=
|
|
497
|
+
RD_KAFKAP_ConsumerGroupHeartbeat)
|
|
504
498
|
previous_request_was_Fetch = rd_false;
|
|
505
499
|
}
|
|
506
500
|
rd_kafka_destroy(consumer);
|
|
@@ -542,11 +536,16 @@ int main_0143_exponential_backoff_mock(int argc, char **argv) {
|
|
|
542
536
|
test_offset_commit(mcluster, topic, rd_kafka_conf_dup(conf));
|
|
543
537
|
test_heartbeat_find_coordinator(mcluster, topic,
|
|
544
538
|
rd_kafka_conf_dup(conf));
|
|
545
|
-
test_joingroup_find_coordinator(mcluster, topic,
|
|
546
|
-
rd_kafka_conf_dup(conf));
|
|
547
539
|
test_fetch_fast_leader_query(mcluster, topic, rd_kafka_conf_dup(conf));
|
|
548
540
|
test_produce_fast_leader_query(mcluster, topic,
|
|
549
541
|
rd_kafka_conf_dup(conf));
|
|
542
|
+
|
|
543
|
+
/* No JoinGroup RPC in KIP 848 protocol. */
|
|
544
|
+
if (test_consumer_group_protocol_classic()) {
|
|
545
|
+
test_joingroup_find_coordinator(mcluster, topic,
|
|
546
|
+
rd_kafka_conf_dup(conf));
|
|
547
|
+
}
|
|
548
|
+
|
|
550
549
|
test_mock_cluster_destroy(mcluster);
|
|
551
550
|
rd_kafka_conf_destroy(conf);
|
|
552
551
|
return 0;
|
|
@@ -104,19 +104,41 @@ static void do_test_metadata_persists_in_cache(const char *assignor) {
|
|
|
104
104
|
}
|
|
105
105
|
|
|
106
106
|
/**
|
|
107
|
-
* @brief
|
|
108
|
-
*
|
|
109
|
-
*
|
|
107
|
+
* @brief Tests about the fast metadata refresh feature.
|
|
108
|
+
*
|
|
109
|
+
* - variation 0: no loop of metadata requests should be started
|
|
110
|
+
* when a metadata request is made without leader epoch change.
|
|
111
|
+
* It's expected it stops after the first request.
|
|
112
|
+
* See issue #4577
|
|
113
|
+
*
|
|
114
|
+
* - variation 1: an error is returned on subsequent metadata response too,
|
|
115
|
+
* metadata refreshes continue every second until the error is cleared.
|
|
116
|
+
*
|
|
117
|
+
* It's expected that the temporary error doesn't remove the topic from cache,
|
|
118
|
+
* produce requests aren't blocked from metadata errors and no error is
|
|
119
|
+
* to be surfaced to the application.
|
|
110
120
|
*/
|
|
111
|
-
static void
|
|
121
|
+
static void do_test_fast_metadata_refresh(int variation) {
|
|
112
122
|
rd_kafka_t *rk;
|
|
113
123
|
const char *bootstraps;
|
|
114
124
|
rd_kafka_mock_cluster_t *mcluster;
|
|
115
125
|
const char *topic = test_mk_topic_name(__FUNCTION__, 1);
|
|
116
126
|
rd_kafka_conf_t *conf;
|
|
117
127
|
int metadata_requests;
|
|
128
|
+
int expected_metadata_requests;
|
|
129
|
+
switch (variation) {
|
|
130
|
+
case 0:
|
|
131
|
+
expected_metadata_requests = 2;
|
|
132
|
+
break;
|
|
133
|
+
case 1:
|
|
134
|
+
expected_metadata_requests = 7;
|
|
135
|
+
break;
|
|
136
|
+
default:
|
|
137
|
+
TEST_FAIL("Invalid variation %d", variation);
|
|
138
|
+
break;
|
|
139
|
+
}
|
|
118
140
|
|
|
119
|
-
SUB_TEST_QUICK();
|
|
141
|
+
SUB_TEST_QUICK("%s", variation == 0 ? "stops" : "retries");
|
|
120
142
|
|
|
121
143
|
mcluster = test_mock_cluster_new(3, &bootstraps);
|
|
122
144
|
rd_kafka_mock_topic_create(mcluster, topic, 1, 1);
|
|
@@ -127,22 +149,51 @@ static void do_test_fast_metadata_refresh_stops(void) {
|
|
|
127
149
|
|
|
128
150
|
rk = test_create_handle(RD_KAFKA_PRODUCER, conf);
|
|
129
151
|
|
|
152
|
+
rd_kafka_mock_start_request_tracking(mcluster);
|
|
153
|
+
|
|
154
|
+
if (variation == 1) {
|
|
155
|
+
/* Produce some messages to the topic
|
|
156
|
+
* and keep metadata in cache. */
|
|
157
|
+
test_produce_msgs2(rk, topic, 0, 0, 0, 3, NULL, 5);
|
|
158
|
+
}
|
|
159
|
+
|
|
130
160
|
/* This error triggers a metadata refresh but no leader change
|
|
131
161
|
* happened */
|
|
132
162
|
rd_kafka_mock_push_request_errors(
|
|
133
163
|
mcluster, RD_KAFKAP_Produce, 1,
|
|
134
164
|
RD_KAFKA_RESP_ERR_KAFKA_STORAGE_ERROR);
|
|
135
165
|
|
|
136
|
-
|
|
137
|
-
|
|
166
|
+
if (variation == 1) {
|
|
167
|
+
rd_kafka_mock_topic_set_error(
|
|
168
|
+
mcluster, topic, RD_KAFKA_RESP_ERR_KAFKA_STORAGE_ERROR);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
test_produce_msgs2(rk, topic, 0, 0, 0, 3, NULL, 5);
|
|
172
|
+
|
|
173
|
+
/* Wait some time for seeing the retries */
|
|
174
|
+
rd_sleep(3);
|
|
175
|
+
|
|
176
|
+
if (variation == 1) {
|
|
177
|
+
/* Clear topic error to stop the retries */
|
|
178
|
+
rd_kafka_mock_topic_set_error(mcluster, topic,
|
|
179
|
+
RD_KAFKA_RESP_ERR_NO_ERROR);
|
|
180
|
+
}
|
|
138
181
|
|
|
139
182
|
/* First call is for getting initial metadata,
|
|
140
183
|
* second one happens after the error,
|
|
141
|
-
* it should stop refreshing metadata after that.
|
|
184
|
+
* it should stop refreshing metadata after that.
|
|
185
|
+
*
|
|
186
|
+
* There can be an additional metadata request originating from
|
|
187
|
+
* the 1s timer when the partition is being delegated or
|
|
188
|
+
* the broker is connecting but still not up. */
|
|
142
189
|
metadata_requests = test_mock_wait_matching_requests(
|
|
143
|
-
mcluster,
|
|
144
|
-
|
|
145
|
-
|
|
190
|
+
mcluster, expected_metadata_requests, 500, is_metadata_request,
|
|
191
|
+
NULL);
|
|
192
|
+
TEST_ASSERT(expected_metadata_requests <= metadata_requests &&
|
|
193
|
+
metadata_requests <= expected_metadata_requests + 1,
|
|
194
|
+
"Expected %d or %d metadata request, got %d",
|
|
195
|
+
expected_metadata_requests, expected_metadata_requests + 1,
|
|
196
|
+
metadata_requests);
|
|
146
197
|
rd_kafka_mock_stop_request_tracking(mcluster);
|
|
147
198
|
|
|
148
199
|
rd_kafka_destroy(rk);
|
|
@@ -344,8 +395,16 @@ static void do_test_metadata_update_operation(rd_bool_t producer,
|
|
|
344
395
|
test_produce_msgs2(rk, topic, 0, 1, 0, 1, NULL, 0);
|
|
345
396
|
rd_kafka_flush(rk, 1000);
|
|
346
397
|
} else {
|
|
398
|
+
test_produce_msgs_easy_v(topic, 0, 0, 0, 1, 0,
|
|
399
|
+
"bootstrap.servers", bootstraps, NULL);
|
|
400
|
+
test_produce_msgs_easy_v(topic, 0, 1, 0, 1, 0,
|
|
401
|
+
"bootstrap.servers", bootstraps, NULL);
|
|
402
|
+
|
|
347
403
|
rd_kafka_topic_partition_list_t *assignment;
|
|
348
404
|
test_conf_set(conf, "group.id", topic);
|
|
405
|
+
test_conf_set(conf, "fetch.wait.max.ms", "100");
|
|
406
|
+
test_conf_set(conf, "auto.offset.reset", "earliest");
|
|
407
|
+
|
|
349
408
|
rk = test_create_handle(RD_KAFKA_CONSUMER, conf);
|
|
350
409
|
|
|
351
410
|
assignment = rd_kafka_topic_partition_list_new(1);
|
|
@@ -355,7 +414,8 @@ static void do_test_metadata_update_operation(rd_bool_t producer,
|
|
|
355
414
|
rd_kafka_topic_partition_list_destroy(assignment);
|
|
356
415
|
|
|
357
416
|
/* Start consuming from leader 1 and 2 */
|
|
358
|
-
|
|
417
|
+
test_consumer_poll_timeout("initial leaders", rk, 0, -1, -1, 2,
|
|
418
|
+
NULL, 5000);
|
|
359
419
|
}
|
|
360
420
|
|
|
361
421
|
TIMING_START(&timing, "Metadata update and partition migration");
|
|
@@ -377,10 +437,10 @@ static void do_test_metadata_update_operation(rd_bool_t producer,
|
|
|
377
437
|
"bootstrap.servers", bootstraps, NULL);
|
|
378
438
|
test_produce_msgs_easy_v(topic, 0, 1, 0, 1, 0,
|
|
379
439
|
"bootstrap.servers", bootstraps, NULL);
|
|
380
|
-
test_consumer_poll_timeout("
|
|
440
|
+
test_consumer_poll_timeout("changed leaders", rk, 0, -1, -1, 2,
|
|
381
441
|
NULL, 5000);
|
|
382
442
|
}
|
|
383
|
-
TIMING_ASSERT_LATER(&timing, 0,
|
|
443
|
+
TIMING_ASSERT_LATER(&timing, 0, 500);
|
|
384
444
|
|
|
385
445
|
/* Leader change triggers the metadata update and migration
|
|
386
446
|
* of partition 0 to brokers 3 and with 'second_leader_change' also
|
|
@@ -429,7 +489,8 @@ int main_0146_metadata_mock(int argc, char **argv) {
|
|
|
429
489
|
|
|
430
490
|
do_test_metadata_call_before_join();
|
|
431
491
|
|
|
432
|
-
|
|
492
|
+
do_test_fast_metadata_refresh(0);
|
|
493
|
+
do_test_fast_metadata_refresh(1);
|
|
433
494
|
|
|
434
495
|
do_test_stale_metadata_doesnt_migrate_partition();
|
|
435
496
|
|