From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6281 invoked by alias); 6 May 2009 13:23:04 -0000 Received: (qmail 6269 invoked by alias); 6 May 2009 13:23:03 -0000 X-SWARE-Spam-Status: No, hits=-2.0 required=5.0 tests=AWL,BAYES_00,SPF_HELO_PASS X-Spam-Status: No, hits=-2.0 required=5.0 tests=AWL,BAYES_00,SPF_HELO_PASS X-Spam-Check-By: sourceware.org X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on bastion2.fedora.phx.redhat.com Subject: cluster: STABLE3 - qdisk: Fix undead loop messages To: cluster-cvs-relay@redhat.com X-Project: Cluster Project X-Git-Module: cluster.git X-Git-Refname: refs/heads/STABLE3 X-Git-Reftype: branch X-Git-Oldrev: 219b9fabd49d0ef97384f78591f4eb61377f21a5 X-Git-Newrev: 8869fb9ddbfc59574e9760be2c583302f2a1fec4 From: Lon Hohberger Message-Id: <20090506132207.5FB99120285@lists.fedorahosted.org> Date: Wed, 06 May 2009 13:23:00 -0000 X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 Mailing-List: contact cluster-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: cluster-cvs-owner@sourceware.org X-SW-Source: 2009-q2/txt/msg00230.txt.bz2 Gitweb: http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=8869fb9ddbfc59574e9760be2c583302f2a1fec4 Commit: 8869fb9ddbfc59574e9760be2c583302f2a1fec4 Parent: 219b9fabd49d0ef97384f78591f4eb61377f21a5 Author: Lon Hohberger AuthorDate: Wed May 6 09:21:27 2009 -0400 Committer: Lon Hohberger CommitterDate: Wed May 6 09:21:27 2009 -0400 qdisk: Fix undead loop messages Signed-off-by: Lon Hohberger --- cman/qdisk/main.c | 27 ++++++++++++++++++++++++--- 1 files changed, 24 insertions(+), 3 deletions(-) diff --git a/cman/qdisk/main.c b/cman/qdisk/main.c index 8e7e5b9..d1865cd 100644 --- a/cman/qdisk/main.c +++ b/cman/qdisk/main.c @@ -288,7 +288,7 @@ check_transitions(qd_ctx *ctx, node_info_t *ni, int max, memb_mask_t mask) ni[x].ni_state = S_EVICT; ni[x].ni_status.ps_state = S_EVICT; ni[x].ni_evil_incarnation = - ni[x].ni_status.ps_incarnation; + ni[x].ni_incarnation; /* Write eviction notice if we're the master. @@ -323,12 +323,14 @@ check_transitions(qd_ctx *ctx, node_info_t *ni, int max, memb_mask_t mask) */ if (ni[x].ni_evil_incarnation && (ni[x].ni_evil_incarnation == - ni[x].ni_status.ps_incarnation)) { + ni[x].ni_status.ps_incarnation) && + (ni[x].ni_status.ps_updatenode == + ni[x].ni_status.ps_nodeid)) { logt_print(LOG_CRIT, "Node %d is undead.\n", ni[x].ni_status.ps_nodeid); logt_print(LOG_ALERT, - "Writing eviction notice for node %d\n", + "Writing eviction notice (again) for node %d\n", ni[x].ni_status.ps_nodeid); qd_write_status(ctx, ni[x].ni_status.ps_nodeid, S_EVICT, NULL, NULL, NULL); @@ -363,6 +365,8 @@ check_transitions(qd_ctx *ctx, node_info_t *ni, int max, memb_mask_t mask) ni[x].ni_status.ps_nodeid); ni[x].ni_incarnation = ni[x].ni_status.ps_incarnation; + ni[x].ni_evil_incarnation = 0; + if (mask) set_bit(mask, (ni[x].ni_status.ps_nodeid-1), sizeof(memb_mask_t)); @@ -385,6 +389,23 @@ check_transitions(qd_ctx *ctx, node_info_t *ni, int max, memb_mask_t mask) continue; } + /* + Case 6: Check for a node which has changed its + incarnation # quickly (e.g. killall -9 qdiskd; + qdiskd). Not a transition. + */ + if (state_run(ni[x].ni_state) && + ni[x].ni_incarnation != ni[x].ni_status.ps_incarnation) { + + logt_print(LOG_DEBUG, "Node %d incarnation # changed\n", + ni[x].ni_status.ps_nodeid); + ni[x].ni_incarnation = + ni[x].ni_status.ps_incarnation; + ni[x].ni_evil_incarnation = 0; + + continue; + } + /* All other cases: Believe the node's reported state */