Create share from snapshot extra spec
This spec defines the addition of a new optional extra spec, create_share_from_snapshot_support, which removes the overload from snapshot_support. This is needed prior to the addition of new snapshot semantics, such as revert-to-snapshot. APIImpact DocImpact Partially implements: blueprint add-create-share-from-snapshot-extra-spec Change-Id: I4d95fe3609b7728ea7d9ed8be6e96241307f0002
This commit is contained in:
parent
8b7f1ab43c
commit
0a3918f03f
@ -3,6 +3,15 @@
|
||||
You can adapt this file completely to your liking, but it should at least
|
||||
contain the root `toctree` directive.
|
||||
|
||||
Ocata approved specs
|
||||
====================
|
||||
|
||||
.. toctree::
|
||||
:glob:
|
||||
:maxdepth: 1
|
||||
|
||||
specs/ocata/*
|
||||
|
||||
Newton approved specs
|
||||
=====================
|
||||
|
||||
|
201
specs/ocata/create-share-from-snapshot-extra-spec.rst
Normal file
201
specs/ocata/create-share-from-snapshot-extra-spec.rst
Normal file
@ -0,0 +1,201 @@
|
||||
..
|
||||
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||
License.
|
||||
|
||||
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||
|
||||
=====================================
|
||||
Create share from snapshot extra spec
|
||||
=====================================
|
||||
|
||||
https://blueprints.launchpad.net/manila/+spec/add-create-share-from-snapshot-extra-spec
|
||||
|
||||
This spec describes why and how we must separate the overloaded meaning of
|
||||
'snapshot_support' into two independent standard extra specs. Furthermore, to
|
||||
prevent the proliferation of required extra specs as well as to make the
|
||||
creation of new share types as simple and flexible as possible, we can make
|
||||
snapshot_support and each of the new snapshot-related extra specs optional.
|
||||
|
||||
Problem description
|
||||
===================
|
||||
|
||||
For a long time, manila has had the 'snapshot_support' standard extra spec,
|
||||
which has been overloaded to mean *two* things:
|
||||
|
||||
* a driver can take a snapshot of a share, and
|
||||
* a driver can create new shares from a snapshot
|
||||
|
||||
With additional snapshot semantics being proposed, including share revert and
|
||||
mountable snapshots, we expect that some drivers may support the new
|
||||
semantics without being able to create new shares from snapshots. It is
|
||||
therefore necessary to break the overload of 'snapshot_support'.
|
||||
|
||||
We can add a new standard extra spec, create_share_from_snapshot_support, to
|
||||
indicate whether a backend can create new shares from share snapshots.
|
||||
|
||||
The snapshot_support extra spec is currently required, which means an admin
|
||||
cannot create a type where snapshot_support is a "don't care", such that
|
||||
shares of that type will not offer snapshot features even if they exist on
|
||||
storage controllers than can take snapshots. By making snapshot_support and
|
||||
the other new snapshot-related extra specs optional, we can support "don't
|
||||
care" semantics on share types.
|
||||
|
||||
Use cases
|
||||
=========
|
||||
|
||||
A driver that can take snapshots of shares, but not create new shares from
|
||||
snapshots, will benefit from this change. For example, such a driver could
|
||||
report snapshot_support=True, create_share_from_snapshot_support=False, and
|
||||
revert_to_snapshot_support=True.
|
||||
|
||||
Proposed change
|
||||
===============
|
||||
|
||||
To accomplish this change, we will do the following:
|
||||
|
||||
* Define the new extra spec, create_share_from_snapshot_support, at the next
|
||||
available microversion.
|
||||
* Add a database migration to add create_share_from_snapshot_support to each
|
||||
share type that contains snapshot_support. Because snapshot_support was
|
||||
overloaded prior to this change, we can simply copy the value of
|
||||
snapshot_support for each type to the new create_share_from_snapshot_support
|
||||
extra spec.
|
||||
* Add a database migration to add the new create_share_from_snapshot_support
|
||||
capability to the share record, so that manila has a record of each share's
|
||||
relevant snapshot capability at the time the share was created.
|
||||
* Copy the value of create_share_from_snapshot_support to each share upon
|
||||
share creation. If create_share_from_snapshot_support is not present on the
|
||||
share type, set the corresponding value on the share to False.
|
||||
* Continue copying the value of snapshot_support to each share upon share
|
||||
creation. Because snapshot_support is now optional, if snapshot_support is
|
||||
not present on the share type, set the corresponding value on the share to
|
||||
False.
|
||||
* Ensure create_share_from_snapshot_support is True when creating shares from
|
||||
snapshots.
|
||||
* Ensure that previous microversions cannot delete the snapshot_support extra
|
||||
spec from share types.
|
||||
* Ensure that previous microversions continue setting a default value of True
|
||||
for snapshot_support as well as create_share_from_snapshot_support.
|
||||
|
||||
Alternatives
|
||||
------------
|
||||
|
||||
We could leave the overload in place, but this would lead to confusing and
|
||||
incorrect behavior for drivers that can create snapshots but not create new
|
||||
shares from them.
|
||||
|
||||
We could continue requiring snapshot_support and all new snapshot-related
|
||||
extra specs to be present on each share type, but that would prevent admins
|
||||
from creating share types with "don't care" semantics.
|
||||
|
||||
Data model impact
|
||||
-----------------
|
||||
|
||||
* Add create_share_from_snapshot_support field to share table, and copy value
|
||||
of snapshot_support to the new create_share_from_snapshot_support field for
|
||||
each share.
|
||||
* Add create_share_from_snapshot_support rows to the share_type_extra_specs
|
||||
table for each type that has snapshot_support, with the value copied from
|
||||
snapshot_support.
|
||||
|
||||
REST API impact
|
||||
---------------
|
||||
|
||||
At the microversion for this change:
|
||||
|
||||
* The snapshot_support extra spec becomes deletable, as are the new
|
||||
snapshot-related extra specs.
|
||||
* Default values for snapshot_support are no longer provided. If not specified
|
||||
on a share type, snapshot_support and create_share_from_snapshot_support are
|
||||
not returned from the share types API for admin contexts. However, users see
|
||||
both values with a nominal value of False so that they know how shares of
|
||||
that type will behave.
|
||||
* The value of create_share_from_snapshot_support is checked on a share prior
|
||||
to creating a share from a snapshot (else HTTPBadRequest is returned).
|
||||
|
||||
Driver impact
|
||||
-------------
|
||||
|
||||
The value of create_share_from_snapshot_support is inferred for each driver
|
||||
based on the methods it contains, much as is already done for snapshot_support.
|
||||
|
||||
Security impact
|
||||
---------------
|
||||
|
||||
None
|
||||
|
||||
Notifications impact
|
||||
--------------------
|
||||
|
||||
None
|
||||
|
||||
Other end user impact
|
||||
---------------------
|
||||
|
||||
Prior to this change, python-manilaclient provided default values for the
|
||||
required extra spec snapshot_support. As of the new microversion, it will not
|
||||
provide a default for snapshot_support because the extra spec is no longer
|
||||
required.
|
||||
|
||||
Performance Impact
|
||||
------------------
|
||||
|
||||
None
|
||||
|
||||
Other deployer impact
|
||||
---------------------
|
||||
|
||||
None
|
||||
|
||||
Developer impact
|
||||
----------------
|
||||
|
||||
None
|
||||
|
||||
|
||||
Implementation
|
||||
==============
|
||||
|
||||
Assignee(s)
|
||||
-----------
|
||||
|
||||
Primary assignee:
|
||||
* clintonk (manila & python-manilaclient)
|
||||
|
||||
Other contributors:
|
||||
* gouthamr (tempest & db-related tests)
|
||||
|
||||
Work Items
|
||||
----------
|
||||
|
||||
Code is all in one patch and has already been made available.
|
||||
|
||||
|
||||
Dependencies
|
||||
============
|
||||
|
||||
None
|
||||
|
||||
|
||||
Testing
|
||||
=======
|
||||
|
||||
New unit and tempest test coverage will be added for all of the added or
|
||||
changed functionality.
|
||||
|
||||
|
||||
Documentation Impact
|
||||
====================
|
||||
|
||||
* API Ref: Add content about the API.
|
||||
* User Guide: Add content about the share types.
|
||||
* Admin Guide: Add content regarding the common capabilities and the don't care
|
||||
behavior.
|
||||
* Developer Ref: Add create_share_from_snapshot_support to common capabilities
|
||||
and the infamous driver matrix.
|
||||
|
||||
|
||||
References
|
||||
==========
|
||||
|
||||
None
|
Loading…
Reference in New Issue
Block a user