[libvirt] Re-4: [Patch] Libvirt - Fix locking for readonly devices

David Weber wb at munzinger.de
Mon May 14 09:53:02 UTC 2012


> 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 at 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 at redhat.com
Cc: libvir-list at redhat.com
    sanlock-devel at lists.fedorahosted.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: add_ignore_param_to_sanlock.patch
Type: application/octet-stream
Size: 3108 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20120514/307e8ff4/attachment-0001.obj>


More information about the libvir-list mailing list