I just wanted to make sure we reach a conclusion even after https://code.google.com/p/chromium/issues/detail?id=529798 is closed.Maybe we even have one, and in that case I'd like to make sure it's clear to everyone, including myself.It seems to me that what happened in terms of code, is we're passing a single list of targets to analyze, from which it picks a subset that is affected by the patch.This works well for builders that run tests, because to run a test it needs to be compiled.The tricky case are targets like chromium_builder_tests or chromeos_preflight. Above approach makes the bots pretty much always recompile them, even if only a subset of their dependency tree is affected by the patch.
You might wonder what's an example scenario where it'd make a difference. Consider a target which is stale not because it's affected by the patch, but just because the underlying code has changed because we're using a more recent base revision. That target being stale though doesn't change the fact that it's not affected by the patch.If everyone is fine with above behavior that's also fine for me (as long as we continue to meet CQ cycle time goals). See https://groups.google.com/a/chromium.org/d/msg/infra-dev/s_z7ni9hnGU/hS7kPN3ifpIJ for a past discussion about this, and https://codereview.chromium.org/485873004 for how we had the logic that is now considered legacy since the beginning of "analyze" in recipes.I'd also like to make sure GN analyze behavior is consistent with gyp analyze behavior.Paweł
--
You received this message because you are subscribed to the Google Groups "infra-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to infra-dev+...@chromium.org.
To post to this group, send email to infr...@chromium.org.
To view this discussion on the web visit https://groups.google.com/a/chromium.org/d/msgid/infra-dev/CAATLsPYm%2BuswTswaLQErD6zcwKzfe73-9hdkzSOiih90PKZ5cA%40mail.gmail.com.
On Thu, Oct 1, 2015 at 3:50 AM, Paweł Hajdan, Jr. <phajd...@chromium.org> wrote:I just wanted to make sure we reach a conclusion even after https://code.google.com/p/chromium/issues/detail?id=529798 is closed.Maybe we even have one, and in that case I'd like to make sure it's clear to everyone, including myself.
It seems to me that what happened in terms of code, is we're passing a single list of targets to analyze, from which it picks a subset that is affected by the patch.This works well for builders that run tests, because to run a test it needs to be compiled.The tricky case are targets like chromium_builder_tests or chromeos_preflight. Above approach makes the bots pretty much always recompile them, even if only a subset of their dependency tree is affected by the patch.Why is that the case?It's my understanding that we want to only compile the subset of chromium_builder_tests etc that is affected by the patch.
As a follow-up to this (after some discussion w/ Brett about how one might implement this behavior on top of or in GN) ...Much of this complexity comes from the fact that we have these group targets like 'chromium_builder_tests'.Both Brett and I suspect that there are cases where you do want the group or none targets to build (base_unittests_run)if the dependencies change and cases where you don't (chromium_builder_tests), and figuring out which case is whichis hard to understand; we already have comments in the chromium_trybot.py where we include too many things forexactly this reason. I can imagine cases for things like telemetry where the build targets are modeled as groups in GNthat will be harder to deal with, and for which we often deal with them today through the exclusions file.Given that we now specify the list of tests to run and additional targets to build via the //testing/buildbot/*.json files,is there a reason to keep these group targets? Why not switch completely to requiring the list of specific targetsto be passed in and ban groups? I would rather spend my time migrating builders to not use groups thanI would trying to add more and more complicated logic to MB or GN to handle this complexity.
On Thu, Oct 1, 2015 at 3:30 PM, Dirk Pranke <dpr...@chromium.org> wrote:As a follow-up to this (after some discussion w/ Brett about how one might implement this behavior on top of or in GN) ...Much of this complexity comes from the fact that we have these group targets like 'chromium_builder_tests'.Both Brett and I suspect that there are cases where you do want the group or none targets to build (base_unittests_run)if the dependencies change and cases where you don't (chromium_builder_tests), and figuring out which case is whichis hard to understand; we already have comments in the chromium_trybot.py where we include too many things forexactly this reason. I can imagine cases for things like telemetry where the build targets are modeled as groups in GNthat will be harder to deal with, and for which we often deal with them today through the exclusions file.Given that we now specify the list of tests to run and additional targets to build via the //testing/buildbot/*.json files,is there a reason to keep these group targets? Why not switch completely to requiring the list of specific targetsto be passed in and ban groups? I would rather spend my time migrating builders to not use groups thanI would trying to add more and more complicated logic to MB or GN to handle this complexity.The one reason I can think of keeping groups is that it's used in a lot of places. I think we don't want to have to list all these compile targets in n places, because then they'd go out of sync.
On Fri, Oct 2, 2015 at 7:24 AM, John Abd-El-Malek <j...@chromium.org> wrote:On Thu, Oct 1, 2015 at 3:30 PM, Dirk Pranke <dpr...@chromium.org> wrote:As a follow-up to this (after some discussion w/ Brett about how one might implement this behavior on top of or in GN) ...Much of this complexity comes from the fact that we have these group targets like 'chromium_builder_tests'.Both Brett and I suspect that there are cases where you do want the group or none targets to build (base_unittests_run)if the dependencies change and cases where you don't (chromium_builder_tests), and figuring out which case is whichis hard to understand; we already have comments in the chromium_trybot.py where we include too many things forexactly this reason. I can imagine cases for things like telemetry where the build targets are modeled as groups in GNthat will be harder to deal with, and for which we often deal with them today through the exclusions file.Given that we now specify the list of tests to run and additional targets to build via the //testing/buildbot/*.json files,is there a reason to keep these group targets? Why not switch completely to requiring the list of specific targetsto be passed in and ban groups? I would rather spend my time migrating builders to not use groups thanI would trying to add more and more complicated logic to MB or GN to handle this complexity.The one reason I can think of keeping groups is that it's used in a lot of places. I think we don't want to have to list all these compile targets in n places, because then they'd go out of sync.
Perhaps we can have a text file that lists all these targets? Of course, we'd want that to be in the chrome repo. Then maybe we can use the same solution to refer to tests, since we have the list of tests that we run duplicated many times.
Remember that build_targets is the minimal set of targets to build
assuming you want to build all. And by 'all' I mean any target
reachable root from the root nodes, which is different than the all
target.
It's my understanding we have bots that don't want to build
'all', so that build_targets as implemented and used isn't right.
I think we need to change build_targets to only return targets that are
descendants of the supplied targets. Then I agree with using
build_targets.