Files
nova-specs/specs/kilo/approved/validate-migrations-and-model.rst
Johannes Erdfelt 1cc287a17e Validate database 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.

Change-Id: I3671faa62c22179addaf0f24f918eaffa7dbe30f
2014-11-17 08:05:40 -08:00

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