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(a)linux.vnet.ibm.com>
Signed-off-by: Zhi Yong Wu <wuzhy(a)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(a)redhat.com +1-919-301-3266
Libvirt virtualization library
http://libvirt.org