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 inshares
table to identify shares placed in the Recycle Bin.A new column
scheduled_to_be_deleted_at
will be added inshares
table, the shares in Recycle Bin will be automatically and completely deleted once the expire time reached. Shares not in Recycle Binscheduled_to_be_deleted_at
will be None.A new property
is_soft_deleted
will be added inShareInstance
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 thescheduled_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 thescheduled_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
andscheduled_to_be_deleted_at
will be added to model ofshares
.A new property
is_soft_deleted
will be added inShareInstance
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 <share_id>
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 <share_id>
Performance Impact¶
None
Other deployer impact¶
None
Developer impact¶
None
Implementation¶
Assignee(s)¶
- Primary assignee:
haixin<haixin@inspur.com>
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