Re: [libvirt] [PATCH v2 2/2] test_driver: implement virDomainSetBlockIoTune

2019-08-12 Thread Erik Skultety
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

2019-08-09 Thread Ilias Stamatis
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 >