On Wed, Mar 25, 2020 at 11:48:35AM +0100, Andrea Bolognani wrote:
On Tue, 2020-03-24 at 18:21 +0000, Daniel P. Berrangé wrote:
> On Tue, Mar 24, 2020 at 06:47:01PM +0100, Andrea Bolognani wrote:
> > I don't get the rationale behind the split.
> >
> > Right now we're not using merge requests, but we're limiting the
> > number of jobs for the merge request case; at the same time, we say
> > that once we switch to a MR-based workflow, we're going to run the
> > extra jobs on each merge request as well. So what does the
> > distinction buy us?
>
> With this split today, if I push to my private fork, then the
> reduced set of jobs run. This gives quick turnaround for developers
> developing patches.
>
> When it gets reviewed & pushed to master, the full set run post
> merge.
>
> In the future, when we switch to merge requests, we'll change
> it so that the full set run when the merge request is opened,
> instad of post-merge.
>
> What is run for developers private branches will remain the
> same
Okay, I understand the rationale now, and I can see that we were
arguing for very similar approaches the entire time - it's just that
I could not see that. Thanks for taking the time to spell it out for
me :)
> > * pick a selection of jobs that includes both native and cross
> > build, across various distros of different vintage, such that
> > they can all run without waiting on shared runners. This can be
> > used by developers as a reasonably quick (~20 minutes) smoke
> > test while working on a feature;
>
> "without waiting on shared runners" is undefined, as whether you
> wait & how long, is dependant on many things outside our control.
> As notedin the cover letter though, this minimal set of native
> + cross build jobs gives about a 35 min turn around based on
> load I see today. I think that's acceptably fast.
Given the intentions, I think the current split can be improved
further: having cross_build as a separate stage from native_build
means that the former has to wait before the latter is done to even
start, and that makes wait times longer.
By default jobs in a stage get given a dependency
"needs: [.... jobs from prev stage...]"
which serializes each stage, but that is not mandatory. We can
set the stages to allow parallel execution across stages using
an explicit 'needs: []'. So we can keep stage as a conceptual
grouping without affecting parallelism.
Regards,
Daniel
--
|:
https://berrange.com -o-
https://www.flickr.com/photos/dberrange :|
|:
https://libvirt.org -o-
https://fstop138.berrange.com :|
|:
https://entangle-photo.org -o-
https://www.instagram.com/dberrange :|