Update backup's size when backup is created
This spec intends to support update backup's actual size when backup is created. Change-Id: Id1e7b10e96702393a285be25a6cc1ba4ab5c0ecc
This commit is contained in:
parent
a2ffedc9c9
commit
2cee23e802
188
specs/queens/update-backup-size-when-backup-is-created.rst
Normal file
188
specs/queens/update-backup-size-when-backup-is-created.rst
Normal file
@ -0,0 +1,188 @@
|
||||
..
|
||||
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||
License.
|
||||
|
||||
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||
|
||||
===========================================
|
||||
Update backup's size when backup is created
|
||||
===========================================
|
||||
|
||||
https://blueprints.launchpad.net/cinder/+spec/report-size-when-backup-created
|
||||
|
||||
This blueprint proposes to update backup with the size reported by
|
||||
backup backend when backup is created.
|
||||
|
||||
Problem description
|
||||
===================
|
||||
|
||||
Most clouds provide end user a convenient way to protect their data by
|
||||
creating a backup for their volume. Users can create any backup copy at
|
||||
anytime, and the cloud providers charge them by the backup size in total.
|
||||
As the basic volume service, Cinder supports creating, restoring and
|
||||
deleting backups plus the backup quotas, but our backup size isn't correct
|
||||
at present, the backup's size always equals to the original volume's size
|
||||
even if the incremental backup doesn't have any content in it.
|
||||
|
||||
Use Cases
|
||||
=========
|
||||
|
||||
Backup's size attribute will reflect the actual size on the backend, the quota
|
||||
and charge would be more accurate.
|
||||
|
||||
Proposed change
|
||||
===============
|
||||
|
||||
This spec proposes that the backup driver should report the actual size that
|
||||
object holds at the backend when backup is created. So, when user requests to
|
||||
create a backup for a volume with 10G, Cinder will still generate the record
|
||||
with 10G as well as consume 10G for quota reservation, but when the actual
|
||||
size is reported, we will update both the object and the quotas.
|
||||
|
||||
**Note**: The actual size here stands for the final size at the backend, that
|
||||
means if we create backup for a 1G volume which only has 200mb data and
|
||||
after compression only 100mb is used at disk, the actual size is 100mb,
|
||||
not 200mb or 1G.
|
||||
|
||||
As Cinder has the unified unit G for every resource, that size should be
|
||||
rounded up to G too, for example, if we create an incremental backup whose
|
||||
actual size is only 12mb at backend, driver should still report 1 G to
|
||||
Cinder service:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
def backup(self, backup, volume_file, backup_metadata=False):
|
||||
"""Start a backup of a specified volume.
|
||||
|
||||
Driver should return the size that the backup object holds
|
||||
in the backend, with the unit of G. For instance:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
{
|
||||
'size': 2
|
||||
}
|
||||
"""
|
||||
return
|
||||
|
||||
Cinder's backup service would use this ``size`` to update backup model
|
||||
as well as commit portion of the reservation (Instead of commit the
|
||||
reservation record, Cinder will update the reservation and then commit
|
||||
the updated record after backup is actually created in the background
|
||||
to cover this case ).
|
||||
|
||||
In order to report the actual size that backup holds, drivers need
|
||||
to record or calculate the object size. Take our ``chunkeddriver`` for
|
||||
instance, the total size is accumulated by the objects' size::
|
||||
|
||||
size = object1_size + object2_size....
|
||||
|
||||
If compression feature is enabled, the object's size should be::
|
||||
|
||||
size = compressed_object1_size + compressed_object2_size...
|
||||
|
||||
Now Cinder has the attribute ``size`` for backup object which
|
||||
only reflects the volume's size when created. In order to support
|
||||
updating the actual size of the backup, we will add one more attribute
|
||||
here.
|
||||
|
||||
1. **volume_size**: This is used to record the original volume's size
|
||||
and can be used to create new volume when restoring, we can not directly
|
||||
link to the original volume size here because we could resize the volume
|
||||
after the volume is backed up.
|
||||
|
||||
2. **size**: This will be used to store the reported value from driver
|
||||
rather the original volume size. And when backup is first created,
|
||||
this value would be equal to the ``volume_size`` and will be updated
|
||||
when backup is created at backend.
|
||||
|
||||
|
||||
Alternatives
|
||||
------------
|
||||
|
||||
Keep using volume's size to generate the backup's size as well as quota
|
||||
usage record in database.
|
||||
|
||||
Data model impact
|
||||
-----------------
|
||||
|
||||
None
|
||||
|
||||
REST API impact
|
||||
---------------
|
||||
|
||||
None
|
||||
|
||||
Cinder-client impact
|
||||
--------------------
|
||||
|
||||
None
|
||||
|
||||
Security impact
|
||||
---------------
|
||||
|
||||
None
|
||||
|
||||
Notifications impact
|
||||
--------------------
|
||||
|
||||
None
|
||||
|
||||
Other end user impact
|
||||
---------------------
|
||||
|
||||
None
|
||||
|
||||
Performance Impact
|
||||
------------------
|
||||
|
||||
There would be a slight performance impact
|
||||
when committing quota reservations.
|
||||
|
||||
Other deployer impact
|
||||
---------------------
|
||||
|
||||
None
|
||||
|
||||
Developer impact
|
||||
----------------
|
||||
|
||||
Developer should report backup's size in ``backup`` method
|
||||
when adding new backup driver.
|
||||
|
||||
Implementation
|
||||
==============
|
||||
|
||||
Assignee(s)
|
||||
-----------
|
||||
|
||||
Primary assignee:
|
||||
tommylikehu(tommylikehu@gmail.com)
|
||||
|
||||
Work Items
|
||||
----------
|
||||
|
||||
* Update cinder to support update the backup size.
|
||||
* Update existing driver to report backup's actual size.
|
||||
* Add related unit testcases.
|
||||
|
||||
Dependencies
|
||||
============
|
||||
|
||||
None
|
||||
|
||||
Testing
|
||||
=======
|
||||
|
||||
* Add unit tests to cover this change.
|
||||
|
||||
Documentation Impact
|
||||
====================
|
||||
|
||||
* Update the base backup driver's interface.
|
||||
* Update developer's documentation to advertise this change.
|
||||
|
||||
References
|
||||
==========
|
||||
|
||||
None
|
Loading…
Reference in New Issue
Block a user