diff options
author | Lingxian Kong <anlin.kong@gmail.com> | 2020-04-17 15:14:54 +1200 |
---|---|---|
committer | Lingxian Kong <anlin.kong@gmail.com> | 2020-04-23 10:18:03 +1200 |
commit | a4057b10af44e7f21243e539dd2daad2ad61657b (patch) | |
tree | e8bf82b9d92ea38a5a0a030102d28af655b5a556 /trove/db | |
parent | 8c3df10aa53ca78f764c2580dc99793af03f88b9 (diff) | |
download | trove-a4057b10af44e7f21243e539dd2daad2ad61657b.tar.gz |
Added checks for deleting datastore version13.0.0.0rc113.0.0
* Hard delete the datastore_configuration_parameters table record.
* Make 'datastore_version_id' nullable for 'instances' table.
* Check if the datastore version is still being used before removal.
Story: 2007563
Task: 39451
Change-Id: I84e4a31f14f9327cc01ff2d699167d91112e1565
Diffstat (limited to 'trove/db')
2 files changed, 87 insertions, 0 deletions
diff --git a/trove/db/sqlalchemy/migrate_repo/versions/043_instance_ds_version_nullable.py b/trove/db/sqlalchemy/migrate_repo/versions/043_instance_ds_version_nullable.py new file mode 100644 index 00000000..66e89880 --- /dev/null +++ b/trove/db/sqlalchemy/migrate_repo/versions/043_instance_ds_version_nullable.py @@ -0,0 +1,50 @@ +# Copyright 2012 OpenStack Foundation +# +# 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. + +from sqlalchemy.schema import MetaData +from sqlalchemy import text + +from trove.db.sqlalchemy.migrate_repo.schema import Table +from trove.db.sqlalchemy import utils as db_utils + +meta = MetaData() + + +def upgrade(migrate_engine): + meta.bind = migrate_engine + + instance_table = Table('instances', meta, autoload=True) + datastore_versions_table = Table('datastore_versions', + meta, + autoload=True) + + constraint_names = db_utils.get_foreign_key_constraint_names( + engine=migrate_engine, + table='instances', + columns=[text('datastore_version_id')], + ref_table='datastore_versions', + ref_columns=[text('id')]) + db_utils.drop_foreign_key_constraints( + constraint_names=constraint_names, + columns=[instance_table.c.datastore_version_id], + ref_columns=[datastore_versions_table.c.id]) + + # Make datastore_version_id nullable so that this field could be set to + # NULL when instance is deleted. + instance_table.c.datastore_version_id.alter(nullable=True) + + db_utils.create_foreign_key_constraints( + constraint_names=constraint_names, + columns=[instance_table.c.datastore_version_id], + ref_columns=[datastore_versions_table.c.id]) diff --git a/trove/db/sqlalchemy/migrate_repo/versions/044_remove_datastore_configuration_parameters_deleted.py b/trove/db/sqlalchemy/migrate_repo/versions/044_remove_datastore_configuration_parameters_deleted.py new file mode 100644 index 00000000..7ce81d6a --- /dev/null +++ b/trove/db/sqlalchemy/migrate_repo/versions/044_remove_datastore_configuration_parameters_deleted.py @@ -0,0 +1,37 @@ +# Copyright 2012 OpenStack Foundation +# +# 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. + +from sqlalchemy.schema import MetaData + +from trove.db.sqlalchemy.migrate_repo.schema import Table + +meta = MetaData() + + +def upgrade(migrate_engine): + meta.bind = migrate_engine + + ds_config_param = Table('datastore_configuration_parameters', meta, + autoload=True) + + # Remove records with deleted=1 + if 'deleted' in ds_config_param.c: + ds_config_param.delete(). \ + where(ds_config_param.c.deleted == 1). \ + execute() + + # Delete columns deleted and deleted_at + if migrate_engine.name != "sqlite": + ds_config_param.drop_column('deleted') + ds_config_param.drop_column('deleted_at') |