diff options
author | Ludovic Courtès <ludo@gnu.org> | 2021-08-10 12:24:44 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2021-08-10 17:32:18 +0200 |
commit | fa81971cbae85b39183ccf8f51e8d96ac88fb4ac (patch) | |
tree | ae4f77bc02d3266b411854c2bcd4f1c2e5cc9f4c /gnu/installer.scm | |
parent | b0a6b1f13ce17ec37600f5e8404e0c8c43302fe5 (diff) | |
download | guix-fa81971cbae85b39183ccf8f51e8d96ac88fb4ac.tar.gz guix-fa81971cbae85b39183ccf8f51e8d96ac88fb4ac.zip |
store: Add 'map/accumulate-builds' cutoff to address pathological cases.
Fixes <https://bugs.gnu.org/49439>.
Reported by Ricardo Wurmus <rekado@elephly.net>.
Previously, a command such as:
guix environment pigx-scrnaseq
could lead to unbounded memory growth and could even fail to complete
when some items are missing from the store. This was because
'map/accumulate-builds' callees would keep making .drv build requests
that were turned into <unresolved> nodes; in this case, there are often
many identical build requests. Stopping accumulation earlier allows us
to unlock the situation by proceeding with the first few build requests
instead of spinning until we've accumulated all the build requests.
* guix/store.scm (map/accumulate-builds): Define 'accumulation-cutoff'.
Use a loop when iterating over LST and maintain a counter of unresolved
nodes met so far; return when the counter exceeds ACCUMULATION-CUTOFF.
Diffstat (limited to 'gnu/installer.scm')
0 files changed, 0 insertions, 0 deletions