Adding a callback for incoming sm_notify to better handle stale lock issue in client crash recovery in HA-NFS environment. The callout parameters are:
Subsystems (2)
PATCH 1/1 Adding a callback for incoming sm_notify to better handle stale lock issue in client crash recovery in HA-NFS environment. The callout parameters are:
[ Forwarding this on to the mailing list ]
From: rong zeng <[email protected]>
1. "sm-notify" - callout name
2. monitored client name as in the SM_NOTIFY request
3. IP of the sender of the SM_NOITFY request.
4. state value in the SM_NOTIFY request
This new interface can be used by different HA-NFS product in its specific configuration and environment to recover from the client crash and stale lock scenarios.
--- utils/statd/callback.c | 13 ++++++++----- utils/statd/statd.man | 20 ++++++++++++++++---- 2 files changed, 24 insertions(+), 9 deletions(-)
utils/statd/callback.c +8 -5
@@ -15,6 +15,7 @@#include "rpcmisc.h" #include "statd.h" #include "notlist.h" +#include "ha-callout.h" /* Callback notify list. */ /* notify_list *cbnl = NULL; ... never used */
@@ -87,6 +88,13 @@ sm_notify_1_svc(struct stat_chge *argp, struct svc_req *rqstp)xlog (D_CALL ,"Received SM_NOTIFY from %s, state: %d" , argp->mon_name, argp->state); +if (!statd_present_address (sap, ip_addr,sizeof (ip_addr))) { +xlog_warn ("Unrecognized sender address" ); +return ((void *) &result); + } + +ha_callout ("sm-notify" , argp->mon_name, ip_addr, argp->state); +/* quick check - don't bother if we're not monitoring anyone */ if (rtnl ==NULL ) { xlog_warn("SM_NOTIFY from %s while not monitoring any hosts",
@@ -94,11 +102,6 @@ sm_notify_1_svc(struct stat_chge *argp, struct svc_req *rqstp)return ((void *) &result); } -if (!statd_present_address (sap, ip_addr,sizeof (ip_addr))) { -xlog_warn ("Unrecognized sender address" ); -return ((void *) &result); - } -/* okir change: statd doesn't remove the remote host from its * internal monitor list when receiving an SM_NOTIFY call from * it. Lockd will want to continue monitoring the remote host
utils/statd/statd.man +16 -4
@@ -346,7 +346,8 @@ points due to inactivity. .SS High-availability callouts .B rpc.statd can exec a special callout program during processing of -successful SM_MON, SM_UNMON, and SM_UNMON_ALL requests. +successful SM_MON, SM_UNMON, and SM_UNMON_ALL requests, +or when it receives SM_NOTIFY. Such a program may be used in High Availability NFS (HA-NFS) environments to track lock state that may need to be migrated after a system reboot.
@@ -357,15 +358,26 @@ option. The program is run with 3 arguments: The first is either .B add-client -or .B del-client +or +.B sm-notify depending on the reason for the callout. The second is the .I mon_name of the monitored peer. The third is the -.I caller_name -of the requesting lock manager. +.I caller_name +of the requesting lock manager for +.B add-client +or +.B del-client +, otherwise it is +.I IP_address +of the caller sending SM_NOTIFY. +The forth is the +.I state_value +in the SM_NOTIFY request. + .SS IPv6 and TI-RPC support TI-RPC is a pre-requisite for supporting NFS on IPv6. If TI-RPC support is built into
Signature · 1 line
1.7.1
Quoted 9 lines · Steve Dickson
[ Forwarding this on to the mailing list ]
From: rong zeng <[email protected]>
1. "sm-notify" - callout name
2. monitored client name as in theSM_NOTIFYrequest
3. IP of the sender of theSM_NOITFYrequest.
4. state value in theSM_NOTIFYrequest
Quoted 5 lines
This new interface can be used by different HA-NFS product in its specific configuration and environment to recover from the client crash and stale lock scenarios.
Signed-off-by Rong Zeng <[email protected]>
Committed...
steved.
Quoted 88 lines
--- utils/statd/callback.c | 13 ++++++++----- utils/statd/statd.man | 20 ++++++++++++++++---- 2 files changed, 24 insertions(+), 9 deletions(-)utils/statd/callback.c +8
-5@@ -15,6 +15,7 @@#include "rpcmisc.h" #include "statd.h" #include "notlist.h" +#include "ha-callout.h" /* Callback notify list. */ /* notify_list *cbnl = NULL; ... never used */ @@ -87,6 +88,13 @@ sm_notify_1_svc(struct stat_chge *argp, struct svc_req *rqstp)xlog (D_CALL ,"Received SM_NOTIFY from %s, state: %d" , argp->mon_name, argp->state); +if (!statd_present_address (sap, ip_addr,sizeof (ip_addr))) { +xlog_warn ("Unrecognized sender address" ); +return ((void *) &result); + } + +ha_callout ("sm-notify" , argp->mon_name, ip_addr, argp->state); +/* quick check - don't bother if we're not monitoring anyone */ if (rtnl ==NULL ) { xlog_warn("SM_NOTIFY from %s while not monitoring any hosts",@@ -94,11 +102,6 @@ sm_notify_1_svc(struct stat_chge *argp, struct svc_req *rqstp)return ((void *) &result); } -if (!statd_present_address (sap, ip_addr,sizeof (ip_addr))) { -xlog_warn ("Unrecognized sender address" ); -return ((void *) &result); - } -/* okir change: statd doesn't remove the remote host from its * internal monitor list when receiving an SM_NOTIFY call from * it. Lockd will want to continue monitoring the remote host utils/statd/statd.man +16
-4@@ -346,7 +346,8 @@ points due to inactivity. .SS High-availability callouts .B rpc.statd can exec a special callout program during processing of -successful SM_MON, SM_UNMON, and SM_UNMON_ALL requests. +successful SM_MON, SM_UNMON, and SM_UNMON_ALL requests, +or when it receives SM_NOTIFY. Such a program may be used in High Availability NFS (HA-NFS) environments to track lock state that may need to be migrated after a system reboot.@@ -357,15 +358,26 @@ option. The program is run with 3 arguments: The first is either .B add-client -or .B del-client +or +.B sm-notify depending on the reason for the callout. The second is the .I mon_name of the monitored peer. The third is the -.I caller_name -of the requesting lock manager. +.I caller_name +of the requesting lock manager for +.B add-client +or +.B del-client +, otherwise it is +.I IP_address +of the caller sending SM_NOTIFY. +The forth is the +.I state_value +in the SM_NOTIFY request. + .SS IPv6 and TI-RPC support TI-RPC is a pre-requisite for supporting NFS on IPv6. If TI-RPC support is built into