mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
qemu: Refactor qemuDomainGetJob{Info,Stats}
Move common parts of qemuDomainGetJobInfo and qemuDomainGetJobStats into a separate API (qemuDomainGetJobStatsInternal). Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
This commit is contained in:
parent
2ad46e5b0e
commit
30d94bcdec
@ -12995,42 +12995,72 @@ qemuConnectBaselineCPU(virConnectPtr conn ATTRIBUTE_UNUSED,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int qemuDomainGetJobInfo(virDomainPtr dom,
|
static int
|
||||||
virDomainJobInfoPtr info)
|
qemuDomainGetJobStatsInternal(virQEMUDriverPtr driver ATTRIBUTE_UNUSED,
|
||||||
|
virDomainObjPtr vm,
|
||||||
|
bool completed,
|
||||||
|
qemuDomainJobInfoPtr jobInfo)
|
||||||
{
|
{
|
||||||
|
qemuDomainObjPrivatePtr priv = vm->privateData;
|
||||||
|
qemuDomainJobInfoPtr info;
|
||||||
|
int ret = -1;
|
||||||
|
|
||||||
|
if (!completed &&
|
||||||
|
!virDomainObjIsActive(vm)) {
|
||||||
|
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||||
|
_("domain is not running"));
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (completed)
|
||||||
|
info = priv->job.completed;
|
||||||
|
else
|
||||||
|
info = priv->job.current;
|
||||||
|
|
||||||
|
if (!info) {
|
||||||
|
jobInfo->type = VIR_DOMAIN_JOB_NONE;
|
||||||
|
ret = 0;
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
*jobInfo = *info;
|
||||||
|
|
||||||
|
if (jobInfo->type == VIR_DOMAIN_JOB_BOUNDED ||
|
||||||
|
jobInfo->type == VIR_DOMAIN_JOB_UNBOUNDED)
|
||||||
|
ret = qemuDomainJobInfoUpdateTime(jobInfo);
|
||||||
|
else
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
qemuDomainGetJobInfo(virDomainPtr dom,
|
||||||
|
virDomainJobInfoPtr info)
|
||||||
|
{
|
||||||
|
virQEMUDriverPtr driver = dom->conn->privateData;
|
||||||
|
qemuDomainJobInfo jobInfo;
|
||||||
virDomainObjPtr vm;
|
virDomainObjPtr vm;
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
qemuDomainObjPrivatePtr priv;
|
|
||||||
|
|
||||||
if (!(vm = qemuDomObjFromDomain(dom)))
|
if (!(vm = qemuDomObjFromDomain(dom)))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
priv = vm->privateData;
|
|
||||||
|
|
||||||
if (virDomainGetJobInfoEnsureACL(dom->conn, vm->def) < 0)
|
if (virDomainGetJobInfoEnsureACL(dom->conn, vm->def) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if (virDomainObjIsActive(vm)) {
|
if (qemuDomainGetJobStatsInternal(driver, vm, false, &jobInfo) < 0)
|
||||||
if (priv->job.current) {
|
goto cleanup;
|
||||||
/* Refresh elapsed time again just to ensure it
|
|
||||||
* is fully updated. This is primarily for benefit
|
if (jobInfo.type == VIR_DOMAIN_JOB_NONE) {
|
||||||
* of incoming migration which we don't currently
|
memset(info, 0, sizeof(*info));
|
||||||
* monitor actively in the background thread
|
info->type = VIR_DOMAIN_JOB_NONE;
|
||||||
*/
|
ret = 0;
|
||||||
if (qemuDomainJobInfoUpdateTime(priv->job.current) < 0 ||
|
|
||||||
qemuDomainJobInfoToInfo(priv->job.current, info) < 0)
|
|
||||||
goto cleanup;
|
|
||||||
} else {
|
|
||||||
memset(info, 0, sizeof(*info));
|
|
||||||
info->type = VIR_DOMAIN_JOB_NONE;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
virReportError(VIR_ERR_OPERATION_INVALID,
|
|
||||||
"%s", _("domain is not running"));
|
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = 0;
|
ret = qemuDomainJobInfoToInfo(&jobInfo, info);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
virDomainObjEndAPI(&vm);
|
virDomainObjEndAPI(&vm);
|
||||||
@ -13045,9 +13075,11 @@ qemuDomainGetJobStats(virDomainPtr dom,
|
|||||||
int *nparams,
|
int *nparams,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
|
virQEMUDriverPtr driver = dom->conn->privateData;
|
||||||
virDomainObjPtr vm;
|
virDomainObjPtr vm;
|
||||||
qemuDomainObjPrivatePtr priv;
|
qemuDomainObjPrivatePtr priv;
|
||||||
qemuDomainJobInfoPtr jobInfo;
|
qemuDomainJobInfo jobInfo;
|
||||||
|
bool completed = !!(flags & VIR_DOMAIN_JOB_STATS_COMPLETED);
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
|
|
||||||
virCheckFlags(VIR_DOMAIN_JOB_STATS_COMPLETED, -1);
|
virCheckFlags(VIR_DOMAIN_JOB_STATS_COMPLETED, -1);
|
||||||
@ -13055,24 +13087,14 @@ qemuDomainGetJobStats(virDomainPtr dom,
|
|||||||
if (!(vm = qemuDomObjFromDomain(dom)))
|
if (!(vm = qemuDomObjFromDomain(dom)))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
priv = vm->privateData;
|
|
||||||
|
|
||||||
if (virDomainGetJobStatsEnsureACL(dom->conn, vm->def) < 0)
|
if (virDomainGetJobStatsEnsureACL(dom->conn, vm->def) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if (!(flags & VIR_DOMAIN_JOB_STATS_COMPLETED) &&
|
priv = vm->privateData;
|
||||||
!virDomainObjIsActive(vm)) {
|
if (qemuDomainGetJobStatsInternal(driver, vm, completed, &jobInfo) < 0)
|
||||||
virReportError(VIR_ERR_OPERATION_INVALID,
|
|
||||||
"%s", _("domain is not running"));
|
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
|
||||||
|
|
||||||
if (flags & VIR_DOMAIN_JOB_STATS_COMPLETED)
|
if (jobInfo.type == VIR_DOMAIN_JOB_NONE) {
|
||||||
jobInfo = priv->job.completed;
|
|
||||||
else
|
|
||||||
jobInfo = priv->job.current;
|
|
||||||
|
|
||||||
if (!jobInfo) {
|
|
||||||
*type = VIR_DOMAIN_JOB_NONE;
|
*type = VIR_DOMAIN_JOB_NONE;
|
||||||
*params = NULL;
|
*params = NULL;
|
||||||
*nparams = 0;
|
*nparams = 0;
|
||||||
@ -13080,24 +13102,11 @@ qemuDomainGetJobStats(virDomainPtr dom,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Refresh elapsed time again just to ensure it
|
ret = qemuDomainJobInfoToParams(&jobInfo, type, params, nparams);
|
||||||
* is fully updated. This is primarily for benefit
|
|
||||||
* of incoming migration which we don't currently
|
|
||||||
* monitor actively in the background thread
|
|
||||||
*/
|
|
||||||
if ((jobInfo->type == VIR_DOMAIN_JOB_BOUNDED ||
|
|
||||||
jobInfo->type == VIR_DOMAIN_JOB_UNBOUNDED) &&
|
|
||||||
qemuDomainJobInfoUpdateTime(jobInfo) < 0)
|
|
||||||
goto cleanup;
|
|
||||||
|
|
||||||
if (qemuDomainJobInfoToParams(jobInfo, type, params, nparams) < 0)
|
if (completed && ret == 0)
|
||||||
goto cleanup;
|
|
||||||
|
|
||||||
if (flags & VIR_DOMAIN_JOB_STATS_COMPLETED)
|
|
||||||
VIR_FREE(priv->job.completed);
|
VIR_FREE(priv->job.completed);
|
||||||
|
|
||||||
ret = 0;
|
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
virDomainObjEndAPI(&vm);
|
virDomainObjEndAPI(&vm);
|
||||||
return ret;
|
return ret;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user