[libvirt] libvirt-python virNodeGetInfo returns None

Michal Privoznik mprivozn at redhat.com
Wed Aug 24 10:54:18 UTC 2016


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




More information about the libvir-list mailing list