Re-propose: Add Flavor tables to API Database
The flavor tables were added to the API schema in Mitaka but the online flavor migration did not, so we need to re-propose this for that work to complete in Newton. Previously-approved: Mitaka Spec for blueprint flavor-cell-api Change-Id: Ia7accc14f238e1fcbd04afa9419c18a7eab1345d
This commit is contained in:
243
specs/newton/approved/flavor-cell-api.rst
Normal file
243
specs/newton/approved/flavor-cell-api.rst
Normal file
@@ -0,0 +1,243 @@
|
||||
..
|
||||
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||
License.
|
||||
|
||||
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||
|
||||
=====================================
|
||||
Add Flavor tables to API Database
|
||||
=====================================
|
||||
|
||||
https://blueprints.launchpad.net/nova/+spec/flavor-cell-api
|
||||
|
||||
CellsV2 need to store flavor information for booting instances. Since this
|
||||
information will live at the cell API, tables related to flavors need to be
|
||||
created in API DB.
|
||||
|
||||
Problem description
|
||||
===================
|
||||
|
||||
Flavors are virtual hardware templates, which are used by nova, for example,
|
||||
when creating a new instance.
|
||||
In CellsV1, flavors are stored in parent and child cells. Considerable manual
|
||||
effort is required to keep this information consistent across all the cells.
|
||||
|
||||
Flavors are a global concept that should be stored only in one database.
|
||||
Therefore, flavor related tables for CellsV2 would be created only in the API
|
||||
database.
|
||||
|
||||
Use Cases
|
||||
----------
|
||||
|
||||
* Operators want to partition their deployments into cells for scaling,
|
||||
failure domain, and buildout reasons. When partitioned, flavor
|
||||
information needs to be stored at API level.
|
||||
|
||||
|
||||
Proposed change
|
||||
===============
|
||||
|
||||
With this spec we propose to create all flavor related tables in the API DB.
|
||||
They are::
|
||||
|
||||
* instance_types
|
||||
* instance_type_extra_specs
|
||||
* instance_type_projects
|
||||
|
||||
The name of the tables will be changed to flavors, flavor_extra_specs and
|
||||
flavor_projects respectively but the table schema will remain unchanged.
|
||||
|
||||
The flavor object will be modified to interact with the tables in the API
|
||||
database. The create() and save() method will be updated to use the API DB
|
||||
tables.
|
||||
|
||||
The get_by_*() methods will be modified to query the API DB and if a flavor
|
||||
is not found, query the nova DB as well. The get_all() method will be modified
|
||||
so that it displays all the flavors, which will be a union of what exists in
|
||||
API DB and nova DB. It will query the API DB and then query the nova DB to
|
||||
get the flavors not yet present in API DB.
|
||||
|
||||
The destroy() method will remove flavors from both the databases. This will
|
||||
ensure that all flavor related operations are done on the new table and older
|
||||
flavors are also actively migrated to the new table as they are used. The
|
||||
existing flavor tables in nova will continue to remain but no longer accessed
|
||||
and can be removed in subsequent releases.
|
||||
|
||||
During the transition phase, databases corresponding to both cellV1 and V2
|
||||
will co-exist and tests will be written to make sure that the flavor tables
|
||||
in CellsV2 have the same model as in CellV1. Any change in the tables should
|
||||
be applied in both databases.
|
||||
|
||||
To migrate existing flavor data to the proposed cellsV2 tables a new
|
||||
"nova-manage" command will be added.
|
||||
|
||||
This command will copy flavor entries from top-level cell DB to the new API DB.
|
||||
It will take no parameters and on execution read the data from flavor tables
|
||||
(instance_types, instance_type_extra_specs and instance_type_projects) and put
|
||||
it into the corresponsing tables in API DB if it doesn't already exist.
|
||||
|
||||
Alternatives
|
||||
------------
|
||||
|
||||
We could continue storing flavor at both api and cell level or store flavors
|
||||
only at compute cell level. Both these approaches introduce addtional
|
||||
complexity in flavor management.
|
||||
|
||||
Data model impact
|
||||
-----------------
|
||||
|
||||
Three new tables will be created in 'nova_api' database as follows. The
|
||||
corresponding schemas are detailed below,
|
||||
|
||||
* 'flavors':::
|
||||
CREATE TABLE `flavors` (
|
||||
`created_at` datetime DEFAULT NULL,
|
||||
`updated_at` datetime DEFAULT NULL,
|
||||
`deleted_at` datetime DEFAULT NULL,
|
||||
`name` varchar(255) DEFAULT NULL,
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`memory_mb` int(11) NOT NULL,
|
||||
`vcpus` int(11) NOT NULL,
|
||||
`swap` int(11) NOT NULL,
|
||||
`vcpu_weight` int(11) DEFAULT NULL,
|
||||
`flavorid` varchar(255) DEFAULT NULL,
|
||||
`rxtx_factor` float DEFAULT NULL,
|
||||
`root_gb` int(11) DEFAULT NULL,
|
||||
`ephemeral_gb` int(11) DEFAULT NULL,
|
||||
`disabled` tinyint(1) DEFAULT NULL,
|
||||
`is_public` tinyint(1) DEFAULT NULL,
|
||||
`deleted` int(11) DEFAULT NULL)
|
||||
|
||||
This table will have unique constraints on (name, deleted) and (flavorid,
|
||||
deleted) attributes
|
||||
|
||||
* 'flavors_extra_specs':::
|
||||
|
||||
CREATE TABLE `flavor_extra_specs` (
|
||||
`created_at` datetime DEFAULT NULL,
|
||||
`updated_at` datetime DEFAULT NULL,
|
||||
`deleted_at` datetime DEFAULT NULL,
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`flavor_id` int(11) NOT NULL,
|
||||
`key` varchar(255) DEFAULT NULL,
|
||||
`value` varchar(255) DEFAULT NULL,
|
||||
`deleted` int(11) DEFAULT NULL)
|
||||
|
||||
This table will have a unique constraint on (flavor_id, key,
|
||||
deleted) attribute and an index on (flavor_id, key)
|
||||
|
||||
* 'flavor_projects':::
|
||||
|
||||
CREATE TABLE `flavor_projects` (
|
||||
`created_at` datetime DEFAULT NULL,
|
||||
`updated_at` datetime DEFAULT NULL,
|
||||
`deleted_at` datetime DEFAULT NULL,
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`flavor_id` int(11) NOT NULL,
|
||||
`project_id` varchar(255) DEFAULT NULL,
|
||||
`deleted` int(11) DEFAULT NULL)
|
||||
|
||||
This table will have a unique constraint on (flavor_id, project_id,
|
||||
deleted) attribute
|
||||
|
||||
REST API impact
|
||||
---------------
|
||||
|
||||
None
|
||||
|
||||
Security impact
|
||||
---------------
|
||||
|
||||
None
|
||||
|
||||
Notifications impact
|
||||
--------------------
|
||||
|
||||
None
|
||||
|
||||
Other end user impact
|
||||
---------------------
|
||||
|
||||
None
|
||||
|
||||
Performance Impact
|
||||
------------------
|
||||
|
||||
None
|
||||
|
||||
Other deployer impact
|
||||
---------------------
|
||||
|
||||
Deployers will be provided with a new nova-manage command to migrate the
|
||||
flavors to the cellsV2 DB API proposed tables. This command will need to be
|
||||
run once for any existing deployments (cell or non-cell).
|
||||
|
||||
Developer impact
|
||||
----------------
|
||||
|
||||
None
|
||||
|
||||
Implementation
|
||||
==============
|
||||
|
||||
Assignee(s)
|
||||
-----------
|
||||
|
||||
Primary assignee:
|
||||
mvineetmenon
|
||||
|
||||
Other contributors:
|
||||
None
|
||||
|
||||
Work Items
|
||||
----------
|
||||
|
||||
* Create new database tables 'flavors', 'flavor_extra_specs'
|
||||
and 'flavor_projects' in API DB.
|
||||
|
||||
* Modify the flavor object to interact with API DB
|
||||
|
||||
* Create a new command in nova-manage for migrating flavors from cellsV1 to
|
||||
cellsV2
|
||||
|
||||
Dependencies
|
||||
============
|
||||
|
||||
None
|
||||
|
||||
Testing
|
||||
=======
|
||||
|
||||
Since this is designed to be an internal re-architecting of Nova with no user
|
||||
visible changes the current suite of Tempest or functional tests should
|
||||
suffice.
|
||||
|
||||
Also, tests need to be written to ensure that the data model doesn't change
|
||||
from what is being used in the cellsV1 model.
|
||||
|
||||
These tests should be kept until the final migration to cellsV2.
|
||||
|
||||
Documentation Impact
|
||||
====================
|
||||
|
||||
Document the `nova-manage` command to migrate flavors from top-level cell DB to
|
||||
cellsV2 API-DB.
|
||||
|
||||
References
|
||||
==========
|
||||
|
||||
``https://etherpad.openstack.org/p/kilo-nova-cells``
|
||||
|
||||
History
|
||||
=======
|
||||
|
||||
.. list-table:: Revisions
|
||||
:header-rows: 1
|
||||
|
||||
* - Release Name
|
||||
- Description
|
||||
* - Mitaka
|
||||
- Introduced
|
||||
* - Newton
|
||||
- Re-proposed; flavor tables were added to the API database schema in
|
||||
Mitaka but the online flavor migration was not completed.
|
||||
Reference in New Issue
Block a user