[libvirt] [PATCH v3 0/6] Introduce virCommandDoAsyncIO
Daniel P. Berrange
berrange at redhat.com
Wed Feb 6 11:51:42 UTC 2013
On Mon, Feb 04, 2013 at 03:56:37PM +0100, Michal Privoznik wrote:
> Currently, if we want to use IO with asynchronous command we have
> to copy code from virFileWrapperFd to misuse our event loop for
> reading and writing to the command. However, we can extend our
> virCommand implementation to automatically set things up.
>
There is something racy in this series of changes. About 50% of
the time when running a domain save, I see warnings about closing
invalid file descriptors & invalid watches from libvirtd
2013-02-06 11:41:43.766+0000: 19078: warning : virEventPollRemoveHandle:183 : Ignoring invalid remove watch -1
2013-02-06 11:41:43.766+0000: 19078: warning : virFileClose:65 : Tried to close invalid fd 25
The first log message has the following trace
#3 0x00007ffff7499b91 in virEventPollRemoveHandle (watch=-1) at util/vireventpoll.c:183
#4 0x00007ffff748b3c0 in virCommandHandleReadWrite (watch=-1, fd=-1, events=events at entry=9,
opaque=opaque at entry=0x7fffcc01e380) at util/vircommand.c:2236
#5 0x00007ffff748ef8b in virCommandWait (cmd=0x7fffcc01e380, exitstatus=exitstatus at entry=0x0) at util/vircommand.c:2501
#6 0x00007ffff749b367 in virFileWrapperFdClose (wfd=wfd at entry=0x7fffcc01e360) at util/virfile.c:288
#7 0x00007fffdf180eb7 in qemuDomainSaveMemory (driver=driver at entry=0x7fffd806dfb0, vm=vm at entry=0x7fffbc001510,
path=path at entry=0x7fffcc01e4b0 "/home/berrange/src/virt/libvirt-tck/tck.img", domXML=<optimized out>,
compressed=compressed at entry=0, was_running=was_running at entry=true, flags=flags at entry=0,
asyncJob=asyncJob at entry=QEMU_ASYNC_JOB_SAVE) at qemu/qemu_driver.c:2792
#8 0x00007fffdf1842b3 in qemuDomainSaveInternal (driver=driver at entry=0x7fffd806dfb0, vm=0x7fffbc001510,
path=path at entry=0x7fffcc01e4b0 "/home/berrange/src/virt/libvirt-tck/tck.img", compressed=0, xmlin=xmlin at entry=0x0,
flags=flags at entry=0, dom=0x7fffcc00a1a0) at qemu/qemu_driver.c:2901
#9 0x00007fffdf1851f2 in qemuDomainSaveFlags (dom=0x7fffcc00a1a0,
path=0x7fffcc01e4b0 "/home/berrange/src/virt/libvirt-tck/tck.img", dxml=0x0, flags=0) at qemu/qemu_driver.c:3013
#10 0x00007ffff75426e9 in virDomainSave (domain=domain at entry=0x7fffcc00a1a0,
to=0x7fffcc01e2a0 "/home/berrange/src/virt/libvirt-tck/tck.img") at libvirt.c:2617
#11 0x0000000000428bc2 in remoteDispatchDomainSave (server=<optimized out>, msg=<optimized out>, args=0x7fffcc01e2e0,
rerr=0x7fffe87a4c50, client=<optimized out>) at remote_dispatch.h:4758
#12 remoteDispatchDomainSaveHelper (server=<optimized out>, client=<optimized out>, msg=<optimized out>,
rerr=0x7fffe87a4c50, args=0x7fffcc01e2e0, ret=<optimized out>) at remote_dispatch.h:4736
#13 0x00007ffff75af942 in virNetServerProgramDispatchCall (msg=0x693e10, client=0x694f60, server=0x66b490, prog=0x690bd0)
at rpc/virnetserverprogram.c:432
#14 virNetServerProgramDispatch (prog=0x690bd0, server=server at entry=0x66b490, client=0x694f60, msg=0x693e10)
at rpc/virnetserverprogram.c:305
#15 0x00007ffff75a9b78 in virNetServerProcessMsg (msg=<optimized out>, prog=<optimized out>, client=<optimized out>,
srv=0x66b490) at rpc/virnetserver.c:162
#16 virNetServerHandleJob (jobOpaque=<optimized out>, opaque=0x66b490) at rpc/virnetserver.c:183
#17 0x00007ffff74c304e in virThreadPoolWorker (opaque=opaque at entry=0x65ac90) at util/virthreadpool.c:144
#18 0x00007ffff74c2706 in virThreadHelper (data=<optimized out>) at util/virthreadpthread.c:161
#19 0x00007ffff3e9dd15 in start_thread (arg=0x7fffe87a5700) at pthread_create.c:308
#20 0x00007ffff37c946d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:114
The second log messages has this trace
#3 0x00007ffff749b178 in virFileClose (fdptr=fdptr at entry=0x7fffcc01e3f8, flags=flags at entry=VIR_FILE_CLOSE_PRESERVE_ERRNO)
at util/virfile.c:65
#4 0x00007ffff748b3da in virCommandHandleReadWrite (watch=-1, fd=-1, events=events at entry=9,
opaque=opaque at entry=0x7fffcc01e380) at util/vircommand.c:2239
#5 0x00007ffff748ef8b in virCommandWait (cmd=0x7fffcc01e380, exitstatus=exitstatus at entry=0x0) at util/vircommand.c:2501
#6 0x00007ffff749b367 in virFileWrapperFdClose (wfd=wfd at entry=0x7fffcc01e360) at util/virfile.c:288
#7 0x00007fffdf180eb7 in qemuDomainSaveMemory (driver=driver at entry=0x7fffd806dfb0, vm=vm at entry=0x7fffbc001510,
path=path at entry=0x7fffcc01e4b0 "/home/berrange/src/virt/libvirt-tck/tck.img", domXML=<optimized out>,
compressed=compressed at entry=0, was_running=was_running at entry=true, flags=flags at entry=0,
asyncJob=asyncJob at entry=QEMU_ASYNC_JOB_SAVE) at qemu/qemu_driver.c:2792
#8 0x00007fffdf1842b3 in qemuDomainSaveInternal (driver=driver at entry=0x7fffd806dfb0, vm=0x7fffbc001510,
path=path at entry=0x7fffcc01e4b0 "/home/berrange/src/virt/libvirt-tck/tck.img", compressed=0, xmlin=xmlin at entry=0x0,
flags=flags at entry=0, dom=0x7fffcc00a1a0) at qemu/qemu_driver.c:2901
#9 0x00007fffdf1851f2 in qemuDomainSaveFlags (dom=0x7fffcc00a1a0,
path=0x7fffcc01e4b0 "/home/berrange/src/virt/libvirt-tck/tck.img", dxml=0x0, flags=0) at qemu/qemu_driver.c:3013
#10 0x00007ffff75426e9 in virDomainSave (domain=domain at entry=0x7fffcc00a1a0,
to=0x7fffcc01e2a0 "/home/berrange/src/virt/libvirt-tck/tck.img") at libvirt.c:2617
#11 0x0000000000428bc2 in remoteDispatchDomainSave (server=<optimized out>, msg=<optimized out>, args=0x7fffcc01e2e0,
rerr=0x7fffe87a4c50, client=<optimized out>) at remote_dispatch.h:4758
#12 remoteDispatchDomainSaveHelper (server=<optimized out>, client=<optimized out>, msg=<optimized out>,
rerr=0x7fffe87a4c50, args=0x7fffcc01e2e0, ret=<optimized out>) at remote_dispatch.h:4736
#13 0x00007ffff75af942 in virNetServerProgramDispatchCall (msg=0x693e10, client=0x694f60, server=0x66b490, prog=0x690bd0)
at rpc/virnetserverprogram.c:432
#14 virNetServerProgramDispatch (prog=0x690bd0, server=server at entry=0x66b490, client=0x694f60, msg=0x693e10)
at rpc/virnetserverprogram.c:305
#15 0x00007ffff75a9b78 in virNetServerProcessMsg (msg=<optimized out>, prog=<optimized out>, client=<optimized out>,
srv=0x66b490) at rpc/virnetserver.c:162
#16 virNetServerHandleJob (jobOpaque=<optimized out>, opaque=0x66b490) at rpc/virnetserver.c:183
#17 0x00007ffff74c304e in virThreadPoolWorker (opaque=opaque at entry=0x65ac90) at util/virthreadpool.c:144
#18 0x00007ffff74c2706 in virThreadHelper (data=<optimized out>) at util/virthreadpthread.c:161
#19 0x00007ffff3e9dd15 in start_thread (arg=0x7fffe87a5700) at pthread_create.c:308
#20 0x00007ffff37c946d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:114
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list