Re: [libvirt] [PATCH v2 2/2] test_driver: implement virDomainSetBlockIoTune
On Fri, Aug 09, 2019 at 09:53:00PM +0300, Ilias Stamatis wrote: > Signed-off-by: Ilias Stamatis > --- > src/test/test_driver.c | 259 + > 1 file changed, 259 insertions(+) > > diff --git a/src/test/test_driver.c b/src/test/test_driver.c > index 14b7d683e1..009bc18a73 100755 > --- a/src/test/test_driver.c > +++ b/src/test/test_driver.c > @@ -3613,6 +3613,264 @@ testDomainGetInterfaceParameters(virDomainPtr dom, > } > > > +#define TEST_BLOCK_IOTUNE_MAX 1000LL > + > +static int > +testDomainSetBlockIoTune(virDomainPtr dom, > + const char *path, > + virTypedParameterPtr params, > + int nparams, > + unsigned int flags) > +{ > +virDomainObjPtr vm = NULL; > +virDomainDefPtr def = NULL; > +virDomainBlockIoTuneInfo info = {0}; > +virDomainDiskDefPtr conf_disk = NULL; > +virTypedParameterPtr eventParams = NULL; > +int eventNparams = 0; > +int eventMaxparams = 0; > +size_t i; > +int ret = -1; > + > +virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | > + VIR_DOMAIN_AFFECT_CONFIG, -1); > + > +if (virTypedParamsValidate(params, nparams, > + VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_BYTES_SEC, > + VIR_TYPED_PARAM_ULLONG, > + VIR_DOMAIN_BLOCK_IOTUNE_READ_BYTES_SEC, > + VIR_TYPED_PARAM_ULLONG, > + VIR_DOMAIN_BLOCK_IOTUNE_WRITE_BYTES_SEC, > + VIR_TYPED_PARAM_ULLONG, > + VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_IOPS_SEC, > + VIR_TYPED_PARAM_ULLONG, > + VIR_DOMAIN_BLOCK_IOTUNE_READ_IOPS_SEC, > + VIR_TYPED_PARAM_ULLONG, > + VIR_DOMAIN_BLOCK_IOTUNE_WRITE_IOPS_SEC, > + VIR_TYPED_PARAM_ULLONG, > + VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_BYTES_SEC_MAX, > + VIR_TYPED_PARAM_ULLONG, > + VIR_DOMAIN_BLOCK_IOTUNE_READ_BYTES_SEC_MAX, > + VIR_TYPED_PARAM_ULLONG, > + VIR_DOMAIN_BLOCK_IOTUNE_WRITE_BYTES_SEC_MAX, > + VIR_TYPED_PARAM_ULLONG, > + VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_IOPS_SEC_MAX, > + VIR_TYPED_PARAM_ULLONG, > + VIR_DOMAIN_BLOCK_IOTUNE_READ_IOPS_SEC_MAX, > + VIR_TYPED_PARAM_ULLONG, > + VIR_DOMAIN_BLOCK_IOTUNE_WRITE_IOPS_SEC_MAX, > + VIR_TYPED_PARAM_ULLONG, > + VIR_DOMAIN_BLOCK_IOTUNE_SIZE_IOPS_SEC, > + VIR_TYPED_PARAM_ULLONG, > + VIR_DOMAIN_BLOCK_IOTUNE_GROUP_NAME, > + VIR_TYPED_PARAM_STRING, > + > VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_BYTES_SEC_MAX_LENGTH, > + VIR_TYPED_PARAM_ULLONG, > + > VIR_DOMAIN_BLOCK_IOTUNE_READ_BYTES_SEC_MAX_LENGTH, > + VIR_TYPED_PARAM_ULLONG, > + > VIR_DOMAIN_BLOCK_IOTUNE_WRITE_BYTES_SEC_MAX_LENGTH, > + VIR_TYPED_PARAM_ULLONG, > + > VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_IOPS_SEC_MAX_LENGTH, > + VIR_TYPED_PARAM_ULLONG, > + > VIR_DOMAIN_BLOCK_IOTUNE_READ_IOPS_SEC_MAX_LENGTH, > + VIR_TYPED_PARAM_ULLONG, > + > VIR_DOMAIN_BLOCK_IOTUNE_WRITE_IOPS_SEC_MAX_LENGTH, > + VIR_TYPED_PARAM_ULLONG, > + NULL) < 0) > +return -1; > + > +if (!(vm = testDomObjFromDomain(dom))) > +return -1; > + > +if (!(def = virDomainObjGetOneDef(vm, flags))) > +goto cleanup; > + > +if (!(conf_disk = virDomainDiskByName(def, path, true))) { > +virReportError(VIR_ERR_INVALID_ARG, > + _("missing persistent configuration for disk '%s'"), > + path); > +goto cleanup; > +} > + > +info = conf_disk->blkdeviotune; > +if (VIR_STRDUP(info.group_name, conf_disk->blkdeviotune.group_name) < 0) > +goto cleanup; > + > +if (virTypedParamsAddString(, , , > +VIR_DOMAIN_TUNABLE_BLKDEV_DISK, path) < 0) > +goto cleanup; > + > +#define SET_IOTUNE_FIELD(FIELD, STR, TUNABLE_STR) \ > +if (STREQ(param->field, STR)) { \ > +info.FIELD = param->value.ul; \ > +if (virTypedParamsAddULLong(, , \ > +, \ >
[libvirt] [PATCH v2 2/2] test_driver: implement virDomainSetBlockIoTune
Signed-off-by: Ilias Stamatis --- src/test/test_driver.c | 259 + 1 file changed, 259 insertions(+) diff --git a/src/test/test_driver.c b/src/test/test_driver.c index 14b7d683e1..009bc18a73 100755 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -3613,6 +3613,264 @@ testDomainGetInterfaceParameters(virDomainPtr dom, } +#define TEST_BLOCK_IOTUNE_MAX 1000LL + +static int +testDomainSetBlockIoTune(virDomainPtr dom, + const char *path, + virTypedParameterPtr params, + int nparams, + unsigned int flags) +{ +virDomainObjPtr vm = NULL; +virDomainDefPtr def = NULL; +virDomainBlockIoTuneInfo info = {0}; +virDomainDiskDefPtr conf_disk = NULL; +virTypedParameterPtr eventParams = NULL; +int eventNparams = 0; +int eventMaxparams = 0; +size_t i; +int ret = -1; + +virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | + VIR_DOMAIN_AFFECT_CONFIG, -1); + +if (virTypedParamsValidate(params, nparams, + VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_BYTES_SEC, + VIR_TYPED_PARAM_ULLONG, + VIR_DOMAIN_BLOCK_IOTUNE_READ_BYTES_SEC, + VIR_TYPED_PARAM_ULLONG, + VIR_DOMAIN_BLOCK_IOTUNE_WRITE_BYTES_SEC, + VIR_TYPED_PARAM_ULLONG, + VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_IOPS_SEC, + VIR_TYPED_PARAM_ULLONG, + VIR_DOMAIN_BLOCK_IOTUNE_READ_IOPS_SEC, + VIR_TYPED_PARAM_ULLONG, + VIR_DOMAIN_BLOCK_IOTUNE_WRITE_IOPS_SEC, + VIR_TYPED_PARAM_ULLONG, + VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_BYTES_SEC_MAX, + VIR_TYPED_PARAM_ULLONG, + VIR_DOMAIN_BLOCK_IOTUNE_READ_BYTES_SEC_MAX, + VIR_TYPED_PARAM_ULLONG, + VIR_DOMAIN_BLOCK_IOTUNE_WRITE_BYTES_SEC_MAX, + VIR_TYPED_PARAM_ULLONG, + VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_IOPS_SEC_MAX, + VIR_TYPED_PARAM_ULLONG, + VIR_DOMAIN_BLOCK_IOTUNE_READ_IOPS_SEC_MAX, + VIR_TYPED_PARAM_ULLONG, + VIR_DOMAIN_BLOCK_IOTUNE_WRITE_IOPS_SEC_MAX, + VIR_TYPED_PARAM_ULLONG, + VIR_DOMAIN_BLOCK_IOTUNE_SIZE_IOPS_SEC, + VIR_TYPED_PARAM_ULLONG, + VIR_DOMAIN_BLOCK_IOTUNE_GROUP_NAME, + VIR_TYPED_PARAM_STRING, + VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_BYTES_SEC_MAX_LENGTH, + VIR_TYPED_PARAM_ULLONG, + VIR_DOMAIN_BLOCK_IOTUNE_READ_BYTES_SEC_MAX_LENGTH, + VIR_TYPED_PARAM_ULLONG, + VIR_DOMAIN_BLOCK_IOTUNE_WRITE_BYTES_SEC_MAX_LENGTH, + VIR_TYPED_PARAM_ULLONG, + VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_IOPS_SEC_MAX_LENGTH, + VIR_TYPED_PARAM_ULLONG, + VIR_DOMAIN_BLOCK_IOTUNE_READ_IOPS_SEC_MAX_LENGTH, + VIR_TYPED_PARAM_ULLONG, + VIR_DOMAIN_BLOCK_IOTUNE_WRITE_IOPS_SEC_MAX_LENGTH, + VIR_TYPED_PARAM_ULLONG, + NULL) < 0) +return -1; + +if (!(vm = testDomObjFromDomain(dom))) +return -1; + +if (!(def = virDomainObjGetOneDef(vm, flags))) +goto cleanup; + +if (!(conf_disk = virDomainDiskByName(def, path, true))) { +virReportError(VIR_ERR_INVALID_ARG, + _("missing persistent configuration for disk '%s'"), + path); +goto cleanup; +} + +info = conf_disk->blkdeviotune; +if (VIR_STRDUP(info.group_name, conf_disk->blkdeviotune.group_name) < 0) +goto cleanup; + +if (virTypedParamsAddString(, , , +VIR_DOMAIN_TUNABLE_BLKDEV_DISK, path) < 0) +goto cleanup; + +#define SET_IOTUNE_FIELD(FIELD, STR, TUNABLE_STR) \ +if (STREQ(param->field, STR)) { \ +info.FIELD = param->value.ul; \ +if (virTypedParamsAddULLong(, , \ +, \ +TUNABLE_STR, \ +param->value.ul) < 0) \ +goto cleanup; \ +continue; \ +} + +for (i = 0; i < nparams; i++) { +virTypedParameterPtr param = [i]; + +if (param->value.ul >