[libvirt] [python PATCH 0/4] followup fixes for virPyDictToTypedParams

Pavel Hrdina (4): Use static variables to store virPyDictToTypedParams hints Fix order of virPyDictToTypedParams hints Add missing virPyDictToTypedParams hint for migration params Fix virPyDictToTypedParams type hint for block copy params libvirt-override.c | 150 ++++++++++++----------------------------------------- libvirt-utils.h | 2 + 2 files changed, 35 insertions(+), 117 deletions(-) -- 2.14.3

There is no need to have dynamic allocation every time the API is called. Rewrites commit <314b2346df>. Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 149 ++++++++++++----------------------------------------- libvirt-utils.h | 2 + 2 files changed, 34 insertions(+), 117 deletions(-) diff --git a/libvirt-override.c b/libvirt-override.c index dba42d4..ab4232f 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -7739,6 +7739,25 @@ libvirt_virDomainMigrateGetMaxDowntime(PyObject *self ATTRIBUTE_UNUSED, #endif /* LIBVIR_CHECK_VERSION(3, 7, 0) */ #if LIBVIR_CHECK_VERSION(1, 1, 0) +static virPyTypedParamsHint virPyDomainMigrate3Params[] = { + { VIR_MIGRATE_PARAM_URI, VIR_TYPED_PARAM_STRING }, + { VIR_MIGRATE_PARAM_DEST_NAME, VIR_TYPED_PARAM_STRING }, + { VIR_MIGRATE_PARAM_DEST_XML, VIR_TYPED_PARAM_STRING }, + { VIR_MIGRATE_PARAM_GRAPHICS_URI, VIR_TYPED_PARAM_STRING }, + { VIR_MIGRATE_PARAM_BANDWIDTH, VIR_TYPED_PARAM_ULLONG }, + { VIR_MIGRATE_PARAM_LISTEN_ADDRESS, VIR_TYPED_PARAM_STRING }, + { VIR_MIGRATE_PARAM_DISKS_PORT, VIR_TYPED_PARAM_INT }, + { VIR_MIGRATE_PARAM_COMPRESSION, VIR_TYPED_PARAM_STRING }, + { VIR_MIGRATE_PARAM_COMPRESSION_MT_DTHREADS, VIR_TYPED_PARAM_INT }, + { VIR_MIGRATE_PARAM_COMPRESSION_MT_LEVEL, VIR_TYPED_PARAM_INT }, + { VIR_MIGRATE_PARAM_COMPRESSION_MT_THREADS, VIR_TYPED_PARAM_INT }, + { VIR_MIGRATE_PARAM_COMPRESSION_XBZRLE_CACHE, VIR_TYPED_PARAM_ULLONG }, + { VIR_MIGRATE_PARAM_PERSIST_XML, VIR_TYPED_PARAM_STRING }, + { VIR_MIGRATE_PARAM_AUTO_CONVERGE_INITIAL, VIR_TYPED_PARAM_INT }, + { VIR_MIGRATE_PARAM_AUTO_CONVERGE_INCREMENT, VIR_TYPED_PARAM_INT }, +}; + + static PyObject * libvirt_virDomainMigrate3(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) @@ -7750,9 +7769,7 @@ libvirt_virDomainMigrate3(PyObject *self ATTRIBUTE_UNUSED, PyObject *dict; unsigned int flags; virTypedParameterPtr params; - virPyTypedParamsHintPtr hparams; int nparams = 0; - int nhparams = 15; virDomainPtr ddom = NULL; if (!PyArg_ParseTuple(args, (char *) "OOOI:virDomainMigrate3", @@ -7762,55 +7779,9 @@ libvirt_virDomainMigrate3(PyObject *self ATTRIBUTE_UNUSED, domain = (virDomainPtr) PyvirDomain_Get(pyobj_domain); dconn = (virConnectPtr) PyvirConnect_Get(pyobj_dconn); - hparams = malloc(sizeof(virPyTypedParamsHint) * nhparams); - hparams[0].name = VIR_MIGRATE_PARAM_URI; - hparams[0].type = VIR_TYPED_PARAM_STRING; - - hparams[1].name = VIR_MIGRATE_PARAM_DEST_NAME; - hparams[1].type = VIR_TYPED_PARAM_STRING; - - hparams[2].name = VIR_MIGRATE_PARAM_DEST_XML; - hparams[2].type = VIR_TYPED_PARAM_STRING; - - hparams[3].name = VIR_MIGRATE_PARAM_GRAPHICS_URI; - hparams[3].type = VIR_TYPED_PARAM_STRING; - - hparams[4].name = VIR_MIGRATE_PARAM_BANDWIDTH; - hparams[4].type = VIR_TYPED_PARAM_ULLONG; - - hparams[5].name = VIR_MIGRATE_PARAM_LISTEN_ADDRESS; - hparams[5].type = VIR_TYPED_PARAM_STRING; - - hparams[6].name = VIR_MIGRATE_PARAM_DISKS_PORT; - hparams[6].type = VIR_TYPED_PARAM_INT; - - hparams[7].name = VIR_MIGRATE_PARAM_COMPRESSION; - hparams[7].type = VIR_TYPED_PARAM_STRING; - - hparams[8].name = VIR_MIGRATE_PARAM_COMPRESSION_MT_DTHREADS; - hparams[8].type = VIR_TYPED_PARAM_INT; - - hparams[9].name = VIR_MIGRATE_PARAM_COMPRESSION_MT_LEVEL; - hparams[9].type = VIR_TYPED_PARAM_INT; - - hparams[10].name = VIR_MIGRATE_PARAM_COMPRESSION_MT_THREADS; - hparams[10].type = VIR_TYPED_PARAM_INT; - - hparams[11].name = VIR_MIGRATE_PARAM_COMPRESSION_XBZRLE_CACHE; - hparams[11].type = VIR_TYPED_PARAM_ULLONG; - - hparams[12].name = VIR_MIGRATE_PARAM_PERSIST_XML; - hparams[12].type = VIR_TYPED_PARAM_STRING; - - hparams[13].name = VIR_MIGRATE_PARAM_AUTO_CONVERGE_INITIAL; - hparams[13].type = VIR_TYPED_PARAM_INT; - - hparams[14].name = VIR_MIGRATE_PARAM_AUTO_CONVERGE_INCREMENT; - hparams[14].type = VIR_TYPED_PARAM_INT; - if (virPyDictToTypedParams(dict, ¶ms, &nparams, - hparams, nhparams) < 0) { - free(hparams); + virPyDomainMigrate3Params, + VIR_N_ELEMENTS(virPyDomainMigrate3Params)) < 0) { return NULL; } @@ -7819,7 +7790,6 @@ libvirt_virDomainMigrate3(PyObject *self ATTRIBUTE_UNUSED, LIBVIRT_END_ALLOW_THREADS; virTypedParamsFree(params, nparams); - free(hparams); return libvirt_virDomainPtrWrap(ddom); } @@ -7833,9 +7803,7 @@ libvirt_virDomainMigrateToURI3(PyObject *self ATTRIBUTE_UNUSED, PyObject *dict; unsigned int flags; virTypedParameterPtr params; - virPyTypedParamsHintPtr hparams; int nparams; - int nhparams = 15; int ret = -1; if (!PyArg_ParseTuple(args, (char *) "OzOI:virDomainMigrate3", @@ -7844,55 +7812,9 @@ libvirt_virDomainMigrateToURI3(PyObject *self ATTRIBUTE_UNUSED, domain = (virDomainPtr) PyvirDomain_Get(pyobj_domain); - hparams = malloc(sizeof(virPyTypedParamsHint) * nhparams); - hparams[0].name = VIR_MIGRATE_PARAM_URI; - hparams[0].type = VIR_TYPED_PARAM_STRING; - - hparams[1].name = VIR_MIGRATE_PARAM_DEST_NAME; - hparams[1].type = VIR_TYPED_PARAM_STRING; - - hparams[2].name = VIR_MIGRATE_PARAM_DEST_XML; - hparams[2].type = VIR_TYPED_PARAM_STRING; - - hparams[3].name = VIR_MIGRATE_PARAM_GRAPHICS_URI; - hparams[3].type = VIR_TYPED_PARAM_STRING; - - hparams[4].name = VIR_MIGRATE_PARAM_BANDWIDTH; - hparams[4].type = VIR_TYPED_PARAM_ULLONG; - - hparams[5].name = VIR_MIGRATE_PARAM_LISTEN_ADDRESS; - hparams[5].type = VIR_TYPED_PARAM_STRING; - - hparams[6].name = VIR_MIGRATE_PARAM_DISKS_PORT; - hparams[6].type = VIR_TYPED_PARAM_INT; - - hparams[7].name = VIR_MIGRATE_PARAM_COMPRESSION; - hparams[7].type = VIR_TYPED_PARAM_STRING; - - hparams[8].name = VIR_MIGRATE_PARAM_COMPRESSION_MT_DTHREADS; - hparams[8].type = VIR_TYPED_PARAM_INT; - - hparams[9].name = VIR_MIGRATE_PARAM_COMPRESSION_MT_LEVEL; - hparams[9].type = VIR_TYPED_PARAM_INT; - - hparams[10].name = VIR_MIGRATE_PARAM_COMPRESSION_MT_THREADS; - hparams[10].type = VIR_TYPED_PARAM_INT; - - hparams[11].name = VIR_MIGRATE_PARAM_COMPRESSION_XBZRLE_CACHE; - hparams[11].type = VIR_TYPED_PARAM_ULLONG; - - hparams[12].name = VIR_MIGRATE_PARAM_PERSIST_XML; - hparams[12].type = VIR_TYPED_PARAM_STRING; - - hparams[13].name = VIR_MIGRATE_PARAM_AUTO_CONVERGE_INITIAL; - hparams[13].type = VIR_TYPED_PARAM_INT; - - hparams[14].name = VIR_MIGRATE_PARAM_AUTO_CONVERGE_INCREMENT; - hparams[14].type = VIR_TYPED_PARAM_INT; - if (virPyDictToTypedParams(dict, ¶ms, &nparams, - hparams, nhparams) < 0) { - free(hparams); + virPyDomainMigrate3Params, + VIR_N_ELEMENTS(virPyDomainMigrate3Params)) < 0) { return NULL; } @@ -7901,7 +7823,6 @@ libvirt_virDomainMigrateToURI3(PyObject *self ATTRIBUTE_UNUSED, LIBVIRT_END_ALLOW_THREADS; virTypedParamsFree(params, nparams); - free(hparams); return libvirt_intWrap(ret); } #endif /* LIBVIR_CHECK_VERSION(1, 1, 0) */ @@ -8743,6 +8664,13 @@ libvirt_virDomainListGetStats(PyObject *self ATTRIBUTE_UNUSED, } +static virPyTypedParamsHint virPyDomainBlockCopyParams[] = { + { VIR_DOMAIN_BLOCK_COPY_BANDWIDTH, VIR_TYPED_PARAM_ULLONG }, + { VIR_DOMAIN_BLOCK_COPY_GRANULARITY, VIR_TYPED_PARAM_UINT }, + { VIR_DOMAIN_BLOCK_COPY_BUF_SIZE, VIR_TYPED_PARAM_UINT }, +}; + + static PyObject * libvirt_virDomainBlockCopy(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) @@ -8754,9 +8682,7 @@ libvirt_virDomainBlockCopy(PyObject *self ATTRIBUTE_UNUSED, char *disk = NULL; char *destxml = NULL; virTypedParameterPtr params = NULL; - virPyTypedParamsHintPtr hparams; int nparams = 0; - int nhparams = 3; unsigned int flags = 0; int c_retval; @@ -8765,22 +8691,11 @@ libvirt_virDomainBlockCopy(PyObject *self ATTRIBUTE_UNUSED, return NULL; if (PyDict_Check(pyobj_dict)) { - hparams = malloc(sizeof(virPyTypedParamsHint) * nhparams); - hparams[0].name = VIR_DOMAIN_BLOCK_COPY_BANDWIDTH; - hparams[0].type = VIR_TYPED_PARAM_ULLONG; - - hparams[1].name = VIR_DOMAIN_BLOCK_COPY_GRANULARITY; - hparams[1].type = VIR_TYPED_PARAM_UINT; - - hparams[2].name = VIR_DOMAIN_BLOCK_COPY_BUF_SIZE; - hparams[2].type = VIR_TYPED_PARAM_UINT; - if (virPyDictToTypedParams(pyobj_dict, ¶ms, &nparams, - hparams, nhparams) < 0) { - free(hparams); + virPyDomainBlockCopyParams, + VIR_N_ELEMENTS(virPyDomainBlockCopyParams)) < 0) { return NULL; } - free(hparams); } dom = (virDomainPtr) PyvirDomain_Get(pyobj_dom); diff --git a/libvirt-utils.h b/libvirt-utils.h index 779fd56..0af1e62 100644 --- a/libvirt-utils.h +++ b/libvirt-utils.h @@ -146,6 +146,8 @@ void virFree(void *ptrptr) ATTRIBUTE_NONNULL(1); # endif +#define VIR_N_ELEMENTS(array) (sizeof(array) / sizeof(*(array))) + /* The two-statement sequence "Py_INCREF(Py_None); return Py_None;" is so common that we encapsulate it here. Now, each use is simply return VIR_PY_NONE; */ -- 2.14.3

On Mon, Feb 19, 2018 at 03:21:58PM +0100, Pavel Hrdina wrote:
There is no need to have dynamic allocation every time the API is called. Rewrites commit <314b2346df>.
Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 149 ++++++++++++----------------------------------------- libvirt-utils.h | 2 + 2 files changed, 34 insertions(+), 117 deletions(-)
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|

This corresponds to the order in libvirt-domain.h header file. Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libvirt-override.c b/libvirt-override.c index ab4232f..4f546b4 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -7743,16 +7743,16 @@ static virPyTypedParamsHint virPyDomainMigrate3Params[] = { { VIR_MIGRATE_PARAM_URI, VIR_TYPED_PARAM_STRING }, { VIR_MIGRATE_PARAM_DEST_NAME, VIR_TYPED_PARAM_STRING }, { VIR_MIGRATE_PARAM_DEST_XML, VIR_TYPED_PARAM_STRING }, - { VIR_MIGRATE_PARAM_GRAPHICS_URI, VIR_TYPED_PARAM_STRING }, + { VIR_MIGRATE_PARAM_PERSIST_XML, VIR_TYPED_PARAM_STRING }, { VIR_MIGRATE_PARAM_BANDWIDTH, VIR_TYPED_PARAM_ULLONG }, + { VIR_MIGRATE_PARAM_GRAPHICS_URI, VIR_TYPED_PARAM_STRING }, { VIR_MIGRATE_PARAM_LISTEN_ADDRESS, VIR_TYPED_PARAM_STRING }, { VIR_MIGRATE_PARAM_DISKS_PORT, VIR_TYPED_PARAM_INT }, { VIR_MIGRATE_PARAM_COMPRESSION, VIR_TYPED_PARAM_STRING }, - { VIR_MIGRATE_PARAM_COMPRESSION_MT_DTHREADS, VIR_TYPED_PARAM_INT }, { VIR_MIGRATE_PARAM_COMPRESSION_MT_LEVEL, VIR_TYPED_PARAM_INT }, { VIR_MIGRATE_PARAM_COMPRESSION_MT_THREADS, VIR_TYPED_PARAM_INT }, + { VIR_MIGRATE_PARAM_COMPRESSION_MT_DTHREADS, VIR_TYPED_PARAM_INT }, { VIR_MIGRATE_PARAM_COMPRESSION_XBZRLE_CACHE, VIR_TYPED_PARAM_ULLONG }, - { VIR_MIGRATE_PARAM_PERSIST_XML, VIR_TYPED_PARAM_STRING }, { VIR_MIGRATE_PARAM_AUTO_CONVERGE_INITIAL, VIR_TYPED_PARAM_INT }, { VIR_MIGRATE_PARAM_AUTO_CONVERGE_INCREMENT, VIR_TYPED_PARAM_INT }, }; -- 2.14.3

On Mon, Feb 19, 2018 at 03:21:59PM +0100, Pavel Hrdina wrote:
This corresponds to the order in libvirt-domain.h header file.
Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|

Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 1 + 1 file changed, 1 insertion(+) diff --git a/libvirt-override.c b/libvirt-override.c index 4f546b4..59c1e0c 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -7747,6 +7747,7 @@ static virPyTypedParamsHint virPyDomainMigrate3Params[] = { { VIR_MIGRATE_PARAM_BANDWIDTH, VIR_TYPED_PARAM_ULLONG }, { VIR_MIGRATE_PARAM_GRAPHICS_URI, VIR_TYPED_PARAM_STRING }, { VIR_MIGRATE_PARAM_LISTEN_ADDRESS, VIR_TYPED_PARAM_STRING }, + { VIR_MIGRATE_PARAM_MIGRATE_DISKS, VIR_TYPED_PARAM_STRING }, { VIR_MIGRATE_PARAM_DISKS_PORT, VIR_TYPED_PARAM_INT }, { VIR_MIGRATE_PARAM_COMPRESSION, VIR_TYPED_PARAM_STRING }, { VIR_MIGRATE_PARAM_COMPRESSION_MT_LEVEL, VIR_TYPED_PARAM_INT }, -- 2.14.3

On Mon, Feb 19, 2018 at 03:22:00PM +0100, Pavel Hrdina wrote:
Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 1 + 1 file changed, 1 insertion(+)
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|

Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libvirt-override.c b/libvirt-override.c index 59c1e0c..580c259 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -8668,7 +8668,7 @@ libvirt_virDomainListGetStats(PyObject *self ATTRIBUTE_UNUSED, static virPyTypedParamsHint virPyDomainBlockCopyParams[] = { { VIR_DOMAIN_BLOCK_COPY_BANDWIDTH, VIR_TYPED_PARAM_ULLONG }, { VIR_DOMAIN_BLOCK_COPY_GRANULARITY, VIR_TYPED_PARAM_UINT }, - { VIR_DOMAIN_BLOCK_COPY_BUF_SIZE, VIR_TYPED_PARAM_UINT }, + { VIR_DOMAIN_BLOCK_COPY_BUF_SIZE, VIR_TYPED_PARAM_ULLONG }, }; -- 2.14.3

On Mon, Feb 19, 2018 at 03:22:01PM +0100, Pavel Hrdina wrote:
Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
participants (2)
-
Daniel P. Berrangé
-
Pavel Hrdina