oxidecomputer / oxidecomputer/propolis

Migration ought to consider block backends more generally

Open
#982 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

migration
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

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.