From mboxrd@z Thu Jan 1 00:00:00 1970 From: lhh@sourceware.org Date: 16 Jun 2006 19:57:53 -0000 Subject: [Cluster-devel] cluster/rgmanager ChangeLog src/daemons/fo_dom ... Message-ID: <20060616195753.26478.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 Branch: RHEL4 Changes by: lhh at sourceware.org 2006-06-16 19:57:52 Modified files: rgmanager : ChangeLog rgmanager/src/daemons: fo_domain.c groups.c rg_state.c rgmanager/src/resources: clusterfs.sh fs.sh nfsclient.sh nfsexport.sh svclib_nfslock Log message: Work around #193128, clean up NFS bits Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/ChangeLog.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.5.2.17&r2=1.5.2.18 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/fo_domain.c.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.5.2.3&r2=1.5.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/groups.c.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.8.2.16&r2=1.8.2.17 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/rg_state.c.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4.2.13&r2=1.4.2.14 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/clusterfs.sh.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.2.8&r2=1.1.2.9 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/fs.sh.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4.2.13&r2=1.4.2.14 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/nfsclient.sh.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3.2.7&r2=1.3.2.8 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/nfsexport.sh.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4.2.4&r2=1.4.2.5 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/svclib_nfslock.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.2.1&r2=1.1.2.2 --- cluster/rgmanager/ChangeLog 2006/05/26 17:39:32 1.5.2.17 +++ cluster/rgmanager/ChangeLog 2006/06/16 19:57:52 1.5.2.18 @@ -1,3 +1,10 @@ +2006-06-16 Lon Hohberger + * src/daemons/fo_domain.c, groups.c: Get rid of compiler warnings + * src/daemons/rg_state.c: Change clu_lock_verbose to use the NULL + lock/convert mechanism offered by DLM to work around #193128 + * src/resources/fs.sh, clusterfs.sh, nfsexport.sh, nfsclient.sh, + service.sh, svclib_nfslock: Finish up initial NFS workaround. + 2006-05-23 Lon Hohberger * src/daemons/members.c: Zap pad fields on copy-out * src/daemons/main.c: Give notice if skipping an event because of --- cluster/rgmanager/src/daemons/fo_domain.c 2006/05/12 21:28:31 1.5.2.3 +++ cluster/rgmanager/src/daemons/fo_domain.c 2006/06/16 19:57:52 1.5.2.4 @@ -332,8 +332,10 @@ fod_t *fod = NULL; int found = 0; int owned_by_node = 0, started = 0, no_owner = 0; +#ifndef NO_CCS rg_state_t svc_state; void *lockp; +#endif ENTER(); --- cluster/rgmanager/src/daemons/groups.c 2006/06/12 18:40:11 1.8.2.16 +++ cluster/rgmanager/src/daemons/groups.c 2006/06/16 19:57:52 1.8.2.17 @@ -757,7 +757,6 @@ resource_node_t *curr; char *name; rg_state_t svcblk; - void *lockp; pthread_rwlock_rdlock(&resource_lock); list_do(&_tree, curr) { @@ -814,7 +813,6 @@ char *name; rg_state_t svcblk; int need_kill; - void *lockp; clulog(LOG_INFO, "Stopping changed resources.\n"); --- cluster/rgmanager/src/daemons/rg_state.c 2006/05/26 15:32:00 1.4.2.13 +++ cluster/rgmanager/src/daemons/rg_state.c 2006/06/16 19:57:52 1.4.2.14 @@ -117,6 +117,7 @@ struct timeval start, now; uint64_t nodeid, *p; int flags; + int conv = 0, err; int block = !(dflt_flags & CLK_NOWAIT); /* Holder not supported for this call */ @@ -128,6 +129,37 @@ gettimeofday(&start, NULL); start.tv_sec += 30; } + + /* Ripped from global.c in magma */ + if (!(dflt_flags & CLK_CONVERT) && + (block || ((dflt_flags & CLK_EX) == 0))) { + /* Acquire NULL lock */ + ret = clu_lock(resource, CLK_NULL, lockpp); + err = errno; + if (ret == 0) { + if ((flags & CLK_EX) == 0) { + /* User only wanted a NULL lock... */ + return 0; + } + /* + Ok, NULL lock was taken, rest of blocking + call should be done using lock conversions. + */ + flags |= CLK_CONVERT; + conv = 1; + } else { + switch(err) { + case EINVAL: + /* Oops, null locks don't work on this + plugin; use normal spam mode */ + break; + default: + errno = err; + return -1; + } + } + } + while (1) { if (block) { gettimeofday(&now, NULL); @@ -145,9 +177,14 @@ } *lockpp = NULL; - ret = clu_lock(resource, flags | CLK_NOWAIT, lockpp); - if ((ret != 0) && (errno == EAGAIN) && block) { + /* Take the lock (convert if possible). */ + ret = clu_lock(resource, flags | CLK_NOWAIT | + ((conv && !timed_out) ? CLK_CONVERT : 0), + lockpp); + err = errno; + + if ((ret != 0) && (err == EAGAIN) && block) { if (timed_out) { p = (uint64_t *)*lockpp; if (p) { @@ -176,6 +213,16 @@ break; } + /* Fatal error. If we took an automatic NL lock with the hopes of + converting it, release the lock before returning */ + if (conv == 1 && ret < 0) { + clu_unlock(resource, *lockpp); + *lockpp = NULL; + } + + if (ret < 0) + errno = err; + return ret; } --- cluster/rgmanager/src/resources/clusterfs.sh 2006/05/16 20:03:04 1.1.2.8 +++ cluster/rgmanager/src/resources/clusterfs.sh 2006/06/16 19:57:52 1.1.2.9 @@ -803,10 +803,10 @@ ocf_log warning "Dropping node-wide NFS locks" mkdir -p $mp/.clumanager/statd # Copy out the notify list; our - # IPs are already torn down - if notify_list_store $mp/.clumanager/statd; then - notify_list_broadcast $mp/.clumanager/statd - fi + # IPs are already torn down + if notify_list_store $mp/.clumanager/statd; then + notify_list_broadcast $mp/.clumanager/statd + fi fi # Always invalidate buffers on clusterfs resources --- cluster/rgmanager/src/resources/fs.sh 2006/05/16 20:03:04 1.4.2.13 +++ cluster/rgmanager/src/resources/fs.sh 2006/06/16 19:57:52 1.4.2.14 @@ -1153,6 +1153,7 @@ [ "$OCF_RESKEY_nfslock" = "1" ]; then ocf_log warning \ "Dropping node-wide NFS locks" + pkill -KILL -x lockd mkdir -p $mp/.clumanager/statd # Copy out the notify list; our # IPs are already torn down --- cluster/rgmanager/src/resources/nfsclient.sh 2006/05/16 20:03:04 1.3.2.7 +++ cluster/rgmanager/src/resources/nfsclient.sh 2006/06/16 19:57:52 1.3.2.8 @@ -95,6 +95,18 @@ + + + This tells us whether the service in question has the + NFS lock workarounds enabled. If so, we always unexport + * rather than the specified client. + + + NFS Lock workaround flag + + + + Defines a list of options for this particular client. See 'man 5 exports' for a list @@ -295,6 +307,14 @@ stop) verify_all || exit $OCF_ERR_ARGS + if [ "$OCF_RESKEY_nfslock" = "1" ]; then + # + # If the NFS lock workarounds were enabled, unexport from + # the world + # + export OCF_RESKEY_target="*" + fi + ocf_log info "Removing export: ${OCF_RESKEY_target}:${OCF_RESKEY_path}" exportfs -u "${OCF_RESKEY_target}:${OCF_RESKEY_path}" rv=$? --- cluster/rgmanager/src/resources/nfsexport.sh 2005/12/07 22:53:31 1.4.2.4 +++ cluster/rgmanager/src/resources/nfsexport.sh 2006/06/16 19:57:52 1.4.2.5 @@ -97,6 +97,19 @@ + + + + If you can see this, your GUI is broken. + This inherits an unspecified nfslock parameter so that + it works with fs or clusterfs resources. + + + If you can see this, your GUI is broken. + + + + --- cluster/rgmanager/src/resources/svclib_nfslock 2006/05/16 20:03:04 1.1.2.1 +++ cluster/rgmanager/src/resources/svclib_nfslock 2006/06/16 19:57:52 1.1.2.2 @@ -163,17 +163,6 @@ declare lockd_pid=$(pidof lockd) declare nl_dir=$1 - # First of all, send lockd a SIGKILL. We hope nfsd is running. - # If it is, this will cause lockd to reset the grace period for - # lock reclaiming. - if [ -n "$lockd_pid" ]; then - ocf_log info "Asking lockd to drop locks (pid $lockd_pid)" - kill -9 $lockd_pid - else - ocf_log warning "lockd not running; cannot notify clients" - return 1 - fi - while read dev family addr maskbits; do if [ "$family" != "inet" ]; then continue