@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
|
@@ -93,10 +93,12 @@ void rd_kafka_q_init0(rd_kafka_q_t *rkq,
|
|
|
93
93
|
rkq->rkq_flags = RD_KAFKA_Q_F_READY;
|
|
94
94
|
if (for_consume)
|
|
95
95
|
rkq->rkq_flags |= RD_KAFKA_Q_F_CONSUMER;
|
|
96
|
-
rkq->rkq_rk
|
|
97
|
-
rkq->rkq_qio
|
|
98
|
-
rkq->rkq_serve
|
|
99
|
-
rkq->rkq_opaque
|
|
96
|
+
rkq->rkq_rk = rk;
|
|
97
|
+
rkq->rkq_qio = NULL;
|
|
98
|
+
rkq->rkq_serve = NULL;
|
|
99
|
+
rkq->rkq_opaque = NULL;
|
|
100
|
+
rkq->rkq_ts_last_poll_start = 0;
|
|
101
|
+
rkq->rkq_ts_last_poll_end = 0;
|
|
100
102
|
mtx_init(&rkq->rkq_lock, mtx_plain);
|
|
101
103
|
cnd_init(&rkq->rkq_cond);
|
|
102
104
|
#if ENABLE_DEVEL
|
|
@@ -380,16 +382,26 @@ rd_kafka_op_filter(rd_kafka_q_t *rkq, rd_kafka_op_t *rko, int version) {
|
|
|
380
382
|
* Serve q like rd_kafka_q_serve() until an op is found that can be returned
|
|
381
383
|
* as an event to the application.
|
|
382
384
|
*
|
|
385
|
+
* @param rkq Queue to pop from.
|
|
386
|
+
* @param timeout_us Maximum time to wait for an op, in microseconds.
|
|
387
|
+
* @param version Fetch version to filter out outdated ops.
|
|
388
|
+
* @param cb_type Callback type to use for the op.
|
|
389
|
+
* @param callback Callback to use for the op, if any.
|
|
390
|
+
* @param opaque Opaque pointer to pass to the callback.
|
|
391
|
+
* @param is_consume_call If `rd_true` and it could be a consumer call it
|
|
392
|
+
* checks if this queue can contain fetched messages.
|
|
393
|
+
*
|
|
383
394
|
* @returns the first event:able op, or NULL on timeout.
|
|
384
395
|
*
|
|
385
|
-
*
|
|
396
|
+
* @locality any thread
|
|
386
397
|
*/
|
|
387
|
-
rd_kafka_op_t *
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
398
|
+
static rd_kafka_op_t *rd_kafka_q_pop_serve0(rd_kafka_q_t *rkq,
|
|
399
|
+
rd_ts_t timeout_us,
|
|
400
|
+
int32_t version,
|
|
401
|
+
rd_kafka_q_cb_type_t cb_type,
|
|
402
|
+
rd_kafka_q_serve_cb_t *callback,
|
|
403
|
+
void *opaque,
|
|
404
|
+
rd_bool_t is_consume_call) {
|
|
393
405
|
rd_kafka_op_t *rko;
|
|
394
406
|
rd_kafka_q_t *fwdq;
|
|
395
407
|
|
|
@@ -400,14 +412,14 @@ rd_kafka_op_t *rd_kafka_q_pop_serve(rd_kafka_q_t *rkq,
|
|
|
400
412
|
rd_kafka_yield_thread = 0;
|
|
401
413
|
if (!(fwdq = rd_kafka_q_fwd_get(rkq, 0))) {
|
|
402
414
|
const rd_bool_t can_q_contain_fetched_msgs =
|
|
415
|
+
is_consume_call &&
|
|
403
416
|
rd_kafka_q_can_contain_fetched_msgs(rkq, RD_DONT_LOCK);
|
|
404
417
|
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
rd_timeout_init_timespec_us(&timeout_tspec, timeout_us);
|
|
418
|
+
rd_ts_t abs_timeout = rd_timeout_init_us(timeout_us);
|
|
408
419
|
|
|
409
420
|
if (can_q_contain_fetched_msgs)
|
|
410
|
-
rd_kafka_app_poll_start(rkq->rkq_rk, 0,
|
|
421
|
+
rd_kafka_app_poll_start(rkq->rkq_rk, rkq, 0,
|
|
422
|
+
timeout_us);
|
|
411
423
|
|
|
412
424
|
while (1) {
|
|
413
425
|
rd_kafka_op_res_t res;
|
|
@@ -447,14 +459,14 @@ rd_kafka_op_t *rd_kafka_q_pop_serve(rd_kafka_q_t *rkq,
|
|
|
447
459
|
} else if (unlikely(res ==
|
|
448
460
|
RD_KAFKA_OP_RES_YIELD)) {
|
|
449
461
|
if (can_q_contain_fetched_msgs)
|
|
450
|
-
rd_kafka_app_polled(
|
|
451
|
-
|
|
462
|
+
rd_kafka_app_polled(rkq->rkq_rk,
|
|
463
|
+
rkq);
|
|
452
464
|
/* Callback yielded, unroll */
|
|
453
465
|
return NULL;
|
|
454
466
|
} else {
|
|
455
467
|
if (can_q_contain_fetched_msgs)
|
|
456
|
-
rd_kafka_app_polled(
|
|
457
|
-
|
|
468
|
+
rd_kafka_app_polled(rkq->rkq_rk,
|
|
469
|
+
rkq);
|
|
458
470
|
break; /* Proper op, handle below. */
|
|
459
471
|
}
|
|
460
472
|
}
|
|
@@ -463,7 +475,7 @@ rd_kafka_op_t *rd_kafka_q_pop_serve(rd_kafka_q_t *rkq,
|
|
|
463
475
|
if (is_locked)
|
|
464
476
|
mtx_unlock(&rkq->rkq_lock);
|
|
465
477
|
if (can_q_contain_fetched_msgs)
|
|
466
|
-
rd_kafka_app_polled(rkq->rkq_rk);
|
|
478
|
+
rd_kafka_app_polled(rkq->rkq_rk, rkq);
|
|
467
479
|
return NULL;
|
|
468
480
|
}
|
|
469
481
|
|
|
@@ -471,10 +483,10 @@ rd_kafka_op_t *rd_kafka_q_pop_serve(rd_kafka_q_t *rkq,
|
|
|
471
483
|
mtx_lock(&rkq->rkq_lock);
|
|
472
484
|
|
|
473
485
|
if (cnd_timedwait_abs(&rkq->rkq_cond, &rkq->rkq_lock,
|
|
474
|
-
|
|
486
|
+
abs_timeout) != thrd_success) {
|
|
475
487
|
mtx_unlock(&rkq->rkq_lock);
|
|
476
488
|
if (can_q_contain_fetched_msgs)
|
|
477
|
-
rd_kafka_app_polled(rkq->rkq_rk);
|
|
489
|
+
rd_kafka_app_polled(rkq->rkq_rk, rkq);
|
|
478
490
|
return NULL;
|
|
479
491
|
}
|
|
480
492
|
}
|
|
@@ -483,8 +495,8 @@ rd_kafka_op_t *rd_kafka_q_pop_serve(rd_kafka_q_t *rkq,
|
|
|
483
495
|
/* Since the q_pop may block we need to release the parent
|
|
484
496
|
* queue's lock. */
|
|
485
497
|
mtx_unlock(&rkq->rkq_lock);
|
|
486
|
-
rko =
|
|
487
|
-
|
|
498
|
+
rko = rd_kafka_q_pop_serve0(fwdq, timeout_us, version, cb_type,
|
|
499
|
+
callback, opaque, is_consume_call);
|
|
488
500
|
rd_kafka_q_destroy(fwdq);
|
|
489
501
|
}
|
|
490
502
|
|
|
@@ -492,35 +504,72 @@ rd_kafka_op_t *rd_kafka_q_pop_serve(rd_kafka_q_t *rkq,
|
|
|
492
504
|
return rko;
|
|
493
505
|
}
|
|
494
506
|
|
|
507
|
+
rd_kafka_op_t *rd_kafka_q_pop_serve(rd_kafka_q_t *rkq,
|
|
508
|
+
rd_ts_t timeout_us,
|
|
509
|
+
int32_t version,
|
|
510
|
+
rd_kafka_q_cb_type_t cb_type,
|
|
511
|
+
rd_kafka_q_serve_cb_t *callback,
|
|
512
|
+
void *opaque) {
|
|
513
|
+
return rd_kafka_q_pop_serve0(rkq, timeout_us, version, cb_type,
|
|
514
|
+
callback, opaque, rd_false);
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
/**
|
|
518
|
+
* @brief Same as `rd_kafka_q_pop_serve`, use this call when the queue
|
|
519
|
+
* could be a fetch queue, use the other one when it
|
|
520
|
+
* can never be.
|
|
521
|
+
*/
|
|
522
|
+
rd_kafka_op_t *
|
|
523
|
+
rd_kafka_q_pop_serve_maybe_consume(rd_kafka_q_t *rkq,
|
|
524
|
+
rd_ts_t timeout_us,
|
|
525
|
+
int32_t version,
|
|
526
|
+
rd_kafka_q_cb_type_t cb_type,
|
|
527
|
+
rd_kafka_q_serve_cb_t *callback,
|
|
528
|
+
void *opaque) {
|
|
529
|
+
return rd_kafka_q_pop_serve0(rkq, timeout_us, version, cb_type,
|
|
530
|
+
callback, opaque,
|
|
531
|
+
/* Only check if to call app_polled when
|
|
532
|
+
* this is a consumer. */
|
|
533
|
+
rkq->rkq_rk->rk_type == RD_KAFKA_CONSUMER);
|
|
534
|
+
}
|
|
535
|
+
|
|
495
536
|
rd_kafka_op_t *
|
|
496
537
|
rd_kafka_q_pop(rd_kafka_q_t *rkq, rd_ts_t timeout_us, int32_t version) {
|
|
497
538
|
return rd_kafka_q_pop_serve(rkq, timeout_us, version,
|
|
498
539
|
RD_KAFKA_Q_CB_RETURN, NULL, NULL);
|
|
499
540
|
}
|
|
500
541
|
|
|
501
|
-
|
|
502
542
|
/**
|
|
503
543
|
* Pop all available ops from a queue and call the provided
|
|
504
544
|
* callback for each op.
|
|
505
|
-
* `max_cnt` limits the number of ops served, 0 = no limit.
|
|
506
545
|
*
|
|
507
|
-
*
|
|
546
|
+
* @param rkq Queue to serve.
|
|
547
|
+
* @param max_cnt Limits the number of ops served, 0 = no limit.
|
|
548
|
+
* @param cb_type Callback type to use.
|
|
549
|
+
* @param callback Callback to call for each op.
|
|
550
|
+
* @param opaque Opaque pointer to pass to the callback.
|
|
551
|
+
* @param is_consume_call If `rd_true` and it could be a consumer call it
|
|
552
|
+
* checks if this queue can contain fetched messages.
|
|
508
553
|
*
|
|
509
|
-
*
|
|
554
|
+
* @return The number of ops served.
|
|
555
|
+
*
|
|
556
|
+
* @locality any thread.
|
|
510
557
|
*/
|
|
511
|
-
int
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
558
|
+
int rd_kafka_q_serve0(rd_kafka_q_t *rkq,
|
|
559
|
+
int timeout_ms,
|
|
560
|
+
int max_cnt,
|
|
561
|
+
rd_kafka_q_cb_type_t cb_type,
|
|
562
|
+
rd_kafka_q_serve_cb_t *callback,
|
|
563
|
+
void *opaque,
|
|
564
|
+
rd_bool_t is_consume_call) {
|
|
517
565
|
rd_kafka_t *rk = rkq->rkq_rk;
|
|
518
566
|
rd_kafka_op_t *rko;
|
|
519
567
|
rd_kafka_q_t localq;
|
|
520
568
|
rd_kafka_q_t *fwdq;
|
|
521
569
|
int cnt = 0;
|
|
522
|
-
|
|
570
|
+
rd_ts_t abs_timeout;
|
|
523
571
|
const rd_bool_t can_q_contain_fetched_msgs =
|
|
572
|
+
is_consume_call &&
|
|
524
573
|
rd_kafka_q_can_contain_fetched_msgs(rkq, RD_DONT_LOCK);
|
|
525
574
|
|
|
526
575
|
rd_dassert(cb_type);
|
|
@@ -533,23 +582,23 @@ int rd_kafka_q_serve(rd_kafka_q_t *rkq,
|
|
|
533
582
|
/* Since the q_pop may block we need to release the parent
|
|
534
583
|
* queue's lock. */
|
|
535
584
|
mtx_unlock(&rkq->rkq_lock);
|
|
536
|
-
ret =
|
|
537
|
-
|
|
585
|
+
ret = rd_kafka_q_serve0(fwdq, timeout_ms, max_cnt, cb_type,
|
|
586
|
+
callback, opaque, is_consume_call);
|
|
538
587
|
rd_kafka_q_destroy(fwdq);
|
|
539
588
|
return ret;
|
|
540
589
|
}
|
|
541
590
|
|
|
542
591
|
|
|
543
|
-
|
|
592
|
+
abs_timeout = rd_timeout_init(timeout_ms);
|
|
544
593
|
|
|
545
594
|
if (can_q_contain_fetched_msgs)
|
|
546
|
-
rd_kafka_app_poll_start(rk, 0, timeout_ms);
|
|
595
|
+
rd_kafka_app_poll_start(rk, rkq, 0, timeout_ms);
|
|
547
596
|
|
|
548
597
|
/* Wait for op */
|
|
549
598
|
while (!(rko = TAILQ_FIRST(&rkq->rkq_q)) &&
|
|
550
599
|
!rd_kafka_q_check_yield(rkq) &&
|
|
551
|
-
cnd_timedwait_abs(&rkq->rkq_cond, &rkq->rkq_lock,
|
|
552
|
-
|
|
600
|
+
cnd_timedwait_abs(&rkq->rkq_cond, &rkq->rkq_lock, abs_timeout) ==
|
|
601
|
+
thrd_success)
|
|
553
602
|
;
|
|
554
603
|
|
|
555
604
|
rd_kafka_q_mark_served(rkq);
|
|
@@ -557,7 +606,7 @@ int rd_kafka_q_serve(rd_kafka_q_t *rkq,
|
|
|
557
606
|
if (!rko) {
|
|
558
607
|
mtx_unlock(&rkq->rkq_lock);
|
|
559
608
|
if (can_q_contain_fetched_msgs)
|
|
560
|
-
rd_kafka_app_polled(rk);
|
|
609
|
+
rd_kafka_app_polled(rk, rkq);
|
|
561
610
|
return 0;
|
|
562
611
|
}
|
|
563
612
|
|
|
@@ -593,13 +642,41 @@ int rd_kafka_q_serve(rd_kafka_q_t *rkq,
|
|
|
593
642
|
}
|
|
594
643
|
|
|
595
644
|
if (can_q_contain_fetched_msgs)
|
|
596
|
-
rd_kafka_app_polled(rk);
|
|
645
|
+
rd_kafka_app_polled(rk, rkq);
|
|
597
646
|
|
|
598
647
|
rd_kafka_q_destroy_owner(&localq);
|
|
599
648
|
|
|
600
649
|
return cnt;
|
|
601
650
|
}
|
|
602
651
|
|
|
652
|
+
int rd_kafka_q_serve(rd_kafka_q_t *rkq,
|
|
653
|
+
int timeout_ms,
|
|
654
|
+
int max_cnt,
|
|
655
|
+
rd_kafka_q_cb_type_t cb_type,
|
|
656
|
+
rd_kafka_q_serve_cb_t *callback,
|
|
657
|
+
void *opaque) {
|
|
658
|
+
return rd_kafka_q_serve0(rkq, timeout_ms, max_cnt, cb_type, callback,
|
|
659
|
+
opaque, rd_false);
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
/**
|
|
663
|
+
* @brief Same as `rd_kafka_q_serve`, use this call when the queue
|
|
664
|
+
* could be a fetch queue, use the other one when it
|
|
665
|
+
* can never be.
|
|
666
|
+
*/
|
|
667
|
+
int rd_kafka_q_serve_maybe_consume(rd_kafka_q_t *rkq,
|
|
668
|
+
int timeout_ms,
|
|
669
|
+
int max_cnt,
|
|
670
|
+
rd_kafka_q_cb_type_t cb_type,
|
|
671
|
+
rd_kafka_q_serve_cb_t *callback,
|
|
672
|
+
void *opaque) {
|
|
673
|
+
return rd_kafka_q_serve0(rkq, timeout_ms, max_cnt, cb_type, callback,
|
|
674
|
+
opaque,
|
|
675
|
+
/* Only check if to call app_polled when
|
|
676
|
+
* this is a consumer. */
|
|
677
|
+
rkq->rkq_rk->rk_type == RD_KAFKA_CONSUMER);
|
|
678
|
+
}
|
|
679
|
+
|
|
603
680
|
/**
|
|
604
681
|
* @brief Filter out and destroy outdated messages.
|
|
605
682
|
*
|
|
@@ -665,7 +742,7 @@ int rd_kafka_q_serve_rkmessages(rd_kafka_q_t *rkq,
|
|
|
665
742
|
rd_kafka_op_t *rko, *next;
|
|
666
743
|
rd_kafka_t *rk = rkq->rkq_rk;
|
|
667
744
|
rd_kafka_q_t *fwdq;
|
|
668
|
-
|
|
745
|
+
rd_ts_t abs_timeout;
|
|
669
746
|
int i;
|
|
670
747
|
|
|
671
748
|
mtx_lock(&rkq->rkq_lock);
|
|
@@ -681,9 +758,9 @@ int rd_kafka_q_serve_rkmessages(rd_kafka_q_t *rkq,
|
|
|
681
758
|
|
|
682
759
|
mtx_unlock(&rkq->rkq_lock);
|
|
683
760
|
|
|
684
|
-
|
|
761
|
+
abs_timeout = rd_timeout_init(timeout_ms);
|
|
685
762
|
|
|
686
|
-
rd_kafka_app_poll_start(rk, 0, timeout_ms);
|
|
763
|
+
rd_kafka_app_poll_start(rk, rkq, 0, timeout_ms);
|
|
687
764
|
|
|
688
765
|
rd_kafka_yield_thread = 0;
|
|
689
766
|
while (cnt < rkmessages_size) {
|
|
@@ -694,7 +771,7 @@ int rd_kafka_q_serve_rkmessages(rd_kafka_q_t *rkq,
|
|
|
694
771
|
while (!(rko = TAILQ_FIRST(&rkq->rkq_q)) &&
|
|
695
772
|
!rd_kafka_q_check_yield(rkq) &&
|
|
696
773
|
cnd_timedwait_abs(&rkq->rkq_cond, &rkq->rkq_lock,
|
|
697
|
-
|
|
774
|
+
abs_timeout) == thrd_success)
|
|
698
775
|
;
|
|
699
776
|
|
|
700
777
|
rd_kafka_q_mark_served(rkq);
|
|
@@ -787,7 +864,7 @@ int rd_kafka_q_serve_rkmessages(rd_kafka_q_t *rkq,
|
|
|
787
864
|
rd_kafka_op_destroy(rko);
|
|
788
865
|
}
|
|
789
866
|
|
|
790
|
-
rd_kafka_app_polled(rk);
|
|
867
|
+
rd_kafka_app_polled(rk, rkq);
|
|
791
868
|
|
|
792
869
|
return cnt;
|
|
793
870
|
}
|
|
@@ -91,6 +91,12 @@ struct rd_kafka_q_s {
|
|
|
91
91
|
* Shall return 1 if op was handled, else 0. */
|
|
92
92
|
rd_kafka_q_serve_cb_t *rkq_serve;
|
|
93
93
|
void *rkq_opaque;
|
|
94
|
+
rd_ts_t rkq_ts_last_poll_start; /**< Timestamp of last queue
|
|
95
|
+
* poll() call start
|
|
96
|
+
* Only relevant for a consumer. */
|
|
97
|
+
rd_ts_t rkq_ts_last_poll_end; /**< Timestamp of last queue
|
|
98
|
+
* poll() call end
|
|
99
|
+
* Only relevant for a consumer. */
|
|
94
100
|
|
|
95
101
|
#if ENABLE_DEVEL
|
|
96
102
|
char rkq_name[64]; /* Debugging: queue name (FUNC:LINE) */
|
|
@@ -841,6 +847,13 @@ rd_kafka_op_t *rd_kafka_q_pop_serve(rd_kafka_q_t *rkq,
|
|
|
841
847
|
rd_kafka_q_serve_cb_t *callback,
|
|
842
848
|
void *opaque);
|
|
843
849
|
rd_kafka_op_t *
|
|
850
|
+
rd_kafka_q_pop_serve_maybe_consume(rd_kafka_q_t *rkq,
|
|
851
|
+
rd_ts_t timeout_us,
|
|
852
|
+
int32_t version,
|
|
853
|
+
rd_kafka_q_cb_type_t cb_type,
|
|
854
|
+
rd_kafka_q_serve_cb_t *callback,
|
|
855
|
+
void *opaque);
|
|
856
|
+
rd_kafka_op_t *
|
|
844
857
|
rd_kafka_q_pop(rd_kafka_q_t *rkq, rd_ts_t timeout_us, int32_t version);
|
|
845
858
|
int rd_kafka_q_serve(rd_kafka_q_t *rkq,
|
|
846
859
|
int timeout_ms,
|
|
@@ -848,6 +861,12 @@ int rd_kafka_q_serve(rd_kafka_q_t *rkq,
|
|
|
848
861
|
rd_kafka_q_cb_type_t cb_type,
|
|
849
862
|
rd_kafka_q_serve_cb_t *callback,
|
|
850
863
|
void *opaque);
|
|
864
|
+
int rd_kafka_q_serve_maybe_consume(rd_kafka_q_t *rkq,
|
|
865
|
+
int timeout_ms,
|
|
866
|
+
int max_cnt,
|
|
867
|
+
rd_kafka_q_cb_type_t cb_type,
|
|
868
|
+
rd_kafka_q_serve_cb_t *callback,
|
|
869
|
+
void *opaque);
|
|
851
870
|
|
|
852
871
|
|
|
853
872
|
int rd_kafka_q_move_cnt(rd_kafka_q_t *dstq,
|
|
@@ -1424,7 +1424,7 @@ static int ut_testRackAwareAssignmentWithCoPartitioning0(
|
|
|
1424
1424
|
char *subscription12[] = {"t1", "t2"};
|
|
1425
1425
|
char *subscription34[] = {"t3", "t4"};
|
|
1426
1426
|
char **subscriptions[] = {subscription12, subscription12,
|
|
1427
|
-
|
|
1427
|
+
subscription34, subscription34};
|
|
1428
1428
|
int racks[] = {0, 1, 1, 0};
|
|
1429
1429
|
|
|
1430
1430
|
if (parametrization !=
|