FileSystemAssemblyStore refuses NodeType compile publication on ENOSPC — /data/assembly-cache out of space on memex-portal pod
Maintainers usually reply within 1 day
A pull request for this has already been merged.
- #6969 by @rbuergi — merged
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 42/100
- Issue type
- Bug
- Clarity
- Mostly clear
- Activity status
- Active
- Tech stack
- csharp, kubernetes, linux
- Domain
- infrastructure, observability-sre
Research direction
Start with src/MeshWeaver.Mesh.Contract/Persistence/AtomicFileWrite.cs, especially OpenTempForWrite, then inspect cache files and pod metrics. Run df and inode checks for /data/assembly-cache, and review /data/assembly-cache/Store_* retention. Done means the evidence distinguishes capacity exhaustion, inode exhaustion, stale cache accumulation, or shared-node pressure, with the affected assembly publication path verified.
Written by the indexing model from the issue text.
Description
Observed
MeshNodeCompilationService compiled three Store NodeTypes and FileSystemAssemblyStore refused publication, marking each compile FAILED and minting no Release, because writing the compiled bytes failed with System.IO.IOException: No space left on device while opening the temp PDB file under /data/assembly-cache. Affected NodeTypes: Store/CouponClaim@v73, Store/CouponClaimSlot@v22, Store/CouponJourneyHandler@v75 — all on pod memex-portal-deployment-567c764557-mpx9l.
The failing write path, read from the stack traces: FileSystemAssemblyStore.PutWithLocationCore → AtomicFileWrite.PublishBytesWith → AtomicFileWrite.WriteDurably → AtomicFileWrite.OpenTempForWrite, throwing at Interop.ThrowExceptionForIoErrno on FileStream construction — the ENOSPC surfaced at temp-file open, not at write or flush.
Where and when
Single pod (memex-cloud namespace), 3 occurrences inside a 4 ms window at 05:46:16Z on 2026-10-18 — three near-simultaneous NodeType compilations against a volume that was already out of space at that instant. No earlier or later occurrences exist in this fingerprint, and no prior disk-space incident is recorded in the incident queue. All three NodeTypes are Store/* coupon node types at high version numbers (v73/v22/v75), consistent with a recompile wave over the Store module; whether version churn contributed to cache growth is a candidate, not established.
Impact
The three named NodeType versions have no published assembly and no Release on that pod. The failure is loud (publication refused, compile marked FAILED), not silent. Scale so far: one pod, one instant, three node types.
Not established
- Whether the exhaustion is byte-based or inode-based — Linux ENOSPC covers both.
- Whether the condition persisted after the burst or cleared (e.g. by eviction or restart); no later samples exist.
- Whether other pods were affected; only this pod appears.
- Whether the full disk also failed other write paths on the pod (only this log site was fingerprinted).
- What the store serves in place of the refused versions and whether portal behaviour degrades beyond the missing Releases — not read.
Candidate causes and the reading that separates them
- Capacity exhaustion of the cache volume — predicts
dfon/data/assembly-cacheon that pod showing ~0 bytes available at 05:46Z. Reading: the pod's ephemeral-storage usage metrics or container-status events around that timestamp. - Inode exhaustion — same errno — predicts inode usage at 100% while bytes remain. Reading: inode-level usage on that filesystem.
- Accumulation of superseded versions in the cache (the version numbers in the temp paths imply a long per-node-type history) — predicts the
/data/assembly-cache/Store_*directories hold many retained versions and dominate usage. Reading: per-directory file counts and sizes in the cache, and whether the store prunes superseded versions at all. - External tenant on the node or a shared volume — predicts ENOSPC in other pods' logs at the same instant or node-level disk-pressure events. Reading: the node's ephemeral-storage pressure events for that window.
Where to look
Start from the frames read in the samples: MeshWeaver.Mesh.Persistence.AtomicFileWrite (OpenTempForWrite at line 167, WriteDurably at line 195, PublishBytesWith at line 135, in src/MeshWeaver.Mesh.Contract/Persistence/AtomicFileWrite.cs) and MeshWeaver.Compiler.FileSystemAssemblyStore.PutWithLocationCore. The MeshWeaver framework source was not found in this mesh — the paths above come verbatim from the stack traces.
Evidence
| Fingerprint | fc3f9e106575dad3 |
| Category | MeshWeaver.Graph.Configuration.MeshNodeCompilationService |
| Severity | Error |
| Exception | System.IO.IOException |
| Top frame | Interop.ThrowExceptionForIoErrno(ErrorInfo errorInfo, String path, Boolean isDirError) |
| Namespace | memex-cloud |
| Pods | memex-portal-deployment-567c764557-mpx9l |
| Occurrences | 3 |
| First seen | 2026-10-18 05:46:16Z |
| Last seen | 2026-10-18 05:46:16Z |
| Routing | not determined — no configured route matches the category MeshWeaver.Graph.Configuration.MeshNodeCompilationService. This repository is the configured fallback, not a finding about who owns the fault; the category names the LOGGER, which may not be the subject. |
Recent log lines
2026-10-18 05:46:16Z memex-portal-deployment-567c764557-mpx9l fail: MeshWeaver.Graph.Configuration.MeshNodeCompilationService[0]
AssemblyStore REFUSED the publication for Store/CouponClaim@v73: the compiled bytes did not land, so the compile is FAILED and no Release is minted
System.IO.IOException: No space left on device : '/data/assembly-cache/Store_CouponClaim/.tmp-cf7861814dcc453dbc903146bc8a6592-v73-c003e001-e505ce7a0274.pdb.tmp'
at Interop.ThrowExceptionForIoErrno(ErrorInfo errorInfo, String path, Boolean isDirError)
at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, UnixFileMode openPermissions, Int64& fileLength, UnixFileMode& filePermissions, Boolean failForSymlink, Boolean& wasSymlink, Func`4 createOpenException)
at System.IO.Strategies.OSFileStreamStrategy..ctor(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable`1 unixCreateMode)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize)
at MeshWeaver.Mesh.Persistence.AtomicFileWrite.OpenTempForWrite(String tempPath) in /home/runner/work/MeshWeaver/MeshWeaver/src/MeshWeaver.Mesh.Contract/Persistence/AtomicFileWrite.cs:line 167
at MeshWeaver.Mesh.Persistence.AtomicFileWrite.WriteDurably(String tempPath, Byte[] bytes, Func`2 openTemp) in /home/runner/work/MeshWeaver/MeshWeaver/src/MeshWeaver.Mesh.Contract/Persistence/AtomicFileWrite.cs:line 195
at MeshWeaver.Mesh.Persistence.AtomicFileWrite.PublishBytesWith(String filePath, Byte[] bytes, Func`2 openTemp) in /home/runner/work/MeshWeaver/MeshWeaver/src/MeshWeaver.Mesh.Contract/Persistence/AtomicFileWrite.cs:line 135
at MeshWeaver.Compiler.FileSystemAssemblyStore.PutWithLocationCore(String nodeTypePath, Int64 version, Byte[] assemblyBytes, Byte[] pdbBytes) in /home/runner/work/MeshWeaver/MeshWeaver/src/MeshW…[truncated]
2026-10-18 05:46:16Z memex-portal-deployment-567c764557-mpx9l fail: MeshWeaver.Graph.Configuration.MeshNodeCompilationService[0]
AssemblyStore REFUSED the publication for Store/CouponClaimSlot@v22: the compiled bytes did not land, so the compile is FAILED and no Release is minted
System.IO.IOException: No space left on device : '/data/assembly-cache/Store_CouponClaimSlot/.tmp-0666d1d2c0d9459cbce069b71be1133d-v22-c003e001-7fef08509a2b.pdb.tmp'
at Interop.ThrowExceptionForIoErrno(ErrorInfo errorInfo, String path, Boolean isDirError)
at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, UnixFileMode openPermissions, Int64& fileLength, UnixFileMode& filePermissions, Boolean failForSymlink, Boolean& wasSymlink, Func`4 createOpenException)
at System.IO.Strategies.OSFileStreamStrategy..ctor(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable`1 unixCreateMode)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize)
at MeshWeaver.Mesh.Persistence.AtomicFileWrite.OpenTempForWrite(String tempPath) in /home/runner/work/MeshWeaver/MeshWeaver/src/MeshWeaver.Mesh.Contract/Persistence/AtomicFileWrite.cs:line 167
at MeshWeaver.Mesh.Persistence.AtomicFileWrite.WriteDurably(String tempPath, Byte[] bytes, Func`2 openTemp) in /home/runner/work/MeshWeaver/MeshWeaver/src/MeshWeaver.Mesh.Contract/Persistence/AtomicFileWrite.cs:line 195
at MeshWeaver.Mesh.Persistence.AtomicFileWrite.PublishBytesWith(String filePath, Byte[] bytes, Func`2 openTemp) in /home/runner/work/MeshWeaver/MeshWeaver/src/MeshWeaver.Mesh.Contract/Persistence/AtomicFileWrite.cs:line 135
at MeshWeaver.Compiler.FileSystemAssemblyStore.PutWithLocationCore(String nodeTypePath, Int64 version, Byte[] assemblyBytes, Byte[] pdbBytes) in /home/runner/work/MeshWeaver/MeshWeaver/s…[truncated]
2026-10-18 05:46:16Z memex-portal-deployment-567c764557-mpx9l fail: MeshWeaver.Graph.Configuration.MeshNodeCompilationService[0]
AssemblyStore REFUSED the publication for Store/CouponJourneyHandler@v75: the compiled bytes did not land, so the compile is FAILED and no Release is minted
System.IO.IOException: No space left on device : '/data/assembly-cache/Store_CouponJourneyHandler/.tmp-151ee760e81a46138de89a0069bfbc69-v75-c003e001-f838e43ca260.pdb.tmp'
at Interop.ThrowExceptionForIoErrno(ErrorInfo errorInfo, String path, Boolean isDirError)
at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, UnixFileMode openPermissions, Int64& fileLength, UnixFileMode& filePermissions, Boolean failForSymlink, Boolean& wasSymlink, Func`4 createOpenException)
at System.IO.Strategies.OSFileStreamStrategy..ctor(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable`1 unixCreateMode)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize)
at MeshWeaver.Mesh.Persistence.AtomicFileWrite.OpenTempForWrite(String tempPath) in /home/runner/work/MeshWeaver/MeshWeaver/src/MeshWeaver.Mesh.Contract/Persistence/AtomicFileWrite.cs:line 167
at MeshWeaver.Mesh.Persistence.AtomicFileWrite.WriteDurably(String tempPath, Byte[] bytes, Func`2 openTemp) in /home/runner/work/MeshWeaver/MeshWeaver/src/MeshWeaver.Mesh.Contract/Persistence/AtomicFileWrite.cs:line 195
at MeshWeaver.Mesh.Persistence.AtomicFileWrite.PublishBytesWith(String filePath, Byte[] bytes, Func`2 openTemp) in /home/runner/work/MeshWeaver/MeshWeaver/src/MeshWeaver.Mesh.Contract/Persistence/AtomicFileWrite.cs:line 135
at MeshWeaver.Compiler.FileSystemAssemblyStore.PutWithLocationCore(String nodeTypePath, Int64 version, Byte[] assemblyBytes, Byte[] pdbBytes) in /home/runner/work/MeshWeaver/Me…[truncated]
Opened automatically from Admin/_LogIncident/fc3f9e106575dad3. Recurrences are folded into this issue rather than opening new ones.
It also stands for the whole log site 806a78e8b3b2a17b: other fingerprints of this site fold in here as comments rather than opening tickets of their own.
- Dominant language
- C#
- Stars
- 12
- Forks
- 5
- Avg merge
- 5h 55m
- Merged PRs (30d)
- 968
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- No contributing guide
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.
More from Systemorph/MeshWeaver
-
bug sev:M
Difficulty 4/5 3-5 days Newbie friendliness 35/100
Systemorph/MeshWeaver#6980 ·
Maintainers usually reply within 1 day
-
bug sev:M
Difficulty 4/5 3-5 days Newbie friendliness 38/100
Systemorph/MeshWeaver#6977 · 2 comments ·
Maintainers usually reply within 1 day
-
bug sev:M
Difficulty 4/5 3-5 days Newbie friendliness 48/100
Systemorph/MeshWeaver#6975 ·
Maintainers usually reply within 1 day
-
Feedback hand-over cannot relocate re-typed legacy submissions: the Inbox move's copy leg refuses their legacy content $typePossibly taken @rbuergi claimed this 1 day ago. Openbug sev:M
Difficulty 4/5 3-5 days Newbie friendliness 42/100
Systemorph/MeshWeaver#6951 · 9 comments ·
Maintainers usually reply within 1 day
-
bug sev:L
Difficulty 4/5 3-5 days Newbie friendliness 28/100
Systemorph/MeshWeaver#6930 · 5 comments ·
Maintainers usually reply within 1 day
All issues in Systemorph/MeshWeaver
Similar issues
-
bug priority: P2
Difficulty 1/5 1-3 hours Newbie friendliness 84/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 77/100
Maintainers usually reply within 1 day
-
[Docs] README/PRIVACY still name AppCenter although v1.5.6.0+ uses the Microsoft Store Services SDKOpen
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
-
needs-triage
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Azure/azure-sdk-tools#17317 ·
Maintainers usually reply within 1 day
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 66/100
swisstopo/swissgeol-boreholes-suite#3086 ·
Maintainers usually reply within 1 day