oxidecomputer / oxidecomputer/propolis
Migration ought to consider block backends more generally
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 270
- Forks
- 42
- Avg merge
- 4d 5h
- Merged PRs (30d)
- 6
Description
this is an "I read the code and see no way it works"-tier issue. reproduction is probably(?) straightforward but I tripped over https://github.com/oxidecomputer/propolis/issues/981 along the way.
in propolis-server we add a devices entry for Blob backends. the comment there is sound: we should migrate writes to the blob otherwise they'll get lost in migration. but if there is block-local state for other backends (say, a collection of coalesced-but-not-yet-delivered I/Os) we need to remember to plumb up that block backend too or lose the I/Os in migration.
propolis-standalone has a worse time of it: we look at devs, but not block, so I'm pretty sure we'll lose mem-async backend contents across migration (this is what I wanted to prove to myself before tripping over #981)
I've been kind of sort of working on an I/O coalescing patch that would bring these problems and more to file backends, and I would absolutely have forgotten to plumb up the block-side state migration at first :(
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reading the Blob device setup in bin/propolis-server/src/lib/initializer.rs and the device handling in bin/propolis-standalone/src/snapshot.rs. Reproduce migration with a block backend such as mem-async, then trace how block-local state is selected for migration. Done means block backends are handled generally so their pending contents or I/O state is not lost.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- backend
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100