[openstack-dev] [heat] operators vs users for choosing convergence engine
Zane Bitter
zbitter at redhat.com
Tue Feb 3 18:00:44 UTC 2015
On 02/02/15 19:52, Steve Baker wrote:
> A spec has been raised to add a config option to allow operators to
> choose whether to use the new convergence engine for stack operations.
> For some context you should read the spec first [1]
>
> Rather than doing this, I would like to propose the following:
I am strongly, strongly opposed to making this part of the API.
> * Users can (optionally) choose which engine to use by specifying an
> engine parameter on stack-create (choice of classic or convergence)
> * Operators can set a config option which determines which engine to use
> if the user makes no explicit choice
> * Heat developers will set the default config option from classic to
> convergence when convergence is deemed sufficiently mature
We'd also need a way for operators to prevent users from enabling
convergence if they're not ready to support it.
> I realize it is not ideal to expose this kind of internal implementation
> detail to the user, but choosing convergence _will_ result in different
> stack behaviour (such as multiple concurrent update operations) so there
> is an argument for giving the user the choice. Given enough supporting
> documentation they can choose whether convergence might be worth trying
> for a given stack (for example, a large stack which receives frequent
> updates)
It's supposed to be a strict improvement; we don't need to ask
permission. We have made major changes of this type in practically every
Heat release. When we switched from creating resources serially to
creating them in parallel in Havana we didn't ask permission. We just
did it. We when started allowing users to recover from a failed
operation in Juno we didn't ask permission. We just did it. We don't
need to ask permission to allow concurrent updates. We can just do it.
The only difference here is that we are being a bit smarter and
uncoupling our development schedule from the release cycle. There are 15
other blueprints, essentially all of which have to be complete before
convergence is usable at all. It won't do *anything at all* until we are
at least 12 blueprints in. The config option buys us time to land them
without the risk of something half-finished appearing in the release
(trunk-chasers will also thank us). It has no other legitimate purpose IMO.
The goal is IN NO WAY to maintain separate code paths in the long term.
The config option is simply a development strategy to allow us to land
code without screwing up a release and while maintaining as much test
coverage as possible.
> Operators likely won't feel they have enough knowledge to make the call
> that a heat install should be switched to using all convergence, and
> users will never be able to try it until the operators do (or the
> default switches).
Hardly anyone should have to make a call. We should flip the default as
soon as all of the blueprints have landed (i.e. as soon as it works at
all), provided that a release is not imminent. (Realistically, at this
point I think we have to say the target is to do it as early as in
Lizard as we can.) That means for those chasing trunk they get it as
soon as it works at all, and for those using stable releases they get it
at the next release, just like every other feature we have ever added.
As a bonus, trunk-chasing operators who need to can temporarily delay
enabling of convergence until a point of their choosing in the release
cycle by overriding the default. Anybody in that position likely has
enough knowledge to make the right call for them.
So I believe that all of our stakeholders are catered to by the config
option: operators & users who want a stable, tested release;
operator/users who want to experiment on the bleeding edge; and
operators who chase trunk but whose users require stability.
The only group that benefits from enshrining the choice in the API -
users who want to experiment with the bleeding edge, but who don't
control their own OpenStack deployment - doesn't actually exist, and if
it did then this would be among the least of their problems.
> Finally, there are also some benefits to heat developers. Creating a
> whole new gate job to test convergence-enabled heat will consume its
> share of CI resource. I'm hoping to make it possible for some of our
> functional tests to run against a number of scenarios/environments.
> Being able to run tests under classic and convergence scenarios in one
> test run will be a great help (for performance profiling too).
I think this is the strongest argument in favour. However, I'd like to
think it would be possible to run the functional tests twice in the
gate, changing the config and restarting the engine in between.
But if the worst comes to the worst, then although I think it's
preferable to use one VM for twice as long vs. two VMs for the same
length of time, I don't think the impact on resource utilisation in the
gate of choosing one over the other is likely to be huge. And I don't
see this situation persisting for a long time. The purpose of running
both sets of tests is to buy us time to write a migration tool without
having to delay flipping the config switch until it is ready. So we'd
likely only have to continue running the legacy tests for one release cycle.
> If there is enough agreement then I'm fine with taking over and updating
> the convergence-config-option spec.
Be my guest, but I'd certainly vote -1.
Thanks for starting this discussion though. After this thread it is
clear to me that I wasn't nearly specific enough in the spec about when
we should flip the default, so I updated the wording to match better
what I said above.
cheers,
Zane.
> [1]
> https://review.openstack.org/#/c/152301/2/specs/kilo/convergence-config-option.rst
>
>
> __________________________________________________________________________
> OpenStack Development Mailing List (not for usage questions)
> Unsubscribe: OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
More information about the OpenStack-dev
mailing list