]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
ctdb-scripts: Move database handling to its own event script
authorMartin Schwenke <mschwenke@ddn.com>
Mon, 8 Apr 2024 01:15:24 +0000 (11:15 +1000)
committerMartin Schwenke <martins@samba.org>
Thu, 29 Aug 2024 22:48:33 +0000 (22:48 +0000)
Signed-off-by: Martin Schwenke <mschwenke@ddn.com>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
16 files changed:
ctdb/config/events/legacy/00.ctdb.script
ctdb/config/events/legacy/95.database.script [new file with mode: 0755]
ctdb/doc/ctdb-script.options.5.xml
ctdb/doc/ctdb.1.xml
ctdb/doc/examples/ctdb.spec.in
ctdb/tests/UNIT/eventscripts/95.database.init.001.sh [moved from ctdb/tests/UNIT/eventscripts/00.ctdb.init.001.sh with 100% similarity]
ctdb/tests/UNIT/eventscripts/95.database.init.002.sh [moved from ctdb/tests/UNIT/eventscripts/00.ctdb.init.002.sh with 100% similarity]
ctdb/tests/UNIT/eventscripts/95.database.init.003.sh [moved from ctdb/tests/UNIT/eventscripts/00.ctdb.init.003.sh with 100% similarity]
ctdb/tests/UNIT/eventscripts/95.database.init.004.sh [moved from ctdb/tests/UNIT/eventscripts/00.ctdb.init.004.sh with 100% similarity]
ctdb/tests/UNIT/eventscripts/95.database.init.005.sh [moved from ctdb/tests/UNIT/eventscripts/00.ctdb.init.005.sh with 100% similarity]
ctdb/tests/UNIT/eventscripts/95.database.init.006.sh [moved from ctdb/tests/UNIT/eventscripts/00.ctdb.init.006.sh with 100% similarity]
ctdb/tests/UNIT/eventscripts/95.database.init.007.sh [moved from ctdb/tests/UNIT/eventscripts/00.ctdb.init.007.sh with 100% similarity]
ctdb/tests/UNIT/eventscripts/95.database.init.008.sh [moved from ctdb/tests/UNIT/eventscripts/00.ctdb.init.008.sh with 100% similarity]
ctdb/tests/UNIT/eventscripts/95.database.init.009.sh [moved from ctdb/tests/UNIT/eventscripts/00.ctdb.init.009.sh with 100% similarity]
ctdb/tests/UNIT/eventscripts/scripts/95.database.sh [moved from ctdb/tests/UNIT/eventscripts/scripts/00.ctdb.sh with 100% similarity]
ctdb/wscript

index d287e7ad8d79ab49f54812f3f4116b1eb5ea5494..0c73f80c6aa07b0138d2258063d24c37b9e316c4 100755 (executable)
@@ -12,113 +12,14 @@ load_script_options
 
 ############################################################
 
-# type is commonly supported and more portable than which(1)
-# shellcheck disable=SC2039
-select_tdb_checker()
-{
-       # Find the best TDB consistency check available.
-       use_tdb_tool_check=false
-       type tdbtool >/dev/null 2>&1 && found_tdbtool=true
-       type tdbdump >/dev/null 2>&1 && found_tdbdump=true
-
-       if $found_tdbtool && echo "help" | tdbtool | grep -q check; then
-               use_tdb_tool_check=true
-       elif $found_tdbtool && $found_tdbdump; then
-               cat <<EOF
-WARNING: The installed 'tdbtool' does not offer the 'check' subcommand.
- Using 'tdbdump' for database checks.
- Consider updating 'tdbtool' for better checks!
-EOF
-       elif $found_tdbdump; then
-               cat <<EOF
-WARNING: 'tdbtool' is not available.
- Using 'tdbdump' to check the databases.
- Consider installing a recent 'tdbtool' for better checks!
-EOF
-       else
-               cat <<EOF
-WARNING: Cannot check databases since neither
- 'tdbdump' nor 'tdbtool check' is available.
- Consider installing tdbtool or at least tdbdump!
-EOF
-               return 1
-       fi
-}
-
-check_tdb()
-{
-       _db="$1"
-
-       if $use_tdb_tool_check; then
-               # tdbtool always exits with 0  :-(
-               if timeout 10 tdbtool "$_db" check 2>/dev/null |
-                       grep -q "Database integrity is OK"; then
-                       return 0
-               else
-                       return 1
-               fi
-       else
-               timeout 10 tdbdump "$_db" >/dev/null 2>/dev/null
-               return $?
-       fi
-}
-
-check_persistent_databases()
-{
-       _dir="${CTDB_DBDIR_PERSISTENT:-${CTDB_VARDIR}/persistent}"
-       [ -d "$_dir" ] || return 0
-
-       for _db in "$_dir/"*.tdb.*[0-9]; do
-               [ -r "$_db" ] || continue
-               check_tdb "$_db" ||
-                       die "Persistent database $_db is corrupted! CTDB will not start."
-       done
-}
-
-check_non_persistent_databases()
-{
-       _dir="${CTDB_DBDIR:-${CTDB_VARDIR}}"
-       [ -d "$_dir" ] || return 0
-
-       for _db in "${_dir}/"*.tdb.*[0-9]; do
-               [ -r "$_db" ] || continue
-               check_tdb "$_db" || {
-                       _backup="${_db}.$(date +'%Y%m%d.%H%M%S').corrupt"
-                       cat <<EOF
-WARNING: database ${_db} is corrupted.
- Moving to backup ${_backup} for later analysis.
-EOF
-                       mv "$_db" "$_backup"
-
-                       # Now remove excess backups
-                       _max="${CTDB_MAX_CORRUPT_DB_BACKUPS:-10}"
-                       _bdb="${_db##*/}" # basename
-                       find "$_dir" -name "${_bdb}.*.corrupt" |
-                               sort -r |
-                               tail -n +$((_max + 1)) |
-                               xargs rm -f
-               }
-       done
-}
-
-############################################################
-
 ctdb_check_args "$@"
 
 case "$1" in
 init)
