[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