virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
int ret = -1;
virBuffer buf = VIR_BUFFER_INITIALIZER;
+ virDomainSnapshotDefPtr snapdef = virDomainSnapshotObjGetDef(snap);
if (!(qemuImgPath = qemuFindQemuImgBinary(driver)))
goto cleanup;
- if (!(created = virBitmapNew(snap->def->ndisks)))
+ if (!(created = virBitmapNew(snapdef->ndisks)))
goto cleanup;
/* If reuse is true, then qemuDomainSnapshotPrepare already
* ensured that the new files exist, and it was up to the user to
* create them correctly. */
- for (i = 0; i < snap->def->ndisks && !reuse; i++) {
- snapdisk = &(snap->def->disks[i]);
- defdisk = snap->def->common.dom->disks[snapdisk->idx];
+ for (i = 0; i < snapdef->ndisks && !reuse; i++) {
+ snapdisk = &(snapdef->disks[i]);
+ defdisk = snapdef->common.dom->disks[snapdisk->idx];
if (snapdisk->snapshot != VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL)
continue;
}
/* update disk definitions */
- for (i = 0; i < snap->def->ndisks; i++) {
- snapdisk = &(snap->def->disks[i]);
+ for (i = 0; i < snapdef->ndisks; i++) {
+ snapdisk = &(snapdef->disks[i]);
defdisk = vm->def->disks[snapdisk->idx];
if (snapdisk->snapshot == VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL) {
if (ret < 0 && created) {
ssize_t bit = -1;
while ((bit = virBitmapNextSetBit(created, bit)) >= 0) {
- snapdisk = &(snap->def->disks[bit]);
+ snapdisk = &(snapdef->disks[bit]);
if (unlink(snapdisk->src->path) < 0)
VIR_WARN("Failed to remove snapshot image '%s'",
snapdisk->src->path);
qemuDomainObjPrivatePtr priv = vm->privateData;
virObjectEventPtr event = NULL;
bool resume = false;
+ virDomainSnapshotDefPtr snapdef = virDomainSnapshotObjGetDef(snap);
int ret = -1;
if (!qemuMigrationSrcIsAllowed(driver, vm, false, 0))
goto cleanup;
}
- ret = qemuMonitorCreateSnapshot(priv->mon, snap->def->common.name);
+ ret = qemuMonitorCreateSnapshot(priv->mon, snap->def->name);
if (qemuDomainObjExitMonitor(driver, vm) < 0)
ret = -1;
if (ret < 0)
goto cleanup;
- if (!(snap->def->cookie = (virObjectPtr) qemuDomainSaveCookieNew(vm)))
+ if (!(snapdef->cookie = (virObjectPtr) qemuDomainSaveCookieNew(vm)))
goto cleanup;
if (flags & VIR_DOMAIN_SNAPSHOT_CREATE_HALT) {
qemuDomainSnapshotDiskDataPtr ret;
qemuDomainSnapshotDiskDataPtr dd;
char *backingStoreStr;
+ virDomainSnapshotDefPtr snapdef = virDomainSnapshotObjGetDef(snap);
- if (VIR_ALLOC_N(ret, snap->def->ndisks) < 0)
+ if (VIR_ALLOC_N(ret, snapdef->ndisks) < 0)
return NULL;
- for (i = 0; i < snap->def->ndisks; i++) {
- if (snap->def->disks[i].snapshot == VIR_DOMAIN_SNAPSHOT_LOCATION_NONE)
+ for (i = 0; i < snapdef->ndisks; i++) {
+ if (snapdef->disks[i].snapshot == VIR_DOMAIN_SNAPSHOT_LOCATION_NONE)
continue;
dd = ret + i;
dd->disk = vm->def->disks[i];
- if (!(dd->src = virStorageSourceCopy(snap->def->disks[i].src, false)))
+ if (!(dd->src = virStorageSourceCopy(snapdef->disks[i].src, false)))
goto error;
if (virStorageSourceInitChainElement(dd->src, dd->disk->src, false) < 0)
return ret;
error:
- qemuDomainSnapshotDiskDataFree(ret, snap->def->ndisks, driver, vm);
+ qemuDomainSnapshotDiskDataFree(ret, snapdef->ndisks, driver, vm);
return NULL;
}
virQEMUDriverConfigPtr cfg = NULL;
qemuDomainSnapshotDiskDataPtr diskdata = NULL;
virErrorPtr orig_err = NULL;
+ virDomainSnapshotDefPtr snapdef = virDomainSnapshotObjGetDef(snap);
if (virDomainObjCheckActive(vm) < 0)
return -1;
* now either VIR_DOMAIN_SNAPSHOT_LOCATION_NONE, or
* VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL with a valid file name and
* qcow2 format. */
- for (i = 0; i < snap->def->ndisks; i++) {
+ for (i = 0; i < snapdef->ndisks; i++) {
if (!diskdata[i].src)
continue;
if (qemuDomainObjExitMonitor(driver, vm) < 0)
ret = -1;
- for (i = 0; i < snap->def->ndisks; i++) {
+ for (i = 0; i < snapdef->ndisks; i++) {
qemuDomainSnapshotDiskDataPtr dd = &diskdata[i];
if (!dd->src)
error:
if (ret < 0) {
orig_err = virSaveLastError();
- for (i = 0; i < snap->def->ndisks; i++) {
+ for (i = 0; i < snapdef->ndisks; i++) {
if (!diskdata[i].src)
continue;
* stopped using them*/
bool paused = virDomainObjGetState(vm, NULL) != VIR_DOMAIN_RUNNING;
- for (i = 0; i < snap->def->ndisks; i++) {
+ for (i = 0; i < snapdef->ndisks; i++) {
if (!diskdata[i].disk)
continue;
}
cleanup:
- qemuDomainSnapshotDiskDataFree(diskdata, snap->def->ndisks, driver, vm);
+ qemuDomainSnapshotDiskDataFree(diskdata, snapdef->ndisks, driver, vm);
virJSONValueFree(actions);
virObjectUnref(cfg);
int ret = -1;
qemuDomainObjPrivatePtr priv = vm->privateData;
char *xml = NULL;
- bool memory = snap->def->memory == VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL;
+ virDomainSnapshotDefPtr snapdef = virDomainSnapshotObjGetDef(snap);
+ bool memory = snapdef->memory == VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL;
bool memory_unlink = false;
int thaw = 0; /* 1 if freeze succeeded, -1 if freeze failed */
bool pmsuspended = false;
if (!(xml = qemuDomainDefFormatLive(driver, vm->def, priv->origCPU,
true, true)) ||
- !(snap->def->cookie = (virObjectPtr) qemuDomainSaveCookieNew(vm)))
+ !(snapdef->cookie = (virObjectPtr) qemuDomainSaveCookieNew(vm)))
goto cleanup;
if (!(data = virQEMUSaveDataNew(xml,
- (qemuDomainSaveCookiePtr) snap->def->cookie,
+ (qemuDomainSaveCookiePtr) snapdef->cookie,
resume, compressed, driver->xmlopt)))
goto cleanup;
xml = NULL;
- if ((ret = qemuDomainSaveMemory(driver, vm, snap->def->file, data,
+ if ((ret = qemuDomainSaveMemory(driver, vm, snapdef->file, data,
compressedpath, 0,
QEMU_ASYNC_JOB_SNAPSHOT)) < 0)
goto cleanup;
VIR_FREE(compressedpath);
virObjectUnref(cfg);
if (memory_unlink && ret < 0)
- unlink(snap->def->file);
+ unlink(snapdef->file);
return ret;
}
current = virDomainSnapshotGetCurrent(vm->snapshots);
if (current) {
if (!redefine &&
- VIR_STRDUP(snap->def->common.parent, current->def->common.name) < 0)
+ VIR_STRDUP(snap->def->parent, current->def->name) < 0)
goto endjob;
if (update_current) {
virDomainSnapshotSetCurrent(vm->snapshots, NULL);
* snapshot name in at least one of the domain's disks? */
} else if (virDomainObjIsActive(vm)) {
if (flags & VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY ||
- snap->def->memory == VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL) {
+ virDomainSnapshotObjGetDef(snap)->memory == VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL) {
/* external full system or disk snapshot */
if (qemuDomainSnapshotCreateActiveExternal(driver,
vm, snap, flags) < 0)
* do; we've successfully taken the snapshot, and we are now running
* on it, so we have to go forward the best we can
*/
- snapshot = virGetDomainSnapshot(domain, snap->def->common.name);
+ snapshot = virGetDomainSnapshot(domain, snap->def->name);
endjob:
if (snapshot && !(flags & VIR_DOMAIN_SNAPSHOT_CREATE_NO_METADATA)) {
snapshot = NULL;
virReportError(VIR_ERR_INTERNAL_ERROR,
_("unable to save metadata for snapshot %s"),
- snap->def->common.name);
+ snap->def->name);
virDomainSnapshotObjListRemove(vm->snapshots, snap);
} else {
other = virDomainSnapshotFindByName(vm->snapshots,
- snap->def->common.parent);
+ snap->def->parent);
virDomainSnapshotSetParent(snap, other);
}
} else if (snap) {
if (!(snap = qemuSnapObjFromName(vm, name)))
goto cleanup;
- snapshot = virGetDomainSnapshot(domain, snap->def->common.name);
+ snapshot = virGetDomainSnapshot(domain, snap->def->name);
cleanup:
virDomainObjEndAPI(&vm);
if (!(snap = qemuSnapObjFromSnapshot(vm, snapshot)))
goto cleanup;
- if (!snap->def->common.parent) {
+ if (!snap->def->parent) {
virReportError(VIR_ERR_NO_DOMAIN_SNAPSHOT,
_("snapshot '%s' does not have a parent"),
- snap->def->common.name);
+ snap->def->name);
goto cleanup;
}
- parent = virGetDomainSnapshot(snapshot->domain, snap->def->common.parent);
+ parent = virGetDomainSnapshot(snapshot->domain, snap->def->parent);
cleanup:
virDomainObjEndAPI(&vm);
virUUIDFormat(snapshot->domain->uuid, uuidstr);
- xml = virDomainSnapshotDefFormat(uuidstr, snap->def,
+ xml = virDomainSnapshotDefFormat(uuidstr, virDomainSnapshotObjGetDef(snap),
driver->caps, driver->xmlopt,
virDomainSnapshotFormatConvertXMLFlags(flags));
int ret = -1;
virDomainSnapshotObjPtr snap = NULL;
virDomainSnapshotObjPtr current = NULL;
+ virDomainSnapshotDefPtr snapdef;
virObjectEventPtr event = NULL;
virObjectEventPtr event2 = NULL;
int detail;
if (!(snap = qemuSnapObjFromSnapshot(vm, snapshot)))
goto endjob;
+ snapdef = virDomainSnapshotObjGetDef(snap);
if (!vm->persistent &&
- snap->def->state != VIR_DOMAIN_SNAPSHOT_RUNNING &&
- snap->def->state != VIR_DOMAIN_SNAPSHOT_PAUSED &&
+ snapdef->state != VIR_DOMAIN_SNAPSHOT_RUNNING &&
+ snapdef->state != VIR_DOMAIN_SNAPSHOT_PAUSED &&
(flags & (VIR_DOMAIN_SNAPSHOT_REVERT_RUNNING |
VIR_DOMAIN_SNAPSHOT_REVERT_PAUSED)) == 0) {
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
}
if (!(flags & VIR_DOMAIN_SNAPSHOT_REVERT_FORCE)) {
- if (!snap->def->common.dom) {
+ if (!snap->def->dom) {
virReportError(VIR_ERR_SNAPSHOT_REVERT_RISKY,
_("snapshot '%s' lacks domain '%s' rollback info"),
- snap->def->common.name, vm->def->name);
+ snap->def->name, vm->def->name);
goto endjob;
}
if (virDomainObjIsActive(vm) &&
- !(snap->def->state == VIR_DOMAIN_SNAPSHOT_RUNNING ||
- snap->def->state == VIR_DOMAIN_SNAPSHOT_PAUSED) &&
+ !(snapdef->state == VIR_DOMAIN_SNAPSHOT_RUNNING ||
+ snapdef->state == VIR_DOMAIN_SNAPSHOT_PAUSED) &&
(flags & (VIR_DOMAIN_SNAPSHOT_REVERT_RUNNING |
VIR_DOMAIN_SNAPSHOT_REVERT_PAUSED))) {
virReportError(VIR_ERR_SNAPSHOT_REVERT_RISKY, "%s",
*
* XXX Should domain snapshots track live xml rather
* than inactive xml? */
- if (snap->def->common.dom) {
- config = virDomainDefCopy(snap->def->common.dom, caps,
+ if (snap->def->dom) {
+ config = virDomainDefCopy(snap->def->dom, caps,
driver->xmlopt, NULL, true);
if (!config)
goto endjob;
}
- cookie = (qemuDomainSaveCookiePtr) snap->def->cookie;
+ cookie = (qemuDomainSaveCookiePtr) snapdef->cookie;
- switch ((virDomainSnapshotState) snap->def->state) {
+ switch ((virDomainSnapshotState) snapdef->state) {
case VIR_DOMAIN_SNAPSHOT_RUNNING:
case VIR_DOMAIN_SNAPSHOT_PAUSED:
if (qemuDomainObjEnterMonitorAsync(driver, vm,
QEMU_ASYNC_JOB_START) < 0)
goto endjob;
- rc = qemuMonitorLoadSnapshot(priv->mon, snap->def->common.name);
+ rc = qemuMonitorLoadSnapshot(priv->mon, snap->def->name);
if (qemuDomainObjExitMonitor(driver, vm) < 0)
goto endjob;
if (rc < 0) {
/* Touch up domain state. */
if (!(flags & VIR_DOMAIN_SNAPSHOT_REVERT_RUNNING) &&
- (snap->def->state == VIR_DOMAIN_SNAPSHOT_PAUSED ||
+ (snapdef->state == VIR_DOMAIN_SNAPSHOT_PAUSED ||
(flags & VIR_DOMAIN_SNAPSHOT_REVERT_PAUSED))) {
/* Transitions 3, 6, 9 */
virDomainObjSetState(vm, VIR_DOMAIN_PAUSED,
virReportError(VIR_ERR_INTERNAL_ERROR,
_("Invalid target domain state '%s'. Refusing "
"snapshot reversion"),
- virDomainSnapshotStateTypeToString(snap->def->state));
+ virDomainSnapshotStateTypeToString(snapdef->state));
goto endjob;
}
if (rep->err < 0)
return 0;
- VIR_FREE(snap->def->common.parent);
+ VIR_FREE(snap->def->parent);
if (rep->parent->def &&
- VIR_STRDUP(snap->def->common.parent, rep->parent->def->common.name) < 0) {
+ VIR_STRDUP(snap->def->parent, rep->parent->def->name) < 0) {
rep->err = -1;
return 0;
}
cfg->snapshotDir) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("failed to set snapshot '%s' as current"),
- snap->def->common.name);
+ snap->def->name);
virDomainSnapshotSetCurrent(vm->snapshots, NULL);
goto endjob;
}
if (!(snap = testSnapObjFromName(vm, name)))
goto cleanup;
- snapshot = virGetDomainSnapshot(domain, snap->def->common.name);
+ snapshot = virGetDomainSnapshot(domain, snap->def->name);
cleanup:
virDomainObjEndAPI(&vm);
if (!(snap = testSnapObjFromSnapshot(vm, snapshot)))
goto cleanup;
- if (!snap->def->common.parent) {
+ if (!snap->def->parent) {
virReportError(VIR_ERR_NO_DOMAIN_SNAPSHOT,
_("snapshot '%s' does not have a parent"),
- snap->def->common.name);
+ snap->def->name);
goto cleanup;
}
- parent = virGetDomainSnapshot(snapshot->domain, snap->def->common.parent);
+ parent = virGetDomainSnapshot(snapshot->domain, snap->def->parent);
cleanup:
virDomainObjEndAPI(&vm);
goto cleanup;
}
- snapshot = virGetDomainSnapshot(domain, current->def->common.name);
+ snapshot = virGetDomainSnapshot(domain, current->def->name);
cleanup:
virDomainObjEndAPI(&vm);
virUUIDFormat(snapshot->domain->uuid, uuidstr);
- xml = virDomainSnapshotDefFormat(uuidstr, snap->def, privconn->caps,
- privconn->xmlopt,
+ xml = virDomainSnapshotDefFormat(uuidstr, virDomainSnapshotObjGetDef(snap),
+ privconn->caps, privconn->xmlopt,
virDomainSnapshotFormatConvertXMLFlags(flags));
cleanup:
}
if (!redefine) {
- if (VIR_STRDUP(snap->def->common.parent,
+ if (VIR_STRDUP(snap->def->parent,
virDomainSnapshotGetCurrentName(vm->snapshots)) < 0)
goto cleanup;
}
}
- snapshot = virGetDomainSnapshot(domain, snap->def->common.name);
+ snapshot = virGetDomainSnapshot(domain, snap->def->name);
cleanup:
if (vm) {
if (snapshot) {
if (update_current)
virDomainSnapshotSetCurrent(vm->snapshots, snap);
other = virDomainSnapshotFindByName(vm->snapshots,
- snap->def->common.parent);
+ snap->def->parent);
virDomainSnapshotSetParent(snap, other);
}
virDomainObjEndAPI(&vm);
if (rep->err < 0)
return 0;
- VIR_FREE(snap->def->common.parent);
+ VIR_FREE(snap->def->parent);
if (rep->parent->def &&
- VIR_STRDUP(snap->def->common.parent, rep->parent->def->common.name) < 0) {
+ VIR_STRDUP(snap->def->parent, rep->parent->def->name) < 0) {
rep->err = -1;
return 0;
}
} else {
virDomainSnapshotDropParent(snap);
if (snap == virDomainSnapshotGetCurrent(vm->snapshots)) {
- if (snap->def->common.parent) {
+ if (snap->def->parent) {
parentsnap = virDomainSnapshotFindByName(vm->snapshots,
- snap->def->common.parent);
+ snap->def->parent);
if (!parentsnap)
VIR_WARN("missing parent snapshot matching name '%s'",
- snap->def->common.parent);
+ snap->def->parent);
}
virDomainSnapshotSetCurrent(vm->snapshots, parentsnap);
}
virObjectEventPtr event = NULL;
virObjectEventPtr event2 = NULL;
virDomainDefPtr config = NULL;
+ virDomainSnapshotDefPtr snapdef;
int ret = -1;
virCheckFlags(VIR_DOMAIN_SNAPSHOT_REVERT_RUNNING |
if (!(snap = testSnapObjFromSnapshot(vm, snapshot)))
goto cleanup;
+ snapdef = virDomainSnapshotObjGetDef(snap);
if (!vm->persistent &&
- snap->def->state != VIR_DOMAIN_SNAPSHOT_RUNNING &&
- snap->def->state != VIR_DOMAIN_SNAPSHOT_PAUSED &&
+ snapdef->state != VIR_DOMAIN_SNAPSHOT_RUNNING &&
+ snapdef->state != VIR_DOMAIN_SNAPSHOT_PAUSED &&
(flags & (VIR_DOMAIN_SNAPSHOT_REVERT_RUNNING |
VIR_DOMAIN_SNAPSHOT_REVERT_PAUSED)) == 0) {
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
}
if (!(flags & VIR_DOMAIN_SNAPSHOT_REVERT_FORCE)) {
- if (!snap->def->common.dom) {
+ if (!snap->def->dom) {
virReportError(VIR_ERR_SNAPSHOT_REVERT_RISKY,
_("snapshot '%s' lacks domain '%s' rollback info"),
- snap->def->common.name, vm->def->name);
+ snap->def->name, vm->def->name);
goto cleanup;
}
if (virDomainObjIsActive(vm) &&
- !(snap->def->state == VIR_DOMAIN_SNAPSHOT_RUNNING ||
- snap->def->state == VIR_DOMAIN_SNAPSHOT_PAUSED) &&
+ !(snapdef->state == VIR_DOMAIN_SNAPSHOT_RUNNING ||
+ snapdef->state == VIR_DOMAIN_SNAPSHOT_PAUSED) &&
(flags & (VIR_DOMAIN_SNAPSHOT_REVERT_RUNNING |
VIR_DOMAIN_SNAPSHOT_REVERT_PAUSED))) {
virReportError(VIR_ERR_SNAPSHOT_REVERT_RISKY, "%s",
virDomainSnapshotSetCurrent(vm->snapshots, NULL);
- config = virDomainDefCopy(snap->def->common.dom, privconn->caps,
+ config = virDomainDefCopy(snap->def->dom, privconn->caps,
privconn->xmlopt, NULL, true);
if (!config)
goto cleanup;
- if (snap->def->state == VIR_DOMAIN_SNAPSHOT_RUNNING ||
- snap->def->state == VIR_DOMAIN_SNAPSHOT_PAUSED) {
+ if (snapdef->state == VIR_DOMAIN_SNAPSHOT_RUNNING ||
+ snapdef->state == VIR_DOMAIN_SNAPSHOT_PAUSED) {
/* Transitions 2, 3, 5, 6, 8, 9 */
bool was_running = false;
bool was_stopped = false;
/* Touch up domain state. */
if (!(flags & VIR_DOMAIN_SNAPSHOT_REVERT_RUNNING) &&
- (snap->def->state == VIR_DOMAIN_SNAPSHOT_PAUSED ||
+ (snapdef->state == VIR_DOMAIN_SNAPSHOT_PAUSED ||
(flags & VIR_DOMAIN_SNAPSHOT_REVERT_PAUSED))) {
/* Transitions 3, 6, 9 */
virDomainObjSetState(vm, VIR_DOMAIN_PAUSED,