[libvirt] [PATCH] qemu: turn on virtlockd by default

Kashyap Chamarthy kchamart at redhat.com
Fri Jan 22 22:14:22 UTC 2016


On Fri, Jan 22, 2016 at 03:35:33PM -0500, Cole Robinson wrote:
> On 01/22/2016 02:35 PM, Kashyap Chamarthy wrote:
> > On Fri, Jan 22, 2016 at 03:56:08PM +0000, Daniel P. Berrange wrote:
> >> We have had virtlockd available for a long time now but
> >> have always defaulted to the 'nop' lock driver which does
> >> no locking. This gives users an unsafe deployment by
> >> default unless they know to turn on lockd. virtlockd will
> >> auto-activate via systemd when guests launch, so setting
> >> it on by default will only cause upgrade pain for people
> >> on non-systemd distros.
> > 
> > I tried to test this patch in the below way after applying to my local
> > Git master, and my test seems to fail.

My mistake - test was failing because I missed to start 'virtlogd'
daemon _before_ libvirtd.  (Thanks, Cole, for noticing that I mixed up
'virtlogd' and 'virtlockd'.)  

With that fixed, my same test succeeds[*].

ACK & Tested-By: Kashyap Chamarthy <kchamart at redhat.com>


[*] Test

(1) Purposefully make two libvirt VMs point to the same disk image:

    $ sudo ./run tools/virsh dumpxml cvm1 | grep 'source file'
          <source file='/var/lib/libvirt/images/cirros-0.3.3-x86_64-disk.img'/>
    $ sudo ./run tools/virsh dumpxml cvm2 | grep 'source file'
          <source file='/var/lib/libvirt/images/cirros-0.3.3-x86_64-disk.img'/>

(2) Start the first guest (cvm1):

    $ sudo ./run tools/virsh start cvm1
    Domain cvm1 started

(3) Start the second guest (cvm2), the disk image is locked, and libvirt,
    correctly, refuses to start it:

    $ sudo ./run tools/virsh start cvm2
    error: Failed to start domain cvm2
    error: resource busy: Lockspace resource
    '/var/lib/libvirt/images/cirros-0.3.3-x86_64-disk.img' is locked

And, an appropriate error is thrown in libvirt debug log:

    ...
    2016-01-22 21:56:19.095+0000: 3008: error : virLockSpaceAcquireResource:640 : resource busy: Lockspace resource '/var/lib/libvirt/images/cirros-0.3.3-x86_64-disk.img' is locked
    ...

[...]

> > Enable `virtlockd` for the QEMU driver:
> > 
> >     $ augtool -s  set /files/etc/libvirt/qemu.conf/lock_manager lockd
> > 
> > Invoke just compiled virtlockd and libvirtd (in that order):
> > 
> >     $ sudo ./run src/virtlockd &

Noting for completeness, I missed a step here: starting the virtlogd
daemon _before_ libvirtd

        $ sudo ./run src/virtlogd &

(Just remembered that recently a patch (a8bb330) was merged that made it
mandatory to have virtlogd start _before_ libvirtd, because: "In the
non-systemd case, without socket activation, we need to proper
ordering.")

> >     $ sudo ./run daemon/libvirtd &

[...] 

> You're mixing up virtlogd and virtlockd :) virtlogd was added recently
> and should be started. But maybe there's another issue if it wasn't
> started automatically.

Duh, that's embarassing, you're of course right.  Thanks for catching
that.  After starting the 'virtlogd' daemon, all is good.

-- 
/kashyap




More information about the libvir-list mailing list