microsoft / microsoft/openvmm

Make lifecycle and quiesce operations transactional and fallible

Open
#4,436 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Rust
Stars
1.9k
Forks
238
Avg merge
1d 15h
Merged PRs (30d)
100

Description

Tracking issue: MicroVM support and private snapshot restore.

Motivation

Snapshot capture requires processors and devices to reach a consistent boundary.
An operation can fail after some participants have stopped or saved state, so the
lifecycle must represent errors and partial progress explicitly. Callers need a
bounded outcome and a known VM state rather than an indefinite wait or a partially
quiesced machine presented as healthy.

Proposed Scope

  • Make the relevant state-unit lifecycle operations fallible and update all
    callers to handle the resulting errors.
  • Define transaction phases, participant ordering, and the state retained for
    recovery or cleanup.
  • Bound quiesce work and waiting, with an explicit result when a participant cannot
    reach the requested boundary.
  • Define unwind behavior for failures during stop, save, restore, or resume,
    including failures while unwinding.
  • Tear down temporary I/O-boundary preparation and transaction resources on failed
    or cancelled operations; do not leave callbacks or guards active for a retry.
  • Preserve the normal lifecycle of machines that do not use snapshots.

Acceptance Criteria

  • Failure injection at each transaction phase produces a contextual error and
    a documented final VM state.
  • A participant that cannot quiesce produces a bounded failure, not an
    unbounded wait or an assertion on external input.
  • Successfully prepared participants are unwound or retained in an explicitly
    safe stopped state when another participant fails.
  • Failed and cancelled operations release temporary preparation, and a retry
    does not observe stale hooks or duplicate cleanup.
  • All lifecycle callers compile and handle errors without silently discarding
    them; existing start/stop behavior remains covered.
  • The transaction and failure-state contracts are documented for device
    implementers.

Dependencies

Non-Goals

This issue does not define the persistent snapshot format or implement network
and filesystem reconstruction. Device-specific quiesce work builds on this shared
lifecycle contract.

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 with the linked 00-microvm.md tracking document and map the state-unit lifecycle operations and their callers described in the scope. Trace stop, save, restore, resume, quiesce, and cleanup paths before defining transaction phases and failure states. Done means bounded failures, documented recovery states, clean cancellation and retry behavior, handled caller errors, and lifecycle coverage for non-snapshot machines.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
operating-systems
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.