Volume Snapshots for Network-Backed Disks

https://blueprints.launchpad.net/nova/+spec/libvirt-volume-snap-network-disk

Nova currently supports creating and deleting snapshots of file-backed Cinder volumes via libvirt’s snapshot mechanism. This work extends that capability to create and delete snapshots for network-backed disks in a similar fashion.

This enables more complete Cinder volume functionality for deployments using qemu network-backed volumes through a mechanism like libgfapi.

Problem description

Nova does not support creating a snapshot via libvirt for a network-backed Cinder volume that is attached to an instance. Currently, attempting to snapshot a Cinder volume configured this way will result in a failed snapshot operation.

This is important for deployers who use qemu network-backed storage for Cinder volumes. (Typically for performance reasons.)

Proposed change

Nova needs to be able to construct a <domainsnapshot> XML entity with the required fields to snapshot a network-backed disk via libvirt.

Nova similarly needs to be able to pass in arguments for libvirt’s blockCommit and blockRebase operations to delete snapshots for network-backed disks. libvirt is adding support for a different style of parameters to the blockjob APIs to support this, which allows referencing an existing item in the disk snapshot change by index rather than by path name.

Alternatives

There is no alternative for deployers wishing to use Nova-assisted snapshots of Cinder-backed storage. Nova must be able to interact with libvirt to enable this functionality.

Data model impact

None

REST API impact

This work is used by the os-assisted-volume-snapshots extension APIs with no API-level changes.

Security impact

None

Notifications impact

None

Other end user impact

End-user impact is that Cinder volume snapshots now work when Nova is configured to use libgfapi for the GlusterFS Cinder driver. (qemu_allowed_storage_drivers=[‘gluster’])

Performance Impact

Deleting (merging) a GlusterFS volume snapshot may be more efficient, particularly for simultaneous snapshot deletes for different volumes, as this work uses qemu direct storage access (via libgfapi) rather than a FUSE-mounted file system.

No direct performance impact within Nova itself.

Other deployer impact

This change is relevant when using the Cinder GlusterFS driver and Nova is configured with qemu_allowed_storage_drivers=[‘gluster’].

Developer impact

None

Implementation

Assignee(s)

Primary assignee:

eharney

Work Items

  • Support for creating a volume snapshot of a network-backed disk

  • Support for deleting a volume snapshot of a network-backed disk - Parse backing chain information from libvirt’s domain XML - Pass new-style arguments to blockCommit and blockRebase

Dependencies

  • This functionality depends on libvirt changes which are currently targeted for libvirt 1.2.6. - The libvirt capability is detected without using the libvirt version.

  • The libvirt changes also require fixes within qemu (targeting 2.1).

  • Currently only relevant for GlusterFS Cinder deployments.

Testing

This should be tested via Tempest volume snapshot test cases. Since it is dependent on having a GlusterFS deployment this is not currently tested in the gate.

When third-party CI is enabled for the GlusterFS driver within Cinder, it should cover this.

Documentation Impact

None

References