summaryrefslogtreecommitdiff
path: root/trove/db
diff options
context:
space:
mode:
authorLingxian Kong <anlin.kong@gmail.com>2020-04-17 15:14:54 +1200
committerLingxian Kong <anlin.kong@gmail.com>2020-04-23 10:18:03 +1200
commita4057b10af44e7f21243e539dd2daad2ad61657b (patch)
treee8bf82b9d92ea38a5a0a030102d28af655b5a556 /trove/db
parent8c3df10aa53ca78f764c2580dc99793af03f88b9 (diff)
downloadtrove-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')
-rw-r--r--trove/db/sqlalchemy/migrate_repo/versions/043_instance_ds_version_nullable.py50
-rw-r--r--trove/db/sqlalchemy/migrate_repo/versions/044_remove_datastore_configuration_parameters_deleted.py37
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')