[libvirt-users] libvirt: XML-RPC error : Cannot write data: Broken pipe

Michal Privoznik mprivozn at redhat.com
Thu Aug 10 09:50:23 UTC 2017


On 08/10/2017 10:45 AM, Dominik Psenner wrote:
> 2017-08-10 8:21 GMT+02:00 Michal Privoznik <mprivozn at redhat.com>:
> 
>> On 08/09/2017 03:59 PM, Dominik Psenner wrote:
>>> The error message could however give a hint what is going on. It should
>> sax
>>> that it is impossible to talk to libvirtd and that it might be stopped.
>>
>> [Please don't top post on technical lists]
> 
> 
>> Yes and no. There can be a lot of reasons why client can't talk to
>> daemon. They all don't demonstrate in local connection, but imagine
>> talking to a daemon on distant host.
> 
> And suddenly somebody cuts the
>> cable, or inserts incorrect firewall rules, etc. Suggesting that daemon
>> is not running would be wrong in this case.
> 
> 
> Actually, it would most probably be true in this case and still the most
> probable cause if the communication went over a wire. Yes, it could be a
> firewall issue but still it is more likely that the host or the service is
> not up.
> 
> 
>> Also, we tend to report
>> system errors and leave mgmt application figure out how to deal with it.
>> For instance:
>>
>> http://libvirt.org/git/?p=libvirt.git;a=blob;f=tools/virsh.c;h=
>> 94bb7ff6c93afa46d31d085eaa5e504f1cca7593;hb=HEAD#l90
> 
> 
> Are you indicating that a user should have to read the sourcecode of
> libvirt and libvirtd to understand their error messages?

No, I'm indicating that you should read the documentation. What I gave
you was a usage example.

> Please bear in
> mind that we are humans that use a software and as such the software should
> be written to be used by humans. I know very well that good error handling
> is a tough task to achieve, but it is still worth the effort. I suggest
> that the error message:
> 
> libvirt: XML-RPC error : Cannot write data: Broken pipe

Again, after reading corresponding documentation you'll find that:

XML-RPC error stands for error.domain = VIR_FROM_RPC,

and to change "XML-RPC" to something else we would need yet another
domain. It would be wrong anyway - the domain of the error is RPC code
after all.

> 
> should read as:
> 
> libvirt: Could not connect to the libvirtd service : Cannot write data:
> Broken pipe

This is untrue. You are connected at this point, otherwise you wouldn't
be able to get the domain object you are passing to the API in the first
place. Only by writing to the connection socket you learn (well, the
code) that the daemon is gone. That's why we have keep alive, connection
close callbacks and all these fancy features that help you to learn this
fact sooner, without having to call any APIs. Moreover, they can take
actions once the connection gets disconnected. But I'm not going to link
any more code to not discourage you.

Michal




More information about the libvirt-users mailing list