[libvirt] [PATCH] qemu: guest agent: introduce new error code VIR_ERR_AGENT_UNSYNCED

Yuriy Pudgorodskiy yur at virtuozzo.com
Tue Sep 6 15:31:24 UTC 2016


On 9/6/2016 6:03 PM, Michal Privoznik wrote:
> On 05.09.2016 18:42, Maxim Nestratov wrote:
>> From: Yuri Pudgorodskiy <yur at virtuozzo.com>
>>
>> A separate error code will help recognize real failures from
>> necessity to try again
>>
>> Signed-off-by: Maxim Nestratov <mnestratov at virtuozzo.com>
>> ---
>>   include/libvirt/virterror.h | 2 ++
>>   src/qemu/qemu_agent.c       | 6 +++---
>>   src/util/virerror.c         | 6 ++++++
>>   3 files changed, 11 insertions(+), 3 deletions(-)
> ACK
>
> Just curious - have you experienced this behaviour?
>
> Michal
> .
>
Issue any GA command while  domains is just booted gives a good chance 
of the following:

- domain is started running
- virtio agent.0 channel is already connected to guest, but qemu-ga is 
not ready yet
- a libvirt client issues any GA commands
- command begins with guest-sync written to virtio serial device buffer
- qemu-ga did not respond within default timeout (5 seconds), client got 
TIMEOUT
- a client repeated GA commands, waiting for GA to come up, buffer is 
populated with repeated guest-sync command
- GA finally reads command from virtio, responding to id from the 1st 
guest-sync found in channel (FIFO)
- but libvirt now expects last id, and responds with VIR_ERR_INTERNAL_ERROR
- ... VIR_ERR_INTERNAL_ERROR looks terrible from the client point of view

Moreover, any timeout from qemu-ga results in VIR_ERR_AGENT_UNSYNCED error.
Same scenario:
- two guest agent commands one after another
- 1st timeouted
- libvirt is expecting response with id of the 2nd
- qemu-ga finally comes with answer to the 1st
- libvirt is under if (id_ret != id) condition and is responding with 
VIR_ERR_AGENT_UNSYNCED




More information about the libvir-list mailing list