-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 23.08.2013 00:51, Alexandr пишет: > 21.08.2013 12:58, Alexandr пишет: >> 21.08.2013 12:39, Daniel P. Berrange пишет: >>> On Wed, Aug 21, 2013 at 12:36:06PM +0300, Alexandr wrote: >>>> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 >>>> >>>> 21.08.2013 09:46, Alexandr пишет: >>>>> 21.08.2013 09:32, Martin Kletzander пишет: >>>>>> On Wed 21 Aug 2013 01:03:37 AM CEST, Alexandr wrote: >>>>>>> >>>>>>> good day. i trying to make callback function for >>>>>>> VIR_DOMAIN_EVENT_ID_LIFECYCLE, i have successfully >>>>>>> registering callback, but it never called, i need to >>>>>>> know when domain started, stopped or crashed, i have >>>>>>> write following code >>>>>>> >>>>>>> static int domain_event_handler(virConnectPtr conn, >>>>>>> virDomainPtr dom, int event, int detail, void * >>>>>>> opaque) { switch(event) { } return 0; } >>>>>>> >>>>>>> ..... int callback = >>>>>>> virConnectDomainEventRegisterAny(libvirt_connection, >>>>>>> NULL, VIR_DOMAIN_EVENT_ID_LIFECYCLE, >>>>>>> VIR_DOMAIN_EVENT_CALLBACK(domain_event_handler), NULL, >>>>>>> NULL); if(callback == -1) { std::cout<<"Error: failed >>>>>>> to register domain event handle callback\n"; return -1; >>>>>>> } ..... >>>>>>> >>>>>>> >>>>>>> but "domain_event_handler" is never called, what is >>>>>>> wrong here ? >>>>> >>>>>> Are you running an event loop? You can have a look at >>>>>> our examples [1] and see what's being done there. >>>>>> Especially note the virEventRunDefaultImpl() [2] there. >>>>> >>>>>> Martin >>>>> >>>>>> [1] >>>>>> http://libvirt.org/git/?p=libvirt.git;a=blob;f=examples/domain-events/events-c/event-test.c;h=52aa3d08d7326e422c12a8521717c3d55b2d8afd;hb=HEAD >>>>> >>>>>> >>>>> >>>>> >>>>>> > >>>>>> >>>>>> > [2] >>>>>> http://libvirt.org/git/?p=libvirt.git;a=blob;f=examples/domain-events/events-c/event-test.c;h=52aa3d08d7326e422c12a8521717c3d55b2d8afd;hb=HEAD#l611 >>>>> >>>>>> >>>>> >>>>> >>>>>> > >>>>>> >>>>>> > oh..., i missed it, thx for hint and sorry for stupid questions . >>>> >>>> now it's working except for events from other connections, >>>> for example i want to handle domain started by virt-manager, >>>> now i do not have event when it's started, is exists any api >>>> to handle this events, or i need to implement internal >>>> polling of domains state in my application ? > >>> The events system reports all lifecycle events, regardless of >>> which connection triggered them. > >>> If you're not seeing events from domains started by >>> virt-manager then your almost certainly connecting to a >>> different libvirt URI than virt-manager is using. > >>> Daniel > >> also looks like i do not receiving last event, i mean last event >> what passed to callback is "eventcount - 1" > >> _______________________________________________ libvirt-users >> mailing list libvirt-users@xxxxxxxxxx >> https://www.redhat.com/mailman/listinfo/libvirt-users > > > > after few days of trying i have not resolved problem, and have > followinf situation: i receiving events from my connection > sometimes (not all and not always), i do not receiving events from > other connections (virt-manager) at all (i am sure that connection > url are same for both connections), my code follows: > > static int domain_event_handler(virConnectPtr conn, virDomainPtr > dom, int event, int detail, void * opaque) { std::cout<<"domain > event handler called\n"; } > > void libvirt_eventloop_thr_func() { while(true) //TODO: stop > somehow on exit { if(virEventRunDefaultImpl() < 0) { virErrorPtr > err = virGetLastError(); fprintf(stderr, "Failed to run event loop: > %s\n", err && err->message ? err->message : "Unknown error"); } } > } > > .... virSetErrorFunc(NULL, libvirt_error_handler); > libvirt_connection = virConnectOpen("qemu:///system"); > if(libvirt_connection == NULL) { std::cout<<"failed to connect to > qemu:///system\n"; return -1; } std::cout<<"connected to > qemu:///system\n"; > > if (virEventRegisterDefaultImpl() < 0) { virErrorPtr err = > virGetLastError(); fprintf(stderr, "Failed to register event > implementation: %s\n", err && err->message ? err->message: "Unknown > error"); return -1; } { int callback = > virConnectDomainEventRegisterAny(libvirt_connection, NULL, > VIR_DOMAIN_EVENT_ID_LIFECYCLE, > VIR_DOMAIN_EVENT_CALLBACK(domain_event_handler), NULL, NULL); > if(callback == -1) { std::cout<<"Error: failed to register domain > event handle callback\n"; return -1; } } > > boost::thread(boost::bind(&libvirt_eventloop_thr_func)); .... > > > am i doing something wrong here ? > > _______________________________________________ libvirt-users > mailing list libvirt-users@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/libvirt-users > also i have started libvirt/libvirt-1.1.1/examples/domain-events/events-c example, and it have same problems as my code, it does not receiving any events from virt-manager -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.21 (GNU/Linux) Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ iQEcBAEBAgAGBQJSFo6uAAoJEH3ap8veG8EHYO8H/3uFilTQAKz0xg4oTfKcfZMP spdx10L3yAWCoL4GYjHtZD1mPNHtJo2MgUX5PrwEEnu+npF8a3yYqTGF6DZcNSdu aurO3T5/Wljg5E1d0TuN3W7J/Xmb4U0sRW7HqtTsb6lAKGn9gRWFWmrj+FH+KSbb D+CL4sKCqeYuiFnYbF4X3w0m9oXzsN36hZ1ALKhlL6/n93GeOyp32nx+NRaZchgz /QiZEAyUwQL3AK37a8Mw8uNshuvQc+Gw5tnghLIeQivUTsHGPiUyPAqbW0b+aAfd JLfJ7esOXsaOl916AFl68GBXzEH89y0b8RPNe4vS3VCOjp8UrXJGMju6YVMFVoM= =KfMJ -----END PGP SIGNATURE----- _______________________________________________ libvirt-users mailing list libvirt-users@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvirt-users