[openstack-dev] [nova] [placement] extraction (technical) update
Balázs Gibizer
balazs.gibizer at ericsson.com
Tue Aug 28 13:11:56 UTC 2018
On Tue, Aug 28, 2018 at 1:20 PM, Chris Dent <cdent+os at anticdent.org>
wrote:
> On Mon, 27 Aug 2018, melanie witt wrote:
>
>> I think we should use the openstack review system (gerrit) for
>> moving the code. We're moving a critical piece of nova to its own
>> repo and I think it's worth having the review and history contained
>> in the openstack review system.
>
> This seems a reasonable enough strategy, in broad strokes. I want to
> be sure that we're all actually in agreement on the details, as
> we've had a few false starts and I think some of the details are
> getting confused in the shuffle and the general busy-ness in progress.
>
> Is anyone aware of anyone who hasn't commented yet that should? If
> you are, please poke them so we don't surprise them.
>
>> Using smaller changes that make it easy to see import vs content
>> changes might make review faster than fewer, larger changes.
>
> I _think_ we ought to be able to use the existing commits from the
> runs-throughs-to-passing-tests already done, but if we use the
> strategy described below it doesn't really matter: the TDD approach
> (after fixing paths and test config) is pretty fast.
>
>> The most important bit of all of this is making sure we don't break
>> anything in the process for operators and users consuming nova and
>> placement, and ensure the upgrade path from rocky => stein is
>> tested in grenade.
>
> This is one of the areas where pretty active support from all of
> nova will be required: getting zuul, upgrade paths, and the like
> clearly defined and executed.
>
>> The steps I think we should take are:
>>
>> 1. We copy the placement code into the openstack/placement repo and
>> have it passing all of its own unit and functional tests.
>
> To break that down to more detail, how does this look?
> (note the ALL CAPS where more than acknowledgement is requested)
>
> 1.1 Run the git filter-branch on a copy of nova
> 1.1.1 Add missing files to the file list:
> 1.1.1.1 .gitignore
> 1.1.1.2 # ANYTHING ELSE?
> 1.2 Push -f that thing, acknowledge to be broken, to a seed repo on
> github
> (ed's repo should be fine)
> 1.3 Do the repo creation bits described in
> https://docs.openstack.org/infra/manual/creators.html
> to seed openstack/placement
> 1.3.1 set zuul jobs. Either to noop-jobs, or non voting basic
> func and unit # INPUT DESIRED HERE
I suggest to add a non-voting unit and functional job and iterate on
the repo to make them green, then turn them to voting.
I also think that we can add a non-voting tempest full job as well.
Making it green depends on how hard to deploy placement from the new
repo to tempest. I think as soon as placement repo has passing gabbits
(e.g functional job) and we can deploy placement in tempest then
tempest will be green soon.
> 1.4 Once the repo exists with some content, incrementally bring it to
> working
> 1.4.1 Update tox.ini to be placement oriented
> 1.4.2 Update setup.cfg to be placement oriented
> 1.4.3 Correct .stesr.conf
> 1.4.4 Move base of placement to "right" place
> 1.4.5 Move unit and functionals to right place
> 1.4.6 Do automated path fixings
> 1.4.7 Set up translation domain and i18n.py corectly
> 1.4.8 Trim placement/conf to just the conf settings required
> (api, base, database, keystone, paths, placement)
> 1.4.9 Remove database files that are not relevant (the db api is
> not used by placement)
> 1.4.10 Fix the Database Fixture to be just one database
> 1.4.11 Disable migrations that can't work (because of
> dependencies on nova code, 014 and 030 are examples)
> # INPUT DESIRED HERE AND ON SCHEMA MIGRATIONS IN GENERAL
> 1.4.12 Incrementally get tests working
> 1.4.13 Fix pep8
> 1.5 Make zuul pep, unit and functional voting
> 1.6 Create tools for db table sync/create
> 1.7 Concurrently go to step 2, where the harder magic happens.
> 1.8 Find and remove dead code (there will be some).
> 1.9 Tune up and confirm docs
> 1.10 Grep for remaining "nova" (as string and spirit) and fix
>
>
> Item 1.4.12 may deserve some discussion. When I've done this the
> several times before, the strategy I've used is to be test driven:
> run either functional or unit tests, find and fix one of the errors
> revealed, commit, move on.
>
> This strategy has worked very well for me because of the "test
> driven" part, but I'm hesitant to do it if reviewers are going to
> get to a patch and say "why didn't you also change X?" The answer to
> that question is "because this is incremental and test driven and
> the tests didn't demand that change (yet)". Sometimes that will mean
> that things of the same class of change are in different commits.
>
> Are people okay with that and willing to commit to being okay with
> that answer in reviews? To some extent we need to have some faith on
> the end result: the tests work. If people are not okay with that, we
> need the people who are not to determine and prove the alternate
> strategy. I've had this one work and work well.
I like this test driven approach. If I start to leave comments like
"why didn't you also change X?" in these patches then please point me
to this mail and I will correct my behavior. :)
I think for me the trust towards the end result of these changes will
come from the fact that the number of passing test cases are increases
at every step.
>
> Please help to refine the above, thank you.
>
>> 2. We have a stack of changes to zuul jobs that show nova working
>> but deploying placement in devstack from the new repo instead of
>> nova's repo. This includes the grenade job, ensuring that upgrade
>> works.
>
> If we can make a list for this (and the subsequent) major items that
> is as detailed as I've made for step 1 above, I think that will help
> us avoid some of the confusion and frustration that comes up. I'm
> neither able nor willing to be responsible for creating those lists
> for all these points, but very happy to help.
>
Let's collaborate on that list making. I added a list of jobs I foresee
to the etherpad
https://etherpad.openstack.org/p/placement-extract-stein-copy
Cheers,
gibi
>> 3. When those pass, we merge them, effectively orphaning nova's copy
>> of placement. Switch those jobs to voting.
>>
>> 4. Finally, we delete the orphaned code from nova (without needing
>> to make any changes to non-placement-only test code -- code is
>> truly orphaned).
>
> In case you missed it, one of the things I did earlier in the
> discussion was make it so that the wsgi script for placement defined
> in nova's setup.cfg [1] could:
>
> * continue to exist
> * with the same name
> * using the nova.conf file
> * running the extracted placement code
>
> That was easy to do because of the work over the last year or so
> that has been hardening the boundary between placement and nova, in
> place. I've been assuming that maintaining the option to use
> original conf file is a helpful trick for people. Is that the case?
>
> Thanks.
>
> [1]
> https://review.openstack.org/#/c/596291/3/nova/api/openstack/placement/wsgi.py
> --
> Chris Dent ٩◔̯◔۶
> https://anticdent.org/
> freenode: cdent tw: @anticdent
> __________________________________________________________________________
> 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