]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
ctdb-failover: Add sm-notify to statd_callout
authorPeter Schwenke <pschwenke@ddn.com>
Thu, 9 Oct 2025 01:48:28 +0000 (12:48 +1100)
committerMartin Schwenke <martins@samba.org>
Wed, 18 Feb 2026 12:29:16 +0000 (12:29 +0000)
sm-notify is required when an NFS client reboots.
rpc-statd on the client will send an sm-notify to
rpc-statd on the NFS sever.

Add a test case.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=15938

Signed-off-by: Peter Schwenke <pschwenke@ddn.com>
Reviewed-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Anoop C S <anoopcs@samba.org>
Autobuild-User(master): Martin Schwenke <martins@samba.org>
Autobuild-Date(master): Wed Feb 18 12:29:16 UTC 2026 on atb-devel-224

ctdb/failover/statd_callout.c
ctdb/tests/UNIT/eventscripts/scripts/statd-callout.sh
ctdb/tests/UNIT/eventscripts/statd-callout.050.sh [new file with mode: 0755]
ctdb/tests/UNIT/eventscripts/statd-callout.150.sh [new file with mode: 0755]
ctdb/tests/UNIT/eventscripts/statd-callout.250.sh [new file with mode: 0755]

index 8064432b21f4d52b4a519d5407f6d5bb98693118..4111d67510093dc2b6a663cd9226e76ab19f9cff 100644 (file)
@@ -353,10 +353,27 @@ static void del_client_shared_dir(const char *cip)
 
 static void usage(void)
 {
-       printf("usage: %s: { add-client | del-client } <client-ip>\n", progname);
+       printf("usage: %s { add-client | del-client } <client-ip>\n", progname);
+       printf("       %s sm-notify mon_name ip_addr state\n", progname);
        exit(1);
 }
 
+/**
+ * @brief To be used as the statd ha-callout program
+ *
+ * Examples
+ *         progname add-client 192.168.10.94 nsds2
+ *         progname del-client 192.168.10.94 nsds2
+ *         progname sm-notify sitar1 192.168.10.94 127
+ *
+ * @param[in] event     One of add-client, del-client, sm-notify
+ * @param[in] mon_name  The client being monitored.  For add-client, del-client
+ *                      this will be the IP address. For sm-notify it will
+ *                      be the hostname
+ * @param[in] other     We don't actually use this.  For add-client and
+ *                      del-client it will be NFS server hostname.
+ *                     For sm-notify, it will be the client's state number.
+ */
 int main(int argc, const char *argv[])
 {
        const char *event = NULL;
@@ -394,6 +411,8 @@ int main(int argc, const char *argv[])
                case CTDB_SC_MODE_NONE:
                        break;
                }
+       } else if (strcmp(event, "sm-notify") == 0) {
+               exit(0);
        } else {
                usage();
        }
index ff8333c16db3e57ba53d3da0cead0e582d1c9060..f34248b2f6ce59779bfb3e12c80c10a8ca0ccdd5 100644 (file)
@@ -204,6 +204,10 @@ EOF
                                rm -f "${state_dir}/mon@${_sip}@${1}"
                        done
                ;;
+       sm-notify)
+               cmd="${CTDB_SCRIPTS_HELPER_BINDIR}/statd_callout"
+               unit_test "$cmd" "$event" "$@"
+               ;;
        takeip)
                cmd="${CTDB_SCRIPTS_TOOLS_HELPER_DIR}/statd_callout_helper"
                script_test "$cmd" "$event" "$@"
diff --git a/ctdb/tests/UNIT/eventscripts/statd-callout.050.sh b/ctdb/tests/UNIT/eventscripts/statd-callout.050.sh
new file mode 100755 (executable)
index 0000000..54232a4
--- /dev/null
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "confirm sm-notify is ignored"
+
+setup
+
+ok_null
+simple_test_event "startup"
+simple_test_event "sm-notify" "192.168.10.104" "client10" "9999"
diff --git a/ctdb/tests/UNIT/eventscripts/statd-callout.150.sh b/ctdb/tests/UNIT/eventscripts/statd-callout.150.sh
new file mode 100755 (executable)
index 0000000..35c9a34
--- /dev/null
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+CTDB_STATD_CALLOUT_SHARED_STORAGE="shared_dir"
+
+_dir=$(dirname "$0")
+. "${_dir}/statd-callout.050.sh"
diff --git a/ctdb/tests/UNIT/eventscripts/statd-callout.250.sh b/ctdb/tests/UNIT/eventscripts/statd-callout.250.sh
new file mode 100755 (executable)
index 0000000..35c9a34
--- /dev/null
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+CTDB_STATD_CALLOUT_SHARED_STORAGE="shared_dir"
+
+_dir=$(dirname "$0")
+. "${_dir}/statd-callout.050.sh"