mirror of https://gitee.com/openkylin/libvirt.git
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
This commit is contained in:
parent
25171f607c
commit
5df29ebc25
|
@ -121,6 +121,7 @@ struct _virLockManagerParam {
|
||||||
* Returns -1 if the requested version/flags were inadequate
|
* Returns -1 if the requested version/flags were inadequate
|
||||||
*/
|
*/
|
||||||
typedef int (*virLockDriverInit)(unsigned int version,
|
typedef int (*virLockDriverInit)(unsigned int version,
|
||||||
|
const char *configFile,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -28,9 +28,10 @@
|
||||||
|
|
||||||
|
|
||||||
static int virLockManagerNopInit(unsigned int version,
|
static int virLockManagerNopInit(unsigned int version,
|
||||||
|
const char *configFile,
|
||||||
unsigned int flags)
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,6 +64,7 @@ struct _virLockManagerSanlockPrivate {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int virLockManagerSanlockInit(unsigned int version ATTRIBUTE_UNUSED,
|
static int virLockManagerSanlockInit(unsigned int version ATTRIBUTE_UNUSED,
|
||||||
|
const char *configFile ATTRIBUTE_UNUSED,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
virCheckFlags(0, -1);
|
virCheckFlags(0, -1);
|
||||||
|
|
|
@ -119,6 +119,7 @@ static void virLockManagerLogParams(size_t nparams,
|
||||||
*/
|
*/
|
||||||
#if HAVE_DLFCN_H
|
#if HAVE_DLFCN_H
|
||||||
virLockManagerPluginPtr virLockManagerPluginNew(const char *name,
|
virLockManagerPluginPtr virLockManagerPluginNew(const char *name,
|
||||||
|
const char *configFile,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
void *handle = NULL;
|
void *handle = NULL;
|
||||||
|
@ -162,11 +163,8 @@ virLockManagerPluginPtr virLockManagerPluginNew(const char *name,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (driver->drvInit(VIR_LOCK_MANAGER_VERSION, flags) < 0) {
|
if (driver->drvInit(VIR_LOCK_MANAGER_VERSION, configFile, flags) < 0)
|
||||||
virLockError(VIR_ERR_INTERNAL_ERROR, "%s",
|
|
||||||
_("plugin ABI is not compatible"));
|
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
|
||||||
|
|
||||||
if (VIR_ALLOC(plugin) < 0) {
|
if (VIR_ALLOC(plugin) < 0) {
|
||||||
virReportOOMError();
|
virReportOOMError();
|
||||||
|
@ -193,6 +191,7 @@ cleanup:
|
||||||
}
|
}
|
||||||
#else /* !HAVE_DLFCN_H */
|
#else /* !HAVE_DLFCN_H */
|
||||||
virLockManagerPluginPtr virLockManagerPluginNew(const char *name ATTRIBUTE_UNUSED,
|
virLockManagerPluginPtr virLockManagerPluginNew(const char *name ATTRIBUTE_UNUSED,
|
||||||
|
const char *configFile ATTRIBUTE_UNUSED,
|
||||||
unsigned int flags ATTRIBUTE_UNUSED)
|
unsigned int flags ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
virLockError(VIR_ERR_INTERNAL_ERROR, "%s",
|
virLockError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||||
|
|
|
@ -29,6 +29,7 @@ typedef struct _virLockManagerPlugin virLockManagerPlugin;
|
||||||
typedef virLockManagerPlugin *virLockManagerPluginPtr;
|
typedef virLockManagerPlugin *virLockManagerPluginPtr;
|
||||||
|
|
||||||
virLockManagerPluginPtr virLockManagerPluginNew(const char *name,
|
virLockManagerPluginPtr virLockManagerPluginNew(const char *name,
|
||||||
|
const char *configFile,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
void virLockManagerPluginRef(virLockManagerPluginPtr plugin);
|
void virLockManagerPluginRef(virLockManagerPluginPtr plugin);
|
||||||
void virLockManagerPluginUnref(virLockManagerPluginPtr plugin);
|
void virLockManagerPluginUnref(virLockManagerPluginPtr plugin);
|
||||||
|
|
|
@ -116,7 +116,7 @@ int qemudLoadDriverConfig(struct qemud_driver *driver,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!(driver->lockManager =
|
if (!(driver->lockManager =
|
||||||
virLockManagerPluginNew("nop", 0)))
|
virLockManagerPluginNew("nop", NULL, 0)))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/* Just check the file is readable before opening it, otherwise
|
/* 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");
|
p = virConfGetValue (conf, "lock_manager");
|
||||||
CHECK_TYPE ("lock_manager", VIR_CONF_STRING);
|
CHECK_TYPE ("lock_manager", VIR_CONF_STRING);
|
||||||
if (p && p->str) {
|
if (p && p->str) {
|
||||||
|
char *lockConf;
|
||||||
virLockManagerPluginUnref(driver->lockManager);
|
virLockManagerPluginUnref(driver->lockManager);
|
||||||
|
if (virAsprintf(&lockConf, "%s/libvirt/qemu-%s.conf", SYSCONFDIR, p->str) < 0) {
|
||||||
|
virReportOOMError();
|
||||||
|
virConfFree(conf);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
if (!(driver->lockManager =
|
if (!(driver->lockManager =
|
||||||
virLockManagerPluginNew(p->str, 0)))
|
virLockManagerPluginNew(p->str, lockConf, 0)))
|
||||||
VIR_ERROR(_("Failed to load lock manager %s"), p->str);
|
VIR_ERROR(_("Failed to load lock manager %s"), p->str);
|
||||||
|
VIR_FREE(lockConf);
|
||||||
}
|
}
|
||||||
|
|
||||||
virConfFree (conf);
|
virConfFree (conf);
|
||||||
|
|
Loading…
Reference in New Issue