Older VBox required grabbing all snapshots, then looking through them until a name match was found. But when VBox 3.1 introduced snapshot branching, it also added the ability to lookup a snapshot by name instead of UUID; exploit this for faster snapshot lookup. * src/vbox/vbox_tmpl.c (vboxDomainSnapshotGet): Newer vbox added snapshot lookup by name. --- Caveat - this is written solely by reading VBox documentation, and I was only able to compile test. I have no idea if this really works, or if VBox 3.1 is the right cut-off point. src/vbox/vbox_tmpl.c | 31 ++++++++++++++++++++++++++++++- 1 files changed, 30 insertions(+), 1 deletions(-) diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c index 2eb23fb..ba2252c 100644 --- a/src/vbox/vbox_tmpl.c +++ b/src/vbox/vbox_tmpl.c @@ -5586,9 +5586,12 @@ vboxDomainSnapshotGet(vboxGlobalData *data, IMachine *machine, const char *name) { - ISnapshot **snapshots = NULL; ISnapshot *snapshot = NULL; nsresult rc; + +#if VBOX_API_VERSION < 3001 + + ISnapshot **snapshots = NULL; int count = 0; int i; @@ -5615,6 +5618,30 @@ vboxDomainSnapshotGet(vboxGlobalData *data, break; } +#else /* VBOX_API_VERSION >= 3001 */ + PRUnichar *nameUtf16 = NULL; + + VBOX_UTF8_TO_UTF16(name, &nameUtf16); + if (!nameUtf16) { + virReportOOMError(); + goto cleanup; + } + +# if VBOX_API_VERSION < 4000 + rc = machine->vtbl->GetSnapshot(machine, nameUtf16, &snapshot); +# else /* VBOX_API_VERSION >= 4000 */ + rc = machine->vtbl->FindSnapshot(machine, nameUtf16, &snapshot); +# endif /* VBOX_API_VERSION >= 4000 */ + VBOX_UTF16_FREE(nameUtf16); + if (NS_FAILED(rc)) { + vboxError(VIR_ERR_INTERNAL_ERROR, + _("could not get root snapshot for domain %s"), + dom->name); + goto cleanup; + } + +#endif /* VBOX_API_VERSION >= 3001 */ + if (!snapshot) { vboxError(VIR_ERR_OPERATION_INVALID, _("domain %s has no snapshots with name %s"), @@ -5623,6 +5650,7 @@ vboxDomainSnapshotGet(vboxGlobalData *data, } cleanup: +#if VBOX_API_VERSION < 3001 if (count > 0) { for (i = 0; i < count; i++) { if (snapshots[i] != snapshot) @@ -5630,6 +5658,7 @@ cleanup: } } VIR_FREE(snapshots); +#endif /* VBOX_API_VERSION < 3001 */ return snapshot; } -- 1.7.4.4 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list