From: Fabio M. Di Nitto <fdinitto@redhat.com>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] [PATCH] rgmanager: Retry when config is out of sync [RHEL5]
Date: Thu, 01 Mar 2012 05:58:37 +0100 [thread overview]
Message-ID: <4F4F01FD.9090001@redhat.com> (raw)
In-Reply-To: <1330559599-6220-1-git-send-email-lhh@redhat.com>
ACK.
Fabio
On 03/01/2012 12:53 AM, Lon Hohberger wrote:
> [This patch is already in RHEL5]
>
> If you add a service to rgmanager v1 or v2 and that
> service fails to start on the first node but succeeds
> in its initial stop operation, there is a chance that
> the remote instance of rgmanager has not yet reread
> the configuration, causing the service to be placed
> into the 'recovering' state without further action.
>
> This patch causes the originator of the request to
> retry the operation.
>
> Later versions of rgmanager (ex STABLE3 branch and
> derivatives) are unlikely to have this problem since
> configuration updates are not polled, but rather
> delivered to clients.
>
> Update 22-Feb-2012: The above is incorrect, this was
> reproduced a rgmanager v3 installation.
>
> Resolves: rhbz#796272
>
> Signed-off-by: Lon Hohberger <lhh@redhat.com>
> ---
> rgmanager/src/daemons/rg_state.c | 19 +++++++++++++++++++
> 1 files changed, 19 insertions(+), 0 deletions(-)
>
> diff --git a/rgmanager/src/daemons/rg_state.c b/rgmanager/src/daemons/rg_state.c
> index 23a4bec..8c5af5b 100644
> --- a/rgmanager/src/daemons/rg_state.c
> +++ b/rgmanager/src/daemons/rg_state.c
> @@ -1801,6 +1801,7 @@ handle_relocate_req(char *svcName, int orig_request, int preferred_target,
> rg_state_t svcStatus;
> int target = preferred_target, me = my_id();
> int ret, x, request = orig_request;
> + int retries;
>
> get_rg_state_local(svcName, &svcStatus);
> if (svcStatus.rs_state == RG_STATE_DISABLED ||
> @@ -1933,6 +1934,8 @@ handle_relocate_req(char *svcName, int orig_request, int preferred_target,
> if (target == me)
> goto exhausted;
>
> + retries = 0;
> +retry:
> ret = svc_start_remote(svcName, request, target);
> switch (ret) {
> case RG_ERUN:
> @@ -1942,6 +1945,22 @@ handle_relocate_req(char *svcName, int orig_request, int preferred_target,
> *new_owner = svcStatus.rs_owner;
> free_member_list(allowed_nodes);
> return 0;
> + case RG_ENOSERVICE:
> + /*
> + * Configuration update pending on remote node? Give it
> + * a few seconds to sync up. rhbz#568126
> + *
> + * Configuration updates are synchronized in later releases
> + * of rgmanager; this should not be needed.
> + */
> + if (retries++ < 4) {
> + sleep(3);
> + goto retry;
> + }
> + logt_print(LOG_WARNING, "Member #%d has a different "
> + "configuration than I do; trying next "
> + "member.", target);
> + /* Deliberate */
> case RG_EDEPEND:
> case RG_EFAIL:
> /* Uh oh - we failed to relocate to this node.
prev parent reply other threads:[~2012-03-01 4:58 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-02-29 23:53 [Cluster-devel] [PATCH] rgmanager: Retry when config is out of sync [RHEL5] Lon Hohberger
2012-03-01 4:58 ` Fabio M. Di Nitto [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=4F4F01FD.9090001@redhat.com \
--to=fdinitto@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).