On Mon, May 14, 2012 at 08:32:01AM +0000, David Weber wrote:
> > This isn't good - the lock manager implementation must be the
> > one to decide what todo with readonly & shared disks. The sanlock
> > plugin, however, does not currently support readonly/shared leases
> > hence why it rejects them. We could probably add a config param
> > to allow readonly/shared leases to be skipped by the sanlock plugin.
>
> Thanks for clarification. I've attached an updated patch which
> adds such a config param. It works but I can't test
> live-migration at the moment. But as far as I understood it
> shouldn't be a problem.
Thanks, your patch looks good but needs two further small additions
to the libvirt_sanlock.aug and test_libvirt_sanlock.aug files to
take account of the new config parameter.
Oops, Updated patch attached (tested with augparse)
David
----------------------------------------
commit 33678a8b2d294bebf327106d586d41c9b157174f
Author: David Weber <wb(a)munzinger.de>
Date: Mon May 14 09:43:27 2012 +0200
Add ignore param for readonly and shared disk in sanlock
diff --git a/src/locking/libvirt_sanlock.aug b/src/locking/libvirt_sanlock.aug
index 5f5f8a1..d65b002 100644
--- a/src/locking/libvirt_sanlock.aug
+++ b/src/locking/libvirt_sanlock.aug
module Libvirt_sanlock =
| bool_entry "auto_disk_leases"
| int_entry "host_id"
| bool_entry "require_lease_for_disks"
+ | bool_entry "ignore_readonly_and_shared_disks"
let comment = [ label "#comment" . del /#[ \t]*/ "# " . store
/([^ \t\n][^\n]*)?/ . del /\n/ "\n" ]
let empty = [ label "#empty" . eol ]
diff --git a/src/locking/lock_driver_sanlock.c b/src/locking/lock_driver_sanlock.c
index d344d6a..57b688a 100644
--- a/src/locking/lock_driver_sanlock.c
+++ b/src/locking/lock_driver_sanlock.c
struct _virLockManagerSanlockDriver {
bool requireLeaseForDisks;
int hostID;
bool autoDiskLease;
+ bool ignoreReadonlyShared;
char *autoDiskLeasePath;
};
static int virLockManagerSanlockLoadConfig(const char *configFile)
CHECK_TYPE("auto_disk_leases", VIR_CONF_LONG);
if (p) driver->autoDiskLease = p->l;
+ p = virConfGetValue(conf, "ignore_readonly_and_shared_disks");
+ CHECK_TYPE("ignore_readonly_and_shared_disks", VIR_CONF_LONG);
+ if (p) driver->ignoreReadonlyShared = p->l;
+
p = virConfGetValue(conf, "disk_lease_dir");
CHECK_TYPE("disk_lease_dir", VIR_CONF_STRING);
if (p && p->str) {
static int virLockManagerSanlockAddResource(virLockManagerPtr lock,
SANLK_MAX_RESOURCES);
return -1;
}
+
+ if (((flags & VIR_LOCK_MANAGER_RESOURCE_READONLY) ||
+ (flags &VIR_LOCK_MANAGER_RESOURCE_SHARED)) &&
+ (driver->ignoreReadonlyShared)) {
+ return 0;
+ }
if (flags & VIR_LOCK_MANAGER_RESOURCE_READONLY) {
virLockError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
diff --git a/src/locking/sanlock.conf b/src/locking/sanlock.conf
index efc35ee..5429522 100644
--- a/src/locking/sanlock.conf
+++ b/src/locking/sanlock.conf
# to enabled, otherwise it defaults to disabled.
#
#require_lease_for_disks = 1
+
+#
+# Ignore readonly and shared disks as they aren't supportet yet
+#
+#ignore_readonly_and_shared_disks = 1
diff --git a/src/locking/test_libvirt_sanlock.aug b/src/locking/test_libvirt_sanlock.aug
index b5169e1..90ab59f 100644
--- a/src/locking/test_libvirt_sanlock.aug
+++ b/src/locking/test_libvirt_sanlock.aug
module Test_libvirt_sanlock =
disk_lease_dir = \"/var/lib/libvirt/sanlock\"
host_id = 1
require_lease_for_disks = 1
+ignore_readonly_and_shared_disks = 1
"
test Libvirt_sanlock.lns get conf =
require_lease_for_disks = 1
{ "disk_lease_dir" = "/var/lib/libvirt/sanlock" }
{ "host_id" = "1" }
{ "require_lease_for_disks" = "1" }
+{ "ignore_readonly_and_shared_disks" = "1" }
To: berrange(a)redhat.com
Cc: libvir-list(a)redhat.com
sanlock-devel(a)lists.fedorahosted.org