[PATCH v2 2/4] test_driver: Implement virDomainGetJobStats
Martin Kletzander
mkletzan at redhat.com
Tue Aug 17 11:48:42 UTC 2021
On Mon, Aug 16, 2021 at 07:13:35PM +0800, Luke Yue wrote:
>Signed-off-by: Luke Yue <lukedyue at gmail.com>
>---
> src/test/test_driver.c | 105 +++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 105 insertions(+)
>
>diff --git a/src/test/test_driver.c b/src/test/test_driver.c
>index 9306f0e104..93aeec7105 100644
>--- a/src/test/test_driver.c
>+++ b/src/test/test_driver.c
>@@ -2769,6 +2769,110 @@ testDomainGetJobInfo(virDomainPtr dom,
> return ret;
> }
>
>+static int
>+testDomainJobInfoToParams(testDomainObjPrivate *priv,
>+ virDomainJobInfoPtr info,
>+ int *type,
>+ virTypedParameterPtr *params,
>+ int *nparams)
>+{
>+ virTypedParameterPtr par = NULL;
>+ int maxpar = 0;
>+ int npar = 0;
>+
>+ if (virTypedParamsAddInt(&par, &npar, &maxpar,
>+ VIR_DOMAIN_JOB_OPERATION,
>+ priv->jobOperation) < 0 ||
>+ virTypedParamsAddULLong(&par, &npar, &maxpar,
>+ VIR_DOMAIN_JOB_DATA_TOTAL,
>+ info->dataTotal) < 0 ||
>+ virTypedParamsAddULLong(&par, &npar, &maxpar,
>+ VIR_DOMAIN_JOB_DATA_PROCESSED,
>+ info->dataProcessed) < 0 ||
>+ virTypedParamsAddULLong(&par, &npar, &maxpar,
>+ VIR_DOMAIN_JOB_DATA_REMAINING,
>+ info->dataRemaining) < 0 ||
>+ virTypedParamsAddULLong(&par, &npar, &maxpar,
>+ VIR_DOMAIN_JOB_TIME_ELAPSED,
>+ info->timeElapsed) < 0 ||
>+ virTypedParamsAddULLong(&par, &npar, &maxpar,
>+ VIR_DOMAIN_JOB_TIME_REMAINING,
>+ info->timeRemaining) < 0 ||
>+ virTypedParamsAddULLong(&par, &npar, &maxpar,
>+ VIR_DOMAIN_JOB_MEMORY_TOTAL,
>+ info->memTotal) < 0 ||
>+ virTypedParamsAddULLong(&par, &npar, &maxpar,
>+ VIR_DOMAIN_JOB_MEMORY_PROCESSED,
>+ info->memProcessed) < 0 ||
>+ virTypedParamsAddULLong(&par, &npar, &maxpar,
>+ VIR_DOMAIN_JOB_MEMORY_REMAINING,
>+ info->memRemaining) < 0 ||
>+ virTypedParamsAddULLong(&par, &npar, &maxpar,
>+ VIR_DOMAIN_JOB_DISK_TOTAL,
>+ info->fileTotal) < 0 ||
>+ virTypedParamsAddULLong(&par, &npar, &maxpar,
>+ VIR_DOMAIN_JOB_DISK_PROCESSED,
>+ info->fileProcessed) < 0 ||
>+ virTypedParamsAddULLong(&par, &npar, &maxpar,
>+ VIR_DOMAIN_JOB_DISK_REMAINING,
>+ info->fileRemaining) < 0)
>+ goto error;
>+
>+ *type = info->type;
>+ *params = par;
>+ *nparams = npar;
>+ return 0;
>+
>+ error:
>+ virTypedParamsFree(par, npar);
>+ return -1;
>+}
>+
>+static int
>+testDomainGetJobStats(virDomainPtr domain,
>+ int *type,
>+ virTypedParameterPtr *params,
>+ int *nparams,
>+ unsigned int flags)
>+{
>+ virDomainJobInfo jobInfo;
>+ virDomainObj *dom;
>+ testDomainObjPrivate *priv;
>+ bool completed = !!(flags & VIR_DOMAIN_JOB_STATS_COMPLETED);
Unnecessary cast, just:
bool completed = flags & VIR_DOMAIN_JOB_STATS_COMPLETED;
would be fine.
>+ int ret = -1;
>+
>+ virCheckFlags(VIR_DOMAIN_JOB_STATS_COMPLETED |
>+ VIR_DOMAIN_JOB_STATS_KEEP_COMPLETED, -1);
>+
>+ if (!(dom = testDomObjFromDomain(domain)))
>+ return -1;
>+
>+ priv = dom->privateData;
>+
>+ if (testDomainGetJobInfoImpl(dom, &jobInfo) < 0)
>+ goto cleanup;
>+
Unfortunately I do not see how you return different data if you get here
with completed == true. Either we should return some dummy values or
get an extra field in priv for some last completed job.
Otherwise looks fine.
>+ if (jobInfo.type == VIR_DOMAIN_JOB_NONE) {
>+ *type = VIR_DOMAIN_JOB_NONE;
>+ *params = NULL;
>+ *nparams = 0;
>+ ret = 0;
>+ goto cleanup;
>+ }
>+
>+ ret = testDomainJobInfoToParams(priv, &jobInfo, type, params, nparams);
>+
>+ if (completed && ret == 0 &&
>+ !(flags & VIR_DOMAIN_JOB_STATS_KEEP_COMPLETED)) {
>+ priv->jobState = VIR_DOMAIN_JOB_NONE;
>+ priv->jobOperation = VIR_DOMAIN_JOB_OPERATION_UNKNOWN;
>+ }
>+
>+ cleanup:
>+ virDomainObjEndAPI(&dom);
>+
>+ return ret;
>+}
>
> static int
> testDomainGetLaunchSecurityInfo(virDomainPtr domain G_GNUC_UNUSED,
>@@ -9672,6 +9776,7 @@ static virHypervisorDriver testHypervisorDriver = {
> .domainGetBlockInfo = testDomainGetBlockInfo, /* 5.7.0 */
> .domainSetLifecycleAction = testDomainSetLifecycleAction, /* 5.7.0 */
> .domainGetJobInfo = testDomainGetJobInfo, /* 7.7.0 */
>+ .domainGetJobStats = testDomainGetJobStats, /* 7.7.0 */
>
> .domainSnapshotNum = testDomainSnapshotNum, /* 1.1.4 */
> .domainSnapshotListNames = testDomainSnapshotListNames, /* 1.1.4 */
>--
>2.32.0
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20210817/0d29d292/attachment-0001.sig>
More information about the libvir-list
mailing list