[libvirt] [PATCH 5/6] snapshot: new virsh function factored from snapshot-list

Eric Blake eblake at redhat.com
Tue Jun 12 23:27:52 UTC 2012


On 06/12/2012 06:59 AM, Peter Krempa wrote:
> On 06/12/12 14:54, Peter Krempa wrote:
>> On 06/09/12 06:34, Eric Blake wrote:
>>> This patch copies just the fallback code out of cmdSnapshotList,
>>> and keeps the snapshot objects around rather than just their
>>> name for easier manipulation.  It looks forward to a future
>>> patch when we add a way to list all snapshot objects at once,
>>> and the next patch will simplify cmdSnapshotList to take
>>> advantage of this factorization.
>>>
> 
>> I know it's copied code, but this error message doesn't look helpful.
>> I think it's worth improving: "Failed to collect snapshot list" perhaps?
>>
>>> +        goto cleanup;
>>> +    }
>>
>> I had a very hard time parsing the code flow in this block, I'd
>> rewrite this block as follows:
> 
> I forgot to attach the patch for the rewrite.

Thanks; that helps.


> @@ -16641,36 +16641,40 @@ vshSnapshotListCollect(vshControl *ctl, virDomainPtr dom,
>      /* This is the interface available in 0.9.12 and earlier,
>       * including fallbacks to 0.9.4 and earlier.  */

I'm off on my versioning - this was 0.9.6 and earlier.

>      if (from) {

There's multiple things going on here:

First, the valid combinations:

list (all snapshots, no parent info needed)
list --roots (only root snapshots)
list --from (only direct children of --from)
list --from --descendants (recursive children of --from)
list --tree (all snapshots, parent info needed)
list --tree --from (recursive children of --from, but also list from)

Then the API that satisfy those combinations:

'new' API (aka 0.9.7-0.9.12) with --from (regardless of --descendants)
-> use virDomainSnapshotNumChildren in its entirety
new API without --from (regardless of -roots) -> use
virDomainSnapshotNum in its entirety
'old' API (aka 0.8.0-0.9.6) without --from or --roots -> use
virDomainSnapshotNum in its entirety
old API without --from but with --roots -> use virDomainSnapshotNum, but
then manually filter to just roots
old with --from (regardless of --descendants) -> use
virDomainSnapshotNum to get a global list, then manually filter to just
the snapshot's children

Additionally, if both --from and --tree are present, then we want --from
to be included in the list.

I really need to list this as a comment.  I'll post a v2, adding
comments and including your improvements.

> +    /* fallback to old API */
> +    if (count < 0)  {
>          count = virDomainSnapshotNum(dom, flags);

More like: fall back to old API when doing children listing, or do
initial probe when doing global listing.

-- 
Eric Blake   eblake at redhat.com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 620 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20120612/8fd9068d/attachment-0001.sig>


More information about the libvir-list mailing list