1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-02-04 21:47:16 +03:00

qemu: process: Move 'volume' translation to domain prepare stage

Introduce a new function to prepare domain disks which will also do the
volume source to actual disk source translation.

The 'pretend' condition is not transferred to the new location since it
does not help in writing tests and also no tests abuse it.
This commit is contained in:
Peter Krempa 2017-10-03 12:38:23 +02:00
parent 76039bba87
commit f1cec8829e
3 changed files with 34 additions and 15 deletions

View File

@ -5682,8 +5682,7 @@ qemuDomainCheckDiskStartupPolicy(virQEMUDriverPtr driver,
int
qemuDomainCheckDiskPresence(virConnectPtr conn,
virQEMUDriverPtr driver,
qemuDomainCheckDiskPresence(virQEMUDriverPtr driver,
virDomainObjPtr vm,
unsigned int flags)
{
@ -5697,13 +5696,6 @@ qemuDomainCheckDiskPresence(virConnectPtr conn,
virDomainDiskDefPtr disk = vm->def->disks[idx];
virStorageFileFormat format = virDomainDiskGetFormat(disk);
if (virStorageTranslateDiskSourcePool(conn, vm->def->disks[idx]) < 0) {
if (pretend ||
qemuDomainCheckDiskStartupPolicy(driver, vm, idx, cold_boot) < 0)
return -1;
continue;
}
if (pretend)
continue;

View File

@ -644,8 +644,7 @@ int qemuDomainCheckDiskStartupPolicy(virQEMUDriverPtr driver,
size_t diskIndex,
bool cold_boot);
int qemuDomainCheckDiskPresence(virConnectPtr conn,
virQEMUDriverPtr driver,
int qemuDomainCheckDiskPresence(virQEMUDriverPtr driver,
virDomainObjPtr vm,
unsigned int flags);

View File

@ -5284,6 +5284,32 @@ qemuProcessPrepareDomainNUMAPlacement(virDomainObjPtr vm,
}
static int
qemuProcessPrepareDomainStorage(virConnectPtr conn,
virQEMUDriverPtr driver,
virDomainObjPtr vm,
unsigned int flags)
{
size_t i;
bool cold_boot = flags & VIR_QEMU_PROCESS_START_COLD;
for (i = vm->def->ndisks; i > 0; i--) {
size_t idx = i - 1;
virDomainDiskDefPtr disk = vm->def->disks[idx];
if (virStorageTranslateDiskSourcePool(conn, disk) < 0) {
if (qemuDomainCheckDiskStartupPolicy(driver, vm, idx, cold_boot) < 0)
return -1;
/* disk source was dropped */
continue;
}
}
return 0;
}
/**
* qemuProcessPrepareDomain:
* @conn: connection object (for looking up storage volumes)
@ -5360,10 +5386,12 @@ qemuProcessPrepareDomain(virConnectPtr conn,
if (qemuProcessSetupGraphics(driver, vm, flags) < 0)
goto cleanup;
/* Drop possibly missing disks from the definition. This function
* also resolves source pool/volume into a path and it needs to
* happen after the def is copied and aliases are set. */
if (qemuDomainCheckDiskPresence(conn, driver, vm, flags) < 0)
VIR_DEBUG("Setting up storage");
if (qemuProcessPrepareDomainStorage(conn, driver, vm, flags) < 0)
goto cleanup;
/* Drop possibly missing disks from the definition. */
if (qemuDomainCheckDiskPresence(driver, vm, flags) < 0)
goto cleanup;
VIR_DEBUG("Create domain masterKey");