Skip to content

MST/2 compose acceptance: finish the offline-reopen check and wire the job into CI #60

Description

@Ivanbeethoven

Context

A compose-based MST/2 acceptance stack exists in this repository:

docker-compose.mst2-e2e.yml      # layered on the repo's own docker-compose.yml
tests/mst2-e2e/Dockerfile        # bakes the mst2_mount / mst2_sync examples
tests/mst2-e2e/acceptance.sh     # the checks
tests/mst2-e2e/run.sh            # one-command runner
tests/mst2-e2e/README.md

It builds mega2 from the sibling checkout with the MST/2 surface enabled, seeds a
repository with the shapes that stress the reader, and then checks:

  1. capabilities gate,
  2. seeding (small file, empty file, executable, symlink, 2 MiB + 7 B file,
    129-entry directory),
  3. sync + hydrate with the client's own manifest compared against a full walk,
  4. mount vs git truth — every served byte against a plain git clone of the
    same commit, plus the executable bit and symlink target,
  5. SYS-01 — after main advances the mounted view is unchanged and the new file
    is absent,
  6. offline reopen with no server contact,
  7. incremental reuse meters for the next version.

Checks 1–5 and 7 pass today. Check 6 (offline reopen inside the compose job) is
the open piece, and the job is not wired into CI.

Scope

  1. Finish the offline reopen check. The store's content lives in a
    scope-level cache (DurableStore::open_with_content, shared by every view of
    the scope), so a reopen has to open the same content directory rather than a
    view-local one. examples/mst2_mount.rs now does that, but it needs to be
    exercised by the acceptance run: mount, unmount, remount with M2_STORE_DIR,
    and assert the byte listing is identical. The step must print the reopen log
    when it fails so a failure names its cause instead of showing an empty mount.
  2. Make the run CI-able. The job needs /dev/fuse and a privileged
    container; where that is unavailable the runner should skip with a clear
    message instead of failing, and CI should run it wherever the device exists.
    Document which environments can run it (tests/mst2-e2e/README.md says it
    today; CI needs the same statement).
  3. Keep the stack in step with upstream. The base docker-compose.yml and
    mega2-compose.yml in the sibling repo are the source of truth for the
    backend wiring; the override must not fork it beyond enabling MST/2 and
    adding the acceptance job.
  4. Optional but useful: fail the run when the incremental meters regress
    (a second version of an unchanged view must not refetch everything), so the
    acceptance also guards the reuse claim.

Acceptance

  • tests/mst2-e2e/run.sh exits 0 with all checks passing, including the offline
    reopen.
  • The run is idempotent: a second consecutive run from a clean state passes.
  • A run with a deliberately broken check fails with a message naming the check
    (no silent pass, no head-truncated output hiding a FAIL).
  • CI references the job (or a documented command) and the README states the FUSE
    prerequisite.

References

  • tests/mst2-e2e/*, docker-compose.mst2-e2e.yml, deploy/README.md
    (FUSE prerequisite), sibling mega2-compose.yml

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions