[libvirt] [PATCH 00/23] Introduce a virtlockd daemon for disk locking

Daniel P. Berrange berrange at redhat.com
Thu Aug 9 15:20:05 UTC 2012


This is a long overdue update to a patch series I posted about
a year ago

  https://www.redhat.com/archives/libvir-list/2011-July/msg00337.html

There have been some major changes since that series

 - A general purpose lockspace module has been created (virLockSpacePtr
   in src/util/virlockspace.[ch])

 - The virtlockd daemon protocol has been re-written so it only
   operates at the level of virLockSpacePtr APIs, and knows nothing
   of the usage wrt to virDomainObjPtrs

 - The lock driver client now translates requests for disk locks
   on a virDomainObjPtr into requests for resources in a lockspace
   managed by virtlockd.

 - The virtlockd daemon now has the ability to re-exec() itself
   to upgrade software without loosing active locks or clients

 - By default the locks are held directly on the file paths,
   rather than in a parallel "locks" directory based on sha256
   checksums of the filename

Still todo

 - Add ability to quiesce all server/client I/O when doing
   re-exec()

 - Add ability to save/restore data in any virNetMessagePtr
   structs in the client rx or tx queues

 - Add ability to use custom lockspaces for LVM and SCSI/ISCSI
   block devices, instead of locking based on path, to gain
   cross-node safety, instead of node-local safety.


NB, the current re-exec() support works, but is not race safe
without those first 2 todo items being completed

 .gitignore                         |    5 
 cfg.mk                             |    9 
 daemon/libvirtd.c                  |    2 
 daemon/remote.c                    |   15 
 daemon/remote.h                    |    6 
 include/libvirt/virterror.h        |    2 
 libvirt.spec.in                    |   16 
 po/POTFILES.in                     |    5 
 src/Makefile.am                    |  182 ++++-
 src/internal.h                     |   22 
 src/libvirt_private.syms           |   32 
 src/locking/domain_lock.c          |   26 
 src/locking/lock_daemon.c          | 1336 +++++++++++++++++++++++++++++++++++++
 src/locking/lock_daemon.h          |   56 +
 src/locking/lock_daemon_dispatch.c |  370 ++++++++++
 src/locking/lock_daemon_dispatch.h |   31 
 src/locking/lock_driver_lockd.c    |  561 +++++++++++++++
 src/locking/lock_manager.c         |   31 
 src/locking/lock_manager.h         |    3 
 src/locking/lock_protocol.x        |   89 ++
 src/locking/virtlockd.init.in      |   93 ++
 src/locking/virtlockd.service.in   |   13 
 src/locking/virtlockd.socket.in    |    8 
 src/locking/virtlockd.sysconf      |    3 
 src/lxc/lxc_controller.c           |   24 
 src/lxc/lxc_monitor.c              |    2 
 src/qemu/qemu.conf                 |   17 
 src/qemu/qemu_agent.c              |   10 
 src/qemu/qemu_conf.c               |    2 
 src/qemu/qemu_monitor_json.c       |   12 
 src/qemu/test_libvirtd_qemu.aug.in |    2 
 src/remote/remote_driver.c         |    9 
 src/rpc/virnetclient.c             |   81 +-
 src/rpc/virnetclient.h             |    3 
 src/rpc/virnetserver.c             |  308 ++++++++
 src/rpc/virnetserver.h             |   20 
 src/rpc/virnetserverclient.c       |  198 ++++-
 src/rpc/virnetserverclient.h       |   28 
 src/rpc/virnetserverservice.c      |  211 +++++
 src/rpc/virnetserverservice.h      |   13 
 src/rpc/virnetsocket.c             |  128 +++
 src/rpc/virnetsocket.h             |    9 
 src/util/json.c                    |    9 
 src/util/json.h                    |    3 
 src/util/threadpool.c              |   19 
 src/util/threadpool.h              |    4 
 src/util/virlockspace.c            |  784 +++++++++++++++++++++
 src/util/virlockspace.h            |   62 +
 src/util/virterror.c               |    9 
 tests/Makefile.am                  |    7 
 tests/virlockspacetest.c           |  363 ++++++++++
 51 files changed, 5080 insertions(+), 173 deletions(-)





More information about the libvir-list mailing list