On 14.01.2016 19:51, Yaniv Kaul wrote: > On Fri, Jan 8, 2016 at 7:00 PM, Michal Privoznik <mprivozn@xxxxxxxxxx> > wrote: > >> > On 30.12.2015 11:30, Yaniv Kaul wrote: >>> > > Hi, >>> > > >> > >> > Hey, >> > >> > sorry for getting to you so late. >> > >>> > > I'm trying to debug this issue, which may be affecting my inability to >>> > > perform live snapshot. >>> > > 1. I'm not sure what 'Waking up a tragedian" in the debug log means - >> > what >>> > > exactly is a tragedian? >> > >> > >> > It's the thread that has issued the change state API (shutdown, reboot, >> > ..) and it's waiting for confirmation on the monitor. For instance, mgmt >> > app issues virDomainPMSuspendForDuration() which in qemu driver is >> > implemented via some agent calls. So the flow is like this: >> > >> > 1) the control gets to qemuDomainPMSuspendForDuration() >> > 2) libvirt does some checks and issues 'guest-suspend-disk' command (or >> > corresponding command to the selected target). >> > 3) qemu-ga running inside guest tries (!) to suspend the guest (it may >> > not necessarily succeed) >> > 4) meanwhile, as guest is writing something onto disk (saving its RAM - >> > but one is unable to tell from outside), the libvirt API is blocked >> > 5) finally, guest kernel calls 'HALT' to which qemu responds by sending >> > libvirt 'RESET' event >> > 6) the libvirt event loop finds out that an event occurred on the domain >> > monitor and calls callback >> > 7) the callback will wake up the sleeping API if the event the API is >> > waiting for matches the one obtained on the monitor >> > >>> > > 2. In any case, it'd be great if the WARN would mention mon->await_event >> > - >>> > > is it the event libvirt is actually waiting for? >> > >> > Sure, that would be much more helpful - mind posting a patch? >> > > Attached and tested. I can't post it properly, as the git is a bit 'dirty' > with some po files that I can't clean: > > On branch workbranch > Your branch is up-to-date with 'origin/master'. > Changes not staged for commit: > (use "git add <file>..." to update what will be committed) > (use "git checkout -- <file>..." to discard changes in working directory) > > modified: po/ar.po > modified: po/as.po > modified: po/bg.po > modified: po/bn.po > modified: po/bn_IN.po > modified: po/bs.po > modified: po/ca.po > modified: po/cs.po > modified: po/cy.po > modified: po/da.po > modified: po/de.po > modified: po/el.po > modified: po/en_GB.po > modified: po/es.po > modified: po/et.po > modified: po/fi.po > modified: po/fr.po > modified: po/gl.po > modified: po/gu.po > modified: po/he.po > modified: po/hi.po I guess you were doing 'make dist' or 'make rpm'. Both of them result in generating of translation strings. Anyway, you can just drop them and have clean working tree: git checkout po/ > > ... > > Thanks, > Y. > > >>> > > >>> > > (Both from qemu/qemu_agent.c) >>> > > 3. I reckon event 3 is QEMU_AGENT_EVENT_RESET ? (from qemu/qemu_agent.h) >>> > > >> > >> > Correct. >> > >>> > > 4. I'm also getting 'End of file while reading data: Input/output error' >>> > > messages, not sure what they mean yet. >> > >> > >> > Usually they mean crashing daemon. If you are able to get a stacktrace >> > please do share it somewhere. >> > >> > Michal >> > > > > qemu_agent.c.diff > > > diff --git a/src/qemu/qemu_agent.c b/src/qemu/qemu_agent.c > index f979f82..924c177 100644 > --- a/src/qemu/qemu_agent.c > +++ b/src/qemu/qemu_agent.c > @@ -1241,7 +1241,7 @@ void qemuAgentNotifyEvent(qemuAgentPtr mon, > } > } else { > /* shouldn't happen but one never knows */ > - VIR_WARN("Received unexpected event %d", event); > + VIR_WARN("Received unexpected event %d (expected %d)", event, mon->await_event); > } > } > ACKed and pushed. I've committed the patch under your name. I hope that's okay with you. Michal -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list