[r3.4] etl: munmap temp files in Dispose to prevent disk space leak#20440
Merged
AskAlexSharov merged 5 commits intorelease/3.4from Apr 10, 2026
Merged
[r3.4] etl: munmap temp files in Dispose to prevent disk space leak#20440AskAlexSharov merged 5 commits intorelease/3.4from
AskAlexSharov merged 5 commits intorelease/3.4from
Conversation
Member
Author
|
testing on chiado rn |
AskAlexSharov
approved these changes
Apr 10, 2026
AskAlexSharov
added a commit
that referenced
this pull request
Apr 12, 2026
…20440) ETL's zero-copy mmap optimization (March 2026) skipped `munmap` in `Dispose()`, keeping disk blocks allocated for deleted temp files until process exit. On long-running `stage_exec`, 111k+ deleted-but-mmap'd sortable-buf files accumulated **2.8TB** of phantom disk space (`df` vs `du` gap), causing ENOSPC. - Add `mmap.Munmap()` in `Dispose()` before file close/delete - Remove `defer c.Close()` from `Load()` — callers already have `defer collector.Close()` (enforced by `closeCollector` ruleguard rule in `rules.go`) -- it can help avoid using `bytes.Clone` when some bytes are used temporarily after Load. - e.g: Move `wal.Close()` after `buildFileRange` in domain collation so zero-copy mmap slices stay valid during kvs sort/write — no `bytes.Clone` needed - analyzed the callsites and we should not have any munmapped bytes accessed; but if we do, it'll fail fast and report it. ## Test plan - [x] `go test -short ./db/etl/` — all pass including `TestSortable` and `TestReuseCollectorAfterLoad` - [x] `make lint` — 0 issues - [x] `make erigon integration` — builds clean - [x] Deploy and verify `grep -c 'sortable-buf.*deleted' /proc/<pid>/maps` stays near 0; no premature "out of disk" errors; no sigfaults due to munmap bytes access --------- Co-authored-by: Alex Sharov <AskAlexSharov@gmail.com>
github-merge-queue Bot
pushed a commit
that referenced
this pull request
Apr 13, 2026
Cherry-pick from `release/3.4` to `main`: - #19677 agg: workers presets. ressplit workers - #19919 Revert "flush: use etl.IdentityLoadFunc instead custom. part2" - #19780 etl: zero-copy memDataProvider - #19941 d_lru: disable for commitment - #19942 TemporalMemBatch: re-use vals-slice when can - #19996 etl: pool of bufwriter - #19995 collate: replace bitmap by array - #20002 skill creator review results - #20033 seg: revert global limiter - #20046 Caplin: prevent calling `glob` per file in `BuildMissingIndices` - #20113 seg: more usage of bufio - #20194 execution/state: revert CodeSizePath in codeChange journal entry - #20431 remove `flush complete` log line - #20440 etl: munmap temp files in Dispose to prevent disk space leak 93 commits skipped due to conflicts (branches diverged significantly). --------- Co-authored-by: lystopad <oleksandr.lystopad@erigon.tech> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: moskud <sudeepdino008@gmail.com> Co-authored-by: info@weblogix.biz <admin@10gbps.weblogix.it>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
ETL's zero-copy mmap optimization (March 2026) skipped
munmapinDispose(), keeping disk blocks allocated for deleted temp files until process exit. On long-runningstage_exec, 111k+ deleted-but-mmap'd sortable-buf files accumulated 2.8TB of phantom disk space (dfvsdugap), causing ENOSPC.mmap.Munmap()inDispose()before file close/deletedefer c.Close()fromLoad()— callers already havedefer collector.Close()(enforced bycloseCollectorruleguard rule inrules.go) -- it can help avoid usingbytes.Clonewhen some bytes are used temporarily after Load.wal.Close()afterbuildFileRangein domain collation so zero-copy mmap slices stay valid during kvs sort/write — nobytes.CloneneededTest plan
go test -short ./db/etl/— all pass includingTestSortableandTestReuseCollectorAfterLoadmake lint— 0 issuesmake erigon integration— builds cleangrep -c 'sortable-buf.*deleted' /proc/<pid>/mapsstays near 0; no premature "out of disk" errors; no sigfaults due to munmap bytes access