From 0cbb8b77f3b6dba7fb5dd171e695b7906dad69d0 Mon Sep 17 00:00:00 2001 From: Mike Fedosin Date: Thu, 22 Jun 2017 12:00:56 +0300 Subject: [PATCH] Remove pending_delete status for blobs Currently if artifact is marked as deleted all its blobs logicaly become 'pending_delete' and can't be used anymore. For this reason there is no need to have addtional blob status and explicitely mark blobs - it's all done when we change artifact status to 'deleted' ApiImpact Change-Id: Ide2bb3130d400b7ddcde0760246003b745ef4ff0 --- doc/source/developer/webapi/v1.rst | 13 +--------- glare/objects/base.py | 34 +++++++------------------- glare/objects/meta/fields.py | 3 +-- glare/tests/functional/test_schemas.py | 27 +++++++------------- glare/tests/unit/api/test_delete.py | 2 +- 5 files changed, 21 insertions(+), 58 deletions(-) diff --git a/doc/source/developer/webapi/v1.rst b/doc/source/developer/webapi/v1.rst index 879cee2..5c246ba 100644 --- a/doc/source/developer/webapi/v1.rst +++ b/doc/source/developer/webapi/v1.rst @@ -164,7 +164,7 @@ using Representational State Transfer concept (ReST). "external": {"type": "boolean"}, "id": {"type": "string"}, "status": {"type": "string", - "enum": ["saving", "active", "pending_delete"]}, + "enum": ["saving", "active"]}, "content_type": {"type": ["string", "null"]}, }, "required": ["url", "size", "md5", "sha1", "sha256", "external", @@ -177,31 +177,20 @@ using Representational State Transfer concept (ReST). * *active* - blob upload successfully finished. - * *pending_delete* - indicates that blob will be deleted soon by Scrubber - (if delayed delete is enabled) or by Glare itself. - .. list-table:: **Blob status transition table** :header-rows: 1 * - Blob Status - saving - active - - pending delete * - **saving** - X - finish blob upload - - request for artifact delete * - **active** - N/A - X - - request for artifact delete - - * - **pending_delete** - - N/A - - N/A - - X * *Artifact Dict and List* - compound generic field types that implement Dict or List interfaces respectively, and contain values of some diff --git a/glare/objects/base.py b/glare/objects/base.py index c5dbce0..effa437 100644 --- a/glare/objects/base.py +++ b/glare/objects/base.py @@ -582,14 +582,6 @@ class BaseArtifact(base.VersionedObject): for af in cls.db_api.list( context, filters, marker, limit, sort, latest)] - @staticmethod - def _prepare_blob_delete(b, af, name): - if b['status'] == glare_fields.BlobFieldType.SAVING: - msg = _('Blob %(name)s is saving for artifact %(id)s' - ) % {'name': name, 'id': af.id} - raise exception.Conflict(msg) - b['status'] = glare_fields.BlobFieldType.PENDING_DELETE - @classmethod def _delete_blobs(cls, blobs, context, af): for name, blob in blobs.items(): @@ -623,24 +615,16 @@ class BaseArtifact(base.VersionedObject): # marking artifact as deleted cls.db_api.update(context, af.id, {'status': cls.STATUS.DELETED}) - # marking all blobs as pending delete + # collect all uploaded blobs blobs = {} - for name, field in af.fields.items(): - if cls.is_blob(name): - b = getattr(af, name) - if b: - cls._prepare_blob_delete(b, af, name) - blobs[name] = b - elif cls.is_blob_dict(name): - bd = getattr(af, name) - if bd: - for key, b in bd.items(): - cls._prepare_blob_delete(b, af, name) - blobs[name] = bd - LOG.debug("Marked artifact %(artifact)s as deleted and all its blobs " - "%(blobs) as pending delete.", - {'artifact': af.id, 'blobs': blobs}) - cls.db_api.update_blob(context, af.id, blobs) + for name in af.fields: + if cls.is_blob(name) or cls.is_blob_dict(name): + field = getattr(af, name) + if field: + blobs[name] = field + + LOG.debug("Marked artifact %(artifact)s as deleted.", + {'artifact': af.id}) if not CONF.delayed_delete: if blobs: diff --git a/glare/objects/meta/fields.py b/glare/objects/meta/fields.py index 10ab7be..4581a58 100644 --- a/glare/objects/meta/fields.py +++ b/glare/objects/meta/fields.py @@ -54,8 +54,7 @@ class VersionField(fields.AutoTypedField): class BlobFieldType(fields.FieldType): """Blob field contains reference to blob location. """ - BLOB_STATUS = (SAVING, ACTIVE, PENDING_DELETE) = ( - 'saving', 'active', 'pending_delete') + BLOB_STATUS = (SAVING, ACTIVE) = ('saving', 'active') BLOB_SCHEMA = { 'type': 'object', diff --git a/glare/tests/functional/test_schemas.py b/glare/tests/functional/test_schemas.py index 4feb1bd..bdc7aab 100644 --- a/glare/tests/functional/test_schemas.py +++ b/glare/tests/functional/test_schemas.py @@ -178,8 +178,7 @@ fixtures = { u'status': { u'enum': [ u'saving', - u'active', - u'pending_delete'], + u'active'], u'type': u'string'}}, u'required': [u'size', u'md5', u'sha1', u'sha256', @@ -231,8 +230,7 @@ fixtures = { u'status': { u'enum': [ u'saving', - u'active', - u'pending_delete'], + u'active'], u'type': u'string'}}, u'required': [u'size', u'md5', u'sha1', u'sha256', @@ -412,8 +410,7 @@ fixtures = { u'status': { u'enum': [ u'saving', - u'active', - u'pending_delete'], + u'active'], u'type': u'string'}}, u'required': [u'size', u'md5', u'sha1', u'sha256', @@ -494,8 +491,7 @@ fixtures = { u'size': {u'type': [u'number', u'null']}, u'status': {u'enum': [u'saving', - u'active', - u'pending_delete'], + u'active'], u'type': u'string'}}, u'required': [u'size', u'md5', u'sha1', u'sha256', @@ -605,8 +601,7 @@ fixtures = { u'size': {u'type': [u'number', u'null']}, u'status': {u'enum': [u'saving', - u'active', - u'pending_delete'], + u'active'], u'type': u'string'}}, u'required': [u'size', u'md5', u'sha1', u'sha256', @@ -698,8 +693,7 @@ fixtures = { u'size': {u'type': [u'number', u'null']}, u'status': {u'enum': [u'saving', - u'active', - u'pending_delete'], + u'active'], u'type': u'string'}}, u'required': [u'size', u'md5', u'sha1', u'sha256', @@ -844,8 +838,7 @@ fixtures = { u'size': {u'type': [u'number', u'null']}, u'status': {u'enum': [u'saving', - u'active', - u'pending_delete'], + u'active'], u'type': u'string'}}, u'required': [u'size', u'md5', u'sha1', u'sha256', @@ -878,8 +871,7 @@ fixtures = { u'size': {u'type': [u'number', u'null']}, u'status': {u'enum': [u'saving', - u'active', - u'pending_delete'], + u'active'], u'type': u'string'}}, u'required': [u'size', u'md5', u'sha1', u'sha256', @@ -910,8 +902,7 @@ fixtures = { u'size': {u'type': [u'number', u'null']}, u'status': {u'enum': [u'saving', - u'active', - u'pending_delete'], + u'active'], u'type': u'string'}}, u'required': [u'size', u'md5', u'sha1', u'sha256', diff --git a/glare/tests/unit/api/test_delete.py b/glare/tests/unit/api/test_delete.py index 7f9f115..cacd343 100644 --- a/glare/tests/unit/api/test_delete.py +++ b/glare/tests/unit/api/test_delete.py @@ -163,7 +163,7 @@ class TestArtifactUpdate(base.BaseTestArtifactAPI): self.artifact = self.controller.show( self.req, 'sample_artifact', self.artifact['id']) self.assertEqual('deleted', self.artifact['status']) - self.assertEqual('pending_delete', self.artifact['blob']['status']) + self.assertEqual('active', self.artifact['blob']['status']) # Disable delayed delete self.config(delayed_delete=False) # Delete artifact and check that 'delete_blob' was called this time