[libvirt] [PATCH 8/9] conf: snapshot: support persistent config on redefine
Nikolay Shirokovskiy
nshirokovskiy at virtuozzo.com
Fri Dec 21 09:08:32 UTC 2018
On 21.12.2018 00:15, John Ferlan wrote:
>
>
> On 12/13/18 3:03 AM, Nikolay Shirokovskiy wrote:
>> This patch just adds basic checks for persistent domain config
>> on snapshot metadata redefine. It also lets use previous version
>> of config if it exists in previous version of metadata and
>> not explicitly specified in new one just as in case of top level
>> config.
>>
>> Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy at virtuozzo.com>
>> ---
>> src/conf/snapshot_conf.c | 25 +++++++++++++++++++++++++
>> 1 file changed, 25 insertions(+)
>>
>
> Should this actually be part of patch5? Although nice to have patches
> separated for review - functionality wise it's paired with managing the
> persistDom for the snapshot_conf.
>
>
>> diff --git a/src/conf/snapshot_conf.c b/src/conf/snapshot_conf.c
>> index fa1cd6b..b003a07 100644
>> --- a/src/conf/snapshot_conf.c
>> +++ b/src/conf/snapshot_conf.c
>> @@ -1315,6 +1315,22 @@ virDomainSnapshotRedefinePrep(virDomainPtr domain,
>> goto cleanup;
>> }
>>
>> + if (def->persistDom &&
>> + memcmp(def->persistDom->uuid, domain->uuid, VIR_UUID_BUFLEN)) {
>> + virReportError(VIR_ERR_INVALID_ARG,
>> + _("persistent definition for snapshot %s must use uuid %s"),
>> + def->name, uuidstr);
>> + goto cleanup;
>> + }
>> +
>> + if (def->persistDom &&
>> + STRNEQ(def->persistDom->name, domain->name)) {
>> + virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
>> + _("persistent definition for snapshot %s must use name %s"),
>> + def->name, domain->name);
>> + goto cleanup;
>> + }
>> +
>
> Could go with the:
>
> if (def->persistDom) {
> }
>
> here too, but IDC that much.
>
> Based on any fallout from other comments received on patch7 and since
> this essentially "copies" things for the persistDom,
>
>> other = virDomainSnapshotFindByName(vm->snapshots, def->name);
>> if (other) {
>> if ((other->def->state == VIR_DOMAIN_RUNNING ||
>> @@ -1349,6 +1365,11 @@ virDomainSnapshotRedefinePrep(virDomainPtr domain,
>> }
>> }
>>
>> + if (other->def->persistDom && !def->persistDom) {
>> + def->persistDom = other->def->persistDom;
>> + other->def->persistDom = NULL;
>> + }
>
> Isn't this just
>
> VIR_STEAL_PTR(def->persistDom, other->def->persistDom);
>
> ?
>
>> +
>> if (def->dom) {
>> if (def->state == VIR_DOMAIN_DISK_SNAPSHOT ||
>> virDomainSnapshotDefIsExternal(def)) {
>> @@ -1363,6 +1384,10 @@ virDomainSnapshotRedefinePrep(virDomainPtr domain,
>> other->def->dom = def->dom;
>> def->dom = NULL;
>> }
>> + if (def->persistDom && !other->def->persistDom) {
>> + other->def->persistDom = def->persistDom;
>> + def->persistDom = NULL;
>> + }
>
> Likewise...
>
>> goto cleanup;
Yeah, a bit of copy-paste. In this case I would like to add patch to use VIR_STEAL_PTR
for existing code in virDomainSnapshotRedefinePrep too.
Nikolay
>> }
>> }
>>
>
> Reviewed-by: John Ferlan <jferlan at redhat.com>
>
> John
>
More information about the libvir-list
mailing list