This spec proposes to modify the create CG from source API
to take an existing CG as the source, in addition to CG snapshot.

blueprints clone-cg

Change-Id: I087cd527cd553c6f9c9ae87aa888148bc26a7c5f
This commit is contained in:
Xing Yang 2015-06-23 17:44:53 -04:00
parent 893c6f862c
commit 265b30f187

160
specs/liberty/clone-cg.rst Normal file
View File

@ -0,0 +1,160 @@
..
This work is licensed under a Creative Commons Attribution 3.0 Unported
License.
http://creativecommons.org/licenses/by/3.0/legalcode
==============================
Clone Consistency Group
==============================
https://blueprints.launchpad.net/cinder/+spec/clone-cg
This proposal is to add a feature to create a cloned consistency group
from an existing one.
Problem description
===================
Currently a user can create a Consistency Group first and then clone
one volume from the existing CG at a time and add it to the new CG
until all volumes are cloned and added to the CG.
The proposal wants to enhance the existing create CG from source API
and make this a one step rather than multi-step process.
Note: The cloned volumes in the new CG are not guanranteed to be
consistent. From the consistency point of view, it's no different from
creating a empty CG first and then creating volume one after another and
adding to the CG.
The existing Create CG from source API allows user to create a CG from
the group snapshot (CG snapshot), which should be consistent.
Use Cases
=========
Suppose a user already has a CG with volumes in it. He/she now wants
to create another CG with all volumes cloned from the other CG. The
proposed change will make this much easier for the user.
Proposed change
===============
* The existing Create CG from Source API takes an existing CG snapshot
as the source.
* This blueprint proposes to modify the existing API to accept an existing
CG as the source.
Alternatives
------------
Without the proposed changes, we can create a CG from an existing CG
with these steps:
* Create an empty CG.
* Create a cloned volume from an existing volume in an existing CG
and add to the new CG.
* Repeat the above step for all volumes in the CG.
Data model impact
-----------------
* DB Schema Change: A new column source_cg_id will be added to the
consistencygroups table.
REST API impact
---------------
Consistency Group API change
* Create Consistency Group from Source
* V2/<tenant id>/consistencygroups/create_from_src
* Method: POST
* JSON schema definition for V2::
{
"consistencygroup-from-src":
{
"name": "my_cg", # existing
"description": "My consistency group", # existing
"cgsnapshot_id": "xxxxxxxx", # existing
"consistencygroup_id": "xxxxxxxx", # new
}
}
* In the existing Create Consistency Group from Source API, add a new
parameter "consistencygroup_id" to allow an existing CG to be the source
of the new CG.
* Cinder Volume Driver API
Two new optional parameters will be added to the existing volume driver API:
* def create_consistencygroup_from_src(self, context, group, volumes,
cgsnapshot=None, snapshots=None, src_group=None, src_volumes=None)
* Note only "src_group" and "src_volumes" are new parameters.
Security impact
---------------
Notifications impact
--------------------
Other end user impact
---------------------
python-cinderclient needs to be changed to support the modified API.
* Create Cloned CG
cinder consisgroup-create-from-src --name <name> --description <description>
--consistencygroup <cg uuid or name>
Performance Impact
------------------
Other deployer impact
---------------------
None.
Developer impact
----------------
Driver developers can add support to this feature in the modified driver API.
Implementation
==============
Assignee(s)
-----------
Primary assignee:
xing-yang
Other contributors:
Work Items
----------
1. API change:
* Modify Create CG from Source API
2. Volume Driver API change:
* Modify corresponding driver API
3. DB schema change
Dependencies
============
Testing
=======
New unit tests will be added to test the changed code.
Documentation Impact
====================
Documentation changes are needed.
References
==========