From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12800 invoked by alias); 13 May 2009 15:14:42 -0000 Received: (qmail 12703 invoked by alias); 13 May 2009 15:14:41 -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: RHEL5 - 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/RHEL5 X-Git-Reftype: branch X-Git-Oldrev: 83a61282601bff7dd26e8bcf4ebd4b1f38d6e25c X-Git-Newrev: 09d38d16f6f6422a23c3fd29347fa1dbf8f18fe6 From: Lon Hohberger Message-Id: <20090513151409.C7A471201D4@lists.fedorahosted.org> Date: Wed, 13 May 2009 15:14: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/msg00306.txt.bz2 Gitweb: http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=09d38d16f6f6422a23c3fd29347fa1dbf8f18fe6 Commit: 09d38d16f6f6422a23c3fd29347fa1dbf8f18fe6 Parent: 83a61282601bff7dd26e8bcf4ebd4b1f38d6e25c Author: Lon Hohberger AuthorDate: Wed May 6 09:21:27 2009 -0400 Committer: Lon Hohberger CommitterDate: Wed May 13 11:13:56 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 090c71e..81999a0 100644 --- a/cman/qdisk/main.c +++ b/cman/qdisk/main.c @@ -272,7 +272,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. @@ -307,12 +307,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)) { clulog(LOG_CRIT, "Node %d is undead.\n", ni[x].ni_status.ps_nodeid); clulog(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); @@ -347,6 +349,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)); @@ -369,6 +373,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) { + + clulog(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 ;) */