# HG changeset patch
# User Florian Haas <[email protected]>
# Date 1287154687 -7200
# Node ID 34f73e222a37b82b525b842da2967dcb79d2e7c3
# Parent 215ccda0732bbadc55fb4a898dc420bd32f47039
Medium: exportfs: ensure graceful failover with NFSv4 clients
diff -r 215ccda0732b -r 34f73e222a37 heartbeat/exportfs
--- a/heartbeat/exportfs Mon Sep 27 17:44:50 2010 +0200
+++ b/heartbeat/exportfs Fri Oct 15 16:58:07 2010 +0200
@@ -15,8 +15,10 @@
# Defaults
OCF_RESKEY_unlock_on_stop_default=0
+OCF_RESKEY_wait_for_leasetime_on_stop_default=0
: ${OCF_RESKEY_unlock_on_stop=${OCF_RESKEY_unlock_on_stop_default}}
+:
${OCF_RESKEY_wait_for_leasetime_on_stop=${OCF_RESKEY_wait_for_leasetime_on_stop_default}}
#######################################################################
exportfs_meta_data() {
@@ -98,6 +100,25 @@
<content type="boolean" default="${OCF_RESKEY_unlock_on_stop_default}" />
</parameter>
+<parameter name="wait_for_leasetime_on_stop">
+<longdesc lang="en">
+When stopping (unexporting), wait out the NFSv4 lease time.
+Only after all leases have expired does the NFS kernel server
+relinquish all server-side handles on the exported filesystem.
+If this ${__SCRIPT_NAME} resource manages an export that resides
+on a mount point designed to fail over along with the NFS export
+itself, then enabling this parameter will ensure such failover
+is working properly. Note that when this parameter is set, your
+stop timeout MUST accommodate for the wait period. This parameter
+is safe to disable if none of your NFS clients are using NFS
+version 4 or later.
+</longdesc>
+<shortdesc lang="en">
+Ride out the NFSv4 lease time on resource stop?
+</shortdesc>
+<content type="boolean"
default="${OCF_RESKEY_wait_for_leasetime_on_stop_default}" />
+</parameter>
+
</parameters>
@@ -219,6 +240,19 @@
fi
fi
+ if ocf_is_true ${OCF_RESKEY_wait_for_leasetime_on_stop}; then
+ local leasetimefile
+ local sleeptime
+ leasetimefile=/proc/fs/nfsd/nfsv4leasetime
+ if [ -r ${unlockfile} ]; then
+ sleeptime=$((`cat ${leasetimefile}`+2))
+ ocf_log info "Sleeping ${sleeptime} seconds to
accommodate for NFSv4 lease expiry"
+ sleep ${sleeptime}s
+ else
+ ocf_log warn "Unable to read NFSv4 lease time from
${leasetimefile}, file not found or not readable"
+ fi
+ fi
+
backup_rmtab
clean_rmtab
_______________________________________________________
Linux-HA-Dev: [email protected]
http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
Home Page: http://linux-ha.org/