From mboxrd@z Thu Jan 1 00:00:00 1970 From: lhh@sourceware.org Date: 14 Dec 2007 22:10:53 -0000 Subject: [Cluster-devel] cluster/rgmanager ChangeLog src/daemons/rg_eve ... Message-ID: <20071214221053.15877.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: lhh at sourceware.org 2007-12-14 22:10:53 Modified files: rgmanager : ChangeLog rgmanager/src/daemons: rg_event.c rg_forward.c Log message: Fix misc central events bugs. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/ChangeLog.diff?cvsroot=cluster&r1=1.65&r2=1.66 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/rg_event.c.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/rg_forward.c.diff?cvsroot=cluster&r1=1.12&r2=1.13 --- cluster/rgmanager/ChangeLog 2007/12/14 19:37:00 1.65 +++ cluster/rgmanager/ChangeLog 2007/12/14 22:10:52 1.66 @@ -1,6 +1,10 @@ 2007-12-14 Lon Hohberger + (Misc central_events fixes) * Add return code for inability to run because of exclusive tag + * Only initialize state once + * Fix master-node failover. + * Correctly return node after enable if request was forwarded 2007-12-12 Lon Hohberger * Misc changes; add missing ds.h --- cluster/rgmanager/src/daemons/rg_event.c 2007/11/30 21:36:28 1.3 +++ cluster/rgmanager/src/daemons/rg_event.c 2007/12/14 22:10:53 1.4 @@ -314,28 +314,35 @@ if (_master) return my_id(); + m = member_list(); pthread_mutex_lock(&mi_mutex); + if (mi) { master_id = mi->m_nodeid; pthread_mutex_unlock(&mi_mutex); - //clulog(LOG_DEBUG, "%d is master\n", mi->m_nodeid); - return master_id; + if (memb_online(m, master_id)) { + //clulog(LOG_DEBUG, "%d is master\n", mi->m_nodeid); + goto out; + } } + pthread_mutex_unlock(&mi_mutex); memset(&_master_lock, 0, sizeof(_master_lock)); if (clu_lock(LKM_EXMODE, &_master_lock, LKF_NOQUEUE, "Transition-Master") < 0) { /* not us, find out who is master */ - return find_master(); + master_id = find_master(); + goto out; } - if (_master_lock.sb_status != 0) - return -1; + if (_master_lock.sb_status != 0) { + master_id = -1; + goto out; + } _master = 1; - m = member_list(); memset(&masterinfo, 0, sizeof(masterinfo)); masterinfo.m_magic = EVENT_MASTER_MAGIC; masterinfo.m_nodeid = my_id(); @@ -348,9 +355,11 @@ clulog(LOG_ERR, "Unable to advertise master" " status to all nodes\n"); } - free_member_list(m); - return my_id(); + master_id = my_id(); +out: + free_member_list(m); + return master_id; } --- cluster/rgmanager/src/daemons/rg_forward.c 2007/11/30 21:36:28 1.12 +++ cluster/rgmanager/src/daemons/rg_forward.c 2007/12/14 22:10:53 1.13 @@ -185,7 +185,7 @@ msgctx_t *ctx = NULL, *resp_ctx = NULL; cluster_member_list_t *m = NULL; SmMessageSt *msgp = NULL, msg; - int response_code = RG_EAGAIN, ret, target = -1, new_owner = 0; + int response_code = RG_EAGAIN, ret, target = -1; int retries = 0; struct fw_message *fwmsg = (struct fw_message *)arg; @@ -246,13 +246,14 @@ swab_SmMessageSt(&msg); response_code = msg.sm_data.d_ret; + target = msg.sm_data.d_svcOwner; out_fail: free(fwmsg); if (resp_ctx) { send_ret(resp_ctx, msgp->sm_data.d_svcName, response_code, - msgp->sm_data.d_action, new_owner); + msgp->sm_data.d_action, target); msg_close(resp_ctx); msg_free_ctx(resp_ctx); }