Skip to content

fix(images): disable DoSvc so sparse DO*.tmp files can't break layer commits - #192

Merged
luthermonson merged 1 commit into
mainfrom
fix/msvc-image-dosvc
Sep 1, 2026
Merged

luthermonson merged 1 commit into
mainfrom
fix/msvc-image-dosvc

Conversation

@luthermonson

Copy link
Copy Markdown
Contributor

Third MSVC-image build failure, third distinct cause — and this one is below the Dockerfile's own steps. With #191's quoting fix in, the failure moved to the snapshot commit of the verification step (a read-only RUN):

failed to commit ... during finalize: failed to reimport snapshot:
Files/Windows/Temp/DO32B1.tmp: unknown stream ID 9

DO*.tmp in Windows\Temp is the Delivery Optimization service (DoSvc), which runs inside Server Core containers and writes sparse temp files on its own schedule. The Windows layer archiver (go-winio backuptar) can't serialize sparse backup streams — stream ID 9 is BACKUP_SPARSE_BLOCK — so whichever RUN happens to be live when DoSvc writes loses its layer commit. Nondeterministic by nature: earlier runs committed the same steps fine.

Fix: a first RUN (right after SHELL) that stops DoSvc, sets it Disabled, and sweeps any DO*.tmp already present. Service start-type is registry state, so the single early layer protects every later step. -ErrorAction SilentlyContinue on the service ops so a future base without DoSvc doesn't fail the build — absence is success.

Cost: the new leading layer invalidates the cached VS Build Tools install, so the next build re-downloads it once (~25 min). Unavoidable, and that cache would eventually have been poisoned by the same bug anyway.

Failure ledger for this image, for the record:

  1. run 1 — checkout killed by the fleet's wedged-teardown incident (fixed operationally + fix(scheduler): bound runner teardown and retry failed env creates #190)
  2. run 2 — PowerShell quote-stripping in the rustup step (fix(images): no double quotes in the MSVC image's rustup step #191, merged)
  3. run 3 — this: DoSvc sparse files breaking layer commit

VS Build Tools install + all six layout probes have passed on real hardware, so once this lands the image should finally publish.

…commits

Third MSVC-image build failure, third distinct cause — this one below the
Dockerfile's own steps: the verification RUN (read-only!) failed at
snapshot COMMIT with

  failed to reimport snapshot: Files/Windows/Temp/DO32B1.tmp:
  unknown stream ID 9

Delivery Optimization runs inside Server Core containers and writes
sparse temp files on its own schedule; the Windows layer archiver cannot
serialize sparse backup streams (stream 9 = BACKUP_SPARSE_BLOCK), so
whichever RUN is live when DoSvc writes loses its layer commit,
nondeterministically. Disable the service in a first layer (registry
state protects every later step) and sweep any DO*.tmp already present.

Costs a VS-install cache rebuild (the new layer invalidates it) — one-time
~25 min.
@luthermonson
luthermonson merged commit dd3e722 into main Sep 1, 2026
4 checks passed
@luthermonson
luthermonson deleted the fix/msvc-image-dosvc branch September 1, 2026 23:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant