Describe the bug
In an attempt to unburden our servers, we disabled per-path keep-alive on the server-side only (default_path_keep_alive_interval unset there), so keep-alive is performed by clients only and the server just has to answer.
With this particular setting, we observed a behavior we did not expect: every path opened as PathStatus::Backup gets abandoned as PathAbandonReason::TimedOut once per idle-timeout span, even though its per-path keep-alive pings leave every 5 s, arrive, and are acknowledged, well inside the 15 s per-path idle timeout configured on it.
I'm not that deep inside QUIC multipath internals (for now), so I don't know how ACKs should be processed. But what I observed along the way: while the keep-alives leave on the backup path, the acks arrive on path 0 and appear to be counted as a sign of life of path 0.
This may share a root cause with #799 (all PATH_ACKs ride the path that transmits first). The symptom here is a different one, and as far as I can tell from #801 the proposed fix would not reach a backup path, since a backup path may not send data frames while an available path exists.
Relevant Logs
(I will try to provide a MRE soon)
Expected behavior
Clients perform the keep-alive while the server may stay passive, and healthy paths are not falsely abandoned.
noq
Version: 1.3.0 @ c1f411562
noq v1.3.0 (/Users/bornholdt/Developer/noq/noq)
├── noq feature "bloom"
│ └── noq feature "default" (command-line)
├── noq feature "default" (command-line)
├── noq feature "platform-verifier"
│ └── noq feature "default" (command-line)
├── noq feature "ring"
│ └── noq feature "default" (command-line)
├── noq feature "runtime-tokio"
│ └── noq feature "default" (command-line)
├── noq feature "rustls"
│ └── noq feature "default" (command-line)
└── noq feature "tracing-log"
└── noq feature "default" (command-line)
Platform(s)
Desktop:
lolwut
Describe the bug
In an attempt to unburden our servers, we disabled per-path keep-alive on the server-side only (
default_path_keep_alive_intervalunset there), so keep-alive is performed by clients only and the server just has to answer.With this particular setting, we observed a behavior we did not expect: every path opened as
PathStatus::Backupgets abandoned asPathAbandonReason::TimedOutonce per idle-timeout span, even though its per-path keep-alive pings leave every 5 s, arrive, and are acknowledged, well inside the 15 s per-path idle timeout configured on it.I'm not that deep inside QUIC multipath internals (for now), so I don't know how ACKs should be processed. But what I observed along the way: while the keep-alives leave on the backup path, the acks arrive on path 0 and appear to be counted as a sign of life of path 0.
This may share a root cause with #799 (all PATH_ACKs ride the path that transmits first). The symptom here is a different one, and as far as I can tell from #801 the proposed fix would not reach a backup path, since a backup path may not send data frames while an available path exists.
Relevant Logs
(I will try to provide a MRE soon)
Expected behavior
Clients perform the keep-alive while the server may stay passive, and healthy paths are not falsely abandoned.
noq
Version: 1.3.0 @
c1f411562Platform(s)
Desktop:
lolwut
the issue being reported and wrote this as concisely and clearly
as they could. Taking full responsibility for the issue being
accurate.