On 03/31/2014 03:59 AM, Peter Krempa wrote:
On 03/30/14 05:38, Eric Blake wrote:
> A fairly smooth transition. And now that domain disks and
> storage volumes share a common struct, it opens the doors for
> a future patch to expose more details in the XML for both
> objects.
>
Let's examine how things are prior to patch 14:
> -/*
> - * How the volume appears on the host
> - */
> -typedef struct _virStorageVolTarget virStorageVolTarget;
> -typedef virStorageVolTarget *virStorageVolTargetPtr;
> -struct _virStorageVolTarget {
> - char *path;
> - int format; /* enum virStorageFileFormat */
both already in virStorageSource
> - virStoragePermsPtr perms;
> - virStorageTimestampsPtr timestamps;
Neither in virStorageSource, but present in 'vol-dumpxml' output for
both the <target> (primary volume information) and <backingStore>
(immediate backing chain information) elements. I personally think it
would be useful to have both of these items added to output-only
<domain> information - it is NICE to know the timestamps and permissions
of a disk image in use by a domain.
> - int partType; /* enum virStorageVolTypeDisk, only used by
disk
> - * backend for partition type */
Not in virStorageSource - this was the field that I'm least sure of what
to do. Is it possible to have a partition-based pool whose volumes are
even listed with a <backingStore>?
> - /* The next three are currently only used in
vol->target,
> - * not in vol->backingStore. */
> - virStorageEncryptionPtr encryption;
This one is present in virStorageSource, which means that both storage
volumes and domain disks care about it.
> - virBitmapPtr features;
> - char *compat;
These two are not yet in virStorageSource, but definitely belong there,
right alongside driver and format (that is, knowing something is qcow2
is only part of the picture - we really DO want to know qcow2v2
(compat=0.10) vs. qcow2v3 (compat=1.1) when traversing backing chains,
particularly since RHEL 6 still lacks qcow2v3 support).
> - virStorageVolTarget target;
> - virStorageVolTarget backingStore;
> + virStorageSource target;
Hmmm, converting target to a source definition doesn't seem to be a good
idea to me:
* As in other parts of the code, the semantics of the target and source
differ in the data needed to store about those fields.
Only in that the code _currently_ displays more for <target> than it
does for <backingStore>, but the two are otherwise highly related.
Also, I envision making a storage volume <backingStore> recursive, just
as I do for domain <disk> backing store information. Knowing only the
first backing element is not as useful as knowing the entire backing chain.
* Tracking of the target requires us to add additional data to the
struct which makes it to bloat and it's probable that those metadata
won't be used by other parts of the code.
You may have a point for partType, but the other parts of the metadata
ARE useful in other parts of the code, even if we aren't using them yet.
* Other parts that are already present in the source structure are
irrelevant to the host representation, such as the network information.
Not irrelevant, so much as redundant. That is, when listing a storage
volume from a network storage pool such as gluster, the network
information can be obtained from the pool that owns the storage volume -
but it shouldn't hurt to also list the network information in the
storage volume itself instead of forcing callers to make multiple API
calls to obtain all the pieces.
I'd rather see those separated. It might seem that the structs carry
similar data but they are semantically different IMO.
> + virStorageSource backingStore;
In case of the backing chain I think that the backing store is a
property of the source and not the target thus I'm fine with changing this.
The name <target> in storage volume XML is rather misleading. It really
is the same as the <source> element of a domain <disk> element. The
name <source> in storage volume XML gives additional details (such as
extent mappings on things such as LVM volumes), but THAT is the one that
is semantically unrelated to <source> in a domain <disk> element.
I can indeed limit the patch to just changing the backingStore to the
common type, but I'm not yet convinced why changing the <target> to use
virStorageSource is wrong.
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library
http://libvirt.org