[libvirt] Re: [PATCH 07/12] Domain Events - remote driver

Ben Guthro bguthro at virtualiron.com
Mon Oct 20 15:43:24 UTC 2008


OK - it looks like my EventImpl was passing along the wrong bits.

I'll look into the "token" scheme suggested in an earlier email, and get this ready for re-submission.

Would you prefer a new patch series, as before - or another patch that modifies the prior series?




Daniel P. Berrange wrote on 10/20/2008 10:59 AM:
> On Mon, Oct 20, 2008 at 10:48:38AM -0400, Ben Guthro wrote:
>>> Just discovered one tiny problem here - need to check 'event' to see
>>> if the POLLHUP or POLLERR flags are set, and unregister the callback.
>>> Otherwise if you kill the server, the client will just spin on POLLHUP
>>> or ERR  forever. Something like this ought todo the trick
>>>
>>>     if (event & (POLLERR | POLLHUP)) {
>>>          virEventRemoveHandle(fd);
>>>          return;
>>>     }
>>>
>> I've been looking over the rest of your changes.
>> Generally, I agree all these suggestions are good ones...except for the code above
>>
>> With this code in, I run the following test
>> 1. start libvirtd
>> 2. begin to monitor events with event-test
>> 3. virsh create foo.xml
>>
>> At this point, the event-test app encounters a HUP, or ERR, and stops
>> monitoring for events - it will only ever get the "Started" event
> 
> That's a little odd - I'm not sure why 'event-test' would be getting
> a HUP/ERR when 'virsh' starts a domain.
> 
> 'event-test' should only get a HUP/ERR if it looses its socket connection
> to the libvirtd server. Once you've lost the connection like this, the 
> entire virConnectPtr is non-operative, and the client app needs to 
> create a new virConnectPtr to re-connect. So removing the FD from the
> event loop shouldn't result in us loosing any events - we're already
> doomed there.to 
> 
>> I handle this in the event-test poll loop via
>>
>> if ( pfd.revents & POLLHUP ) {
>>             DEBUG0("Reset by peer");
>>             return -1;
>>         }
> 
> The integration into the event loop though is only something the app
> will have general control off - eg, in the example libvirt-glib code
> I posted its totally opaque to the app.
> 
>> Is it not a reasonable restriction to require the client app to handle a Hangup?
> 
> Once the socket is dead, all subsequent libvirt call made on that 
> virConnectPtr object will throw errors, which the app should see. 
> Though if they're only ever waiting for events, and not making any
> other calls, they'd not see it. Perhaps we could do with an explicit
> callback for connection disconnect.
> 
> 
> Daniel




More information about the libvir-list mailing list