[libvirt] [PATCH 0/3] vz: fixes after commits refactoring common snapshot code

Nikolay Shirokovskiy (3): vz: fix for tracking current snapshot vz: fixes: snapshot: Switch type of virDomainSnapshotObj.def vz: fixes: snapshot: Factor out virDomainMomentDef class src/vz/vz_driver.c | 36 +++++++----------------------------- src/vz/vz_sdk.c | 24 +++++++++++------------- 2 files changed, 18 insertions(+), 42 deletions(-) -- 1.8.3.1

f1056279 removed virDomainSnapshotDef.current and leaved using vm->current_snapshot only. Later 4819f54bd moved current snapshot tracking to virDomainSnapshotObjList. As vz driver never used vm->current_snaphot this patch includes fixes after both commits. Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com> --- src/vz/vz_driver.c | 31 ++++--------------------------- src/vz/vz_sdk.c | 14 ++++++-------- 2 files changed, 10 insertions(+), 35 deletions(-) diff --git a/src/vz/vz_driver.c b/src/vz/vz_driver.c index 40d3a73..f7a44d4 100644 --- a/src/vz/vz_driver.c +++ b/src/vz/vz_driver.c @@ -2152,29 +2152,6 @@ vzSnapObjFromSnapshot(virDomainSnapshotObjListPtr snapshots, } static int -vzCurrentSnapshotIterator(void *payload, - const void *name ATTRIBUTE_UNUSED, - void *data) -{ - virDomainMomentObjPtr snapshot = payload; - virDomainMomentObjPtr *current = data; - - if (snapshot->def->current) - *current = snapshot; - - return 0; -} - -static virDomainMomentObjPtr -vzFindCurrentSnapshot(virDomainSnapshotObjListPtr snapshots) -{ - virDomainMomentObjPtr current = NULL; - - virDomainSnapshotForEach(snapshots, vzCurrentSnapshotIterator, ¤t); - return current; -} - -static int vzDomainSnapshotNum(virDomainPtr domain, unsigned int flags) { virDomainObjPtr dom; @@ -2452,7 +2429,7 @@ vzDomainHasCurrentSnapshot(virDomainPtr domain, unsigned int flags) if (!(snapshots = prlsdkLoadSnapshots(dom))) goto cleanup; - ret = vzFindCurrentSnapshot(snapshots) != NULL; + ret = virDomainSnapshotGetCurrent(snapshots) != NULL; cleanup: virDomainSnapshotObjListFree(snapshots); @@ -2518,7 +2495,7 @@ vzDomainSnapshotCurrent(virDomainPtr domain, unsigned int flags) if (!(snapshots = prlsdkLoadSnapshots(dom))) goto cleanup; - if (!(current = vzFindCurrentSnapshot(snapshots))) { + if (!(current = virDomainSnapshotGetCurrent(snapshots))) { virReportError(VIR_ERR_NO_DOMAIN_SNAPSHOT, "%s", _("the domain does not have a current snapshot")); goto cleanup; @@ -2552,7 +2529,7 @@ vzDomainSnapshotIsCurrent(virDomainSnapshotPtr snapshot, unsigned int flags) if (!(snapshots = prlsdkLoadSnapshots(dom))) goto cleanup; - current = vzFindCurrentSnapshot(snapshots); + current = virDomainSnapshotGetCurrent(snapshots); ret = current && STREQ(snapshot->name, current->def->name); cleanup: @@ -2648,7 +2625,7 @@ vzDomainSnapshotCreateXML(virDomainPtr domain, if (!(snapshots = prlsdkLoadSnapshots(dom))) goto cleanup; - if (!(current = vzFindCurrentSnapshot(snapshots))) { + if (!(current = virDomainSnapshotGetCurrent(snapshots))) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("can't find created snapshot")); goto cleanup; diff --git a/src/vz/vz_sdk.c b/src/vz/vz_sdk.c index f5a5911..92bcb3d 100644 --- a/src/vz/vz_sdk.c +++ b/src/vz/vz_sdk.c @@ -4656,7 +4656,6 @@ prlsdkParseSnapshotTree(const char *treexml) xmlNodePtr *nodes = NULL; virDomainSnapshotDefPtr def = NULL; virDomainMomentObjPtr snapshot; - virDomainMomentObjPtr current = NULL; virDomainSnapshotObjListPtr snapshots = NULL; char *xmlstr = NULL; int n; @@ -4743,22 +4742,21 @@ prlsdkParseSnapshotTree(const char *treexml) } VIR_FREE(xmlstr); - xmlstr = virXPathString("string(./@current)", ctxt); - def->current = xmlstr && STREQ("yes", xmlstr); - VIR_FREE(xmlstr); - if (!(snapshot = virDomainSnapshotAssignDef(snapshots, def))) goto cleanup; def = NULL; - if (snapshot->def->current) { - if (current) { + xmlstr = virXPathString("string(./@current)", ctxt); + if (xmlstr && STREQ("yes", xmlstr)) { + if (virDomainSnapshotGetCurrent(snapshots)) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("too many current snapshots")); + VIR_FREE(xmlstr); goto cleanup; } - current = snapshot; + virDomainSnapshotSetCurrent(snapshots, snapshot); } + VIR_FREE(xmlstr); } if (virDomainSnapshotUpdateRelations(snapshots) < 0) { -- 1.8.3.1

Fix for commit 1ab05da22 refactoring snapshot code. Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com> --- src/vz/vz_driver.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/vz/vz_driver.c b/src/vz/vz_driver.c index f7a44d4..20cc79b 100644 --- a/src/vz/vz_driver.c +++ b/src/vz/vz_driver.c @@ -2266,7 +2266,8 @@ vzDomainSnapshotGetXMLDesc(virDomainSnapshotPtr snapshot, unsigned int flags) virUUIDFormat(snapshot->domain->uuid, uuidstr); - xml = virDomainSnapshotDefFormat(uuidstr, snap->def, privconn->driver->caps, + xml = virDomainSnapshotDefFormat(uuidstr, virDomainSnapshotObjGetDef(snap), + privconn->driver->caps, privconn->driver->xmlopt, virDomainSnapshotFormatConvertXMLFlags(flags)); -- 1.8.3.1

Fix for commit ffc0fbebe refactoring snapshot code. Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com> --- src/vz/vz_driver.c | 2 +- src/vz/vz_sdk.c | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/vz/vz_driver.c b/src/vz/vz_driver.c index 20cc79b..d327cac 100644 --- a/src/vz/vz_driver.c +++ b/src/vz/vz_driver.c @@ -2620,7 +2620,7 @@ vzDomainSnapshotCreateXML(virDomainPtr domain, goto cleanup; /* snaphot name is ignored, it will be set to auto generated by sdk uuid */ - if (prlsdkCreateSnapshot(dom, def->description) < 0) + if (prlsdkCreateSnapshot(dom, def->common.description) < 0) goto cleanup; if (!(snapshots = prlsdkLoadSnapshots(dom))) diff --git a/src/vz/vz_sdk.c b/src/vz/vz_sdk.c index 92bcb3d..3d89435 100644 --- a/src/vz/vz_sdk.c +++ b/src/vz/vz_sdk.c @@ -4699,14 +4699,14 @@ prlsdkParseSnapshotTree(const char *treexml) ctxt->node = nodes[i]; - def->name = virXPathString("string(./@guid)", ctxt); - if (!def->name) { + def->common.name = virXPathString("string(./@guid)", ctxt); + if (!def->common.name) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("missing 'guid' attribute")); goto cleanup; } - def->parent = virXPathString("string(../@guid)", ctxt); + def->common.parent = virXPathString("string(../@guid)", ctxt); xmlstr = virXPathString("string(./DateTime)", ctxt); if (!xmlstr) { @@ -4714,11 +4714,11 @@ prlsdkParseSnapshotTree(const char *treexml) _("missing 'DateTime' element")); goto cleanup; } - if ((def->creationTime = prlsdkParseDateTime(xmlstr)) < 0) + if ((def->common.creationTime = prlsdkParseDateTime(xmlstr)) < 0) goto cleanup; VIR_FREE(xmlstr); - def->description = virXPathString("string(./Description)", ctxt); + def->common.description = virXPathString("string(./Description)", ctxt); def->memory = VIR_DOMAIN_SNAPSHOT_LOCATION_NONE; xmlstr = virXPathString("string(./@state)", ctxt); -- 1.8.3.1

On 4/8/19 4:42 AM, Nikolay Shirokovskiy wrote:
Nikolay Shirokovskiy (3): vz: fix for tracking current snapshot vz: fixes: snapshot: Switch type of virDomainSnapshotObj.def vz: fixes: snapshot: Factor out virDomainMomentDef class
src/vz/vz_driver.c | 36 +++++++----------------------------- src/vz/vz_sdk.c | 24 +++++++++++------------- 2 files changed, 18 insertions(+), 42 deletions(-)
Untested, but looks fine to me Reviewed-by: Cole Robinson <crobinso@redhat.com> - Cole

08-Apr-19 11:42, Nikolay Shirokovskiy пишет:
Nikolay Shirokovskiy (3): vz: fix for tracking current snapshot vz: fixes: snapshot: Switch type of virDomainSnapshotObj.def vz: fixes: snapshot: Factor out virDomainMomentDef class
src/vz/vz_driver.c | 36 +++++++----------------------------- src/vz/vz_sdk.c | 24 +++++++++++------------- 2 files changed, 18 insertions(+), 42 deletions(-)
ACK. Thanks. Maxim Nestratov
participants (3)
-
Cole Robinson
-
Maxim Nestratov
-
Nikolay Shirokovskiy