From mboxrd@z Thu Jan 1 00:00:00 1970 From: teigland@sourceware.org Date: 22 Aug 2006 14:36:22 -0000 Subject: [Cluster-devel] cluster/group/daemon app.c Message-ID: <20060822143622.1951.qmail@sourceware.org> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit CVSROOT: /cvs/cluster Module name: cluster Changes by: teigland at sourceware.org 2006-08-22 14:36:20 Modified files: group/daemon : app.c Log message: When we're in X_BEGIN state, accept "stopped" messages from other nodes. This applies to bz 202635. (There may be a better way to address this, e.g. forcing a new FAIL_BEGIN event to be processed before processing any messages) Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/daemon/app.c.diff?cvsroot=cluster&r1=1.40&r2=1.41 --- cluster/group/daemon/app.c 2006/08/14 21:01:54 1.40 +++ cluster/group/daemon/app.c 2006/08/22 14:36:20 1.41 @@ -787,6 +787,15 @@ } #endif +int event_state_begin(app_t *a) +{ + if (a->current_event->state == EST_JOIN_BEGIN || + a->current_event->state == EST_LEAVE_BEGIN || + a->current_event->state == EST_FAIL_BEGIN) + return TRUE; + return FALSE; +} + int event_state_stopping(app_t *a) { if (a->current_event->state == EST_JOIN_STOP_WAIT || @@ -1058,8 +1067,12 @@ { node_t *node; - if (!event_state_stopping(a)) { - log_error(a->g, "mark_node_stopped: event not stopping: " + /* we might get a stopped message from another node who's going + through X_BEGIN before we get to X_BEGIN ourselves, so we need + to accept their message if we're in X_BEGIN, too */ + + if (!event_state_stopping(a) && !event_state_begin(a)) { + log_error(a->g, "mark_node_stopped: event not stopping/begin: " "state %s from %d", ev_state_str(a->current_event), nodeid); return -1;