-       # make sure we have a blank state directory for the scripts to work with
+       # Initialise script directory
        rm -rf "$CTDB_SCRIPT_VARDIR"
        mkdir -p "$CTDB_SCRIPT_VARDIR" ||
                die "mkdir -p ${CTDB_SCRIPT_VARDIR} - failed - $?" $?
-
-       # Load/cache database options from configuration file
-       ctdb_get_db_options
-
-       if select_tdb_checker; then
-               check_persistent_databases || exit $?
-               check_non_persistent_databases
-       fi
        ;;
 esac
 
diff --git a/ctdb/config/events/legacy/95.database.script b/ctdb/config/events/legacy/95.database.script
new file mode 100755 (executable)
index 0000000..dab4125
--- /dev/null
@@ -0,0 +1,121 @@
+#!/bin/sh
+
+# Event script for ctdb-specific setup and other things that don't fit
+# elsewhere.
+
+[ -n "$CTDB_BASE" ] ||
+       CTDB_BASE=$(d=$(dirname "$0") && cd -P "$d" && dirname "$PWD")
+
+. "${CTDB_BASE}/functions"
+
+load_script_options
+
+############################################################
+
+# type is commonly supported and more portable than which(1)
+# shellcheck disable=SC2039
+select_tdb_checker()
+{
+       # Find the best TDB consistency check available.
+       use_tdb_tool_check=false
+       type tdbtool >/dev/null 2>&1 && found_tdbtool=true
+       type tdbdump >/dev/null 2>&1 && found_tdbdump=true
+
+       if $found_tdbtool && echo "help" | tdbtool | grep -q check; then
+               use_tdb_tool_check=true
+       elif $found_tdbtool && $found_tdbdump; then
+               cat <<EOF
+WARNING: The installed 'tdbtool' does not offer the 'check' subcommand.
+ Using 'tdbdump' for database checks.
+ Consider updating 'tdbtool' for better checks!
+EOF
+       elif $found_tdbdump; then
+               cat <<EOF
+WARNING: 'tdbtool' is not available.
+ Using 'tdbdump' to check the databases.
+ Consider installing a recent 'tdbtool' for better checks!
+EOF
+       else
+               cat <<EOF
+WARNING: Cannot check databases since neither
+ 'tdbdump' nor 'tdbtool check' is available.
+ Consider installing tdbtool or at least tdbdump!
+EOF
+               return 1
+       fi
+}
+
+check_tdb()
+{
+       _db="$1"
+
+       if $use_tdb_tool_check; then
+               # tdbtool always exits with 0  :-(
+               if timeout 10 tdbtool "$_db" check 2>/dev/null |
+                       grep -q "Database integrity is OK"; then
+                       return 0
+               else
+                       return 1
+               fi
+       else
+               timeout 10 tdbdump "$_db" >/dev/null 2>/dev/null
+               return $?
+       fi
+}
+
+check_persistent_databases()
+{
+       _dir="${CTDB_DBDIR_PERSISTENT:-${CTDB_VARDIR}/persistent}"
+       [ -d "$_dir" ] || return 0
+
+       for _db in "$_dir/"*.tdb.*[0-9]; do
+               [ -r "$_db" ] || continue
+               check_tdb "$_db" ||
+                       die "Persistent database $_db is corrupted! CTDB will not start."
+       done
+}
+
+check_non_persistent_databases()
+{
+       _dir="${CTDB_DBDIR:-${CTDB_VARDIR}}"
+       [ -d "$_dir" ] || return 0
+
+       for _db in "${_dir}/"*.tdb.*[0-9]; do
+               [ -r "$_db" ] || continue
+               check_tdb "$_db" || {
+                       _backup="${_db}.$(date +'%Y%m%d.%H%M%S').corrupt"
+                       cat <<EOF
+WARNING: database ${_db} is corrupted.
+ Moving to backup ${_backup} for later analysis.
+EOF
+                       mv "$_db" "$_backup"
+
+                       # Now remove excess backups
+                       _max="${CTDB_MAX_CORRUPT_DB_BACKUPS:-10}"
+                       _bdb="${_db##*/}" # basename
+                       find "$_dir" -name "${_bdb}.*.corrupt" |
+                               sort -r |
+                               tail -n +$((_max + 1)) |
+                               xargs rm -f
+               }
+       done
+}
+
+############################################################
+
+ctdb_check_args "$@"
+
+case "$1" in
+init)
+       # Load/cache database options from configuration file
+       ctdb_get_db_options
+
+       if select_tdb_checker; then
+               check_persistent_databases || exit $?
+               check_non_persistent_databases
+       fi
+       ;;
+esac
+
+# all OK
+exit 0
index 4f473b8b970a005f80093301282e281075c493b9..1fcf9c4722813d03bbd565f46eaf6f519faf8ea9 100644 (file)
@@ -996,7 +996,7 @@ CTDB_PER_IP_ROUTING_TABLE_ID_HIGH=9000
 
   <refsect1>
     <title>
