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(-)