parallel_emerge: preload portage.data.userpriv_groups
We are seeing bad file descriptor errors during the evaluation of
portage.data.userpriv_groups.
As it is lazily evaluated and we fork before each emerge step, it is
executed hundreds of times. Load it before we start forking so that it is
evaluated only once.
BUG=chromium:433482
TEST=Modify portage to fail if the userpriv_groups is evaluated after we fork.
build_packages fails when we comment the evaluation in parallel_emerge.
TEST=trybot run on gizmo, beaglebone, daisy, link, chromiumos-sdk,
lumpy-incremental.
Change-Id: I945092da7b6ee04baee284e3480457ae87943ff8
Reviewed-on: https://chromium-review.googlesource.com/234572
Reviewed-by: David James <davidjames@chromium.org>
Commit-Queue: Bertrand Simonnet <bsimonnet@chromium.org>
Tested-by: Bertrand Simonnet <bsimonnet@chromium.org>
diff --git a/scripts/parallel_emerge.py b/scripts/parallel_emerge.py
index 4eee7bb..fc61351 100644
--- a/scripts/parallel_emerge.py
+++ b/scripts/parallel_emerge.py
@@ -1896,6 +1896,12 @@
# Now upgrade the rest.
os.execvp(args[0], args)
+ # Attempt to solve crbug.com/433482
+ # The file descriptor error appears only when getting userpriv_groups
+ # (lazily generated). Loading userpriv_groups here will reduce the number of
+ # calls from few hundreds to one.
+ portage.data._get_global('userpriv_groups')
+
# Run the queued emerges.
scheduler = EmergeQueue(deps_graph, emerge, deps.package_db, deps.show_output,
deps.unpack_only)