There are some changes according reviews which should be updated into spec. This was also not able to be completed in queens, so moving the spec into the rocky specs folder. Implements: blueprint transfer-snps-with-vols Change-Id: I1776febe269600f992e830ef4a46c37033a5b00e
3.8 KiB
Transfer snapshots with volumes
https://blueprints.launchpad.net/cinder/+spec/transfer-snps-with-vols
This spec aims to extend transfer function that can transfer snapshots with volumes at same time.
Problem description
Currently, Cinder can transfer volumes to another project's owner, but if this volume has snapshots before transferring, after this operation, new owner can't delete this volume successfully since it has snapshots.
Use Cases
When transferring volume with snapshots, a user will now have a choice whether or not to transfer those snapshots along with a volume. By default, snapshots are transferred, but selecting this option will allow snapshots not to be transferred to another project. Note those snapshots can be deleted by the remote user if necessary.
Proposed change
In normal deleting, Cinder will disallow the request since the volume has snapshots, but unfortunately, Cinder has cascade deleting operation now, the request will be passed down to driver, some driver will raise exception since snapshot is still existing. So it also should be changed in cascade deletion process.
- Add an optional argument "--no-snapshots" in transfer API and CLI. If user didn't specify it, cinder will transfer snapshots that a volume has by default.
- Add a new field in transfer DB model to record this option.
- Update snapshot's information in DB like user id, project id, etc.
- Check if the volume still has some snapshots in other project when cascade deleting.
Alternatives
Another option is cinder transfer the snapshots if user specifies an option argument '--with-snapshots'.
This option can be minimal with the change, in order to make the client code more simple.
Data model impact
Add a new field "with_snapshots(boolean)" in transfer model.
REST API impact
New microversion in Cinder API.
Add a new V3 API and an optional argument "no_snapshots":
POST /v3/{project_id}/volume-transfers RESP BODY: {"transfer": { ... no_snapshots: [True/False], } }
Security impact
If users didn't transfer snapshots with volume, there could be kind of security impact that remote users may be able to act upon the untransferred snapshots. For example, by leveraging COW, that remote user can change the snapshot size in backend.
Notifications impact
Add 'with_snapshots' information to transfer notificaiton.
Other end user impact
None
Performance Impact
There could be a db performance issue if a lot of snapshots associated with a given volume since cinder need to change those snapshots' project id, user id, etc.
Other deployer impact
None
Developer impact
Drivers that implement some form of volume ownership tracking on the backend will need to be fixed to track this change too.
Implementation
Assignee(s)
- Primary assignee:
-
wanghao<sxmatch1986@gmail.com>
- Other contributors:
-
None
Work Items
- Implement feature in Cinder tree.
- Update cinderclient to support this functionality.
- Add change to API doc.
Dependencies
None
Testing
Both unit and Tempest tests are needed to be created to cover the code change.
Documentation Impact
The cinder API documention will need to be updated to reflect the REST API changes.
Devref entry on the volume transfer driver entry point should be created.
References
None