diff --git a/specs/liberty/reuse-the-deleted-image-member-before-create.rst b/specs/liberty/reuse-the-deleted-image-member-before-create.rst new file mode 100644 index 00000000..0f01e072 --- /dev/null +++ b/specs/liberty/reuse-the-deleted-image-member-before-create.rst @@ -0,0 +1,164 @@ +.. + This work is licensed under a Creative Commons Attribution 3.0 Unported + License. + + http://creativecommons.org/licenses/by/3.0/legalcode + +====================================================== +Reuse the deleted image-member before create a new one +====================================================== + +https://blueprints.launchpad.net/glance/+spec/reuse-the-deleted-image-member + +Check the deleted image-member before create a new one, then update it if it +exists, otherwise, create a new one. + +Problem description +=================== + +If glance backend database is not MySQL or postgreSQL,the unique constraint +of image-member only includes image-id and member. In this case, if an +image-member is deleted, then create it again with the same parameters, glance +initiates a query to see if there is already an existing one, but the +result does not include the record which was marked as deleted, glance will +try to create a new one with the same parameters, then it will fail with +duplicate error. + + +Proposed change +=============== + +Use only one record to maintain the member-ship between a pair of image and +tenant. When create a new image-member, at first check all existing +image-member records including the deleted image-member, then update it if it +exists, otherwise, create a new one. + +Alternatives +------------ +Unify the unique constraint for image-member like we did for MySQL and +postgreSQL in 022_image_member_index.py, it has migrated unique constraint of +image-member for MySQL and postgreSQL, now its unique constraint includes +image-id, member and deleted_at. Currently the column "deleted_at" is +nullable. For other databases like DB2, its unique constraint is more +restricted than MySQL. The columns under unique constrains should be +"NOT NULL", otherwise, an error occurs. Thus, we can not create the same unique +constraint for this kinds of database. + +We would alter "deleted_at" column to "not nullable" in migration. That means +we have to insert a default timestamp value for the new created image-member, +an active member with a no-blank timestamp for "deleted_at" would confuse +user. + +Another solution is migrating the unique constraint from (image-id, member, +deleted_at) to (image-id, member,created_at) for MySQL and postgreSQL, from +(image-id, member) to (image-id, member,created_at) for other databases. +created_at is not nullable, so the new constraint will be applicable to all +databases. This solution needs data migration for different database. + +Data model impact +----------------- + +None + +REST API impact +--------------- + +None + +Security impact +--------------- + +None + +Notifications impact +-------------------- + +None + +Other end user impact +--------------------- + +None + +Performance Impact +------------------ + +When create a new image-member, it will search all image-member records +including the deleted items. But if we enable this patch, it will very rare to +see many deleted image-member, as the membership will be kept by only one +record. The only case is, multiple deleted image-members were created before +applying this patch, we could make a migration script in another patch to +remove them. + +Other deployer impact +--------------------- + +Configuration options will change: + +None + +Developer impact +---------------- + +None + + +Implementation +============== + +Assignee(s) +----------- + +Primary assignee: + Long Quan Sha + +Reviewers +--------- + +Core reviewer(s): + nikhil-komawar + Ian Cordasco + +Other reviewer(s): + Kamil Rykowski + Abhishek Kekane + +Work Items +---------- + +* Reuse the deleted image-member when create a new one + + +Dependencies +============ + +None + + +Testing +======= + +* Verify the deleted image-member is updated when create a new one + +Documentation Impact +==================== + +None + + +References +========== + +Proposed patch: + +https://review.openstack.org/190895 + + +unique constraint for PostgreSQL, the same as MySQL: + +http://www.postgresql.org/docs/8.1/static/ddl-constraints.html + +unique constraint for DB2: + +https://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.admin.dbobj.doc/doc/c0020151.html +