transport: decode drained uniform bodies before dropping them #317
No reviewers
Labels
No labels
priority/P0
priority/P1
priority/P2
release/v0.1.0
status/blocked
status/planned
type/bug
type/design
type/test-gap
type/tracker
No milestone
No project
No assignees
1 participant
Due date
No due date set.
Dependencies
No dependencies set
Reference
natsukium/felis!317
Loading…
Reference in a new issue
No description provided.
Delete branch "drain-validation"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The uniform uncorrelated families (
Grid,Image,Push) skipped the body decode on the drain path, so a malformedbody ended the connection or not depending on which role received it. The drain path now runs a validation-only decode
before discarding the delivery, so an undecodable body, an oneof arm this build does not know, or a receive-side limit
breach is corruption on every role, exactly as it is on the consuming path.
The fold of the arm table into the kind columns is kept: it is exact where every arm declares the same row, so only the
decode comes back, and the consuming hot path is untouched.
The boundary is stated rather than implied.
felis-transportdepends onfelis-protocolalone, sopacked_cellscontents, coordinates against a shadow's dimensions, and image transfer sequencing stay with the consuming shadow. Both
docs/reference/ipc.md"Corruption" and the uniform-family decision indocs/explanation/architecture/ipc.mdname thetwo tiers.
Tests (
crates/felis-transport/src/driver/tests.rs): a body that is not protobuf, an arm outside the schema, and anover-cap
ImageMsg::Headerare each corruption on the drain path; aRowDeltacarrying garbagepacked_cellsisadmitted there, which pins the boundary rather than leaving it implied.
Gates:
cargo nextest run --workspace --all-features(3336 passed),cargo clippy --workspace --all-targets(clean),just prose-check,just docs-links.Closes #305