@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
|
@@ -278,10 +278,17 @@ static ssize_t rd_kafka_transport_socket_recvmsg(rd_kafka_transport_t *rktrans,
|
|
|
278
278
|
if (unlikely(r <= 0)) {
|
|
279
279
|
if (r == -1 && rd_socket_errno == EAGAIN)
|
|
280
280
|
return 0;
|
|
281
|
-
else if (r == 0
|
|
281
|
+
else if (r == 0) {
|
|
282
282
|
/* Receive 0 after POLLIN event means
|
|
283
283
|
* connection closed. */
|
|
284
|
-
rd_snprintf(errstr, errstr_size,
|
|
284
|
+
rd_snprintf(errstr, errstr_size,
|
|
285
|
+
"Disconnected: connection closed by "
|
|
286
|
+
"peer: receive 0 after POLLIN");
|
|
287
|
+
return -1;
|
|
288
|
+
} else if (r == -1 && rd_socket_errno == ECONNRESET) {
|
|
289
|
+
rd_snprintf(errstr, errstr_size,
|
|
290
|
+
"Disconnected: connection "
|
|
291
|
+
"reset by peer");
|
|
285
292
|
return -1;
|
|
286
293
|
} else if (r == -1) {
|
|
287
294
|
rd_snprintf(errstr, errstr_size, "%s",
|
|
@@ -335,7 +342,9 @@ static ssize_t rd_kafka_transport_socket_recv0(rd_kafka_transport_t *rktrans,
|
|
|
335
342
|
} else if (unlikely(r == 0)) {
|
|
336
343
|
/* Receive 0 after POLLIN event means
|
|
337
344
|
* connection closed. */
|
|
338
|
-
rd_snprintf(errstr, errstr_size,
|
|
345
|
+
rd_snprintf(errstr, errstr_size,
|
|
346
|
+
"Disconnected: connection closed by "
|
|
347
|
+
"peer: receive 0 after POLLIN");
|
|
339
348
|
return -1;
|
|
340
349
|
}
|
|
341
350
|
|
|
@@ -543,33 +552,6 @@ void rd_kafka_transport_post_connect_setup(rd_kafka_transport_t *rktrans) {
|
|
|
543
552
|
rd_kafka_broker_t *rkb = rktrans->rktrans_rkb;
|
|
544
553
|
unsigned int slen;
|
|
545
554
|
|
|
546
|
-
/* Set socket send & receive buffer sizes if configuerd */
|
|
547
|
-
if (rkb->rkb_rk->rk_conf.socket_sndbuf_size != 0) {
|
|
548
|
-
if (setsockopt(
|
|
549
|
-
rktrans->rktrans_s, SOL_SOCKET, SO_SNDBUF,
|
|
550
|
-
(void *)&rkb->rkb_rk->rk_conf.socket_sndbuf_size,
|
|
551
|
-
sizeof(rkb->rkb_rk->rk_conf.socket_sndbuf_size)) ==
|
|
552
|
-
RD_SOCKET_ERROR)
|
|
553
|
-
rd_rkb_log(rkb, LOG_WARNING, "SNDBUF",
|
|
554
|
-
"Failed to set socket send "
|
|
555
|
-
"buffer size to %i: %s",
|
|
556
|
-
rkb->rkb_rk->rk_conf.socket_sndbuf_size,
|
|
557
|
-
rd_socket_strerror(rd_socket_errno));
|
|
558
|
-
}
|
|
559
|
-
|
|
560
|
-
if (rkb->rkb_rk->rk_conf.socket_rcvbuf_size != 0) {
|
|
561
|
-
if (setsockopt(
|
|
562
|
-
rktrans->rktrans_s, SOL_SOCKET, SO_RCVBUF,
|
|
563
|
-
(void *)&rkb->rkb_rk->rk_conf.socket_rcvbuf_size,
|
|
564
|
-
sizeof(rkb->rkb_rk->rk_conf.socket_rcvbuf_size)) ==
|
|
565
|
-
RD_SOCKET_ERROR)
|
|
566
|
-
rd_rkb_log(rkb, LOG_WARNING, "RCVBUF",
|
|
567
|
-
"Failed to set socket receive "
|
|
568
|
-
"buffer size to %i: %s",
|
|
569
|
-
rkb->rkb_rk->rk_conf.socket_rcvbuf_size,
|
|
570
|
-
rd_socket_strerror(rd_socket_errno));
|
|
571
|
-
}
|
|
572
|
-
|
|
573
555
|
/* Get send and receive buffer sizes to allow limiting
|
|
574
556
|
* the total number of bytes passed with iovecs to sendmsg()
|
|
575
557
|
* and recvmsg(). */
|
|
@@ -598,19 +580,6 @@ void rd_kafka_transport_post_connect_setup(rd_kafka_transport_t *rktrans) {
|
|
|
598
580
|
} else if (rktrans->rktrans_sndbuf_size < 1024 * 64)
|
|
599
581
|
rktrans->rktrans_sndbuf_size =
|
|
600
582
|
1024 * 64; /* Use at least 64KB */
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
#ifdef TCP_NODELAY
|
|
604
|
-
if (rkb->rkb_rk->rk_conf.socket_nagle_disable) {
|
|
605
|
-
int one = 1;
|
|
606
|
-
if (setsockopt(rktrans->rktrans_s, IPPROTO_TCP, TCP_NODELAY,
|
|
607
|
-
(void *)&one, sizeof(one)) == RD_SOCKET_ERROR)
|
|
608
|
-
rd_rkb_log(rkb, LOG_WARNING, "NAGLE",
|
|
609
|
-
"Failed to disable Nagle (TCP_NODELAY) "
|
|
610
|
-
"on socket: %s",
|
|
611
|
-
rd_socket_strerror(rd_socket_errno));
|
|
612
|
-
}
|
|
613
|
-
#endif
|
|
614
583
|
}
|
|
615
584
|
|
|
616
585
|
|
|
@@ -746,7 +715,9 @@ static void rd_kafka_transport_io_event(rd_kafka_transport_t *rktrans,
|
|
|
746
715
|
if (r == 0 /* handshake still in progress */ &&
|
|
747
716
|
(events & POLLHUP)) {
|
|
748
717
|
rd_kafka_broker_conn_closed(
|
|
749
|
-
rkb, RD_KAFKA_RESP_ERR__TRANSPORT,
|
|
718
|
+
rkb, RD_KAFKA_RESP_ERR__TRANSPORT,
|
|
719
|
+
"Disconnected: during "
|
|
720
|
+
"SSL connection handshake");
|
|
750
721
|
return;
|
|
751
722
|
}
|
|
752
723
|
|
|
@@ -770,7 +741,8 @@ static void rd_kafka_transport_io_event(rd_kafka_transport_t *rktrans,
|
|
|
770
741
|
if (events & POLLHUP) {
|
|
771
742
|
rd_kafka_broker_fail(rkb, LOG_ERR,
|
|
772
743
|
RD_KAFKA_RESP_ERR__AUTHENTICATION,
|
|
773
|
-
"Disconnected"
|
|
744
|
+
"Disconnected: hung up from "
|
|
745
|
+
"peer in state AUTH_LEGACY");
|
|
774
746
|
|
|
775
747
|
return;
|
|
776
748
|
}
|
|
@@ -781,7 +753,6 @@ static void rd_kafka_transport_io_event(rd_kafka_transport_t *rktrans,
|
|
|
781
753
|
case RD_KAFKA_BROKER_STATE_AUTH_HANDSHAKE:
|
|
782
754
|
case RD_KAFKA_BROKER_STATE_AUTH_REQ:
|
|
783
755
|
case RD_KAFKA_BROKER_STATE_UP:
|
|
784
|
-
case RD_KAFKA_BROKER_STATE_UPDATE:
|
|
785
756
|
|
|
786
757
|
if (events & POLLIN) {
|
|
787
758
|
while (rkb->rkb_state >= RD_KAFKA_BROKER_STATE_UP &&
|
|
@@ -795,7 +766,9 @@ static void rd_kafka_transport_io_event(rd_kafka_transport_t *rktrans,
|
|
|
795
766
|
|
|
796
767
|
if (events & POLLHUP) {
|
|
797
768
|
rd_kafka_broker_conn_closed(
|
|
798
|
-
rkb, RD_KAFKA_RESP_ERR__TRANSPORT,
|
|
769
|
+
rkb, RD_KAFKA_RESP_ERR__TRANSPORT,
|
|
770
|
+
"Disconnected: connection closed by "
|
|
771
|
+
"peer: POLLHUP");
|
|
799
772
|
return;
|
|
800
773
|
}
|
|
801
774
|
|
|
@@ -1081,6 +1054,45 @@ rd_kafka_transport_t *rd_kafka_transport_new(rd_kafka_broker_t *rkb,
|
|
|
1081
1054
|
}
|
|
1082
1055
|
#endif
|
|
1083
1056
|
|
|
1057
|
+
#ifdef TCP_NODELAY
|
|
1058
|
+
if (rkb->rkb_rk->rk_conf.socket_nagle_disable) {
|
|
1059
|
+
int one = 1;
|
|
1060
|
+
if (setsockopt(s, IPPROTO_TCP, TCP_NODELAY, (void *)&one,
|
|
1061
|
+
sizeof(one)) == RD_SOCKET_ERROR)
|
|
1062
|
+
rd_rkb_log(rkb, LOG_WARNING, "NAGLE",
|
|
1063
|
+
"Failed to disable Nagle (TCP_NODELAY) "
|
|
1064
|
+
"on socket: %s",
|
|
1065
|
+
rd_socket_strerror(rd_socket_errno));
|
|
1066
|
+
}
|
|
1067
|
+
#endif
|
|
1068
|
+
|
|
1069
|
+
/* Set socket send & receive buffer sizes if configuerd */
|
|
1070
|
+
if (rkb->rkb_rk->rk_conf.socket_sndbuf_size != 0) {
|
|
1071
|
+
if (setsockopt(
|
|
1072
|
+
s, SOL_SOCKET, SO_SNDBUF,
|
|
1073
|
+
(void *)&rkb->rkb_rk->rk_conf.socket_sndbuf_size,
|
|
1074
|
+
sizeof(rkb->rkb_rk->rk_conf.socket_sndbuf_size)) ==
|
|
1075
|
+
RD_SOCKET_ERROR)
|
|
1076
|
+
rd_rkb_log(rkb, LOG_WARNING, "SNDBUF",
|
|
1077
|
+
"Failed to set socket send "
|
|
1078
|
+
"buffer size to %i: %s",
|
|
1079
|
+
rkb->rkb_rk->rk_conf.socket_sndbuf_size,
|
|
1080
|
+
rd_socket_strerror(rd_socket_errno));
|
|
1081
|
+
}
|
|
1082
|
+
|
|
1083
|
+
if (rkb->rkb_rk->rk_conf.socket_rcvbuf_size != 0) {
|
|
1084
|
+
if (setsockopt(
|
|
1085
|
+
s, SOL_SOCKET, SO_RCVBUF,
|
|
1086
|
+
(void *)&rkb->rkb_rk->rk_conf.socket_rcvbuf_size,
|
|
1087
|
+
sizeof(rkb->rkb_rk->rk_conf.socket_rcvbuf_size)) ==
|
|
1088
|
+
RD_SOCKET_ERROR)
|
|
1089
|
+
rd_rkb_log(rkb, LOG_WARNING, "RCVBUF",
|
|
1090
|
+
"Failed to set socket receive "
|
|
1091
|
+
"buffer size to %i: %s",
|
|
1092
|
+
rkb->rkb_rk->rk_conf.socket_rcvbuf_size,
|
|
1093
|
+
rd_socket_strerror(rd_socket_errno));
|
|
1094
|
+
}
|
|
1095
|
+
|
|
1084
1096
|
/* Set the socket to non-blocking */
|
|
1085
1097
|
if ((r = rd_fd_set_nonblocking(s))) {
|
|
1086
1098
|
rd_snprintf(errstr, errstr_size,
|
|
@@ -88,6 +88,11 @@ void rd_kafka_transport_set_blocked(rd_kafka_transport_t *rktrans,
|
|
|
88
88
|
} while (0)
|
|
89
89
|
#endif
|
|
90
90
|
|
|
91
|
+
static RD_INLINE RD_UNUSED rd_bool_t
|
|
92
|
+
rd_kafka_transport_error_disconnected(const char *errstr) {
|
|
93
|
+
return strncmp(errstr, "Disconnected", 12) == 0;
|
|
94
|
+
}
|
|
95
|
+
|
|
91
96
|
|
|
92
97
|
void rd_kafka_transport_init(void);
|
|
93
98
|
|
|
@@ -2029,7 +2029,7 @@ rd_kafka_error_t *rd_kafka_send_offsets_to_transaction(
|
|
|
2029
2029
|
rd_kafka_topic_partition_list_sort_by_topic(valid_offsets);
|
|
2030
2030
|
|
|
2031
2031
|
rko = rd_kafka_op_new_cb(rk, RD_KAFKA_OP_TXN,
|
|
2032
|
-
|
|
2032
|
+
rd_kafka_txn_op_send_offsets_to_transaction);
|
|
2033
2033
|
rko->rko_u.txn.offsets = valid_offsets;
|
|
2034
2034
|
rko->rko_u.txn.cgmetadata =
|
|
2035
2035
|
rd_kafka_consumer_group_metadata_dup(cgmetadata);
|
|
@@ -2958,6 +2958,11 @@ static void rd_kafka_txn_handle_FindCoordinator(rd_kafka_t *rk,
|
|
|
2958
2958
|
NodeId);
|
|
2959
2959
|
err = RD_KAFKA_RESP_ERR__UNKNOWN_BROKER;
|
|
2960
2960
|
}
|
|
2961
|
+
if (rkb && rkb->rkb_source != RD_KAFKA_LEARNED) {
|
|
2962
|
+
rd_kafka_broker_destroy(rkb);
|
|
2963
|
+
rkb = NULL;
|
|
2964
|
+
err = RD_KAFKA_RESP_ERR__UNKNOWN_BROKER;
|
|
2965
|
+
}
|
|
2961
2966
|
rd_kafka_rdunlock(rk);
|
|
2962
2967
|
|
|
2963
2968
|
if (err)
|
|
@@ -404,12 +404,17 @@ static int unittest_typed_map2(void) {
|
|
|
404
404
|
static int unittest_untyped_map(void) {
|
|
405
405
|
rd_map_t rmap;
|
|
406
406
|
int pass, i, r;
|
|
407
|
-
int cnt = 100000;
|
|
407
|
+
int cnt = rd_unittest_with_valgrind ? 1000 : 100000;
|
|
408
408
|
int exp_cnt = 0, get_cnt = 0, iter_cnt = 0;
|
|
409
409
|
const rd_map_elem_t *elem;
|
|
410
410
|
rd_ts_t ts = rd_clock();
|
|
411
411
|
rd_ts_t ts_get = 0;
|
|
412
412
|
|
|
413
|
+
if (rd_unittest_with_valgrind)
|
|
414
|
+
RD_UT_WARN(
|
|
415
|
+
"Reducing count in "
|
|
416
|
+
"untyped map test when using Valgrind");
|
|
417
|
+
|
|
413
418
|
rd_map_init(&rmap, cnt, rd_map_str_cmp, rd_map_str_hash, rd_free,
|
|
414
419
|
rd_free);
|
|
415
420
|
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
#include "rdrand.h"
|
|
31
31
|
#include "rdtime.h"
|
|
32
32
|
#include "tinycthread.h"
|
|
33
|
+
#include "rdmurmur2.h"
|
|
33
34
|
|
|
34
35
|
int rd_jitter(int low, int high) {
|
|
35
36
|
int rand_num;
|
|
@@ -40,8 +41,17 @@ int rd_jitter(int low, int high) {
|
|
|
40
41
|
if (unlikely(seed == 0)) {
|
|
41
42
|
struct timeval tv;
|
|
42
43
|
rd_gettimeofday(&tv, NULL);
|
|
43
|
-
seed = (unsigned int)(tv.tv_usec
|
|
44
|
+
seed = (unsigned int)(tv.tv_usec);
|
|
44
45
|
seed ^= (unsigned int)(intptr_t)thrd_current();
|
|
46
|
+
|
|
47
|
+
/* When many threads are created at the same time and the
|
|
48
|
+
* thread id is different only by a few bits it's possible that
|
|
49
|
+
* `rand_r`, that is initially multiplying by `1103515245`,
|
|
50
|
+
* truncates the variable bits and uses the same seed for
|
|
51
|
+
* different threads. By applying `murmur2` we ensure that seed
|
|
52
|
+
* variability is distributed across various bits at different
|
|
53
|
+
* positions. */
|
|
54
|
+
seed = (unsigned int)rd_murmur2(&seed, sizeof(seed));
|
|
45
55
|
}
|
|
46
56
|
|
|
47
57
|
rand_num = rand_r(&seed);
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* librd - Rapid Development C library
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) 2012-2022, Magnus Edenhill
|
|
5
|
+
* 2025, Confluent Inc.
|
|
5
6
|
* All rights reserved.
|
|
6
7
|
*
|
|
7
8
|
* Redistribution and use in source and binary forms, with or without
|
|
@@ -168,12 +169,11 @@ static RD_INLINE int rd_timeout_ms(rd_ts_t timeout_us) {
|
|
|
168
169
|
* @brief Initialize an absolute timeout based on the provided \p timeout_ms
|
|
169
170
|
* and given clock \p now
|
|
170
171
|
*
|
|
171
|
-
* To be used with
|
|
172
|
+
* To be used with rd_timeout_remains() or rd_timeout_remains_us().
|
|
172
173
|
*
|
|
173
174
|
* Honours RD_POLL_INFINITE, RD_POLL_NOWAIT.
|
|
174
175
|
*
|
|
175
|
-
* @returns the absolute timeout
|
|
176
|
-
* to rd_timeout_adjust().
|
|
176
|
+
* @returns the absolute timeout.
|
|
177
177
|
*/
|
|
178
178
|
static RD_INLINE rd_ts_t rd_timeout_init0(rd_ts_t now, int timeout_ms) {
|
|
179
179
|
if (timeout_ms == RD_POLL_INFINITE || timeout_ms == RD_POLL_NOWAIT)
|
|
@@ -182,6 +182,23 @@ static RD_INLINE rd_ts_t rd_timeout_init0(rd_ts_t now, int timeout_ms) {
|
|
|
182
182
|
return now + ((rd_ts_t)timeout_ms * 1000);
|
|
183
183
|
}
|
|
184
184
|
|
|
185
|
+
/**
|
|
186
|
+
* @brief Initialize an absolute timeout based on the provided \p timeout_us
|
|
187
|
+
* and given clock \p now
|
|
188
|
+
*
|
|
189
|
+
* To be used with rd_timeout_remains() or rd_timeout_remains_us().
|
|
190
|
+
*
|
|
191
|
+
* Honours RD_POLL_INFINITE, RD_POLL_NOWAIT.
|
|
192
|
+
*
|
|
193
|
+
* @returns the absolute timeout.
|
|
194
|
+
*/
|
|
195
|
+
static RD_INLINE rd_ts_t rd_timeout_init_us0(rd_ts_t now, rd_ts_t timeout_us) {
|
|
196
|
+
if (timeout_us == RD_POLL_INFINITE || timeout_us == RD_POLL_NOWAIT)
|
|
197
|
+
return timeout_us;
|
|
198
|
+
|
|
199
|
+
return now + timeout_us;
|
|
200
|
+
}
|
|
201
|
+
|
|
185
202
|
|
|
186
203
|
/**
|
|
187
204
|
* @brief Initialize an absolute timeout based on the provided \p timeout_ms
|
|
@@ -198,6 +215,32 @@ static RD_INLINE rd_ts_t rd_timeout_init(int timeout_ms) {
|
|
|
198
215
|
return rd_timeout_init0(rd_clock(), timeout_ms);
|
|
199
216
|
}
|
|
200
217
|
|
|
218
|
+
/**
|
|
219
|
+
* @brief Initialize an absolute timeout based on the provided \p timeout_us
|
|
220
|
+
* and current clock.
|
|
221
|
+
*
|
|
222
|
+
* To be used with rd_timeout_remains() or rd_timeout_remains_us().
|
|
223
|
+
*
|
|
224
|
+
* Honours RD_POLL_INFINITE, RD_POLL_NOWAIT.
|
|
225
|
+
*
|
|
226
|
+
* @returns the absolute timeout.
|
|
227
|
+
*/
|
|
228
|
+
static RD_INLINE rd_ts_t rd_timeout_init_us(rd_ts_t timeout_us) {
|
|
229
|
+
return rd_timeout_init_us0(rd_clock(), timeout_us);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* @brief Gets time since epoch (UTC).
|
|
234
|
+
*/
|
|
235
|
+
static RD_INLINE void rd_timespec_get(struct timespec *tspec) {
|
|
236
|
+
#if defined(__APPLE__) || (defined(__ANDROID__) && __ANDROID_API__ < 29)
|
|
237
|
+
struct timeval tv;
|
|
238
|
+
gettimeofday(&tv, NULL);
|
|
239
|
+
TIMEVAL_TO_TIMESPEC(&tv, tspec);
|
|
240
|
+
#else
|
|
241
|
+
timespec_get(tspec, TIME_UTC);
|
|
242
|
+
#endif
|
|
243
|
+
}
|
|
201
244
|
|
|
202
245
|
/**
|
|
203
246
|
* @brief Initialize an absolute timespec timeout based on the provided
|
|
@@ -213,13 +256,7 @@ static RD_INLINE void rd_timeout_init_timespec_us(struct timespec *tspec,
|
|
|
213
256
|
tspec->tv_sec = timeout_us;
|
|
214
257
|
tspec->tv_nsec = 0;
|
|
215
258
|
} else {
|
|
216
|
-
|
|
217
|
-
struct timeval tv;
|
|
218
|
-
gettimeofday(&tv, NULL);
|
|
219
|
-
TIMEVAL_TO_TIMESPEC(&tv, tspec);
|
|
220
|
-
#else
|
|
221
|
-
timespec_get(tspec, TIME_UTC);
|
|
222
|
-
#endif
|
|
259
|
+
rd_timespec_get(tspec);
|
|
223
260
|
tspec->tv_sec += timeout_us / 1000000;
|
|
224
261
|
tspec->tv_nsec += (timeout_us % 1000000) * 1000;
|
|
225
262
|
if (tspec->tv_nsec >= 1000000000) {
|
|
@@ -243,13 +280,7 @@ static RD_INLINE void rd_timeout_init_timespec(struct timespec *tspec,
|
|
|
243
280
|
tspec->tv_sec = timeout_ms;
|
|
244
281
|
tspec->tv_nsec = 0;
|
|
245
282
|
} else {
|
|
246
|
-
|
|
247
|
-
struct timeval tv;
|
|
248
|
-
gettimeofday(&tv, NULL);
|
|
249
|
-
TIMEVAL_TO_TIMESPEC(&tv, tspec);
|
|
250
|
-
#else
|
|
251
|
-
timespec_get(tspec, TIME_UTC);
|
|
252
|
-
#endif
|
|
283
|
+
rd_timespec_get(tspec);
|
|
253
284
|
tspec->tv_sec += timeout_ms / 1000;
|
|
254
285
|
tspec->tv_nsec += (timeout_ms % 1000) * 1000000;
|
|
255
286
|
if (tspec->tv_nsec >= 1000000000) {
|
|
@@ -55,6 +55,7 @@
|
|
|
55
55
|
#include "rdkafka_txnmgr.h"
|
|
56
56
|
|
|
57
57
|
rd_bool_t rd_unittest_assert_on_failure = rd_false;
|
|
58
|
+
rd_bool_t rd_unittest_with_valgrind = rd_false;
|
|
58
59
|
rd_bool_t rd_unittest_on_ci = rd_false;
|
|
59
60
|
rd_bool_t rd_unittest_slow = rd_false;
|
|
60
61
|
|
|
@@ -416,6 +417,7 @@ static int unittest_rdclock(void) {
|
|
|
416
417
|
|
|
417
418
|
extern int unittest_string(void);
|
|
418
419
|
extern int unittest_cgrp(void);
|
|
420
|
+
extern int unittest_mock_cluster(void);
|
|
419
421
|
#if WITH_SASL_SCRAM
|
|
420
422
|
extern int unittest_scram(void);
|
|
421
423
|
#endif
|
|
@@ -426,7 +428,10 @@ extern int unittest_http(void);
|
|
|
426
428
|
#endif
|
|
427
429
|
#if WITH_OAUTHBEARER_OIDC
|
|
428
430
|
extern int unittest_sasl_oauthbearer_oidc(void);
|
|
431
|
+
extern int unittest_sasl_oauthbearer_oidc_jwt_bearer(void);
|
|
432
|
+
extern int unittest_sasl_oauthbearer_oidc_assertion(void);
|
|
429
433
|
#endif
|
|
434
|
+
extern int unittest_telemetry(void);
|
|
430
435
|
extern int unittest_telemetry_decode(void);
|
|
431
436
|
|
|
432
437
|
int rd_unittest(void) {
|
|
@@ -435,42 +440,48 @@ int rd_unittest(void) {
|
|
|
435
440
|
const char *name;
|
|
436
441
|
int (*call)(void);
|
|
437
442
|
} unittests[] = {
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
443
|
+
{"sysqueue", unittest_sysqueue},
|
|
444
|
+
{"string", unittest_string},
|
|
445
|
+
{"map", unittest_map},
|
|
446
|
+
{"rdbuf", unittest_rdbuf},
|
|
447
|
+
{"rdvarint", unittest_rdvarint},
|
|
448
|
+
{"crc32c", unittest_rd_crc32c},
|
|
449
|
+
{"msg", unittest_msg},
|
|
450
|
+
{"murmurhash", unittest_murmur2},
|
|
451
|
+
{"fnv1a", unittest_fnv1a},
|
|
452
|
+
{"mock", unittest_mock_cluster},
|
|
447
453
|
#if WITH_HDRHISTOGRAM
|
|
448
|
-
|
|
454
|
+
{"rdhdrhistogram", unittest_rdhdrhistogram},
|
|
449
455
|
#endif
|
|
450
456
|
#ifdef _WIN32
|
|
451
|
-
|
|
457
|
+
{"rdclock", unittest_rdclock},
|
|
452
458
|
#endif
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
459
|
+
{"conf", unittest_conf},
|
|
460
|
+
{"broker", unittest_broker},
|
|
461
|
+
{"request", unittest_request},
|
|
456
462
|
#if WITH_SASL_OAUTHBEARER
|
|
457
|
-
|
|
463
|
+
{"sasl_oauthbearer", unittest_sasl_oauthbearer},
|
|
458
464
|
#endif
|
|
459
|
-
|
|
460
|
-
|
|
465
|
+
{"aborted_txns", unittest_aborted_txns},
|
|
466
|
+
{"cgrp", unittest_cgrp},
|
|
461
467
|
#if WITH_SASL_SCRAM
|
|
462
|
-
|
|
468
|
+
{"scram", unittest_scram},
|
|
463
469
|
#endif
|
|
464
|
-
|
|
470
|
+
{"assignors", unittest_assignors},
|
|
465
471
|
#if WITH_CURL
|
|
466
|
-
|
|
472
|
+
{"http", unittest_http},
|
|
467
473
|
#endif
|
|
468
474
|
#if WITH_OAUTHBEARER_OIDC
|
|
469
|
-
|
|
475
|
+
{"sasl_oauthbearer_oidc", unittest_sasl_oauthbearer_oidc},
|
|
476
|
+
{"sasl_oauthbearer_oidc_jwt_bearer",
|
|
477
|
+
unittest_sasl_oauthbearer_oidc_jwt_bearer},
|
|
478
|
+
{"sasl_oauthbearer_oidc_assertion",
|
|
479
|
+
unittest_sasl_oauthbearer_oidc_assertion},
|
|
470
480
|
#endif
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
481
|
+
{"telemetry", unittest_telemetry},
|
|
482
|
+
{"telemetry_decode", unittest_telemetry_decode},
|
|
483
|
+
{"feature", unittest_feature},
|
|
484
|
+
{NULL}};
|
|
474
485
|
int i;
|
|
475
486
|
const char *match = rd_getenv("RD_UT_TEST", NULL);
|
|
476
487
|
int cnt = 0;
|
|
@@ -482,7 +493,13 @@ int rd_unittest(void) {
|
|
|
482
493
|
rd_unittest_on_ci = rd_true;
|
|
483
494
|
}
|
|
484
495
|
|
|
485
|
-
if (
|
|
496
|
+
if (rd_strcmp(rd_getenv("TEST_MODE", NULL), "valgrind") == 0) {
|
|
497
|
+
RD_UT_SAY("Unittests running with valgrind");
|
|
498
|
+
rd_unittest_with_valgrind = rd_true;
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
if (rd_unittest_on_ci || rd_unittest_with_valgrind ||
|
|
502
|
+
(ENABLE_DEVEL + 0)) {
|
|
486
503
|
RD_UT_SAY("Unittests will not error out on slow CPUs");
|
|
487
504
|
rd_unittest_slow = rd_true;
|
|
488
505
|
}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* librdkafka - Apache Kafka C library
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) 2017-2022, Magnus Edenhill
|
|
5
|
+
* 2025, Confluent Inc.
|
|
5
6
|
* All rights reserved.
|
|
6
7
|
*
|
|
7
8
|
* Redistribution and use in source and binary forms, with or without
|
|
@@ -34,6 +35,7 @@
|
|
|
34
35
|
|
|
35
36
|
extern rd_bool_t rd_unittest_assert_on_failure;
|
|
36
37
|
extern rd_bool_t rd_unittest_on_ci;
|
|
38
|
+
extern rd_bool_t rd_unittest_with_valgrind;
|
|
37
39
|
extern rd_bool_t rd_unittest_slow;
|
|
38
40
|
|
|
39
41
|
#define ENABLE_CODECOV ENABLE_DEVEL
|
|
@@ -95,16 +95,17 @@ static Rune canon(Rune c) {
|
|
|
95
95
|
|
|
96
96
|
/* Scan */
|
|
97
97
|
|
|
98
|
-
enum {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
98
|
+
enum {
|
|
99
|
+
L_CHAR = 256,
|
|
100
|
+
L_CCLASS, /* character class */
|
|
101
|
+
L_NCCLASS, /* negative character class */
|
|
102
|
+
L_NC, /* "(?:" no capture */
|
|
103
|
+
L_PLA, /* "(?=" positive lookahead */
|
|
104
|
+
L_NLA, /* "(?!" negative lookahead */
|
|
105
|
+
L_WORD, /* "\b" word boundary */
|
|
106
|
+
L_NWORD, /* "\B" non-word boundary */
|
|
107
|
+
L_REF, /* "\1" back-reference */
|
|
108
|
+
L_COUNT /* {M,N} */
|
|
108
109
|
};
|
|
109
110
|
|
|
110
111
|
static int hex(Restate *g, int c) {
|
|
@@ -451,21 +452,23 @@ static int lex(Restate *g) {
|
|
|
451
452
|
|
|
452
453
|
/* Parse */
|
|
453
454
|
|
|
454
|
-
enum {
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
455
|
+
enum {
|
|
456
|
+
P_CAT,
|
|
457
|
+
P_ALT,
|
|
458
|
+
P_REP,
|
|
459
|
+
P_BOL,
|
|
460
|
+
P_EOL,
|
|
461
|
+
P_WORD,
|
|
462
|
+
P_NWORD,
|
|
463
|
+
P_PAR,
|
|
464
|
+
P_PLA,
|
|
465
|
+
P_NLA,
|
|
466
|
+
P_ANY,
|
|
467
|
+
P_CHAR,
|
|
468
|
+
P_CCLASS,
|
|
469
|
+
P_NCCLASS,
|
|
470
|
+
P_REF
|
|
471
|
+
};
|
|
469
472
|
|
|
470
473
|
struct Renode {
|
|
471
474
|
unsigned char type;
|
|
@@ -662,23 +665,25 @@ static Renode *parsealt(Restate *g) {
|
|
|
662
665
|
|
|
663
666
|
/* Compile */
|
|
664
667
|
|
|
665
|
-
enum {
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
668
|
+
enum {
|
|
669
|
+
I_END,
|
|
670
|
+
I_JUMP,
|
|
671
|
+
I_SPLIT,
|
|
672
|
+
I_PLA,
|
|
673
|
+
I_NLA,
|
|
674
|
+
I_ANYNL,
|
|
675
|
+
I_ANY,
|
|
676
|
+
I_CHAR,
|
|
677
|
+
I_CCLASS,
|
|
678
|
+
I_NCCLASS,
|
|
679
|
+
I_REF,
|
|
680
|
+
I_BOL,
|
|
681
|
+
I_EOL,
|
|
682
|
+
I_WORD,
|
|
683
|
+
I_NWORD,
|
|
684
|
+
I_LPAR,
|
|
685
|
+
I_RPAR
|
|
686
|
+
};
|
|
682
687
|
|
|
683
688
|
struct Reinst {
|
|
684
689
|
unsigned char opcode;
|