On Wed, May 17, 2017 at 03:08:23PM +0200, Daniel Kučera wrote: > Hi all, > > I'm using libvirt-go and I following code to listen for lifecycle events: > > func event_listen() { > log.Printf("event_listen %s", conf.Libvirt.LocalUrl) > hv, err := libvirt.NewConnect(conf.Libvirt.LocalUrl) > > lifecycleCallback := func(c *libvirt.Connect, d *libvirt.Domain, event > *libvirt.DomainEventLifecycle) { > event_message(c, d, "lifecycle", event) > } > > _, err = hv.DomainEventLifecycleRegister(nil, lifecycleCallback) > if err != nil { > log.Printf("unable to register event callback") > return > } > > log.Printf("Libvirt event listener started") > > go func() { > for err == nil { > err = libvirt.EventRunDefaultImpl() > log.Printf("EventRunDefaultImpl err: %+v", err) > } > time.Sleep(time.Second) > event_listen() > }() > > } > > It works ok until I restart libvirtd (service libvirtd restart). After > that, the inner go func waits some time and continues without error. But > the callback is not working anymore. > > My question is, how can I detect hv reconnect (I guess it's happening in > background) so I know when to reinitialize callbacks? There is a separate event you can listen to that notifies when the connection is closed. See the RegisterCloseCallback() method on the Connect object. Basically register a callback there, and when it fires, unregister your existing domain event callbacks, and close your existing Connect object handle. Then fire a goroutine that loops once every few seconds trying to open a new Connect object, and when that succeeds register new domain event callbacks. Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :| _______________________________________________ libvirt-users mailing list libvirt-users@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvirt-users