* [Cluster-devel] cluster/rgmanager ChangeLog src/daemons/fo_dom ...
@ 2006-06-16 19:57 lhh
0 siblings, 0 replies; only message in thread
From: lhh @ 2006-06-16 19:57 UTC (permalink / raw)
To: cluster-devel.redhat.com
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 <lhh@redhat.com>
+ * 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 <lhh@redhat.com>
* 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 @@
<content type="string"/>
</parameter>
+ <parameter name="nfslock" inherit="nfsexport%nfslock">
+ <longdesc lang="en">
+ This tells us whether the service in question has the
+ NFS lock workarounds enabled. If so, we always unexport
+ * rather than the specified client.
+ </longdesc>
+ <shortdesc lang="en">
+ NFS Lock workaround flag
+ </shortdesc>
+ <content type="boolean"/>
+ </parameter>
+
<parameter name="options">
<longdesc lang="en">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 @@
</shortdesc>
<content type="string"/>
</parameter>
+
+ <parameter name="nfslock" inherit="nfslock">
+ <longdesc lang="en">
+ If you can see this, your GUI is broken.
+ This inherits an unspecified nfslock parameter so that
+ it works with fs or clusterfs resources.
+ </longdesc>
+ <shortdesc lang="en">
+ If you can see this, your GUI is broken.
+ </shortdesc>
+ <content type="boolean"/>
+ </parameter>
+
</parameters>
<actions>
--- 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
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2006-06-16 19:57 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-06-16 19:57 [Cluster-devel] cluster/rgmanager ChangeLog src/daemons/fo_dom lhh
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.