summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel P. Berrange <berrange@redhat.com>2011-06-13 14:30:26 +0100
committerDaniel P. Berrange <berrange@redhat.com>2011-06-28 18:07:06 +0100
commit5df29ebc25e3e73ef43acb5e9093c9e17ef792b4 (patch)
tree8534af09ccfb2791007eea2ed3014829b8bad473
parentnetwork: add domain to unqualified names defined with <host> (diff)
downloadlibvirt-5df29ebc25e3e73ef43acb5e9093c9e17ef792b4.tar.gz
libvirt-5df29ebc25e3e73ef43acb5e9093c9e17ef792b4.tar.bz2
libvirt-5df29ebc25e3e73ef43acb5e9093c9e17ef792b4.zip
Allow per-driver config file for lock manager plugins
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
-rw-r--r--src/locking/lock_driver.h1
-rw-r--r--src/locking/lock_driver_nop.c3
-rw-r--r--src/locking/lock_driver_sanlock.c1
-rw-r--r--src/locking/lock_manager.c7
-rw-r--r--src/locking/lock_manager.h1
-rw-r--r--src/qemu/qemu_conf.c11
6 files changed, 17 insertions, 7 deletions
diff --git a/src/locking/lock_driver.h b/src/locking/lock_driver.h
index c9fe3683a..357a8d507 100644
--- a/src/locking/lock_driver.h
+++ b/src/locking/lock_driver.h
@@ -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);
/**
diff --git a/src/locking/lock_driver_nop.c b/src/locking/lock_driver_nop.c
index 69a5b3407..0fab54c6e 100644
--- a/src/locking/lock_driver_nop.c
+++ b/src/locking/lock_driver_nop.c
@@ -28,9 +28,10 @@
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;
}
diff --git a/src/locking/lock_driver_sanlock.c b/src/locking/lock_driver_sanlock.c
index 86db5b84d..6ddeac7ba 100644
--- a/src/locking/lock_driver_sanlock.c
+++ b/src/locking/lock_driver_sanlock.c
@@ -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);
diff --git a/src/locking/lock_manager.c b/src/locking/lock_manager.c
index 7cd565912..4ee7f4456 100644
--- a/src/locking/lock_manager.c
+++ b/src/locking/lock_manager.c
@@ -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",
diff --git a/src/locking/lock_manager.h b/src/locking/lock_manager.h
index af91cc6d2..0fb3bb70b 100644
--- a/src/locking/lock_manager.h
+++ b/src/locking/lock_manager.h
@@ -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);
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
index 46f697609..3d8aba447 100644
--- a/src/qemu/qemu_conf.c
+++ b/src/qemu/qemu_conf.c
@@ -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);