[openstack-dev] [tc][infra][neutron] branches for release-independent projects targeting Openstack release X
Thomas Morin
thomas.morin at orange.com
Wed Nov 18 17:38:11 UTC 2015
Hi everyone,
The starting point for this post is a specific Neutron sub-project
(networking-bgpvpn) but I believe the issues raised are shared with
other neutron stadium project and possibly relevant beyond Neutron, to
projects tagged release-independent in general.
In the context of the networking-bgpvpn project, we have a few unsolved
issues related to branches, more specifically about which branches we
can create to host active development to make our subprojet (a Neutron
service plugin) work with the last Openstack release and to backport it
with to earlier releases.
Here are precisely the assumptions that we've made, largely based on the
fact that the project is tagged 'release-independent' (meaning
"completely bypass the 6-month cycle and release independently" [1]):
a) that we can make a release targeting Liberty much later than the
release date of Liberty
b) that we could make releases more frequent than the 6-month cycle ;
not only bugfix releases but also feature releases
c) that the idea of a release-independent project being backported to
work with past Openstack releases is acceptable (of course, without
requiring any change in release-managed projects, something largely
possible in many cases for projects such as a Neutron service plugin or
an ML2 driver)
Note that we aren't the only big tent project having this kind of
expectations (e.g. [3]).
The rest of this email follows from these assumptions.
To do (a) and (c) we need separate branches in which to do active work.
We have understood clearly that given the contract around 'stable/*'
branches, the branches in which to do this active work cannot be named
'stable/*'.
Where we are today:
- we do active development, planning a liberty release soon, on our
'master' branch
- we have a 'backport/kilo' and a 'backport/juno' branches in which we
plan to make the necessary changes to adapt with Neutron kilo and juno;
these branches were created by Neutron core devs for us [5], based on
the common understanding that choosing 'stable/*' branch names for
branches with active development would be a huge no no
Let me take a few example of the issues we hit...
I apologize in advance for imprecisions that may result from my limited
experience with the Openstack project at large, and CI subtleties in
particular.
### Continuous Integration issue
Our master branch is written to work with stable/liberty of other
projects we depend on (neutron, python-neutronclient, devstack for the
CI devstack VMs). The issue we hit, at least this is my understanding,
is that the CI system (at least the devstack VM parts) has a built-in
implicit assumption that branch X of project foo is meant to work with
branch X of project bar, but that this assumption is not true in our case.
The solution we could consider is to tweak CI gate jobs to add jobs that
force a specific branch to be used for Openstack key project our job
depend on (e.g. devstack, neutron, in our case), and filter which of
these jobs would be triggered for each specific branch of our project.
For instance:
- define a gate-install-dsvm-networking-bgpvpn-kilo with branch-override
stable/kilo (will result in creating a devstack stable/kilo with
Neutron stable/kilo inside)
- configure zuul to apply this job *only if* the gerrit change
triggering the test is for our backport/kilo branch
(do that again for our juno branch, and again to map our master to
Openstack stable/liberty)
It seems like it would work, although possible too verbose.
With the infra team support we already have something close to this
configuration in place for our master (two jobs, one to test with
master, one to force testing against stable/liberty). [4]
### Synchronizing requirements issue
Trying to be good pupils we had activated the check-requirements jobs in
our zuul config, and the requirements proposal bot as well.
Just like the CI system, these requirements tools have a built-in
implicit assumption that branch X of project foo is meant to work with
branch X of project bar, which breaks in our case.
The issues we have are the following:
1- the botis proposing on our 'master' branch, updates to
requirements.txt to make us in sync with the requirements 'master'
branch, which is irrelevant since our master in facts targets Liberty
-- this is easily "solved": we just ignore those proposed changes
2- the bot won't be able to propose anything relevant on our
backport/kilo and backport/juno branches, since he does not know they
target stable/kilo and stable/juno -- we can live with that and update
requirements ourselves
3- we can't update our requirements.txt on our master branch: we want to
add requirements conforming with Liberty, but the check-requirements
jobs thinks this is wrong since it checks our master branch against its
master branch (that now has mitaka requirements)
4- same as 3 for our backport/kilo and backport/juno branches (the job
does not know these branch should be checked against the requirements in
stable/kilo, resp. stable/juno)
Note that 3 and 4 are **blocker issues**: they prevent us form merging
any requirements file update to prepare a first Liberty-compatible
release or for backports.
The temporary solution we've investigated, for lack of a better one, is
to make the check-requirements job non-voting.
That would make our project further from being a good pupil than we
would like to, but on the other hand a large majority of Openstack
projects do not enable these automated checks either.
We have received negative reviews on this [2], from both Infra
contributors and Armando as Neutron PTL ; my understanding being that
this opposition is founded on the idea that the way we plan to do
development (cf assumptions at the start of this email) is not inline
with widespread practices (read [2] if you want to interpret by yourself).
### Doing multiple releases inside one 6-month Openstack cycle issue
Our initial plan was to fork a 'stable/liberty' branch from our master
at the same time as our first release.
But after this we don't know how to work on new features for a release
still targeting Liberty:
- adding features on stable/liberty is a no no
- there is no established practice, as far as we know, to name such
branches, nor to track that they aim to work with Liberty
We haven't a solution for that right now, and we definitely want guidance.
A related question is when/how to start working on code targeting mitaka .
There are different things we want to take into account:
- there are many things we can do without requiring anything new from
Neutron
- in an ideal world, the interfaces between Neutron and service plugins
would be stable enough
- in practice we expect that we'll have to follow some changes in
Neutron internals that will arrive in Mitaka release
Based on the above, one possibility would maybe be to have
release/[major-version] branches forked from master from each of our
Liberty-targeted release,
the last of these branches could become our stable/liberty release and
at the same time our trunk would start targeting Mitaka-compatibility.
### Other issues ...
(there may even be other issues we haven't seen yet related to the same
root question on how to branch and preserve clear
### Very Humble Suggestions
Based on the above, I have a few suggestions... (to take as humble
suggestions from someone relatively new to the Openstack community
practices...).
It seems that part of the issue is that the only way CI tools have to
know what Openstack branch a said branch of a project is targeted is the
implicit assumption that branches have the same name. Something that
may help would be to let a subproject indicate in a file in its repo
what Openstack branch it is targeting (e.g. the
'openstack-target-branch.txt' file in the 'master' branch of
networking-bgpbpn could say 'stable/liberty' and the CI tools would know
have the information they need; this file would be optional with the
current implicit behavior being applied by default in the case where it
does not exist). This kind of information could be used by tools to
consolidate where the different projects stand with reference to what
Openstack release they target.
Another thing that might be considered is to accept active development
in a 'stable/*' branch **until** a first release is tagged on this
branch, and then apply stable branches standard of accepting bugfixes
only. This would however not give an answer on how to do multiple
feature release targeting a same Openstack major release.
### ...
If our assumptions are legitimate, then we need guidance and possibly
changes in tools or practices to proceed.
(if our assumptions are not legitimate, then discussing why will be a
very useful discussion for us as well!)
Thanks for reading this far...
Hoping this email will be help...
-Thomas
[1] http://governance.openstack.org/reference/tags/release_independent.html
[2] https://review.openstack.org/#/c/243610/
[3]
http://lists.openstack.org/pipermail/openstack-dev/2015-November/078676.html
[4] https://review.openstack.org/#/c/233703/
[5] https://bugs.launchpad.net/bgpvpn/+bug/1513870
More information about the OpenStack-dev
mailing list