]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Allow per-driver config file for lock manager plugins
authorDaniel P. Berrange <berrange@redhat.com>
Mon, 13 Jun 2011 13:30:26 +0000 (14:30 +0100)
committerDaniel P. Berrange <berrange@redhat.com>
Tue, 28 Jun 2011 17:07:06 +0000 (18:07 +0100)
Allow a 'configFile' parameter to be passed into the lock
drivers to provide configuration. Wire up the QEMU driver
to pass in file names '/etc/libvirt/qemu-$NAME.conf
eg qemu-sanlock.conf

* src/locking/lock_driver.h, src/locking/lock_driver_nop.c,
  src/locking/lock_driver_sanlock.c, src/locking/lock_manager.c,
  src/locking/lock_manager.h: Add configFile parameter
* src/qemu/qemu_conf.c: Pass in configuration file path to
  lock driver plugins

src/locking/lock_driver.h
src/locking/lock_driver_nop.c
src/locking/lock_driver_sanlock.c
src/locking/lock_manager.c
src/locking/lock_manager.h
src/qemu/qemu_conf.c

index c9fe3683aaa68a5a8111894e139bcda98c514b31..357a8d50764cae4cad58ee812a25f90df17a1959 100644 (file)
@@ -121,6 +121,7 @@ struct _virLockManagerParam {
  * Returns -1 if the requested version/flags were inadequate
  */
 typedef int (*virLockDriverInit)(unsigned int version,
+                                 const char *configFile,
                                  unsigned int flags);
 
 /**
index 69a5b3407ed1ee4f545e6a3f7539e750252d2dd1..0fab54c6e25710595ea86bfcad4429436b2a1510 100644 (file)
 
 
 static int virLockManagerNopInit(unsigned int version,
+                                 const char *configFile,
                                  unsigned int flags)
 {
-    VIR_DEBUG("version=%u flags=%u", version, flags);
+    VIR_DEBUG("version=%u configFile=%s flags=%u", version, NULLSTR(configFile), flags);
 
     return 0;
 }
index 86db5b84d4c7384d50140d96d81df50d386129bc..6ddeac7ba5fdd8bd83874f96c9331c9dfcced633 100644 (file)
@@ -64,6 +64,7 @@ struct _virLockManagerSanlockPrivate {
  */
 
 static int virLockManagerSanlockInit(unsigned int version ATTRIBUTE_UNUSED,
+                                     const char *configFile ATTRIBUTE_UNUSED,
                                      unsigned int flags)
 {
     virCheckFlags(0, -1);
index 7cd56591201217ed72314575940082048a6c3ed4..4ee7f4456a7122e96407ae00ed48b06ee4c0d4fe 100644 (file)
@@ -119,6 +119,7 @@ static void virLockManagerLogParams(size_t nparams,
  */
 #if HAVE_DLFCN_H
 virLockManagerPluginPtr virLockManagerPluginNew(const char *name,
+                                                const char *configFile,
                                                 unsigned int flags)
 {
     void *handle = NULL;
@@ -162,11 +163,8 @@ virLockManagerPluginPtr virLockManagerPluginNew(const char *name,
         }
     }
 
-    if (driver->drvInit(VIR_LOCK_MANAGER_VERSION, flags) < 0) {
-        virLockError(VIR_ERR_INTERNAL_ERROR, "%s",
-                     _("plugin ABI is not compatible"));
+    if (driver->drvInit(VIR_LOCK_MANAGER_VERSION, configFile, flags) < 0)
         goto cleanup;
-    }
 
     if (VIR_ALLOC(plugin) < 0) {
         virReportOOMError();
@@ -193,6 +191,7 @@ cleanup:
 }
 #else /* !HAVE_DLFCN_H */
 virLockManagerPluginPtr virLockManagerPluginNew(const char *name ATTRIBUTE_UNUSED,
+                                                const char *configFile ATTRIBUTE_UNUSED,
                                                 unsigned int flags ATTRIBUTE_UNUSED)
 {
     virLockError(VIR_ERR_INTERNAL_ERROR, "%s",
index af91cc6d2d8fbe63e07085e0926f16e014b3e2b1..0fb3bb70b450278601eee080ba431badbba28d7f 100644 (file)
@@ -29,6 +29,7 @@ typedef struct _virLockManagerPlugin virLockManagerPlugin;
 typedef virLockManagerPlugin *virLockManagerPluginPtr;
 
 virLockManagerPluginPtr virLockManagerPluginNew(const char *name,
+                                                const char *configFile,
                                                 unsigned int flags);
 void virLockManagerPluginRef(virLockManagerPluginPtr plugin);
 void virLockManagerPluginUnref(virLockManagerPluginPtr plugin);
index 46f6976094056bb29935194802a55ce3f3f12ea2..3d8aba447718cf7f9519b5acc67e69671921b938 100644 (file)
@@ -116,7 +116,7 @@ int qemudLoadDriverConfig(struct qemud_driver *driver,
 #endif
 
     if (!(driver->lockManager =
-          virLockManagerPluginNew("nop", 0)))
+          virLockManagerPluginNew("nop", NULL, 0)))
         return -1;
 
     /* Just check the file is readable before opening it, otherwise
@@ -438,10 +438,17 @@ int qemudLoadDriverConfig(struct qemud_driver *driver,
     p = virConfGetValue (conf, "lock_manager");
     CHECK_TYPE ("lock_manager", VIR_CONF_STRING);
     if (p && p->str) {
+        char *lockConf;
         virLockManagerPluginUnref(driver->lockManager);
+        if (virAsprintf(&lockConf, "%s/libvirt/qemu-%s.conf", SYSCONFDIR, p->str) < 0) {
+            virReportOOMError();
+            virConfFree(conf);
+            return -1;
+        }
         if (!(driver->lockManager =
-              virLockManagerPluginNew(p->str, 0)))
+              virLockManagerPluginNew(p->str, lockConf, 0)))
             VIR_ERROR(_("Failed to load lock manager %s"), p->str);
+        VIR_FREE(lockConf);
     }
 
     virConfFree (conf);