Re: avoiding incomplete backports

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



When I first got involved in backporting, IIRC we had a "no feature backports unless expressly approved by lead" policy.

Over time this seems to have morphed towards the opposite extreme (no holds barred, backport whatever you want).

Obviously, that policy was untenable in practice, but maybe it could be tweaked into something viable?

I'm not sure if the "feature/bugfix" dichotomy always works. Some features are not high-risk, while some bugfixes *are*. Still, by and large, it's the feature backports that bite us, so I agree with Sage that these should get closer attention from the start.

One thing to keep in mind throughout all of this is that we are backporting from master to the two most recent stable releases - let's call them "S" and "S-1". For example, today, mimic is "S" and luminous is "S-1".

S-1 is arguably the more important of the two, since it will always have a larger installed base. Changes to master are often motivated by a desire to get something into S-1.

Now, S-1 is the older, more mature, and hopefully more stable of the two Thus, the "bar" for accepting feature backports into S-1 should be higher than for S.

Yet, the current backporting workflow allows just about anyone to:

1. open a tracker ticket, mark it "Backport: mimic, luminous"
2. open a master PR
3. once the master PR is merged, open the backport PRs
4. those get merged in due course, unless they break integration test suites

In other words, nobody is *required* to say "wait, this is going into S-1, needs closer examination, is it really needed, what are the risks, etc."

How could the process be tweaked to address this? It's hard because all the solutions I can think of involve making it more difficult to get stuff into S-1.

One idea: instead of taking a string of major release names, the "Backport" field in Redmine could be turned into a binary on/off switch meaning "Backport to S". Backports to "S-1" could only be undertaken after the feature/bugfix reached S. (Instead of cherry-picking from master, for S-1 we would cherry-pick from S.)

Nathan


On 07/22/2018 04:03 PM, Sage Weil wrote:
Backports are always hard, but I think there are two main categories of
reasons why they can break things:

  (1) is the pattern we saw with 12.2.6, where a feature is introduced with
a bug, a bugfix follows a bit later when it is discovered and fixed, but
the feature backport doesn't realize there is a later fix.
  (2) is when a feature is backported completely but there is some
functional second order interaction with the rest of the system that
prevents it from working correctly.

The latter scenario will always require either a developer who is paying
close attention or a lot of testing to prevent, which is why we should
always be very mindful with backports, especially non-bugfix ones, and
especially ones in complicated code.  The first case, though, is IMO a
failure in tooling and process.

A few possible solutions come to mind:

1- Always reference the commit that introduced the bug/regression in the
bugfix commit.  Then, when backporting, always search git for the sha1 of
the patch being cherry-pick -x'd.  This should turn up the follow-on fix.
(Perhaps some tooling could streamline this?)

2- Always mention the follow-on fix as a comment on the pull request that
originally introduced the new code/feature.  This requires checking the
original pull request when doing the backport.

3- Always open a tracker ticket, even for recent, just-introduced bugfixes
in master.  Reference that... somewhere?

I think the core problem is that when doing feature backports there is not
always a (feature) ticket or other single reference to look at that
captures everything about that feature.  Even #2 and using the PR doesn't
seem like a complete solution because often there are multiple pull
requests to introduce a feature.

It seems like there are two main options: lean on the git history, or lean
on external feature tickets.

I'm worried about the latter because we frequently have a series of
incremental pieces for a single feature, or related features that build on
one another, so there isn't always a 1:1 mapping between the PRs and a
(hypothetic) feature ticket.  We also don't always maintain feature
tickets, so this would be a net increase of process overhead.

This makes me lean toward leaning on git, and being more pedantic about
ensure any bug fix references the git commit where the issue was
reproduced.  The kernel uses a simple

  Fixes: <sha1>

tag in commits.  With that, I think, the missing piece is some
tooling/help to make sure we pay attention to these tags.  I see two
scenarios:

  - You are backport foo and need to notice commit bar that has a Fixes:
foo line.
  - You already backported foo.  Later you commit bar with Fixes: foo, and
need to noticed that foo was already backported and the backport branch
also needs bar.

What do you think?
sage

--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


--
Nathan Cutler
Software Engineer Distributed Storage
SUSE LINUX, s.r.o.
Tel.: +420 284 084 037
--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [CEPH Users]     [Ceph Large]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux