On 23.08.2016 13:03, Christian Loehle wrote:
I'm trying to use virt-manager with a custom libvirt hypervisor
driver.
Wow, custom hypervisor driver? Sounds interesting - for what hypervisor
it is?
My current problem is that virt-manager closes the connection because
virNodeGetInfo(the python binding) returns None:
Traceback (most recent call last):
File
"/home/cloehle/Documents/libvirt/virt-manager/virtManager/connection.py", line
1390, in tick_from_engine
self._tick(*args, **kwargs)
File
"/home/cloehle/Documents/libvirt/virt-manager/virtManager/connection.py", line
1280, in _tick
self._hostinfo = self._backend.getInfo()
File "/usr/lib/python2.7/dist-packages/libvirt.py", line 3612, in getInfo
if ret is None: raise libvirtError ('virNodeGetInfo() failed', conn=self)
libvirtError: internal error: client socket is closed
The virNodeGetInfo function of my driver should set a valid virNodeInfoPtr, since it only
consists of the line:
return nodeGetInfo(NULL, info);
Ah, this is the problem. You may want to look how other drivers do this.
For instance, qemu driver defines its own implementation:
.nodeGetInfo = qemuNodeGetInfo, /* 0.2.0 */
static int
qemuNodeGetInfo(virConnectPtr conn,
virNodeInfoPtr nodeinfo)
{
if (virNodeGetInfoEnsureACL(conn) < 0)
return -1;
return nodeGetInfo(nodeinfo);
}
virsh shows no problems which is why I suspect this is a problem with
libvirt-python.
This looks suspicious, are you sure you have the correct connection URI
in virsh?
So I looked at the source and the first thing that I noticed is in
line 2753 of libvirt-override.c:
if (!PyArg_ParseTuple(args, (char *)"O:virDomainGetInfo",
&pyobj_conn))
return NULL;
Since this is for virNodeGetInfo this should probably be virNodeGetInfo instead of
domain(the same thing occurs in line 2794 for another function).
Yeah, nice catch! But those are just prefixes for some error messages
[1]. Nevertheless, I've posted a fix for that [2].
This could be my source of error but doesn't have to be. Could
someone walk me through finding the reason why libvirt-python returns None for my
virNodeGetInfo?
One possibility might be that you've passed invalid connection. It
should be possible to: a) see error in the daemon's log, b) set up
client logs to see whether error occurs there. [3].
Is there any good way of debugging where exactly libvirt-python
encounters an error and returns None?4
Yes, you should be able to just attach gdb to it and set a breakpoint.
After that you can just step through the function.
Michal
1:
https://docs.python.org/3.5/c-api/arg.html
2:
https://www.redhat.com/archives/libvir-list/2016-August/msg01089.html
3:
http://wiki.libvirt.org/page/DebugLogs