On Wed, Nov 21, 2012 at 7:11 AM, Ivana Hutarova Varekova <
varek...@redhat.com> wrote:

> Two new functions maintain the templates cache:
> int cgroup_init_templates_cache(char *pathname);
> int cgroup_reload_cached_templates(char *pathname);
>
> their are analogous to cgroup_init_rules_cache and
> cgroup_reload_cached_rules
> the only difference is there can be set configuration file as a parameter
>
> Signed-off-by: Ivana Hutarova Varekova <varek...@redhat.com>
> ---
>
>  include/libcgroup/config.h |   10 +++++
>  src/config.c               |   95
> ++++++++++++++++++++++++++++++++++++++++++++
>  src/libcgroup-internal.h   |    2 +
>  src/libcgroup.map          |    5 ++
>  4 files changed, 112 insertions(+), 0 deletions(-)
>
> diff --git a/include/libcgroup/config.h b/include/libcgroup/config.h
> index 2dfdd32..d18634e 100644
> --- a/include/libcgroup/config.h
> +++ b/include/libcgroup/config.h
> @@ -74,6 +74,16 @@ int cgroup_config_unload_config(const char *pathname,
> int flags);
>  int cgroup_config_set_default(struct cgroup *new_default);
>
>  /**
> + * Initializes the templates cache and load it from file pathname.
> + */
> +int cgroup_init_templates_cache(char *pathname);
> +
> +/**
> + * Reloads the templates list from file pathname.
> + */
> +int cgroup_reload_cached_templates(char *pathname);
> +
> +/**
>   * @}
>   * @}
>   */
> diff --git a/src/config.c b/src/config.c
> index d59b398..6a91239 100644
> --- a/src/config.c
> +++ b/src/config.c
> @@ -78,6 +78,15 @@ static struct cgroup *config_template_table;
>  static int config_template_table_index;
>
>  /*
> + * template structures used for templates cache, config_template_table and
> + * cgroup_template_table_index are rewritten  in each cgroup_parse_config
> + * thus not only if we want to reload template cache
> + */
> +static struct cgroup *template_table;
> +static int template_table_index;
> +
> +
> +/*
>   * Needed for the type while mounting cgroupfs.
>   */
>  #define CGROUP_FILESYSTEM "cgroup"
> @@ -1403,3 +1412,89 @@ int cgroup_config_set_default(struct cgroup
> *new_default)
>
>         return 0;
>  }
> +
> +/**
> + * Reloads the templates list, using the given configuration file.
> + *     @return 0 on success, > 0 on failure
> + */
> +int cgroup_reload_cached_templates(char *pathname)
> +{
> +       int i;
> +       /* Return codes */
>

Comment does not help here. Remove it please.


> +       int ret = 0;
> +
> +       if (template_table) {
> +               /* template structures have to be free */
> +               for (i = 0; i < template_table_index; i++)
> +                       cgroup_free_controllers(&template_table[i]);
> +               free(template_table);
> +               template_table = NULL;
> +       }
> +       template_table_index = 0;
> +
> +       if (config_template_table_index != 0) {
> +               /* config template structures have to be free as well*/
> +               cgroup_free_config();
> +       }
> +
> +       /* reloading data to config template structures */
> +       cgroup_dbg("Reloading cached templates from %s.\n", pathname);
> +       ret = cgroup_parse_config(pathname);
> +       if (ret) {
> +               cgroup_dbg("Could not reload template cache, error was:
> %d\n",
> +                       ret);
> +               return ret;
> +       }
> +
> +       /* copy data to templates cache structures */
> +       template_table_index = config_template_table_index;
> +       template_table = calloc(template_table_index, sizeof(struct
> cgroup));
> +       if (template_table == NULL) {
> +               ret = ECGOTHER;
> +               return  ret;
> +       }
> +
> +       memcpy(template_table, config_template_table,
> +               template_table_index * sizeof(struct cgroup));
> +
> +       return ret;
> +}
> +
> +/**
> + * Initializes the templates cache.
> + *     @return 0 on success, > 0 on error
> + */
> +int cgroup_init_templates_cache(char *pathname)
> +{
> +       /* Return codes */
> +       int ret = 0;
> +
> +       if (config_template_table_index != 0) {
> +               /* config structures have to be clean */
> +               cgroup_free_config();
> +       }
> +
> +       cgroup_dbg("Loading cached templates from %s.\n", pathname);
> +       /* Attempt to read the configuration file and cache the rules. */
> +       ret = cgroup_parse_config(pathname);
> +       if (ret) {
> +               cgroup_dbg("Could not initialize rule cache, error was:
> %d\n",
> +                       ret);
> +               return ret;
> +       }
> +
> +       /* copy template data to templates cache structures */
> +       template_table_index = config_template_table_index;
> +       template_table = calloc(template_table_index, sizeof(struct
> cgroup));
> +       if (template_table == NULL) {
> +               ret = ECGOTHER;
> +               return ret;
> +       }
> +
> +       memcpy(template_table, config_template_table,
> +               template_table_index * sizeof(struct cgroup));
> +
> +       return ret;
> +
> +
> +}
> diff --git a/src/libcgroup-internal.h b/src/libcgroup-internal.h
> index e59a59e..dbb8e9a 100644
> --- a/src/libcgroup-internal.h
> +++ b/src/libcgroup-internal.h
> @@ -47,6 +47,8 @@ __BEGIN_DECLS
>  #define CGRULE_SUCCESS_STORE_PID       "SUCCESS_STORE_PID"
>
>
> +#define CGCONFIG_CONF_FILE             "/etc/cgconfig.conf"
> +
>  #define CGRULES_CONF_FILE       "/etc/cgrules.conf"
>  #define CGRULES_MAX_FIELDS_PER_LINE            3
>
> diff --git a/src/libcgroup.map b/src/libcgroup.map
> index e73dd6e..e29f887 100644
> --- a/src/libcgroup.map
> +++ b/src/libcgroup.map
> @@ -105,3 +105,8 @@ CGROUP_0.38 {
>         cgroup_config_unload_config;
>         cgroup_config_set_default;
>  } CGROUP_0.37;
> +
> +CGROUP_0.39 {
> +       cgroup_reload_cached_templates;
> +       cgroup_init_templates_cache;
> +} CGROUP_0.38;
>
>
------------------------------------------------------------------------------
Monitor your physical, virtual and cloud infrastructure from a single
web console. Get in-depth insight into apps, servers, databases, vmware,
SAP, cloud infrastructure, etc. Download 30-day Free Trial.
Pricing starts from $795 for 25 servers or applications!
http://p.sf.net/sfu/zoho_dev2dev_nov
_______________________________________________
Libcg-devel mailing list
Libcg-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libcg-devel

Reply via email to