-
Notifications
You must be signed in to change notification settings - Fork 123
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: Support QNS connectionmigration
test
#2180
base: main
Are you sure you want to change the base?
Conversation
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## main #2180 +/- ##
=======================================
Coverage 95.39% 95.39%
=======================================
Files 112 112
Lines 36373 36373
=======================================
Hits 34697 34697
Misses 1676 1676 ☔ View full report in Codecov by Sentry. |
Failed Interop TestsQUIC Interop Runner, client vs. server neqo-latest as client
neqo-latest as server
All resultsSucceeded Interop TestsQUIC Interop Runner, client vs. server neqo-latest as client
neqo-latest as server
Unsupported Interop TestsQUIC Interop Runner, client vs. server neqo-latest as client
neqo-latest as server
|
Benchmark resultsPerformance differences relative to 9b5ec71. coalesce_acked_from_zero 1+1 entries: Change within noise threshold.time: [98.667 ns 98.975 ns 99.285 ns] change: [-1.1530% -0.6526% -0.1307%] (p = 0.01 < 0.05) coalesce_acked_from_zero 3+1 entries: Change within noise threshold.time: [116.55 ns 116.92 ns 117.37 ns] change: [-1.6300% -1.1367% -0.6766%] (p = 0.00 < 0.05) coalesce_acked_from_zero 10+1 entries: Change within noise threshold.time: [116.20 ns 116.69 ns 117.26 ns] change: [-1.0334% -0.5508% -0.0494%] (p = 0.03 < 0.05) coalesce_acked_from_zero 1000+1 entries: Change within noise threshold.time: [97.222 ns 97.354 ns 97.497 ns] change: [-2.3957% -1.3394% -0.3219%] (p = 0.01 < 0.05) RxStreamOrderer::inbound_frame(): Change within noise threshold.time: [111.39 ms 111.43 ms 111.47 ms] change: [-0.4888% -0.4225% -0.3545%] (p = 0.00 < 0.05) transfer/pacing-false/varying-seeds: No change in performance detected.time: [25.874 ms 26.972 ms 28.071 ms] change: [-6.5127% -1.3162% +4.4105%] (p = 0.64 > 0.05) transfer/pacing-true/varying-seeds: Change within noise threshold.time: [32.755 ms 34.434 ms 36.118 ms] change: [-13.050% -7.4690% -1.2882%] (p = 0.02 < 0.05) transfer/pacing-false/same-seed: No change in performance detected.time: [24.894 ms 25.643 ms 26.387 ms] change: [-4.3845% -0.4154% +3.6399%] (p = 0.85 > 0.05) transfer/pacing-true/same-seed: No change in performance detected.time: [39.974 ms 41.897 ms 43.877 ms] change: [-6.8805% -0.7726% +5.4228%] (p = 0.81 > 0.05) 1-conn/1-100mb-resp (aka. Download)/client: No change in performance detected.time: [114.09 ms 114.53 ms 114.92 ms] thrpt: [870.17 MiB/s 873.16 MiB/s 876.46 MiB/s] change: time: [-16.607% -5.8393% +0.8998%] (p = 0.59 > 0.05) thrpt: [-0.8918% +6.2014% +19.914%] 1-conn/10_000-parallel-1b-resp (aka. RPS)/client: Change within noise threshold.time: [316.07 ms 319.71 ms 323.31 ms] thrpt: [30.931 Kelem/s 31.278 Kelem/s 31.638 Kelem/s] change: time: [+0.7672% +2.3644% +3.9885%] (p = 0.00 < 0.05) thrpt: [-3.8355% -2.3098% -0.7614%] 1-conn/1-1b-resp (aka. HPS)/client: No change in performance detected.time: [34.050 ms 34.277 ms 34.537 ms] thrpt: [28.954 elem/s 29.174 elem/s 29.369 elem/s] change: time: [-0.3590% +0.6545% +1.6837%] (p = 0.21 > 0.05) thrpt: [-1.6558% -0.6503% +0.3603%] Client/server transfer resultsTransfer of 33554432 bytes over loopback.
|
@@ -493,6 +493,14 @@ fn qlog_new(args: &Args, hostname: &str, cid: &ConnectionId) -> Res<NeqoQlog> { | |||
.map_err(Error::QlogError) | |||
} | |||
|
|||
const fn unspecified_addr(addr: &SocketAddr) -> SocketAddr { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It seems like you could include the port number in the signature.
I'm also unsure about the name. This might be local_addr_for(remote_addr, local_port)
. The usage below can use local_port: 0
.
@@ -554,6 +557,18 @@ pub async fn client(mut args: Args) -> Res<()> { | |||
remote_addr, | |||
); | |||
|
|||
let migration = if args.shared.qns_test == Some("connectionmigration".to_owned()) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why is this not possible?
let migration = if args.shared.qns_test == Some("connectionmigration".to_owned()) { | |
let migration = if args.shared.qns_test == Some("connectionmigration") { |
I know that qns_test
is a String
, but you should be able to PartialEq
it with &'static str
perfectly well.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
error[E0308]: mismatched types
--> neqo-bin/src/client/mod.rs:560:57
|
560 | let migration = if args.shared.qns_test == Some("connectionmigration") {
| ---- ^^^^^^^^^^^^^^^^^^^^^- help: try using a conversion method: `.to_string()`
| | |
| | expected `String`, found `&str`
| arguments to this enum variant are incorrect
|
help: the type constructed contains `&'static str` due to the type of the argument passed
--> neqo-bin/src/client/mod.rs:560:52
|
560 | let migration = if args.shared.qns_test == Some("connectionmigration") {
| ^^^^^---------------------^
| |
| this argument influences the type of `Some`
note: tuple variant defined here
--> /Users/lars/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/option.rs:579:5
|
579 | Some(#[stable(feature = "rust1", since = "1.0.0")] T),
| ^^^^
// Don't do another migration. | ||
self.migration = None; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
So you are only doing this change if the migration works. What errors are you trying to ignore? Would this be easier if the migration attempt only occurred for State::Confirmed
?
I was going to suggest that you do self.migration.take()
above instead, before I realized that migration could be attempted multiple times.
} | ||
} | ||
|
||
#[allow(clippy::too_many_lines)] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is usually a good sign that some work is needed. Offhand, I see a nice candidate on line 517 (to 532).
No description provided.