add broker QUIC flow-control flags and stats, apply client stream limit - #178
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds the broker QUIC flags that the experiment scripts merged in #176 pass (
04_transport_limits_v5.sh,04b_stream_limit_sweep.sh,03c_offload_ablation.sh,03d_offload_lowload.sh). None of them existed on main, so those scripts failed against a broker built from the repo.Changes
QuicConfig/QuicAcceptorConfig:max_concurrent_streams,stream_receive_window,disable_segmentation_offload, with CLI flags--quic-max-streams,--quic-stream-window,--quic-disable-offload.QuicConfig::with_max_concurrent_streams(andMqttClient::set_quic_max_streams, bridgequic_max_streams) was stored but never applied to the QUIC transport.MQTT5_QUIC_STATS_DIRset, the broker writes one CSV per QUIC connection (row every 100 ms, final row at close).04_transport_limits_v5.shsetsCOLLECT_QUIC_STATS=1and collects these files; the sampler was only on the unmergedbroker-quic-statsbranch. The columns match whatanalysis/transport_limits.pyreads, includingstreams_blocked_uni(always 0 with quinn 0.11 clients)../mqtt_storagein parallel, which since 0.42.0 means onesessions.log; that caused the intermittent ServerUnavailable and address-in-use failures inbroker_quic_integration(3 of 8 local runs on main, 0 of 10 after). The underlying problem is broker should lock its storage directory so two brokers cannot share sessions.log #179.specs/tla/qos1-backlog/); the design it models is already on main.quic_multistream_integration.rsreturned early and passed whenever a client failed to connect; they now fail.expect/unwrap,must_use_candidateallows and comments from the QUIC config code.Tests
quic_transport_limits.rschecks that each setting takes effect:frame_tx.stream_data_blocked > 0); 0 with the default window.Removing any of the five places that apply these settings (the broker wiring and acceptor for each broker setting, and the client transport) makes a test fail. The offload flag has a delivery-only test.
quic_stats_sampling.rschecks the CSV header, one file per connection, and that the client's STREAM_DATA_BLOCKED frames are counted; removing the sampler or reading the wrong counter fails it.quinn 0.11 never sends STREAMS_BLOCKED, so
frame_tx.streams_blocked_uniis always 0; the stream-limit tests assert the number of streams that could be opened instead.cargo make ci-verify: 2590 passed, 0 failed. Clippy pedantic clean. A CLI broker started with all three flags delivered 20/20 per-publish QUIC messages.