[openstack-dev] [nova] cells v2 ocata summit sessions recap
mriedem at linux.vnet.ibm.com
Tue Nov 8 20:25:08 UTC 2016
We had two design summit sessions for cells v2 at the Ocata summit in
Barcelona. The full etherpads are here:
In the first session we mostly talked about the work items needed to
support multiple cells.
Andrew Laski had the spec up for this and there was some POC code
started, which Dan Smith is picking up. The main idea here is to create
the BuildRequest in nova-api, then call a new conductor method which
calls the scheduler to pick a host, and then conductor creates the
instance in the cell mapped to that host, and then conductor deletes the
BuildRequest. Once the instance is in that cell, it doesn't move out of
that cell via reschedule/rebuild/migration/evacuate. We might add
support for that later, but it's not something supported in the initial
cells v2 scheduler work.
Cell0 is the special database (using the same cell DB schema) where
instances that failed to build go to die. In Newton this was optional
but the API will pull instances from it when listing instances. However,
we aren't populating it on schedule failure yet so that's work that
needs to be done for Ocata. So far there are no patches up for this yet,
but it will most likely be worked in with the scheduler interaction series.
The listing instances problem
In order to list instances we need to be able to page across cells,
which is going to be expensive for multiple large cells. Long-term we
want to use searchlight for this, but in the short term we're going to
do a simple merge sort in python. We also need to get the fixes in to
restrict the filter/sort keys for listing instances, Alex Xu and Kevin
Zheng are working on that. There are open questions on the long-term
plans of how things are going to work with searchlight, and Chris Dent
said he was interested in working on that. As a start, the searchlight
team has started reporting bugs against nova for gaps in the
notifications that nova sends out compared to the REST API. Balazs
Gibizer (gibi) who runs the notifications subteam in nova has already
started triaging those bugs.
CI testing the multi-cell configuration should be relatively
straight-forward with a multinode job. We can have one node contain the
'control' bits like the API, conductor, scheduler, API/cell0/cell DBs,
along with a nova-compute service, and then another node that is just
running nova-compute. I've volunteered to work on that.
Dan and I have also started working on a series of changes to make
cellsv2 required in the Ocata CI jobs:
This consists of a nova database migration that fails if you haven't
created the cell0 database and run the simple_cell_setup command.
Today in non-cells deployments we say to upgrade conductors first, then
API and finally computes. With cells v2 we want to do rolling upgrades
of the cells, which means upgrading conductors and then computes in the
cells, and finally the API. This allows you to only enable the latest
features in the API when the cells are all upgraded and ready to handle
those requests. This poses a bit of a problem for our CI tooling with
devstack/grenade though as we upgrade and start nova-api first. That's
going to require some changes as we get into the multi-cell testing
In the second design summit session on cells v2 we spent the entire time
talking about quotas, and thinking about ways to potentially redo the
quotas design when moving those to the API database.
Melanie Witt has a spec up which proposes that instead of doing the
reserve (API), do work, commit/rollback (compute) model, we move commits
to the API and have a process of (1) do work and then (2) reserve and
While talking about that in the session, there was some brainstorming on
doing limit checks differently in the API. Basically, do away with
reservations, do a quick DB query to check quota before an operation
begins, and if it's OK go forward. There will be races as tenants reach
the end of quota limits, but maybe this is OK. The upside is we
shouldn't get out of sync (which has been a problem for operators to
deal with), but there is a potential to race for the last usages which
might lead to overconsumption of resources.
There are some open questions around the 'fast and loose' approach like
are there things we need to count which aren't in the API database, and
can we do this efficiently for things that nova doesn't track in it's
database, like floating/fixed IPs in neutron?
More information about the OpenStack-dev