-      DATABASE SETUP
+      DATABASE HANDLING
       </title>
 
       <para>
@@ -1004,7 +1004,7 @@ CTDB_PER_IP_ROUTING_TABLE_ID_HIGH=9000
       </para>
 
       <refsect2>
-       <title>00.ctdb</title>
+       <title>95.database</title>
 
        <variablelist>
 
index e97da35489a51a3991a2a84739b017cb08009fd4..12075b869584be0d091fcc309d13ec3c3e9874bf 100644 (file)
@@ -653,22 +653,23 @@ Interface[2]: Name:eth5 Link:up References:2 (active)
            </para>
            <screen>
 # ctdb event status legacy monitor
-00.ctdb              OK         0.014 Sat Dec 17 19:39:11 2016
-01.reclock           OK         0.013 Sat Dec 17 19:39:11 2016
-05.system            OK         0.029 Sat Dec 17 19:39:11 2016
-10.interface         OK         0.037 Sat Dec 17 19:39:11 2016
-11.natgw             OK         0.011 Sat Dec 17 19:39:11 2016
-11.routing           OK         0.007 Sat Dec 17 19:39:11 2016
-13.per_ip_routing    OK         0.007 Sat Dec 17 19:39:11 2016
-20.multipathd        OK         0.007 Sat Dec 17 19:39:11 2016
-31.clamd             OK         0.007 Sat Dec 17 19:39:11 2016
-40.vsftpd            OK         0.013 Sat Dec 17 19:39:11 2016
-41.httpd             OK         0.018 Sat Dec 17 19:39:11 2016
-49.winbind           OK         0.023 Sat Dec 17 19:39:11 2016
-50.samba             OK         0.100 Sat Dec 17 19:39:12 2016
-60.nfs               OK         0.376 Sat Dec 17 19:39:12 2016
-70.iscsi             OK         0.009 Sat Dec 17 19:39:12 2016
-91.lvs               OK         0.007 Sat Dec 17 19:39:12 2016
+00.ctdb              OK         0.014 Sat Apr 15 19:39:11 2024
+01.reclock           OK         0.013 Sat Apr 15 19:39:11 2024
+05.system            OK         0.029 Sat Apr 15 19:39:11 2024
+10.interface         OK         0.037 Sat Apr 15 19:39:11 2024
+11.natgw             OK         0.011 Sat Apr 15 19:39:11 2024
+11.routing           OK         0.007 Sat Apr 15 19:39:11 2024
+13.per_ip_routing    OK         0.007 Sat Apr 15 19:39:11 2024
+20.multipathd        OK         0.007 Sat Apr 15 19:39:11 2024
+31.clamd             OK         0.007 Sat Apr 15 19:39:11 2024
+40.vsftpd            OK         0.013 Sat Apr 15 19:39:11 2024
+41.httpd             OK         0.018 Sat Apr 15 19:39:11 2024
+49.winbind           OK         0.023 Sat Apr 15 19:39:11 2024
+50.samba             OK         0.100 Sat Apr 15 19:39:12 2024
+60.nfs               OK         0.376 Sat Apr 15 19:39:12 2024
+70.iscsi             OK         0.009 Sat Apr 15 19:39:12 2024
+91.lvs               OK         0.007 Sat Apr 15 19:39:12 2024
+95.database          OK         0.009 Sat Apr 15 19:39:12 2024
            </screen>
 
            <para>
