use build-local gc-root directory
without this two builds can interfere with each other if: - builds 1 and 2 start - build 1 is starved of workers - build 2 finishes, removes the shared gcroots directory - gc runs - build 1 schedules more builds whose .drvs have now been removed using a dedicated directory for each build fixes this. we now also need to set alwaysRun on the cleanup command or we risk littering the system with stale gc roots when a build fails.
This commit is contained in:
parent
156e6e3dea
commit
f869b52a8d
|
@ -259,8 +259,12 @@ def nix_eval_config(
|
|||
sshPrivateKey=gerrit_private_key
|
||||
),
|
||||
)
|
||||
# use one gcroots directory per worker. this should be scoped to the largest unique resource
|
||||
# in charge of builds (ie, buildnumber is too narrow) to not litter the system with permanent
|
||||
# gcroots in case of worker restarts.
|
||||
# TODO perhaps we should clean the entire /drvs/ directory up too during startup.
|
||||
drv_gcroots_dir = util.Interpolate(
|
||||
"/nix/var/nix/gcroots/per-user/buildbot-worker/%(prop:project)s/drvs/",
|
||||
"/nix/var/nix/gcroots/per-user/buildbot-worker/%(prop:project)s/drvs/%(prop:workername)s/",
|
||||
)
|
||||
|
||||
factory.addStep(
|
||||
|
@ -297,6 +301,7 @@ def nix_eval_config(
|
|||
"-rf",
|
||||
drv_gcroots_dir,
|
||||
],
|
||||
alwaysRun=True,
|
||||
),
|
||||
)
|
||||
|
||||
|
|
Loading…
Reference in a new issue