From 7473e2760c62dd1a5e80aacee0cec69b3e811c9e Mon Sep 17 00:00:00 2001 From: Zhenguo Niu Date: Wed, 22 Mar 2017 10:14:52 +0800 Subject: [PATCH] Remove soft-delete for instances There was widespread agreement to not soft-delete any more, so we should not keep this. Change-Id: Ia7d4daa46aa669a9b7ddf14c2f6df500b5a317ba --- .../versions/91941bf1ebc9_initial_migration.py | 2 -- mogan/db/sqlalchemy/api.py | 16 ++++++---------- mogan/db/sqlalchemy/models.py | 3 --- mogan/engine/manager.py | 1 - mogan/objects/instance.py | 5 ----- mogan/tests/unit/db/utils.py | 2 -- mogan/tests/unit/objects/test_objects.py | 2 +- 7 files changed, 7 insertions(+), 24 deletions(-) diff --git a/mogan/db/sqlalchemy/alembic/versions/91941bf1ebc9_initial_migration.py b/mogan/db/sqlalchemy/alembic/versions/91941bf1ebc9_initial_migration.py index b0c4de0b..5de2ec6b 100644 --- a/mogan/db/sqlalchemy/alembic/versions/91941bf1ebc9_initial_migration.py +++ b/mogan/db/sqlalchemy/alembic/versions/91941bf1ebc9_initial_migration.py @@ -71,7 +71,6 @@ def upgrade(): 'instances', sa.Column('created_at', sa.DateTime(), nullable=True), sa.Column('updated_at', sa.DateTime(), nullable=True), - sa.Column('deleted_at', sa.DateTime(), nullable=True), sa.Column('uuid', sa.String(length=36), nullable=True), sa.Column('id', sa.Integer(), nullable=False), sa.Column('user_id', sa.String(length=36), nullable=True), @@ -86,7 +85,6 @@ def upgrade(): sa.Column('availability_zone', sa.String(length=255), nullable=True), sa.Column('node_uuid', sa.String(length=36), nullable=True), sa.Column('extra', sa.Text(), nullable=True), - sa.Column('deleted', sa.Integer(), nullable=False), sa.Column('locked', sa.Boolean(), nullable=True), sa.Column('locked_by', sa.Enum('admin', 'owner'), nullable=True), sa.PrimaryKeyConstraint('id'), diff --git a/mogan/db/sqlalchemy/api.py b/mogan/db/sqlalchemy/api.py index 0aab847c..6a86dddb 100644 --- a/mogan/db/sqlalchemy/api.py +++ b/mogan/db/sqlalchemy/api.py @@ -70,11 +70,6 @@ def model_query(context, model, *args, **kwargs): if kwargs.pop("project_only", False): kwargs["project_id"] = context.tenant - if kwargs.pop("instance", False): - kwargs["deleted"] = False - if kwargs.pop("read_deleted", False): - kwargs["deleted"] = True - with _session_for_read() as session: query = sqlalchemyutils.model_query( model, session, args, **kwargs) @@ -216,14 +211,15 @@ class Connection(api.Connection): def instance_destroy(self, context, instance_id): with _session_for_write(): - query = model_query(context, models.Instance, instance=True) + query = model_query(context, models.Instance) query = add_identity_filter(query, instance_id) - count = query.soft_delete() + + nics_query = model_query(context, models.InstanceNic).filter_by( + instance_uuid=instance_id) + nics_query.delete() + count = query.delete() if count != 1: raise exception.InstanceNotFound(instance=instance_id) - instance_nics = model_query(context, models.InstanceNic).filter_by( - instance_uuid=instance_id) - instance_nics.delete() def instance_update(self, context, instance_id, values): if 'uuid' in values: diff --git a/mogan/db/sqlalchemy/models.py b/mogan/db/sqlalchemy/models.py index 7d010909..f95ea299 100644 --- a/mogan/db/sqlalchemy/models.py +++ b/mogan/db/sqlalchemy/models.py @@ -84,10 +84,7 @@ class Instance(Base): image_uuid = Column(String(36), nullable=True) node_uuid = Column(String(36), nullable=True) launched_at = Column(DateTime, nullable=True) - deleted_at = Column(DateTime, nullable=True) extra = Column(db_types.JsonEncodedDict) - deleted = Column(Boolean, default=False) - locked = Column(Boolean) locked_by = Column(Enum('owner', 'admin')) diff --git a/mogan/engine/manager.py b/mogan/engine/manager.py index b275c704..9f3f4b13 100644 --- a/mogan/engine/manager.py +++ b/mogan/engine/manager.py @@ -406,7 +406,6 @@ class EngineManager(base_manager.BaseEngineManager): do_delete_instance(instance) instance.power_state = states.NOSTATE - instance.deleted_at = timeutils.utcnow() utils.process_event(fsm, instance, event='done') instance.destroy() diff --git a/mogan/objects/instance.py b/mogan/objects/instance.py index edb48743..78affe2f 100644 --- a/mogan/objects/instance.py +++ b/mogan/objects/instance.py @@ -53,8 +53,6 @@ class Instance(base.MoganObject, object_base.VersionedObjectDictCompat): 'node_uuid': object_fields.UUIDField(nullable=True), 'launched_at': object_fields.DateTimeField(nullable=True), 'extra': object_fields.FlexibleDictField(nullable=True), - 'deleted': object_fields.BooleanField(default=False), - 'deleted_at': object_fields.DateTimeField(nullable=True), 'locked': object_fields.BooleanField(default=False), 'locked_by': object_fields.StringField(nullable=True), } @@ -148,9 +146,6 @@ class Instance(base.MoganObject, object_base.VersionedObjectDictCompat): def create(self, context=None): """Create a Instance record in the DB.""" values = self.obj_get_changes() - # Since we need to avoid passing False down to the DB layer - # (which uses an integer), we can always default it to zero here. - values['deleted'] = 0 instance_nics = values.pop('nics', None) if instance_nics: values['nics'] = instance_nics.as_list_of_dict() diff --git a/mogan/tests/unit/db/utils.py b/mogan/tests/unit/db/utils.py index 04d6ef67..f2f67efb 100644 --- a/mogan/tests/unit/db/utils.py +++ b/mogan/tests/unit/db/utils.py @@ -58,9 +58,7 @@ def get_test_instance(**kw): 'node_uuid': kw.get('node_uuid', 'f978ef48-d4af-4dad-beec-e6174309bc71'), 'launched_at': kw.get('launched_at'), - 'deleted_at': kw.get('deleted_at'), 'extra': kw.get('extra', {}), - 'deleted': kw.get('deleted', False), 'updated_at': kw.get('updated_at'), 'created_at': kw.get('created_at'), 'locked': kw.get('locked', False), diff --git a/mogan/tests/unit/objects/test_objects.py b/mogan/tests/unit/objects/test_objects.py index 568a176d..c7232385 100644 --- a/mogan/tests/unit/objects/test_objects.py +++ b/mogan/tests/unit/objects/test_objects.py @@ -382,7 +382,7 @@ class _TestObject(object): # version bump. It is md5 hash of object fields and remotable methods. # The fingerprint values should only be changed if there is a version bump. expected_object_fingerprints = { - 'Instance': '1.0-18d0ffc894a0f6b52df73a29919c035b', + 'Instance': '1.0-a4d843f506946e824fe6accb842e0a84', 'ComputeNode': '1.0-36221253681d9acb88efe2a9113071c7', 'ComputeNodeList': '1.0-33a2e1bb91ad4082f9f63429b77c1244', 'ComputePort': '1.0-bdba0f3ece31260c4deea37d39618c1a',