@@ -676,19 +677,19 @@ Interface[2]: Name:eth5 Link:up References:2 (active)
            </para>
            <screen>
 # ctdb event status legacy monitor
-00.ctdb              OK         0.011 Sat Dec 17 19:40:46 2016
-01.reclock           OK         0.010 Sat Dec 17 19:40:46 2016
-05.system            OK         0.030 Sat Dec 17 19:40:46 2016
-10.interface         OK         0.041 Sat Dec 17 19:40:46 2016
-11.natgw             OK         0.008 Sat Dec 17 19:40:46 2016
-11.routing           OK         0.007 Sat Dec 17 19:40:46 2016
-13.per_ip_routing    OK         0.007 Sat Dec 17 19:40:46 2016
-20.multipathd        OK         0.007 Sat Dec 17 19:40:46 2016
-31.clamd             OK         0.007 Sat Dec 17 19:40:46 2016
-40.vsftpd            OK         0.013 Sat Dec 17 19:40:46 2016
-41.httpd             OK         0.015 Sat Dec 17 19:40:46 2016
-49.winbind           OK         0.022 Sat Dec 17 19:40:46 2016
-50.samba             ERROR      0.077 Sat Dec 17 19:40:46 2016
+00.ctdb              OK         0.011 Sat Apr 15 19:40:46 2024
+01.reclock           OK         0.010 Sat Apr 15 19:40:46 2024
+05.system            OK         0.030 Sat Apr 15 19:40:46 2024
+10.interface         OK         0.041 Sat Apr 15 19:40:46 2024
+11.natgw             OK         0.008 Sat Apr 15 19:40:46 2024
+11.routing           OK         0.007 Sat Apr 15 19:40:46 2024
+13.per_ip_routing    OK         0.007 Sat Apr 15 19:40:46 2024
+20.multipathd        OK         0.007 Sat Apr 15 19:40:46 2024
+31.clamd             OK         0.007 Sat Apr 15 19:40:46 2024
+40.vsftpd            OK         0.013 Sat Apr 15 19:40:46 2024
+41.httpd             OK         0.015 Sat Apr 15 19:40:46 2024
+49.winbind           OK         0.022 Sat Apr 15 19:40:46 2024
+50.samba             ERROR      0.077 Sat Apr 15 19:40:46 2024
   OUTPUT: ERROR: samba tcp port 445 is not responding
            </screen>
          </listitem>
@@ -728,6 +729,7 @@ Interface[2]: Name:eth5 Link:up References:2 (active)
 * 60.nfs              
   70.iscsi            
   91.lvs              
+* 95.database         
 
 * 02.local            
            </screen>
index 467188d5b9f4a944809d5d35b57f9390e2634cbd..83c28b495594cd0fa852c0cd74bc4e9bcf7e6315 100644 (file)
@@ -151,6 +151,7 @@ if [ ! -L "$required_path" ] && [ ! -e "$required_path" ] ; then
                         01.reclock
                         05.system
                         10.interface
+                        95.database
                         "
        for t in $default_scripts ; do
                tgt="%{_datadir}/ctdb/events/legacy/${t}.script"
index 1a6bfb6d4fe56479165da86d52b3003f7ea391e0..34a7a212de1364678538097fc2037737c92ec08d 100644 (file)
@@ -863,6 +863,7 @@ def build(bld):
                                 '01.reclock',
                                 '05.system',
                                 '10.interface',
+                                '95.database',
                               ]
             for t in default_scripts:
                 tgt = os.path.join(bld.env.CTDB_DATADIR, fmt % (t))