[openstack-dev] Continuous deployment - significant process change
Robert Collins
robertc at robertcollins.net
Sun Aug 18 20:21:29 UTC 2013
Just when you thought this had been forgotten....
On 1 May 2013 21:46, Thierry Carrez <thierry at openstack.org> wrote:
> Clint Byrum wrote:
>> On 2013-04-30 14:52, Russell Bryant wrote:
>>> My biggest concern with this is applying it to an open source project
>>> with an unmanaged workforce. Thierry captured it well when he said:
>>>
>>> Personally my experience of OpenStack project management makes me fear
>>> that your proposal ignores the reality of our unmanaged development
>>> workforce: there is no way we can be sure that a feature will actually
>>> be completed. So you might end up having disabled code in releases...
>>> or force the removal of the already-landed parts at the very last
>>> moment, which is disruptive to release quality and also sounds more
>>> disruptive to CD than what you are trying to protect against.
>>>
>>> I'm really worried about the transition of ownership going from the
>>> submitter to the project as a whole much earlier in the process. I'd
>>> like to have a high confidence level that it's worth having this code
>>> for the long run before it starts coming in. That to me requires it
>>> baking out of tree and getting completed before we accept it.
>>
>> What is the negative impact of having disabled code in a release? I
>> think we would need a good reason before we would back accepted code
>> out. If the code is just sitting there, undocumented and turned off, not
>> interfering with anything, I'm having a hard time thinking of a logical
>> reason to back it out.
>
> I think the root of the problem with shipping incomplete features
> disabled by default is the stable maintenance expectations. Is that
> incomplete feature considered a bug in the stable branch ? The code
> might be disabled, it can still be enabled... Could we mark that code in
> a way that make it sufficiently clear it's not supported by the stable
> branch team ? I don't really want to make it easier for CD at the
> expense of the stable branch team. Or turn it into a public cloud
> deployer vs. private cloud distros argument.
https://blog.twitter.com/2013/new-tweets-per-second-record-and-how
Is a good read for anyone interested in large scale systems.
'Decider', referenced in that post is a classic service in an agile
SOA environment : it's a centralised 'is X enabled' store, which can
turn X on or off on a per-request basis.
But to answer your points:
- an unreleased feature is an unreleased feature irrespective of what
branch it is in. It's not something you'd pull bug fixes into a frozen
branch for.
- If the codebase knows it's a release branch (can we tell
programmatically?) we could just refuse to enable unreleased features.
I understand your concerns about making it easier for one group vs
another - I don't think this is a zero-sum game. CD disciplines make
code evolution faster and safer for /everyone/.
Since it's been a few months since I pushed on this, let me
re-summarise. The key goals are:
- Flatten out risk spikes around code landings
- Make it more reliable for trunk deployers to deploy trunk
- Make it easier for folk working on features to get those features in
The key bad outcomes folk want to see addressed are:
- The project owning lots of incomplete useless code
- Bugs being introduced
- Documentation and user support burdens being increased
- Conf file setting proliferation [with backwards compat constraints
on removals]
- Stable branch maintenance becoming harder.
The set of proposals being made to tackle this are:
- Set a much harder upper bound on commit size - we were saying 500
lines, but the recent research paper suggests that saying 200 lines as
target, with rubber band permitting up to 400 lines before we push
back really hard.
- This reduces the risk on any one commit.
- It increases defect detection during review.
- It helps reviewers review the change.
- It helps trunk deployers assess risk more easily too.
- Land patches when the patch is ready, not when the feature is ready.
- All the normal quality standards : correctness, performance,
style, relevance and desirability still apply!
- This prevents the patch being stuck in rebase-forever mode,
continually chasing backwards incompatible changes in internal APIs
(which may be rare - I haven't look for stats on it, but it's super
super painful when it happens, and where there is pain folk get weary
and stop programming well... which increases defect rate).
- This reduces the 'and we delayed refactoring X until release, now
CHANGE THE WORLD' anti-patterns, which break stable maintenance. [I
don't know if we experience that].
- Where specific code is considered experimental and not ready for
backwards compat support, annotate it as such... the exact mechanism
hasn't been designed.
- Addresses documentation, user support and stable branch maintenance.
- Where specific code should be opt in, make it so.
- Either by a new entry point - like the v3 nova API. [BTW
brilliant stuff there - that is pure CD :)]
- Or by a condition in the code that deployers/testers/eaaaaarly
adopters can enable via config settings.
This will need a small patch to the sample config generator to
let it skip experimental things so they don't end up in documentation
etc.
- Or by introspection [e.g. new optional kwarg parameter].
So - are there remaining objections to any of these things? What have I missed?
-Rob
--
Robert Collins <rbtcollins at hp.com>
Distinguished Technologist
HP Converged Cloud
More information about the OpenStack-dev
mailing list