# 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/

Reply via email to