All of lore.kernel.org
 help / color / mirror / Atom feed
From: Christine Caulfield <ccaulfie@redhat.com>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] [PATCH] cman: fix data copy and memory leak when reloading config
Date: Thu, 12 Jul 2012 11:57:14 +0100	[thread overview]
Message-ID: <4FFEAD8A.2030903@redhat.com> (raw)
In-Reply-To: <1341999996-12269-1-git-send-email-fdinitto@redhat.com>

ACK apart from the comments!

<see below>

On 11/07/12 10:46, Fabio M. Di Nitto wrote:
> From: "Fabio M. Di Nitto" <fdinitto@redhat.com>
>
> cman.cluster_id,nodename,two_node information were not copied
> from the old to the new config at reload time. This triggers
> a problem when <cman is set in cluster.conf and we effectively
> drop information from objdb (suboptimal).
>
> Also fix a possible memory leak when we have reload issues.
>
> Signed-off-by: Fabio M. Di Nitto <fdinitto@redhat.com>
> ---
>   cman/daemon/cman-preconfig.c |   31 +++++++++++++++++++++++++++++--
>   1 files changed, 29 insertions(+), 2 deletions(-)
>
> diff --git a/cman/daemon/cman-preconfig.c b/cman/daemon/cman-preconfig.c
> index 68fec22..22583fe 100644
> --- a/cman/daemon/cman-preconfig.c
> +++ b/cman/daemon/cman-preconfig.c
> @@ -1478,6 +1478,7 @@ static int cmanpre_reloadconfig(struct objdb_iface_ver0 *objdb, int flush, const
>   	hdb_handle_t cluster_parent_handle_new;
>   	unsigned int config_version = 0, config_version_new = 0;
>   	char *config_value = NULL;
> +	char str[255];
>
>   	/* don't reload if we've been told to run configless */
>   	if (getenv("CMAN_NOCONFIG")) {
> @@ -1489,16 +1490,16 @@ static int cmanpre_reloadconfig(struct objdb_iface_ver0 *objdb, int flush, const
>   	/* find both /cluster entries */
>   	objdb->object_find_create(OBJECT_PARENT_HANDLE, "cluster", strlen("cluster"), &find_handle);
>   	objdb->object_find_next(find_handle, &cluster_parent_handle);
> +	objdb->object_find_next(find_handle, &cluster_parent_handle_new);
> +	objdb->object_find_destroy(find_handle);
>   	if (!cluster_parent_handle) {
>   		snprintf (error_reason, sizeof(error_reason) - 1, "Cannot find old /cluster/ key in configuration\n");
>   		goto err;
>   	}
> -	objdb->object_find_next(find_handle, &cluster_parent_handle_new);
>   	if (!cluster_parent_handle_new) {
>   		snprintf (error_reason, sizeof(error_reason) - 1, "Cannot find new /cluster/ key in configuration\n");
>   		goto err;
>   	}
> -	objdb->object_find_destroy(find_handle);
>
>   	if (!objdb->object_key_get(cluster_parent_handle, "config_version", strlen("config_version"), (void *)&config_value, NULL)) {
>   		if (config_value) {
> @@ -1531,6 +1532,32 @@ static int cmanpre_reloadconfig(struct objdb_iface_ver0 *objdb, int flush, const
>   	/* destroy the old one */
>   	objdb->object_destroy(cluster_parent_handle);
>
> +	/*
> +	 * create cluster.cman in the new config if it doesn't exists



	 * create cluster.cman in the new config if it doesn't exist



> +	 */
> +	objdb->object_find_create(cluster_parent_handle_new, "cman", strlen("cman"), &find_handle);
> +	if (objdb->object_find_next(find_handle, &object_handle)) {
> +		objdb->object_create(cluster_parent_handle_new, &object_handle,
> +				     "cman", strlen("cman"));
> +	}
> +	objdb->object_find_destroy(find_handle);
> +
> +	/*
> +	 * readd cluster_id/two_node/nodename
> +	 */


          * write cluster_id/two_node/nodename



> +	snprintf(str, sizeof(str) - 1, "%d", cluster_id);
> +	objdb->object_key_create_typed(object_handle, "cluster_id",
> +				       str, strlen(str) + 1, OBJDB_VALUETYPE_STRING);
> +
> +	if (two_node) {
> +		snprintf(str, sizeof(str) - 1, "%d", 1);
> +		objdb->object_key_create_typed(object_handle, "two_node",
> +					       str, strlen(str) + 1, OBJDB_VALUETYPE_STRING);
> +	}
> +
> +	objdb->object_key_create_typed(object_handle, "nodename",
> +				       nodename, strlen(nodename)+1, OBJDB_VALUETYPE_STRING);
> +
>   	/* update the reference to the new config */
>   	cluster_parent_handle = cluster_parent_handle_new;
>
>




      reply	other threads:[~2012-07-12 10:57 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-07-11  9:46 [Cluster-devel] [PATCH] cman: fix data copy and memory leak when reloading config Fabio M. Di Nitto
2012-07-12 10:57 ` Christine Caulfield [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4FFEAD8A.2030903@redhat.com \
    --to=ccaulfie@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.