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(-) -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list