Skip to content

Commit

Permalink
This patch stops metadata from being deleted when an instance is dele…
Browse files Browse the repository at this point in the history
…ted.

This patch makes it so that instance metadata, system metadata, and block
device mappings are no longer set to deleted when an instance is deleted.
It doesn't make sense to delete them just because the instance they describe
has been deleted.

This patch DOES NOT MIGRATE currently deleted metadata or block
device mappings for currently deleted instances, that means that usage
notifications for deleted instances that were deleted before this patch will
show image_meta as empty.

Fixes bug 1021830

Change-Id: I33ee402b859834e09535c7925957bee0a1d91207
  • Loading branch information
ameade committed Jul 6, 2012
1 parent e6ec6f8 commit 0598db0
Show file tree
Hide file tree
Showing 4 changed files with 6 additions and 39 deletions.
5 changes: 2 additions & 3 deletions nova/compute/manager.py
Expand Up @@ -762,9 +762,8 @@ def _delete_instance(self, context, instance):
task_state=None,
terminated_at=timeutils.utcnow())
self.db.instance_destroy(context, instance_uuid)
with utils.temporary_mutation(context, read_deleted="yes"):
system_meta = self.db.instance_system_metadata_get(context,
instance_uuid)
system_meta = self.db.instance_system_metadata_get(context,
instance_uuid)
self._notify_about_instance_usage(context, instance, "delete.end",
system_metadata=system_meta)

Expand Down
9 changes: 2 additions & 7 deletions nova/compute/utils.py
Expand Up @@ -56,13 +56,8 @@ def notify_usage_exists(context, instance_ref, current_period=False,

if system_metadata is None:
try:
if instance_ref.get('deleted'):
with utils.temporary_mutation(context, read_deleted='yes'):
system_metadata = db.instance_system_metadata_get(
context, instance_ref.uuid)
else:
system_metadata = db.instance_system_metadata_get(
context, instance_ref.uuid)
system_metadata = db.instance_system_metadata_get(
context, instance_ref.uuid)
except exception.NotFound:
system_metadata = {}

Expand Down
22 changes: 0 additions & 22 deletions nova/db/sqlalchemy/api.py
Expand Up @@ -1410,21 +1410,6 @@ def instance_destroy(context, instance_uuid, constraint=None):
update({'deleted': True,
'deleted_at': timeutils.utcnow(),
'updated_at': literal_column('updated_at')})
session.query(models.InstanceMetadata).\
filter_by(instance_uuid=instance_ref['uuid']).\
update({'deleted': True,
'deleted_at': timeutils.utcnow(),
'updated_at': literal_column('updated_at')})
session.query(models.InstanceSystemMetadata).\
filter_by(instance_uuid=instance_ref['uuid']).\
update({'deleted': True,
'deleted_at': timeutils.utcnow(),
'updated_at': literal_column('updated_at')})
session.query(models.BlockDeviceMapping).\
filter_by(instance_uuid=instance_ref['uuid']).\
update({'deleted': True,
'deleted_at': timeutils.utcnow(),
'updated_at': literal_column('updated_at')})

instance_info_cache_delete(context, instance_ref['uuid'],
session=session)
Expand Down Expand Up @@ -4161,7 +4146,6 @@ def _instance_metadata_get_query(context, instance_uuid, session=None):


@require_context
@require_instance_exists_using_uuid
def instance_metadata_get(context, instance_uuid):
rows = _instance_metadata_get_query(context, instance_uuid).all()

Expand All @@ -4173,7 +4157,6 @@ def instance_metadata_get(context, instance_uuid):


@require_context
@require_instance_exists_using_uuid
def instance_metadata_delete(context, instance_uuid, key):
_instance_metadata_get_query(context, instance_uuid).\
filter_by(key=key).\
Expand All @@ -4183,7 +4166,6 @@ def instance_metadata_delete(context, instance_uuid, key):


@require_context
@require_instance_exists_using_uuid
def instance_metadata_get_item(context, instance_uuid, key, session=None):
result = _instance_metadata_get_query(
context, instance_uuid, session=session).\
Expand All @@ -4198,7 +4180,6 @@ def instance_metadata_get_item(context, instance_uuid, key, session=None):


@require_context
@require_instance_exists_using_uuid
def instance_metadata_update(context, instance_uuid, metadata, delete):
session = get_session()

Expand Down Expand Up @@ -4243,7 +4224,6 @@ def _instance_system_metadata_get_query(context, instance_uuid, session=None):


@require_context
@require_instance_exists_using_uuid
def instance_system_metadata_get(context, instance_uuid):
rows = _instance_system_metadata_get_query(context, instance_uuid).all()

Expand All @@ -4255,7 +4235,6 @@ def instance_system_metadata_get(context, instance_uuid):


@require_context
@require_instance_exists_using_uuid
def instance_system_metadata_delete(context, instance_uuid, key):
_instance_system_metadata_get_query(context, instance_uuid).\
filter_by(key=key).\
Expand All @@ -4279,7 +4258,6 @@ def _instance_system_metadata_get_item(context, instance_uuid, key,


@require_context
@require_instance_exists_using_uuid
def instance_system_metadata_update(context, instance_uuid, metadata, delete):
session = get_session()

Expand Down
9 changes: 2 additions & 7 deletions nova/notifications.py
Expand Up @@ -214,13 +214,8 @@ def null_safe_str(s):

if system_metadata is None:
try:
if instance_ref.get('deleted'):
with utils.temporary_mutation(context, read_deleted='yes'):
system_metadata = db.instance_system_metadata_get(
context, instance_ref['uuid'])
else:
system_metadata = db.instance_system_metadata_get(
context, instance_ref['uuid'])
system_metadata = db.instance_system_metadata_get(
context, instance_ref['uuid'])

except exception.NotFound:
system_metadata = {}
Expand Down

0 comments on commit 0598db0

Please sign in to comment.