[lvm-devel] [PATCH] New public functions lvm2_reload_config, lvm2_set_config_option and lvm2_reset_config_option.
Thomas Woerner
twoerner at redhat.com
Fri Dec 12 11:36:30 UTC 2008
Dave Wysochanski wrote:
> On Thu, 2008-12-11 at 17:43 +0100, Thomas Woerner wrote:
>> ---
>> lib/lvm2.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
>> lib/lvm2.h | 38 ++++++++++++++++++++++++++++++++++++++
>> 2 files changed, 90 insertions(+), 0 deletions(-)
>>
>> diff --git a/lib/lvm2.c b/lib/lvm2.c
>> index daf9a79..ac5e583 100644
>> --- a/lib/lvm2.c
>> +++ b/lib/lvm2.c
>> @@ -15,6 +15,30 @@
>> #include "lvm2.h"
>> #include "lib.h"
>> #include "toolcontext.h"
>> +#include "archiver.h"
>> +#include "activate.h"
>> +#include "../tools/tools.h"
>> +
>
> Do we need the relative path here?
>
Ok, I will add tools/tools.h, tools/toollib.h, tools/commands.h and
tools/args.h to include/.smylinks. Then it is possible to use #include
"tools.h".
>> +
>> +static void _apply_settings(struct cmd_context *cmd)
>> +{
>> + init_debug(cmd->current_settings.debug);
>> + init_verbose(cmd->current_settings.verbose + VERBOSE_BASE_LEVEL);
>> + init_test(cmd->current_settings.test);
>> + init_full_scan_done(0);
>> + init_mirror_in_sync(0);
>> +
>> + init_msg_prefix(cmd->default_settings.msg_prefix);
>> + init_cmd_name(cmd->default_settings.cmd_name);
>> +
>> + archive_enable(cmd, cmd->current_settings.archive);
>> + backup_enable(cmd, cmd->current_settings.backup);
>> +
>> + set_activation(cmd->current_settings.activation);
>> +
>> + cmd->fmt = cmd->current_settings.fmt;
>> + cmd->handles_missing_pvs = 0;
>> +}
>>
>
> We should avoid duplicating this code with lvmcmdline.c. Did you check
> the other callers to see if we could consolidate somehow?
>
>> lvm2_handle_t lvm2_create(const char *sys_dir)
>> @@ -30,6 +54,8 @@ lvm2_handle_t lvm2_create(const char *sys_dir)
>> * - bind logging to handle
>> */
>>
>> + _apply_settings(cmd);
>> +
>> return (lvm2_handle_t) cmd;
>> }
>>
>> @@ -40,3 +66,29 @@ void lvm2_destroy(lvm2_handle_t libh)
>>
>> return 1;
>> }
>> +
>> +
>> +int lvm2_reload_config(lvm2_handle_t libh)
>> +{
>> + int refresh;
>> +
>> + refresh = refresh_toolcontext((struct cmd_context *) libh);
>> +
>
> I think we need:
> cmd->current_settings = cmd->default_settings;
>
> either here or at the bottom of refresh_toolcontext(). This I think is
> a bug in the existing code so it does not necessarily apply to this
> patch. It is a problem for callers of refresh_toolcontext() though, and
> I believe clvmd has this problem (see do_refresh_cache() in
> lvm-functions.c).
>
>
>> + if (refresh)
>> + _apply_settings((struct cmd_context *) libh);
>> +
>
>
>> + return refresh;
>> +}
>> +
>> +
>> +int lvm2_set_config_option(lvm2_handle_t libh, const char *option,
>> + const char *value)
>> +{
>> + return 1;
>> +}
>> +
>> +
>> +int lvm2_reset_config_option(lvm2_handle_t libh, const char *option)
>> +{
>> + return 1;
>> +}
>> diff --git a/lib/lvm2.h b/lib/lvm2.h
>> index b131fd7..b2c97d0 100644
>> --- a/lib/lvm2.h
>> +++ b/lib/lvm2.h
>> @@ -49,4 +49,42 @@ lvm2_handle_t lvm2_create(const char *sys_dir);
>> */
>> void lvm2_destroy(lvm2_handle_t h);
>>
>> +/*
>> + * lvm2_reload_config
>> + *
>> + * Description: Reload configuration files
>> + *
>> + * Returns:
>> + * 0: error
>> + * 1: success
>> + */
>> +int lvm2_reload_config(lvm2_handle_t h);
>> +
>> +/*
>> + * lvm2_set_config_option
>> + *
>> + * Description: Load an lvm config option into the existing configuration.
>> + * The formation of the option parameter is similar to the names
>> + * in /etc/lvm/lvm.conf.
>> + * An option within a section is specified with a '/' between the
>> + * section name and option. For example, the 'filter' option in the
>> + * devices section is specified by 'devices/filter'
>> + *
>> + * Returns:
>> + * 0: error
>> + * 1: success
>> + */
>> +int lvm2_set_config_option(lvm2_handle_t h, const char *option,
>> + const char *value);
>> +/*
>> + * lvm2_remove_config_option
>> + *
>> + * Description:
>> + *
>> + * Returns:
>> + * 0: error
>> + * 1: success
>> + */
>> +int lvm2_reset_config_option(lvm2_handle_t h, const char *option);
>> +
>
> We should probably be consistent with return code types - uint32_t?
>
> Then again, if we're going to try to use errno return values perhaps we
> need int after all?
>
> --
> lvm-devel mailing list
> lvm-devel at redhat.com
> https://www.redhat.com/mailman/listinfo/lvm-devel
--
Thomas Woerner
Software Engineer Phone: +49-711-96437-310
Red Hat GmbH Fax : +49-711-96437-111
Hauptstaetterstr. 58 Email: Thomas Woerner <twoerner at redhat.com>
D-70178 Stuttgart Web : http://www.redhat.de/
More information about the lvm-devel
mailing list