@platformatic/rdkafka 4.0.0 → 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 +3 -3
- package/ci/prepublish.js +4 -3
- package/ci/update-version.js +123 -0
- 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/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/docs +5 -0
- 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 +12 -13
- 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
|
@@ -400,6 +400,8 @@ struct rd_kafka_op_s {
|
|
|
400
400
|
struct {
|
|
401
401
|
rd_kafka_metadata_t *md;
|
|
402
402
|
rd_kafka_metadata_internal_t *mdi;
|
|
403
|
+
/* subscription version for this call */
|
|
404
|
+
int32_t subscription_version;
|
|
403
405
|
int force; /* force request regardless of outstanding
|
|
404
406
|
* metadata requests. */
|
|
405
407
|
} metadata;
|
|
@@ -413,7 +415,6 @@ struct rd_kafka_op_s {
|
|
|
413
415
|
} dr;
|
|
414
416
|
|
|
415
417
|
struct {
|
|
416
|
-
int32_t nodeid;
|
|
417
418
|
char nodename[RD_KAFKA_NODENAME_SIZE];
|
|
418
419
|
} node;
|
|
419
420
|
|
|
@@ -470,13 +471,14 @@ struct rd_kafka_op_s {
|
|
|
470
471
|
struct rd_kafka_admin_worker_cbs *cbs;
|
|
471
472
|
|
|
472
473
|
/** Worker state */
|
|
473
|
-
enum {
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
474
|
+
enum {
|
|
475
|
+
RD_KAFKA_ADMIN_STATE_INIT,
|
|
476
|
+
RD_KAFKA_ADMIN_STATE_WAIT_BROKER,
|
|
477
|
+
RD_KAFKA_ADMIN_STATE_WAIT_CONTROLLER,
|
|
478
|
+
RD_KAFKA_ADMIN_STATE_WAIT_FANOUTS,
|
|
479
|
+
RD_KAFKA_ADMIN_STATE_CONSTRUCT_REQUEST,
|
|
480
|
+
RD_KAFKA_ADMIN_STATE_WAIT_RESPONSE,
|
|
481
|
+
RD_KAFKA_ADMIN_STATE_WAIT_BROKER_LIST,
|
|
480
482
|
} state;
|
|
481
483
|
|
|
482
484
|
int32_t broker_id; /**< Requested broker id to
|
|
@@ -544,6 +546,11 @@ struct rd_kafka_op_s {
|
|
|
544
546
|
/** Result cb for this op */
|
|
545
547
|
void (*result_cb)(rd_kafka_op_t *);
|
|
546
548
|
|
|
549
|
+
struct rd_kafka_admin_worker_cbs
|
|
550
|
+
*cbs; /**< Worker Callbacks
|
|
551
|
+
* Moved from admin request
|
|
552
|
+
*/
|
|
553
|
+
|
|
547
554
|
rd_list_t results; /**< Type depends on request type:
|
|
548
555
|
*
|
|
549
556
|
* (rd_kafka_topic_result_t *):
|
|
@@ -570,19 +577,22 @@ struct rd_kafka_op_s {
|
|
|
570
577
|
|
|
571
578
|
/**< Mock cluster command */
|
|
572
579
|
struct {
|
|
573
|
-
enum {
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
580
|
+
enum {
|
|
581
|
+
RD_KAFKA_MOCK_CMD_TOPIC_SET_ERROR,
|
|
582
|
+
RD_KAFKA_MOCK_CMD_TOPIC_CREATE,
|
|
583
|
+
RD_KAFKA_MOCK_CMD_PART_SET_LEADER,
|
|
584
|
+
RD_KAFKA_MOCK_CMD_PART_SET_FOLLOWER,
|
|
585
|
+
RD_KAFKA_MOCK_CMD_PART_SET_FOLLOWER_WMARKS,
|
|
586
|
+
RD_KAFKA_MOCK_CMD_PART_PUSH_LEADER_RESPONSE,
|
|
587
|
+
RD_KAFKA_MOCK_CMD_BROKER_SET_UPDOWN,
|
|
588
|
+
RD_KAFKA_MOCK_CMD_BROKER_SET_RTT,
|
|
589
|
+
RD_KAFKA_MOCK_CMD_BROKER_SET_RACK,
|
|
590
|
+
RD_KAFKA_MOCK_CMD_BROKER_DECOMMISSION,
|
|
591
|
+
RD_KAFKA_MOCK_CMD_BROKER_ADD,
|
|
592
|
+
RD_KAFKA_MOCK_CMD_COORD_SET,
|
|
593
|
+
RD_KAFKA_MOCK_CMD_APIVERSION_SET,
|
|
594
|
+
RD_KAFKA_MOCK_CMD_REQUESTED_METRICS_SET,
|
|
595
|
+
RD_KAFKA_MOCK_CMD_TELEMETRY_PUSH_INTERVAL_SET,
|
|
586
596
|
} cmd;
|
|
587
597
|
|
|
588
598
|
rd_kafka_resp_err_t err; /**< Error for:
|
|
@@ -610,6 +620,8 @@ struct rd_kafka_op_s {
|
|
|
610
620
|
* PART_SET_LEADER
|
|
611
621
|
* BROKER_SET_UPDOWN
|
|
612
622
|
* BROKER_SET_RACK
|
|
623
|
+
* BROKER_DECOMMISSION
|
|
624
|
+
* BROKER_ADD
|
|
613
625
|
* COORD_SET */
|
|
614
626
|
int64_t lo; /**< Low offset, for:
|
|
615
627
|
* TOPIC_CREATE (part cnt)
|
|
@@ -700,6 +712,18 @@ struct rd_kafka_op_s {
|
|
|
700
712
|
rd_kafka_broker_t *rkb;
|
|
701
713
|
} telemetry_broker;
|
|
702
714
|
|
|
715
|
+
struct {
|
|
716
|
+
/**
|
|
717
|
+
* Terminated and freed broker pointer,
|
|
718
|
+
* can only be used for pointer comparison.
|
|
719
|
+
*/
|
|
720
|
+
void *rkb;
|
|
721
|
+
|
|
722
|
+
/** Termination callback to trigger
|
|
723
|
+
* on the op handler's thread. */
|
|
724
|
+
void (*cb)(rd_kafka_t *rk, void *rkb);
|
|
725
|
+
} terminated;
|
|
726
|
+
|
|
703
727
|
} rko_u;
|
|
704
728
|
};
|
|
705
729
|
|
|
@@ -146,8 +146,8 @@ static void rd_kafka_toppar_consumer_lag_req(rd_kafka_toppar_t *rktp) {
|
|
|
146
146
|
* broker supports FETCH >= v5, since this will be set when
|
|
147
147
|
* doing fetch requests.
|
|
148
148
|
*/
|
|
149
|
-
if (
|
|
150
|
-
|
|
149
|
+
if (rd_kafka_broker_ApiVersion_at_least(rktp->rktp_broker,
|
|
150
|
+
RD_KAFKAP_Fetch, 5)) {
|
|
151
151
|
rd_kafka_toppar_unlock(rktp);
|
|
152
152
|
return;
|
|
153
153
|
}
|
|
@@ -376,14 +376,24 @@ void rd_kafka_toppar_set_fetch_state(rd_kafka_toppar_t *rktp, int fetch_state) {
|
|
|
376
376
|
|
|
377
377
|
rktp->rktp_fetch_state = fetch_state;
|
|
378
378
|
|
|
379
|
-
if (fetch_state == RD_KAFKA_TOPPAR_FETCH_ACTIVE)
|
|
379
|
+
if (fetch_state == RD_KAFKA_TOPPAR_FETCH_ACTIVE) {
|
|
380
|
+
rktp->rktp_ts_fetch_backoff = 0;
|
|
381
|
+
|
|
382
|
+
/* Wake-up broker thread which might be idling on IO */
|
|
383
|
+
if (rktp->rktp_broker)
|
|
384
|
+
rd_kafka_broker_wakeup(rktp->rktp_broker,
|
|
385
|
+
"fetch start");
|
|
386
|
+
|
|
380
387
|
rd_kafka_dbg(
|
|
381
388
|
rktp->rktp_rkt->rkt_rk, CONSUMER | RD_KAFKA_DBG_TOPIC,
|
|
382
389
|
"FETCH",
|
|
383
390
|
"Partition %.*s [%" PRId32 "] start fetching at %s",
|
|
384
391
|
RD_KAFKAP_STR_PR(rktp->rktp_rkt->rkt_topic),
|
|
385
392
|
rktp->rktp_partition,
|
|
386
|
-
rd_kafka_fetch_pos2str(
|
|
393
|
+
rd_kafka_fetch_pos2str(
|
|
394
|
+
rd_kafka_toppar_fetch_decide_next_fetch_start_pos(
|
|
395
|
+
rktp)));
|
|
396
|
+
}
|
|
387
397
|
}
|
|
388
398
|
|
|
389
399
|
|
|
@@ -1225,7 +1235,8 @@ void rd_kafka_toppar_broker_delegate(rd_kafka_toppar_t *rktp,
|
|
|
1225
1235
|
|
|
1226
1236
|
/* Undelegated toppars are delgated to the internal
|
|
1227
1237
|
* broker for bookkeeping. */
|
|
1228
|
-
if (!
|
|
1238
|
+
if (!rd_kafka_terminating(rk) &&
|
|
1239
|
+
(!rkb || rd_kafka_broker_termination_in_progress(rkb))) {
|
|
1229
1240
|
rkb = rd_kafka_broker_internal(rk);
|
|
1230
1241
|
internal_fallback = 1;
|
|
1231
1242
|
}
|
|
@@ -1338,7 +1349,7 @@ void rd_kafka_toppar_next_offset_handle(rd_kafka_toppar_t *rktp,
|
|
|
1338
1349
|
if (rktp->rktp_query_pos.offset <= RD_KAFKA_OFFSET_TAIL_BASE) {
|
|
1339
1350
|
int64_t orig_offset = next_pos.offset;
|
|
1340
1351
|
int64_t tail_cnt = llabs(rktp->rktp_query_pos.offset -
|
|
1341
|
-
|
|
1352
|
+
RD_KAFKA_OFFSET_TAIL_BASE);
|
|
1342
1353
|
|
|
1343
1354
|
if (tail_cnt > next_pos.offset)
|
|
1344
1355
|
next_pos.offset = 0;
|
|
@@ -1359,10 +1370,6 @@ void rd_kafka_toppar_next_offset_handle(rd_kafka_toppar_t *rktp,
|
|
|
1359
1370
|
rd_kafka_toppar_set_next_fetch_position(rktp, next_pos);
|
|
1360
1371
|
|
|
1361
1372
|
rd_kafka_toppar_set_fetch_state(rktp, RD_KAFKA_TOPPAR_FETCH_ACTIVE);
|
|
1362
|
-
|
|
1363
|
-
/* Wake-up broker thread which might be idling on IO */
|
|
1364
|
-
if (rktp->rktp_broker)
|
|
1365
|
-
rd_kafka_broker_wakeup(rktp->rktp_broker, "ready to fetch");
|
|
1366
1373
|
}
|
|
1367
1374
|
|
|
1368
1375
|
|
|
@@ -1746,11 +1753,6 @@ static void rd_kafka_toppar_fetch_start(rd_kafka_toppar_t *rktp,
|
|
|
1746
1753
|
|
|
1747
1754
|
rd_kafka_toppar_set_fetch_state(rktp,
|
|
1748
1755
|
RD_KAFKA_TOPPAR_FETCH_ACTIVE);
|
|
1749
|
-
|
|
1750
|
-
/* Wake-up broker thread which might be idling on IO */
|
|
1751
|
-
if (rktp->rktp_broker)
|
|
1752
|
-
rd_kafka_broker_wakeup(rktp->rktp_broker,
|
|
1753
|
-
"fetch start");
|
|
1754
1756
|
}
|
|
1755
1757
|
|
|
1756
1758
|
rktp->rktp_offsets_fin.eof_offset = RD_KAFKA_OFFSET_INVALID;
|
|
@@ -2160,6 +2162,7 @@ static rd_kafka_op_res_t rd_kafka_toppar_op_serve(rd_kafka_t *rk,
|
|
|
2160
2162
|
rd_kafka_toppar_lock(rktp);
|
|
2161
2163
|
|
|
2162
2164
|
if (rko->rko_err) {
|
|
2165
|
+
int actions;
|
|
2163
2166
|
rd_kafka_dbg(
|
|
2164
2167
|
rktp->rktp_rkt->rkt_rk, TOPIC, "OFFSET",
|
|
2165
2168
|
"Failed to fetch offset for "
|
|
@@ -2174,10 +2177,15 @@ static rd_kafka_op_res_t rd_kafka_toppar_op_serve(rd_kafka_t *rk,
|
|
|
2174
2177
|
rd_kafka_toppar_unlock(rktp);
|
|
2175
2178
|
|
|
2176
2179
|
|
|
2177
|
-
|
|
2180
|
+
actions = rd_kafka_handle_OffsetFetch_err_action(
|
|
2181
|
+
NULL, rko->rko_err, NULL);
|
|
2182
|
+
/* Propagate error to application. Exclude
|
|
2183
|
+
* permanent errors that caused a coordinator
|
|
2184
|
+
* refresh like `NOT_COORDINATOR` */
|
|
2178
2185
|
if (rko->rko_err != RD_KAFKA_RESP_ERR__WAIT_COORD &&
|
|
2179
2186
|
rko->rko_err !=
|
|
2180
|
-
RD_KAFKA_RESP_ERR_UNSTABLE_OFFSET_COMMIT
|
|
2187
|
+
RD_KAFKA_RESP_ERR_UNSTABLE_OFFSET_COMMIT &&
|
|
2188
|
+
!(actions & RD_KAFKA_ERR_ACTION_REFRESH))
|
|
2181
2189
|
rd_kafka_consumer_err(
|
|
2182
2190
|
rktp->rktp_fetchq, RD_KAFKA_NODEID_UA,
|
|
2183
2191
|
rko->rko_err, 0, NULL, rktp,
|
|
@@ -2582,7 +2590,8 @@ void rd_kafka_toppar_leader_unavailable(rd_kafka_toppar_t *rktp,
|
|
|
2582
2590
|
rkt->rkt_flags |= RD_KAFKA_TOPIC_F_LEADER_UNAVAIL;
|
|
2583
2591
|
rd_kafka_topic_wrunlock(rkt);
|
|
2584
2592
|
|
|
2585
|
-
rd_kafka_topic_fast_leader_query(rkt->rkt_rk
|
|
2593
|
+
rd_kafka_topic_fast_leader_query(rkt->rkt_rk,
|
|
2594
|
+
rd_false /* don't force */);
|
|
2586
2595
|
}
|
|
2587
2596
|
|
|
2588
2597
|
|
|
@@ -3674,11 +3683,12 @@ static rd_bool_t rd_kafka_topic_partition_list_get_leaders(
|
|
|
3674
3683
|
struct rd_kafka_partition_leader *leader;
|
|
3675
3684
|
const rd_kafka_metadata_topic_t *mtopic;
|
|
3676
3685
|
const rd_kafka_metadata_partition_t *mpart;
|
|
3686
|
+
const rd_kafka_metadata_partition_internal_t *mdpi;
|
|
3677
3687
|
rd_bool_t topic_wait_cache;
|
|
3678
3688
|
|
|
3679
3689
|
rd_kafka_metadata_cache_topic_partition_get(
|
|
3680
|
-
rk, &mtopic, &mpart,
|
|
3681
|
-
0 /*negative entries too*/);
|
|
3690
|
+
rk, &mtopic, &mpart, &mdpi, rktpar->topic,
|
|
3691
|
+
rktpar->partition, 0 /*negative entries too*/);
|
|
3682
3692
|
|
|
3683
3693
|
topic_wait_cache =
|
|
3684
3694
|
!mtopic ||
|
|
@@ -3746,9 +3756,11 @@ static rd_bool_t rd_kafka_topic_partition_list_get_leaders(
|
|
|
3746
3756
|
rd_kafka_topic_partition_update(rktpar2, rktpar);
|
|
3747
3757
|
} else {
|
|
3748
3758
|
/* Make a copy of rktpar and add to partitions list */
|
|
3749
|
-
rd_kafka_topic_partition_list_add_copy(
|
|
3759
|
+
rktpar2 = rd_kafka_topic_partition_list_add_copy(
|
|
3750
3760
|
leader->partitions, rktpar);
|
|
3751
3761
|
}
|
|
3762
|
+
rd_kafka_topic_partition_set_current_leader_epoch(
|
|
3763
|
+
rktpar2, mdpi->leader_epoch);
|
|
3752
3764
|
|
|
3753
3765
|
rktpar->err = RD_KAFKA_RESP_ERR_NO_ERROR;
|
|
3754
3766
|
|
|
@@ -3872,7 +3884,7 @@ rd_kafka_topic_partition_list_query_leaders_async_worker(rd_kafka_op_t *rko) {
|
|
|
3872
3884
|
rd_kafka_metadata_refresh_topics(
|
|
3873
3885
|
rk, NULL, &query_topics, rd_true /*force*/,
|
|
3874
3886
|
rd_false /*!allow_auto_create*/, rd_false /*!cgrp_update*/,
|
|
3875
|
-
"query partition leaders");
|
|
3887
|
+
-1, "query partition leaders");
|
|
3876
3888
|
}
|
|
3877
3889
|
|
|
3878
3890
|
rd_list_destroy(leaders);
|
|
@@ -4061,7 +4073,7 @@ rd_kafka_resp_err_t rd_kafka_topic_partition_list_query_leaders(
|
|
|
4061
4073
|
rd_kafka_metadata_refresh_topics(
|
|
4062
4074
|
rk, NULL, &query_topics, rd_true /*force*/,
|
|
4063
4075
|
rd_false /*!allow_auto_create*/,
|
|
4064
|
-
rd_false /*!cgrp_update*/,
|
|
4076
|
+
rd_false /*!cgrp_update*/, -1,
|
|
4065
4077
|
"query partition leaders");
|
|
4066
4078
|
ts_query = now;
|
|
4067
4079
|
query_cnt++;
|
|
@@ -4421,6 +4433,89 @@ int rd_kafka_topic_partition_list_regex_cnt(
|
|
|
4421
4433
|
}
|
|
4422
4434
|
|
|
4423
4435
|
|
|
4436
|
+
/**
|
|
4437
|
+
* @brief Match function that returns true if topic is not a regex.
|
|
4438
|
+
*/
|
|
4439
|
+
static int rd_kafka_topic_partition_not_regex(const void *elem,
|
|
4440
|
+
const void *opaque) {
|
|
4441
|
+
const rd_kafka_topic_partition_t *rktpar = elem;
|
|
4442
|
+
return *rktpar->topic != '^';
|
|
4443
|
+
}
|
|
4444
|
+
|
|
4445
|
+
/**
|
|
4446
|
+
* @brief Return a new list with all regex topics removed.
|
|
4447
|
+
*
|
|
4448
|
+
* @remark The caller is responsible for freeing the returned list.
|
|
4449
|
+
*/
|
|
4450
|
+
rd_kafka_topic_partition_list_t *rd_kafka_topic_partition_list_remove_regexes(
|
|
4451
|
+
const rd_kafka_topic_partition_list_t *rktparlist) {
|
|
4452
|
+
return rd_kafka_topic_partition_list_match(
|
|
4453
|
+
rktparlist, rd_kafka_topic_partition_not_regex, NULL);
|
|
4454
|
+
}
|
|
4455
|
+
|
|
4456
|
+
|
|
4457
|
+
/**
|
|
4458
|
+
* @brief Combine regexes present in the list into a single regex.
|
|
4459
|
+
*/
|
|
4460
|
+
rd_kafkap_str_t *rd_kafka_topic_partition_list_combine_regexes(
|
|
4461
|
+
const rd_kafka_topic_partition_list_t *rktparlist) {
|
|
4462
|
+
int i;
|
|
4463
|
+
int combined_regex_len = 1; /* 1 for null-terminator */
|
|
4464
|
+
int regex_cnt = 0;
|
|
4465
|
+
int j = 1;
|
|
4466
|
+
rd_bool_t is_first_regex = rd_true;
|
|
4467
|
+
char *combined_regex_str;
|
|
4468
|
+
rd_kafkap_str_t *combined_regex_kstr;
|
|
4469
|
+
|
|
4470
|
+
// Count the number of characters needed for the combined regex string
|
|
4471
|
+
for (i = 0; i < rktparlist->cnt; i++) {
|
|
4472
|
+
const rd_kafka_topic_partition_t *rktpar =
|
|
4473
|
+
&(rktparlist->elems[i]);
|
|
4474
|
+
if (*rktpar->topic == '^') {
|
|
4475
|
+
combined_regex_len += strlen(rktpar->topic);
|
|
4476
|
+
regex_cnt++;
|
|
4477
|
+
}
|
|
4478
|
+
}
|
|
4479
|
+
|
|
4480
|
+
if (regex_cnt == 0)
|
|
4481
|
+
return rd_kafkap_str_new("", 0);
|
|
4482
|
+
|
|
4483
|
+
combined_regex_len +=
|
|
4484
|
+
3 * (regex_cnt - 1); /* 1 for each ')|(' separator */
|
|
4485
|
+
combined_regex_len += 2; /* 2 for enclosing brackets */
|
|
4486
|
+
|
|
4487
|
+
// memory allocation for the combined regex string
|
|
4488
|
+
combined_regex_str = rd_malloc(combined_regex_len);
|
|
4489
|
+
|
|
4490
|
+
// Construct the combined regex string
|
|
4491
|
+
combined_regex_str[0] = '(';
|
|
4492
|
+
for (i = 0; i < rktparlist->cnt; i++) {
|
|
4493
|
+
const rd_kafka_topic_partition_t *rktpar =
|
|
4494
|
+
&(rktparlist->elems[i]);
|
|
4495
|
+
char *topic = rktpar->topic;
|
|
4496
|
+
if (*topic == '^') {
|
|
4497
|
+
if (!is_first_regex) {
|
|
4498
|
+
combined_regex_str[j++] = ')';
|
|
4499
|
+
combined_regex_str[j++] = '|';
|
|
4500
|
+
combined_regex_str[j++] = '(';
|
|
4501
|
+
}
|
|
4502
|
+
while (*topic) {
|
|
4503
|
+
combined_regex_str[j++] = *topic;
|
|
4504
|
+
topic++;
|
|
4505
|
+
}
|
|
4506
|
+
is_first_regex = rd_false;
|
|
4507
|
+
}
|
|
4508
|
+
}
|
|
4509
|
+
combined_regex_str[j++] = ')';
|
|
4510
|
+
combined_regex_str[j] = '\0';
|
|
4511
|
+
|
|
4512
|
+
combined_regex_kstr =
|
|
4513
|
+
rd_kafkap_str_new(combined_regex_str, combined_regex_len - 1);
|
|
4514
|
+
rd_free(combined_regex_str);
|
|
4515
|
+
return combined_regex_kstr;
|
|
4516
|
+
}
|
|
4517
|
+
|
|
4518
|
+
|
|
4424
4519
|
/**
|
|
4425
4520
|
* @brief Reset base sequence for this toppar.
|
|
4426
4521
|
*
|
|
@@ -292,13 +292,14 @@ struct rd_kafka_toppar_s { /* rd_kafka_toppar_t */
|
|
|
292
292
|
int32_t rktp_fetch_version; /* Op version of curr fetch.
|
|
293
293
|
(broker thread) */
|
|
294
294
|
|
|
295
|
-
enum {
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
295
|
+
enum {
|
|
296
|
+
RD_KAFKA_TOPPAR_FETCH_NONE = 0,
|
|
297
|
+
RD_KAFKA_TOPPAR_FETCH_STOPPING,
|
|
298
|
+
RD_KAFKA_TOPPAR_FETCH_STOPPED,
|
|
299
|
+
RD_KAFKA_TOPPAR_FETCH_OFFSET_QUERY,
|
|
300
|
+
RD_KAFKA_TOPPAR_FETCH_OFFSET_WAIT,
|
|
301
|
+
RD_KAFKA_TOPPAR_FETCH_VALIDATE_EPOCH_WAIT,
|
|
302
|
+
RD_KAFKA_TOPPAR_FETCH_ACTIVE,
|
|
302
303
|
} rktp_fetch_state; /* Broker thread's state */
|
|
303
304
|
|
|
304
305
|
#define RD_KAFKA_TOPPAR_FETCH_IS_STARTED(fetch_state) \
|
|
@@ -433,6 +434,8 @@ struct rd_kafka_toppar_s { /* rd_kafka_toppar_t */
|
|
|
433
434
|
#define RD_KAFKA_TOPPAR_F_ASSIGNED \
|
|
434
435
|
0x2000 /**< Toppar is part of the consumer \
|
|
435
436
|
* assignment. */
|
|
437
|
+
#define RD_KAFKA_TOPPAR_F_VALIDATING \
|
|
438
|
+
0x4000 /**< Toppar is currently requesting validation. */
|
|
436
439
|
|
|
437
440
|
/*
|
|
438
441
|
* Timers
|
|
@@ -1008,6 +1011,12 @@ rd_kafka_resp_err_t rd_kafka_topic_partition_list_get_err(
|
|
|
1008
1011
|
int rd_kafka_topic_partition_list_regex_cnt(
|
|
1009
1012
|
const rd_kafka_topic_partition_list_t *rktparlist);
|
|
1010
1013
|
|
|
1014
|
+
rd_kafka_topic_partition_list_t *rd_kafka_topic_partition_list_remove_regexes(
|
|
1015
|
+
const rd_kafka_topic_partition_list_t *rktparlist);
|
|
1016
|
+
|
|
1017
|
+
rd_kafkap_str_t *rd_kafka_topic_partition_list_combine_regexes(
|
|
1018
|
+
const rd_kafka_topic_partition_list_t *rktparlist);
|
|
1019
|
+
|
|
1011
1020
|
void *rd_kafka_topic_partition_list_copy_opaque(const void *src, void *opaque);
|
|
1012
1021
|
|
|
1013
1022
|
/**
|
|
@@ -172,6 +172,7 @@ static RD_UNUSED const char *rd_kafka_ApiKey2str(int16_t ApiKey) {
|
|
|
172
172
|
[RD_KAFKAP_ListTransactions] = "ListTransactions",
|
|
173
173
|
[RD_KAFKAP_AllocateProducerIds] = "AllocateProducerIds",
|
|
174
174
|
[RD_KAFKAP_ConsumerGroupHeartbeat] = "ConsumerGroupHeartbeat",
|
|
175
|
+
[RD_KAFKAP_ConsumerGroupDescribe] = "ConsumerGroupDescribe",
|
|
175
176
|
[RD_KAFKAP_GetTelemetrySubscriptions] = "GetTelemetrySubscriptions",
|
|
176
177
|
[RD_KAFKAP_PushTelemetry] = "PushTelemetry",
|
|
177
178
|
|
|
@@ -283,6 +284,8 @@ typedef struct rd_kafkap_str_s {
|
|
|
283
284
|
#define RD_KAFKAP_STR_INITIALIZER \
|
|
284
285
|
{ .len = RD_KAFKAP_STR_LEN_NULL, .str = NULL }
|
|
285
286
|
|
|
287
|
+
#define RD_KAFKAP_STR_INITIALIZER_EMPTY \
|
|
288
|
+
{ .len = 0, .str = "" }
|
|
286
289
|
/**
|
|
287
290
|
* Frees a Kafka string previously allocated with `rd_kafkap_str_new()`
|
|
288
291
|
*/
|
|
@@ -620,7 +623,7 @@ static RD_INLINE RD_UNUSED int rd_kafka_Uuid_ptr_cmp(void *a, void *b) {
|
|
|
620
623
|
|
|
621
624
|
rd_kafka_Uuid_t rd_kafka_Uuid_random();
|
|
622
625
|
|
|
623
|
-
|
|
626
|
+
char *rd_kafka_Uuid_str(const rd_kafka_Uuid_t *uuid);
|
|
624
627
|
|
|
625
628
|
unsigned int rd_kafka_Uuid_hash(const rd_kafka_Uuid_t *uuid);
|
|
626
629
|
|