[libvirt] [PATCH python 1/1] Set hints for virPyDictToTypedParams
Denis V. Lunev
den at openvz.org
Mon Feb 19 10:18:15 UTC 2018
On 02/19/2018 01:08 PM, Edgar Kaziakhmedov wrote:
> ping ^ 2
>
>
> On 02/13/2018 11:20 AM, Edgar Kaziakhmedov wrote:
>> ping
>>
>>
>> On 02/07/2018 05:49 PM, Edgar Kaziakhmedov wrote:
>>> Predefine hints for all parameters possible to avoid wrong type
>>> convert.
>>>
>>> Signed-off-by: Edgar Kaziakhmedov <edgar.kaziakhmedov at virtuozzo.com>
>>> ---
>>> libvirt-override.c | 128
>>> +++++++++++++++++++++++++++++++++++++++++++++++++++--
>>> 1 file changed, 124 insertions(+), 4 deletions(-)
>>>
>>> diff --git a/libvirt-override.c b/libvirt-override.c
>>> index 78a7f08..dba42d4 100644
>>> --- a/libvirt-override.c
>>> +++ b/libvirt-override.c
>>> @@ -7750,7 +7750,9 @@ libvirt_virDomainMigrate3(PyObject *self
>>> ATTRIBUTE_UNUSED,
>>> PyObject *dict;
>>> unsigned int flags;
>>> virTypedParameterPtr params;
>>> - int nparams;
>>> + virPyTypedParamsHintPtr hparams;
>>> + int nparams = 0;
>>> + int nhparams = 15;
>>> virDomainPtr ddom = NULL;
>>>
>>> if (!PyArg_ParseTuple(args, (char *) "OOOI:virDomainMigrate3",
>>> @@ -7760,14 +7762,64 @@ libvirt_virDomainMigrate3(PyObject *self
>>> ATTRIBUTE_UNUSED,
>>> domain = (virDomainPtr) PyvirDomain_Get(pyobj_domain);
>>> dconn = (virConnectPtr) PyvirConnect_Get(pyobj_dconn);
>>>
>>> - if (virPyDictToTypedParams(dict, ¶ms, &nparams, NULL, 0) < 0)
>>> + 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);
>>> return NULL;
>>> + }
>>>
>>> LIBVIRT_BEGIN_ALLOW_THREADS;
>>> ddom = virDomainMigrate3(domain, dconn, params, nparams, flags);
>>> LIBVIRT_END_ALLOW_THREADS;
>>>
>>> virTypedParamsFree(params, nparams);
>>> + free(hparams);
>>> return libvirt_virDomainPtrWrap(ddom);
>>> }
>>>
>>> @@ -7781,7 +7833,9 @@ 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",
>>> @@ -7790,14 +7844,64 @@ libvirt_virDomainMigrateToURI3(PyObject
>>> *self ATTRIBUTE_UNUSED,
>>>
>>> domain = (virDomainPtr) PyvirDomain_Get(pyobj_domain);
>>>
>>> - if (virPyDictToTypedParams(dict, ¶ms, &nparams, NULL, 0) < 0)
>>> + 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);
>>> return NULL;
>>> + }
>>>
>>> LIBVIRT_BEGIN_ALLOW_THREADS;
>>> ret = virDomainMigrateToURI3(domain, dconnuri, params,
>>> nparams, flags);
>>> LIBVIRT_END_ALLOW_THREADS;
>>>
>>> virTypedParamsFree(params, nparams);
>>> + free(hparams);
>>> return libvirt_intWrap(ret);
>>> }
>>> #endif /* LIBVIR_CHECK_VERSION(1, 1, 0) */
>>> @@ -8650,7 +8754,9 @@ 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;
>>>
>>> @@ -8659,8 +8765,22 @@ libvirt_virDomainBlockCopy(PyObject *self
>>> ATTRIBUTE_UNUSED,
>>> return NULL;
>>>
>>> if (PyDict_Check(pyobj_dict)) {
>>> - if (virPyDictToTypedParams(pyobj_dict, ¶ms, &nparams,
>>> NULL, 0) < 0)
>>> + 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);
>>> return NULL;
>>> + }
>>> + free(hparams);
>>> }
>>>
>>> dom = (virDomainPtr) PyvirDomain_Get(pyobj_dom);
>>> --
>>> 2.11.0
>>>
>>> --
>>> libvir-list mailing list
>>> libvir-list at redhat.com
>>> https://www.redhat.com/mailman/listinfo/libvir-list
>>> .
>>>
>>
>> --
>> libvir-list mailing list
>> libvir-list at redhat.com
>> https://www.redhat.com/mailman/listinfo/libvir-list
>> .
>>
>
More information about the libvir-list
mailing list