summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2018-04-05 22:17:45 +0200
committerLudovic Courtès <ludo@gnu.org>2018-04-05 22:25:02 +0200
commit074b9d02f1ca01007f39adbc019763027a51d9bd (patch)
tree35089c31d822d63bee736c55da128940bcfd50d7 /examples
parentfc24ca2eac708695f663623a50f715db5ca914bd (diff)
downloadcuirass-074b9d02f1ca01007f39adbc019763027a51d9bd.tar
cuirass-074b9d02f1ca01007f39adbc019763027a51d9bd.tar.gz
base: Let sqlite handle deduplication of the list of pending derivations.
Previously we would make a SQL query that would return many build jobs, and then call 'delete-duplicates' on that. This was extremely wasteful because the list of returned by the query was huge leading to a heap of several tens of GiB on a big database, and 'delete-duplicates' would lead to more GC and it would take ages. Furthermore, since 'delete-duplicates' is written in C as of Guile 2.2.3, it is uninterruptible from Fiber's viewpoint. Consequently, the kernel thread running the 'restart-builds' fiber would never schedule other fibers, which could lead to deadlocks--e.g., since fibers are scheduled on a circular shuffled list of kernel threads, once every N times, a web server fiber would be sent to that kernel thread and not be serviced. * src/cuirass/base.scm (shuffle-jobs): Remove. (shuffle-derivations): New procedure. (spawn-builds): Take a list of derivations instead of a list of jobs. (restart-builds): Remove 'builds' parameter. Remove 'delete-duplicates' call. Remove done/remaining partitioning. (build-packages): Adjust to pass 'spawn-builds' a list of derivations. * bin/cuirass.in (main): Remove computation of PENDING. Remove second parameter in call to 'restart-builds'.
Diffstat (limited to 'examples')
0 files changed, 0 insertions, 0 deletions