mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 03:12:22 +00:00
vz: delete domains when undefine is called
Currently vz driver unregisters domains when undefine is called, which is wrong because it contradicts with expected behavior. All vz domains are persistent, which means that when one is defined a new bundle directory containing meta data is created. Undefining domains in a way we do now leaves those directories undeleted, which prevents subsequent define call for the same domain xml. I.e. the following sequence define->undefine->define doesn't work now. The patch fixes the problem by calling PrlVm_Delete instead of PrlVm_Unreg detaching all disks prior actually doing this to prevent images deletion. Signed-off-by: Maxim Nestratov <mnestratov@virtuozzo.com>
This commit is contained in:
parent
d5a0cf10bc
commit
b733739416
@ -3718,6 +3718,46 @@ prlsdkCreateCt(virConnectPtr conn, virDomainDefPtr def)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* prlsdkDetachDomainHardDisks:
|
||||
*
|
||||
* @sdkdom: domain handle
|
||||
*
|
||||
* Returns 0 if hard disks were successfully detached or not detected.
|
||||
*/
|
||||
static int
|
||||
prlsdkDetachDomainHardDisks(PRL_HANDLE sdkdom)
|
||||
{
|
||||
int ret = -1;
|
||||
PRL_RESULT pret;
|
||||
PRL_UINT32 hddCount;
|
||||
PRL_UINT32 i;
|
||||
PRL_HANDLE job;
|
||||
|
||||
job = PrlVm_BeginEdit(sdkdom);
|
||||
if (PRL_FAILED(waitJob(job)))
|
||||
goto cleanup;
|
||||
|
||||
pret = PrlVmCfg_GetHardDisksCount(sdkdom, &hddCount);
|
||||
prlsdkCheckRetGoto(pret, cleanup);
|
||||
|
||||
for (i = 0; i < hddCount; ++i) {
|
||||
ret = prlsdkDelDisk(sdkdom, i);
|
||||
if (ret)
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
job = PrlVm_CommitEx(sdkdom, PVCF_DETACH_HDD_BUNDLE);
|
||||
if (PRL_FAILED(waitJob(job)))
|
||||
ret = -1;
|
||||
|
||||
cleanup:
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int
|
||||
prlsdkUnregisterDomain(vzConnPtr privconn, virDomainObjPtr dom)
|
||||
{
|
||||
@ -3728,7 +3768,10 @@ prlsdkUnregisterDomain(vzConnPtr privconn, virDomainObjPtr dom)
|
||||
for (i = 0; i < dom->def->nnets; i++)
|
||||
prlsdkCleanupBridgedNet(privconn, dom->def->nets[i]);
|
||||
|
||||
job = PrlVm_Unreg(privdom->sdkdom);
|
||||
if (prlsdkDetachDomainHardDisks(privdom->sdkdom))
|
||||
return -1;
|
||||
|
||||
job = PrlVm_Delete(privdom->sdkdom, PRL_INVALID_HANDLE);
|
||||
if (PRL_FAILED(waitJob(job)))
|
||||
return -1;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user