Database migrations and the database model are managed independently in Nova. When a new database migration is added, changes are often needed to the database model and vice versa. However, there are no tests or checks that the database model matches the results of the database migrations leaving them to often drift apart. Change-Id: I3671faa62c22179addaf0f24f918eaffa7dbe30f
174 lines
3.8 KiB
ReStructuredText
174 lines
3.8 KiB
ReStructuredText
..
|
|
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
|
License.
|
|
|
|
http://creativecommons.org/licenses/by/3.0/legalcode
|
|
|
|
======================================
|
|
Validate database migrations and model
|
|
======================================
|
|
|
|
https://blueprints.launchpad.net/nova/+spec/validate-migrations-and-model
|
|
|
|
Database migrations and the database model are managed independently in
|
|
Nova. When a new database migration is added, changes are often needed
|
|
to the database model and vice versa. However, there are no tests or
|
|
checks that the database model matches the results of the database
|
|
migrations leaving them to often drift apart.
|
|
|
|
|
|
Problem description
|
|
===================
|
|
|
|
* Database migrations affect the correctness of the database model.
|
|
|
|
* No tests or checks exist to ensure the database model matches the results
|
|
of the database migrations.
|
|
|
|
|
|
Use Cases
|
|
---------
|
|
|
|
Providing a consistent database model to implement the online-schema-changes
|
|
spec.
|
|
|
|
Helping operators determine when local changes to their running schema
|
|
differs from the Nova model.
|
|
|
|
|
|
Project Priority
|
|
----------------
|
|
This is a dependency for another spec that fits under the 'Live Upgrades'
|
|
kilo priorities.
|
|
|
|
|
|
Proposed change
|
|
===============
|
|
|
|
A new unit test would be added that uses alembic to compare the result
|
|
of the database migrations wit the database model defined in
|
|
nova/db/sqlalchemy/models.py.
|
|
|
|
A new 'db compare' command to nova-manage would allow an operator
|
|
to list the differences between their running database and the database
|
|
model defined in nova.
|
|
|
|
|
|
Alternatives
|
|
------------
|
|
|
|
Using the database model as a single source for all schema changes. This
|
|
would avoid any drift between database migrations and the database model
|
|
by generating DDL dynamically based on a comparison between the running
|
|
schema and the model.
|
|
|
|
This option is the original goal, but it was decided that it would be
|
|
best to split the spec into two parts: validating the schema against
|
|
the model and then dynamically updating the schema to match the model.
|
|
See the dependent spec online-schema-changes.
|
|
|
|
|
|
Data model impact
|
|
-----------------
|
|
|
|
The existing model needs to be brought in line with changes migrations
|
|
make. These are limited to a handful of cases:
|
|
|
|
- PostgreSQL index name limitations
|
|
- PostgreSQL Enum type naming
|
|
- MySQL index length restrictions
|
|
- Foreign key names
|
|
|
|
|
|
REST API impact
|
|
---------------
|
|
|
|
None
|
|
|
|
|
|
Security impact
|
|
---------------
|
|
|
|
None
|
|
|
|
|
|
Notifications impact
|
|
--------------------
|
|
|
|
None
|
|
|
|
|
|
Other end user impact
|
|
---------------------
|
|
|
|
None
|
|
|
|
|
|
Performance Impact
|
|
------------------
|
|
|
|
The new unit test is expected to add only a fraction of a second to the
|
|
total time it takes to run tests.
|
|
|
|
|
|
Other deployer impact
|
|
---------------------
|
|
|
|
The new 'db compare' command to nova-manage provides a means of viewing
|
|
differences between the current running schema and Nova's model.
|
|
|
|
|
|
Developer impact
|
|
----------------
|
|
|
|
Since the model will now be checked against the results of the database
|
|
migrations, it is required to keep the model updated.
|
|
|
|
|
|
Implementation
|
|
==============
|
|
|
|
Assignee(s)
|
|
-----------
|
|
|
|
Primary assignee:
|
|
johannes.erdfelt
|
|
|
|
Other contributors:
|
|
None
|
|
|
|
|
|
Work Items
|
|
----------
|
|
|
|
- Bring model into line with existing migrations
|
|
- Implement schema comparator
|
|
- Implement new 'db compare' command to 'nova-manage'
|
|
|
|
|
|
Dependencies
|
|
============
|
|
|
|
The schema synchronizer is implemented on top of alembic for its DDL
|
|
generating functionality. This is already in the OpenStack global
|
|
requirements list, but will be a new addition for Nova.
|
|
|
|
|
|
Testing
|
|
=======
|
|
|
|
No extra tests beyond the added unit test.
|
|
|
|
|
|
Documentation Impact
|
|
====================
|
|
|
|
Documentation will need to be updated to include the new 'db compare'
|
|
command to 'nova-manage'.
|
|
|
|
|
|
References
|
|
==========
|
|
|
|
https://etherpad.openstack.org/p/kilo-nova-zero-downtime-upgrades
|