From a11b04fb6312bd515dfb6ff43f15b98918eaee75 Mon Sep 17 00:00:00 2001 From: haixin Date: Sat, 8 May 2021 14:34:24 +0800 Subject: [PATCH] Manila share support Recycle Bin Add support share Recycle Bin, the end user can soft delete share to Recycle Bin, and can restore the share within 7 dyas, otherwise the share will be deleted automatically. Partially-Implements: blueprint manila-share-support-recycle-bin Change-Id: I9359387267aa617f07e977e30da11efaead2b171 --- specs/xena/remove-me.rst | 6 - specs/xena/share-support-recycle-bin.rst | 236 +++++++++++++++++++++++ 2 files changed, 236 insertions(+), 6 deletions(-) delete mode 100644 specs/xena/remove-me.rst create mode 100644 specs/xena/share-support-recycle-bin.rst diff --git a/specs/xena/remove-me.rst b/specs/xena/remove-me.rst deleted file mode 100644 index 7dafbf1..0000000 --- a/specs/xena/remove-me.rst +++ /dev/null @@ -1,6 +0,0 @@ -.. This file is a place holder. It should be removed by - any patch proposing a spec for the Xena release - -================================ -No specs have yet been approved. -================================ diff --git a/specs/xena/share-support-recycle-bin.rst b/specs/xena/share-support-recycle-bin.rst new file mode 100644 index 0000000..79b3359 --- /dev/null +++ b/specs/xena/share-support-recycle-bin.rst @@ -0,0 +1,236 @@ +.. + This work is licensed under a Creative Commons Attribution 3.0 Unported + License. + + http://creativecommons.org/licenses/by/3.0/legalcode + +========================= +Support Share Recycle Bin +========================= + +https://blueprints.launchpad.net/manila/+spec/manila-share-support-Recycle-Bin + +Manila doesn't support share Recycle Bin. This BP is to add support for share +Recycle Bin. The end user can soft delete share to Recycle Bin, and can restore +it. + +Problem Description +=================== + +If users want to remove a share from Manila, it is possible to delete a given +share. Or if they want the share only not being managed by Manila anymore, +they can unmanage it and the share would still exist in the share backend. If +users later wants to restore the share, they must record +``export_location_path``, ``host``, ``share_proto`` and so on, and end users +do not have permission to manage a share. If the user never uses the share +again, this share data will remain permanently on the back-end storage, +becoming garbage data. So users need a way to temporarily delete and easily +restore. + +Use Cases +========= + +* The user wants to soft delete shares to Recycle Bin. +* The user wants to list shares in Recycle Bin. +* The user wants to restore shares from Recycle Bin. +* The user wants to completely delete share from Recycle Bin. + +Proposed Change +=============== + +The following are the changes to be made: + +* A new column ``is_soft_deleted`` will be added in ``shares`` table to + identify shares placed in the Recycle Bin. + +* A new column ``scheduled_to_be_deleted_at`` will be added in ``shares`` + table, the shares in Recycle Bin will be automatically and completely + deleted once the expire time reached. Shares not in Recycle Bin + ``scheduled_to_be_deleted_at`` will be None. + +* A new property ``is_soft_deleted`` will be added in ``ShareInstance`` model. + This property will inherit the parent share's value. + +* Add new configuration item ``soft_deleted_share_hold_time``, which means + the maximum time cloud administrators want to keep a share in the recycle + bin. The default value is 604800 seconds (7 days). + +* A new share action will be added for soft delete share. Once the share has + been deleted to the Recycle Bin, will set ``is_soft_deleted`` of share to be + True. and calculate the ``scheduled_to_be_deleted_at`` of the share. + ``scheduled_to_be_deleted_at`` = now_time + ``soft_deleted_share_hold_time``. + +* A new request parameter ``is_soft_deleted`` will be added to the original + list shares API. ``is_soft_deleted`` default is False, if set True, it will + only list shares that were soft deleted. + +* the project quota will remain allocated after the share is soft deleted, + and it will not be released until the shares are deleted from the Recycle + Bin. + +* A new periodic task will be added to the share manager layer to check if the + shares in the Recycle Bin have reached their ``scheduled_to_be_deleted_at``. + If the ``scheduled_to_be_deleted_at`` gets reached, the periodic task will + delete the share automatically. + +* Add new API to restore share from Recycle Bin. + +* List share instances will filter the share's ``is_soft_deleted`` is False. + +* The above API changes will bump a new microversion. + +Alternatives +------------ + +None + +Data model impact +----------------- + +* Two new columns ``is_soft_deleted`` and ``scheduled_to_be_deleted_at`` will + be added to model of ``shares``. + +* A new property ``is_soft_deleted`` will be added in ``ShareInstance`` model. + This property will inherit the parent share's value. + +REST API impact +--------------- + +* Soft delete a share to Recycle Bin + +POST /v2/shares/{share_id}/action + +{"soft_delete": null} + +Preconditions + * (1)Share status must be available, error or inactive + * (2)You cannot soft delete share already in Recycle Bin. + * (3)You cannot already have a snapshot of the share. + * (4)You cannot already have a group snapshot of the share. + * (5)You cannot already have a replica of the share. + * (6)You cannot soft delete a share that doesn't belong to your project. + +If the provided `share_id` doesn't exist, the API will respond with +``404 Not Found``. +If the operation can't be performed due to not meet the (1)(3)(4) constraints, +the API will respond with ``400 Bad Request``. +If the operation can't be performed due to not meet the (2)(5) constraints, the +API will respond with ``409 Conflict Request``. +If the operation can't be performed due to not meet the (6) constraints, the +API will respond with ``403 forbidden``. + +* List shares in Recycle Bin + +GET /v2/shares?is_soft_deleted=true + +* List shares in Recycle Bin with details + +GET /v2/shares/detail?is_soft_deleted=true + +* Delete share completely from Recycle Bin + same as delete share not in Recycle Bin + +DELETE /v2/shares/{share_id} + +If the provided `share_id` doesn't exist, the API will respond with +``404 Not Found``. + +* Restore share from Recycle Bin + +POST /v2/shares/{share_id}/restore + +{'restore': null} + +If the provided `share_id` doesn't exist, the API will respond with +``404 Not Found``. +If the share not exist in Recycle Bin, the API will return success directly. + +Security impact +--------------- + +None + +Notifications impact +-------------------- + +None. + +Other end user impact +--------------------- + +The Manila client, CLI will be extended to support share Recycle Bin. + +* The command of soft delete share will be like:: + + manila soft-delete + +* The command of list shares in Recycle Bin, the supported parameters are the + same as the Manila list, it will be like:: + + manila list --soft-deleted + +* The command of restore share from Recycle Bin will be like:: + + manila restore + +Performance Impact +------------------ + +None + +Other deployer impact +--------------------- + +None + +Developer impact +---------------- + +None + + +Implementation +============== + +Assignee(s) +----------- + +Primary assignee: + haixin + + +Work Items +---------- + +* Update API. +* Update Manager. +* Update Manila CLI commands. +* Update unit and tempest test. +* Update related documents. +* Update Manila UI. + +Dependencies +============ + +None + + +Testing +======= + +* Add the unit tests +* Add the tempest tests + +Documentation Impact +==================== + +The following OpenStack documentations will be updated to reflect this change: + +* Openstack Admin Guide +* OpenStack User Guide +* OpenStack API Reference + +References +========== + +None