5f90447b40
Thorough replacement of git.openstack.org URLs with their opendev.org counterparts. Change-Id: I7cd39dacaa1f2cdc2d74da39ae3971246e922907
93 lines
3.8 KiB
ReStructuredText
93 lines
3.8 KiB
ReStructuredText
..
|
|
Copyright 2011-2012 OpenStack Foundation
|
|
All Rights Reserved.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
not use this file except in compliance with the License. You may obtain
|
|
a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
License for the specific language governing permissions and limitations
|
|
under the License.
|
|
|
|
Database Migrations
|
|
===================
|
|
|
|
Starting with Newton, keystone supports upgrading both with and without
|
|
downtime. In order to support this, there are three separate migration
|
|
repositories (all under ``keystone/common/sql/``) that match the three phases
|
|
of an upgrade (schema expansion, data migration, and schema contraction):
|
|
|
|
``expand_repo``
|
|
For additive schema modifications and triggers to ensure data is kept in
|
|
sync between the old and new schema until the point when there are no
|
|
keystone instances running old code.
|
|
|
|
``data_migration_repo``
|
|
To ensure new tables/columns are fully populated with data from the old
|
|
schema.
|
|
|
|
``contract_repo``
|
|
Run after all old code versions have been upgraded to running the new code,
|
|
so remove any old schema columns/tables that are not used by the new
|
|
version of the code. Drop any triggers added in the expand phase.
|
|
|
|
All migrations are required to have a migration script in each of these repos,
|
|
each with the same version number (which is indicated by the first three digits
|
|
of the name of the script, e.g. ``003_add_X_table.py``). If there is no work to
|
|
do in a specific phase, then include a no-op migration to simply ``pass`` (in
|
|
fact the ``001`` migration in each of these repositories is a no-op migration,
|
|
so that can be used as a template).
|
|
|
|
.. NOTE::
|
|
|
|
Since rolling upgrade support was added part way through the Newton cycle,
|
|
some migrations had already been added to the legacy repository
|
|
(``keystone/common/sql/migrate_repo``). This repository is now closed and
|
|
no new migrations should be added (except for backporting of previous
|
|
placeholders).
|
|
|
|
In order to support rolling upgrades, where two releases of keystone briefly
|
|
operate side-by-side using the same database without downtime, each phase of
|
|
the migration must adhere to following constraints:
|
|
|
|
These triggers should be removed in the contract phase. There are further
|
|
restrictions as to what can and cannot be included in migration scripts in each
|
|
phase:
|
|
|
|
Expand phase:
|
|
Only additive schema changes are allowed, such as new columns, tables,
|
|
indices, and triggers.
|
|
|
|
Data insertion, modification, and removal is not allowed.
|
|
|
|
Triggers must be created to keep data in sync between the previous release
|
|
and the next release. Data written by the previous release must be readable
|
|
by both the previous release and the next release. Data written by the next
|
|
release must be readable by both the next release and the previous release.
|
|
|
|
In cases it is not possible for triggers to maintain data integrity across
|
|
multiple schemas, writing data should be forbidden using triggers.
|
|
|
|
Data Migration phase:
|
|
Data is allowed to be inserted, updated, and deleted.
|
|
|
|
No schema changes are allowed.
|
|
|
|
Contract phase:
|
|
Only contractive schema changes are allowed, such as dropping or altering
|
|
columns, tables, indices, and triggers.
|
|
|
|
Data insertion, modification, and removal is not allowed.
|
|
|
|
Triggers created during the expand phase must be dropped.
|
|
|
|
For more information on writing individual migration scripts refer to
|
|
`SQLAlchemy-migrate`_.
|
|
|
|
.. _SQLAlchemy-migrate: https://opendev.org/openstack/sqlalchemy-migrate
|