...
>
> However, after some more "investigation" of the environment - I think
> perhaps there's still a couple of loose ends. Keeping the 'segtype'
> field may be necessary/useful... Details follow if interested ;-)
Yes, you're right and I did a bad job during review. The segtype is required
and we should always consider it, there is like 20 segtypes right now and some
of them could also use 'stripes'.
The 'segtype' is currently only required because commit id '82c1740a'
added 'segtype' and 'stripes' to resolve a bz (or more than one
depending on how far you chase) by using 'segtype' to determine whether
more than one existed. It also did quite a few things in one step which
by today's review standards is a bad thing ;-).
However, that only worked for "striped" lv's. If there was a
"mirror"
lv, then while the mirror could be found, the vol-dumpxml output is
wrong because it only parsed 1 extent (incorrectly at that):
<source>
<device path='lv_test_mirror_rimage_0(0),lv_test_mirror_rimage_1'>
<extent start='0' end='33554432'/>
</device>
</source>
instead of something like (if using 'stripes' to get nsegments):
<source>
<device path='lv_test_mirror_rimage_0'>
<extent start='0' end='33554432'/>
</device>
<device path='lv_test_mirror_rimage_1'>
<extent start='0' end='33554432'/>
</device>
</source>
Linking 'nsegments' to 'striped' lv's is a "limitation".
Anyway, dropping 'segtype' wasn't necessarily bad unless you needed
"more information", such as perhaps the lv thin pool source when
nsegments == 0. This becomes obvious once the change to use "(\\S*)"
instead of "(\\S+)" hits. Now we can "see" thin lv's in a volume
group.
Not sure what else becomes visible, though. The problem is you then get:
<source>
</source>
But that's fixable... The interesting part about <source> is that it's
an output only (virStorageVolDefParseXML doesn't read it). So, by adding
a new parse field 'pool_lv', we can then check 'segtype' to be
"thin"
and if so, store the new field in a new vol->source.thin_pool field.
Still cannot create a thin lv pool/volume without using the lvcreate
command. Nor can one create a mirror or stripe lv using libvirt's
vol-create command. One just cannot "find" a thin lv right now...
John