[libvirt] [PATCH 7/8] Support virDomain{Set, Get}BlockIoTune in the python API
Eric Blake
eblake at redhat.com
Wed Nov 23 18:30:55 UTC 2011
On 11/15/2011 02:02 AM, Lei Li wrote:
> Python support for both setting and getting block I/O throttle.
>
> Signed-off-by: Lei Li <lilei at linux.vnet.ibm.com>
> Signed-off-by: Zhi Yong Wu <wuzhy at linux.vnet.ibm.com>
> ---
> python/generator.py | 2 +
Yay - I get to undo my hack from 1/8.
> python/libvirt-override-api.xml | 16 ++++
> python/libvirt-override.c | 178 +++++++++++++++++++++++++++++++++++++++
> 3 files changed, 196 insertions(+), 0 deletions(-)
>
> +++ b/python/libvirt-override-api.xml
> @@ -375,5 +375,21 @@
> <arg name='flags' type='unsigned int' info='flags, currently unused, pass 0.'/>
> <return type='unsigned long' info='current max migration speed, or None in case of error'/>
> </function>
> + <function name='virDomainSetBlockIoTune' file='python'>
> + <info>Change the I/O throttle for a block device</info>
Tweak the wording to be more like libvirt.c.
> + /* convert to a Python tuple of long objects */
> + for (i = 0; i < nparams; i++) {
> + PyObject *key, *val;
> + key = libvirt_constcharPtrWrap(params[i].field);
> + val = PyDict_GetItem(pyinfo, key);
> + Py_DECREF(key);
> +
> + if (val == NULL)
> + continue;
> +
> + switch (params[i].type) {
> + case VIR_TYPED_PARAM_INT:
> + params[i].value.i = (int)PyInt_AS_LONG(val);
> + break;
> +
> + case VIR_TYPED_PARAM_UINT:
> + params[i].value.ui = (unsigned int)PyInt_AS_LONG(val);
> + break;
> +
> + case VIR_TYPED_PARAM_LLONG:
> + params[i].value.l = (long long)PyLong_AsLongLong(val);
> + break;
> +
> + case VIR_TYPED_PARAM_ULLONG:
> + params[i].value.ul = (unsigned long long)PyLong_AsLongLong(val);
> + break;
> +
> + case VIR_TYPED_PARAM_DOUBLE:
> + params[i].value.d = (double)PyFloat_AsDouble(val);
> + break;
> +
> + case VIR_TYPED_PARAM_BOOLEAN:
> + {
> + PyObject *hacktrue = PyBool_FromLong(1);
> + params[i].value.b = hacktrue == val ? 1: 0;
> + Py_DECREF(hacktrue);
> + }
> + break;
> +
> + default:
You know, I bet that the recent introduction of VIR_TYPED_PARAM_STRING
breaks the python handling of global blkio parameters (at any rate, when
we fix that, we should also fix this to handle strings, even if no one
currently sends a string for a per-device io tuning parameter).
> + free(params);
> + return VIR_PY_INT_FAIL;
> + }
> + }
> +
> + LIBVIRT_BEGIN_ALLOW_THREADS;
> + c_ret = virDomainSetMemoryParameters(domain, params, nparams, flags);
> + LIBVIRT_END_ALLOW_THREADS;
Huh? Why are we setting memory parameters? Too much copy-and-paste.
Here's what I'm squashing in:
diff --git i/python/generator.py w/python/generator.py
index d6bf994..88c52b9 100755
--- i/python/generator.py
+++ w/python/generator.py
@@ -472,9 +472,6 @@ skip_function = (
"virNWFilterGetConnect",
"virStoragePoolGetConnect",
"virStorageVolGetConnect",
-
- "virDomainGetBlockIoTune", # not implemented yet
- "virDomainSetBlockIoTune", # not implemented yet
)
qemu_skip_function = (
diff --git i/python/libvirt-override-api.xml
w/python/libvirt-override-api.xml
index a05da3c..6aad49c 100644
--- i/python/libvirt-override-api.xml
+++ w/python/libvirt-override-api.xml
@@ -376,18 +376,18 @@
<return type='unsigned long' info='current max migration speed,
or None in case of error'/>
</function>
<function name='virDomainSetBlockIoTune' file='python'>
- <info>Change the I/O throttle for a block device</info>
+ <info>Change the I/O tunables for a block device</info>
<arg name='dom' type='virDomainPtr' info='pointer to the domain'/>
<arg name='disk' type='const char *' info='disk name'/>
- <arg name='params' type='virTypedParameterPtr' info='Pointer to
blkio throttle params object'/>
+ <arg name='params' type='virTypedParameterPtr' info='Pointer to
blkio tuning params object'/>
<arg name='flags' type='unsigned int' info='an OR'ed set of
virDomainModificationImpact'/>
<return type='int' info='0 in case of success, -1 in case of
failure'/>
</function>
<function name='virDomainGetBlockIoTune' file='python'>
- <info>Get the I/O throttle a block device</info>
+ <info>Get the I/O tunables for a block device</info>
<arg name='dom' type='virDomainPtr' info='pointer to the domain'/>
<arg name='disk' type='const char *' info='disk name'/>
- <arg name='params' type='virTypedParameterPtr' info='Pointer to
blkio throttle params object'/>
+ <arg name='params' type='virTypedParameterPtr' info='Pointer to
blkio tuning params object'/>
<arg name='flags' type='unsigned int' info='an OR'ed set of
virDomainModificationImpact'/>
<return type='int' info='0 in case of success, -1 in case of
failure'/>
</function>
diff --git i/python/libvirt-override.c w/python/libvirt-override.c
index be76d87..cfb9a31 100644
--- i/python/libvirt-override.c
+++ w/python/libvirt-override.c
@@ -3277,7 +3277,7 @@ libvirt_virDomainSetBlockIoTune(PyObject *self
ATTRIBUTE_UNUSED,
}
LIBVIRT_BEGIN_ALLOW_THREADS;
- c_ret = virDomainSetMemoryParameters(domain, params, nparams, flags);
+ c_ret = virDomainSetBlockIoTune(domain, disk, params, nparams, flags);
LIBVIRT_END_ALLOW_THREADS;
if (c_ret < 0) {
--
Eric Blake eblake at redhat.com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 620 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20111123/33e7c1fa/attachment-0001.sig>
More information about the libvir-list
mailing list