]> review.fuel-infra Code Review - openstack-build/cinder-build.git/commit
Fix race conditions in migration 061
authorMichał Dulko <michal.dulko@intel.com>
Thu, 31 Dec 2015 13:34:30 +0000 (14:34 +0100)
committerMichał Dulko <michal.dulko@intel.com>
Thu, 31 Dec 2015 14:46:20 +0000 (15:46 +0100)
commit8b3ca76b980f126912de1bc8ffa067c199693eb3
tree88f1e63cfc000000afe66994d81b5787829645b2
parent9ae6f0de65e94315ab25c3a448855c68f6e54621
Fix race conditions in migration 061

Migration 061 is supposed to add new `data_timestamp` field and populate
it with value of `created_at` column. This was done by selecting all the
backups and doing updates one-by-one. As it wasn't done in transaction
solution was prone to race condition when a new backup is added while
running the migration. This means that this migration could cause
problems when running in live environment. With blueprint
online-schema-upgrades we want to make Cinder able to perform migrations
live.

A solution is to change this statement to a single DB query which
updates all the rows. This commit also removes unnecessary update to
snapshot_id added there. As this column is nullable it will by default
be NULL, so there's no need to set it manually to that value.

As before and after this commit the migration does logically the same,
this should be safe even if someone is doing inter-release deployments.

An alternative would be to simply add transaction to the update step in
the migration, but that would effectively lock the table for longer
period of time than atomic one-query update.

Closes-Bug: 1530358
Change-Id: Ib8733c096a3dbe2bad00beaf5734936ffcddda33
cinder/db/sqlalchemy/migrate_repo/versions/061_add_snapshot_id_timestamp_to_backups.py