Show migration_progress in volume details
This proposal would add a 'migration_progress' field to the volume details API response whenever the volume migrating. APIImpact Implements: blueprint migration-progress-in-volume-details Change-Id: Ibd1f9ed2639ae98a56d6faed81fa558f604f95e3
This commit is contained in:
244
specs/2025.1/migration-progress-in-volume-details.rst
Normal file
244
specs/2025.1/migration-progress-in-volume-details.rst
Normal file
@@ -0,0 +1,244 @@
|
|||||||
|
..
|
||||||
|
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||||
|
License.
|
||||||
|
|
||||||
|
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||||
|
|
||||||
|
=========================================
|
||||||
|
Show migration_progress in volume details
|
||||||
|
=========================================
|
||||||
|
|
||||||
|
https://blueprints.launchpad.net/cinder/+spec/migration-progress-in-volume-details
|
||||||
|
|
||||||
|
This spec proposes adding a ``migration_progress`` field to the volume
|
||||||
|
details API response when a volume is migrating.
|
||||||
|
|
||||||
|
Problem description
|
||||||
|
===================
|
||||||
|
|
||||||
|
Volume migration might be facilitated by the backend driver, but often
|
||||||
|
requires cinder or nova to copy data from the source to the new volume. For
|
||||||
|
large volumes this can take a long time to complete (multiple hours, even
|
||||||
|
days). Currently there's no way to track the copy operation's progress, which
|
||||||
|
makes it difficult to predict when the migration will complete.
|
||||||
|
|
||||||
|
Use Cases
|
||||||
|
---------
|
||||||
|
|
||||||
|
- As a cloud admin who is migrating a volume, I need to know it isn't taking
|
||||||
|
so much time to complete that I fear the operation is stuck.
|
||||||
|
|
||||||
|
- As a cloud admin who is migrating a volume, I would like to track the
|
||||||
|
migration progress in order to gauge how much longer it might take for the
|
||||||
|
operation to complete.
|
||||||
|
|
||||||
|
Proposed change
|
||||||
|
===============
|
||||||
|
|
||||||
|
The API code for showing a volume's details would use a microversion to
|
||||||
|
optionally include a ``migration_progress`` field. The field would be included
|
||||||
|
in the API response only when the volume is migrating, and when permitted by
|
||||||
|
the microversion. As the existing ``migration_status`` field is admin-only,
|
||||||
|
the new field would also be admin-only.
|
||||||
|
|
||||||
|
The value would be obtained via an RPC that fetches a response from either the
|
||||||
|
volume service associated with the volume, or from nova when the volume is
|
||||||
|
attached and nova is copying the data. See the references for the proposed nova
|
||||||
|
feature. The RPC to the volume service or nova would be executed only when the
|
||||||
|
following criteria are met:
|
||||||
|
|
||||||
|
* The context is admin
|
||||||
|
|
||||||
|
* The volume's ``migration_status`` is "migrating"
|
||||||
|
|
||||||
|
* The API request satisfies the new microversion
|
||||||
|
|
||||||
|
The volume service handling the RPC will determine how the volume is migrating
|
||||||
|
in order to provide the proper response.
|
||||||
|
|
||||||
|
* When a migration requires cinder to copy the data then the RPC response will
|
||||||
|
be a string representing a percent completion (e.g. "42" for 42%
|
||||||
|
complete). This is the same response that nova returns when it provides a
|
||||||
|
``swap_progress`` response when its swapping a volume attachment.
|
||||||
|
|
||||||
|
* When a migration is handled by the volume's driver then the RPC response
|
||||||
|
will be a TBD string to indicate the migration is driver-assisted. The
|
||||||
|
subset of cinder drivers that support driver-assisted migration do not
|
||||||
|
expose an API for reporting migration progress, and the expectation is
|
||||||
|
drivers complete the migration fast enough to provide a satisfactory user
|
||||||
|
experience (i.e. the use cases are covered).
|
||||||
|
|
||||||
|
* If the migration has completed by the time the RPC is received, the response
|
||||||
|
will be ``None``.
|
||||||
|
|
||||||
|
At the API layer, the ``migration_progress`` field will be included in the
|
||||||
|
volume details response only when the RPC response is a non-empty string. For
|
||||||
|
attached volumes, nova's ``swap_progress`` will be reported as the volume's
|
||||||
|
``migration_status``.
|
||||||
|
|
||||||
|
Alternatives
|
||||||
|
------------
|
||||||
|
|
||||||
|
An earlier idea was to enhance cinder so it tried to use "driver assisted
|
||||||
|
volume migration" on attached volumes. The hope was that cinder drivers would
|
||||||
|
be capable of migrating data fast enough to alleviate concerns about the
|
||||||
|
process taking too long. This idea was rejected for multiple reasons:
|
||||||
|
|
||||||
|
* Not all cinder drivers support driver-assisted migration, and most of them
|
||||||
|
explicitly disallow migrating attached volumes.
|
||||||
|
|
||||||
|
* Interactions between cinder and nova would be complicated. Cinder would need
|
||||||
|
to tell nova to pause IO prior to migrating the volume, and then unpause
|
||||||
|
after migration completes.
|
||||||
|
|
||||||
|
Data model impact
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
TBD, but hopefully none. It may be necessary to add a DB field to facilitate
|
||||||
|
obtaining the proper RPC response. This will be carefully considered during
|
||||||
|
the design phase, with a goal of minimizing impact on the DB.
|
||||||
|
|
||||||
|
REST API impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
Add a new microversion to the ``GET /v3/volumes/{volume_id}`` API to include
|
||||||
|
an optional ``migration_progress`` field in the response when the
|
||||||
|
``migration_status`` field is ``migrating``, and the API context is for an
|
||||||
|
admin.
|
||||||
|
|
||||||
|
.. code-block:: json
|
||||||
|
|
||||||
|
{
|
||||||
|
"volume": {
|
||||||
|
"attachments": [],
|
||||||
|
"availability_zone": "nova",
|
||||||
|
"bootable": "false",
|
||||||
|
"consistencygroup_id": null,
|
||||||
|
"created_at": "2018-11-29T06:50:07.770785",
|
||||||
|
"description": null,
|
||||||
|
"encrypted": false,
|
||||||
|
"id": "f7223234-1afc-4d19-bfa3-d19deb6235ef",
|
||||||
|
"links": [
|
||||||
|
{
|
||||||
|
"href": "http://127.0.0.1:45839/v3/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/f7223234-1afc-4d19-bfa3-d19deb6235ef",
|
||||||
|
"rel": "self"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"href": "http://127.0.0.1:45839/89afd400-b646-4bbc-b12b-c0a4d63e5bd3/volumes/f7223234-1afc-4d19-bfa3-d19deb6235ef",
|
||||||
|
"rel": "bookmark"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"metadata": {},
|
||||||
|
"migration_status": "migrating",
|
||||||
|
"multiattach": false,
|
||||||
|
"name": null,
|
||||||
|
"os-vol-host-attr:host": null,
|
||||||
|
"os-vol-mig-status-attr:migstat": null,
|
||||||
|
"os-vol-mig-status-attr:name_id": null,
|
||||||
|
"os-vol-tenant-attr:tenant_id": "89afd400-b646-4bbc-b12b-c0a4d63e5bd3",
|
||||||
|
"replication_status": null,
|
||||||
|
"size": 10,
|
||||||
|
"snapshot_id": null,
|
||||||
|
"source_volid": null,
|
||||||
|
"status": "creating",
|
||||||
|
"updated_at": null,
|
||||||
|
"user_id": "c853ca26-e8ea-4797-8a52-ee124a013d0e",
|
||||||
|
"volume_type": "__DEFAULT__",
|
||||||
|
"provider_id": null,
|
||||||
|
"group_id": null,
|
||||||
|
"service_uuid": null,
|
||||||
|
"shared_targets": true,
|
||||||
|
"cluster_name": null,
|
||||||
|
"volume_type_id": "5fed9d7c-401d-46e2-8e80-f30c70cb7e1d",
|
||||||
|
"consumes_quota": true,
|
||||||
|
"migration_progress": "42"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Security impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
None. The ``migration_progress`` will be admin-only.
|
||||||
|
|
||||||
|
|
||||||
|
Active/Active HA impact
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
None, I presume.
|
||||||
|
|
||||||
|
Notifications impact
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
Other end user impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
Both the openstack and cinder cli will automatically show the new
|
||||||
|
``migration_progress`` field if it's present in the API response.
|
||||||
|
|
||||||
|
Performance Impact
|
||||||
|
------------------
|
||||||
|
|
||||||
|
There will be no performance impact unless the volume is migrating. When it
|
||||||
|
is migrating, an RPC is requred to fetch the migration progress data, either
|
||||||
|
from nova (when the volume is attached) or from the volume service.
|
||||||
|
|
||||||
|
Other deployer impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
Developer impact
|
||||||
|
----------------
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
Upgrade impact
|
||||||
|
--------------
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
Implementation
|
||||||
|
==============
|
||||||
|
|
||||||
|
Assignee(s)
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Primary assignee:
|
||||||
|
<abishop@redhat.com>
|
||||||
|
|
||||||
|
Work Items
|
||||||
|
----------
|
||||||
|
|
||||||
|
* Add a new microversion in cinder and bump the MAX in python-cinderclient
|
||||||
|
* Add a new field to the volume details response in a new microversion
|
||||||
|
* Add an RPC to fetch the migration progress from the volume service
|
||||||
|
* Update the API code to invoke the appropriate (cinder or nova) RPC
|
||||||
|
* Extend existing unit and functional tests
|
||||||
|
* Update API documentation
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
============
|
||||||
|
|
||||||
|
Tracking the migration progress of an attached volume requires a nova feature.
|
||||||
|
See the references for the nova feature spec.
|
||||||
|
|
||||||
|
Testing
|
||||||
|
=======
|
||||||
|
|
||||||
|
TBD. The tricky part for incorporating something into a tempest test is
|
||||||
|
catching a migration operation during the time it's copying the volume data,
|
||||||
|
which is the only time when the ``migration_progress`` field will be present
|
||||||
|
in the volume details response.
|
||||||
|
|
||||||
|
Documentation Impact
|
||||||
|
====================
|
||||||
|
|
||||||
|
The Block Storage API reference documentation will need to be updated, but
|
||||||
|
there should be no impact on other user or admin facing documentation.
|
||||||
|
|
||||||
|
References
|
||||||
|
==========
|
||||||
|
|
||||||
|
* https://review.opendev.org/c/openstack/nova-specs/+/937485
|
||||||
Reference in New Issue
Block a user