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
|
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(
|
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(
|
factory.addStep(
|
||||||
|
@ -297,6 +301,7 @@ def nix_eval_config(
|
||||||
"-rf",
|
"-rf",
|
||||||
drv_gcroots_dir,
|
drv_gcroots_dir,
|
||||||
],
|
],
|
||||||
|
alwaysRun=True,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue