ctdb-tests: Add debug_locks.sh tests for mutexes
authorMartin Schwenke <martin@meltin.net>
Wed, 6 Jan 2021 10:38:31 +0000 (21:38 +1100)
committerAmitay Isaacs <amitay@samba.org>
Fri, 28 May 2021 07:34:23 +0000 (07:34 +0000)
Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
Autobuild-User(master): Amitay Isaacs <amitay@samba.org>
Autobuild-Date(master): Fri May 28 07:34:23 UTC 2021 on sn-devel-184

ctdb/tests/UNIT/eventscripts/debug_locks.sh.021.sh [new file with mode: 0755]
ctdb/tests/UNIT/eventscripts/debug_locks.sh.022.sh [new file with mode: 0755]
ctdb/tests/UNIT/eventscripts/debug_locks.sh.023.sh [new file with mode: 0755]
ctdb/tests/UNIT/eventscripts/debug_locks.sh.024.sh [new file with mode: 0755]
ctdb/tests/UNIT/eventscripts/debug_locks.sh.025.sh [new file with mode: 0755]
ctdb/tests/UNIT/eventscripts/debug_locks.sh.026.sh [new file with mode: 0755]
ctdb/tests/UNIT/eventscripts/debug_locks.sh.027.sh [new file with mode: 0755]
ctdb/tests/UNIT/eventscripts/debug_locks.sh.028.sh [new file with mode: 0755]
ctdb/tests/UNIT/eventscripts/scripts/debug_locks.sh
ctdb/tests/UNIT/eventscripts/stubs/tdb_mutex_check [new file with mode: 0755]

diff --git a/ctdb/tests/UNIT/eventscripts/debug_locks.sh.021.sh b/ctdb/tests/UNIT/eventscripts/debug_locks.sh.021.sh
new file mode 100755 (executable)
index 0000000..f324803
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "DB S+ DB MUTEX"
+
+setup
+
+do_test "DB" "S+" "DB" "MUTEX"
diff --git a/ctdb/tests/UNIT/eventscripts/debug_locks.sh.022.sh b/ctdb/tests/UNIT/eventscripts/debug_locks.sh.022.sh
new file mode 100755 (executable)
index 0000000..0e70771
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "DB D. DB MUTEX"
+
+setup
+
+do_test "DB" "D." "DB" "MUTEX"
diff --git a/ctdb/tests/UNIT/eventscripts/debug_locks.sh.023.sh b/ctdb/tests/UNIT/eventscripts/debug_locks.sh.023.sh
new file mode 100755 (executable)
index 0000000..de84c81
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "RECORD S+ DB MUTEX"
+
+setup
+
+do_test "RECORD" "S+" "DB" "MUTEX"
diff --git a/ctdb/tests/UNIT/eventscripts/debug_locks.sh.024.sh b/ctdb/tests/UNIT/eventscripts/debug_locks.sh.024.sh
new file mode 100755 (executable)
index 0000000..30ad6bd
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "RECORD D. DB MUTEX"
+
+setup
+
+do_test "RECORD" "D." "DB" "MUTEX"
diff --git a/ctdb/tests/UNIT/eventscripts/debug_locks.sh.025.sh b/ctdb/tests/UNIT/eventscripts/debug_locks.sh.025.sh
new file mode 100755 (executable)
index 0000000..f259db5
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "DB S+ RECORD MUTEX"
+
+setup
+
+do_test "DB" "S+" "RECORD" "MUTEX"
diff --git a/ctdb/tests/UNIT/eventscripts/debug_locks.sh.026.sh b/ctdb/tests/UNIT/eventscripts/debug_locks.sh.026.sh
new file mode 100755 (executable)
index 0000000..9e057af
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "DB D. RECORD MUTEX"
+
+setup
+
+do_test "DB" "D." "RECORD" "MUTEX"
diff --git a/ctdb/tests/UNIT/eventscripts/debug_locks.sh.027.sh b/ctdb/tests/UNIT/eventscripts/debug_locks.sh.027.sh
new file mode 100755 (executable)
index 0000000..d70e7b7
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "RECORD S+ RECORD MUTEX"
+
+setup
+
+do_test "RECORD" "S+" "RECORD" "MUTEX"
diff --git a/ctdb/tests/UNIT/eventscripts/debug_locks.sh.028.sh b/ctdb/tests/UNIT/eventscripts/debug_locks.sh.028.sh
new file mode 100755 (executable)
index 0000000..7199035
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "RECORD D. RECORD MUTEX"
+
+setup
+
+do_test "RECORD" "D." "RECORD" "MUTEX"
index 162dc21b2ac74a70dc21b8fbbff70fe3f08414fb..c303c60f777f05a5e5e94fbbb94ec2a89550793f 100644 (file)
@@ -52,6 +52,7 @@ do_test ()
        _holder_scope="$1"
        _holder_state="$2"
        _helper_scope="$3"
+       _lock_type="${4:-FCNTL}"
 
        _lock_helper_pid="4132032"
 
@@ -98,16 +99,24 @@ EOF
 
        _holder_lock=""
        if [ "$_holder_scope" = "DB" ] ; then
-               _holder_lock=$(cat <<EOF
+               if [  "$_lock_type" = "FCNTL" ] ; then
+                       _holder_lock=$(cat <<EOF
 POSIX  ADVISORY  WRITE 4131931 ${_locking_tdb_id} 168 EOF
 EOF
-                 )
-       elif [ "$_holder_scope" = "RECORD" ] ; then
+                                   )
+               elif [ "$_lock_type" = "MUTEX" ] ; then
+                       _holder_lock=$(cat <<EOF
+POSIX  ADVISORY  WRITE 4131931 ${_locking_tdb_id} 400172 EOF
+EOF
+                                   )
+               fi
+       elif [ "$_holder_scope" = "RECORD" ] && \
+            [ "$_lock_type" = "FCNTL" ] ; then
                _holder_lock=$(cat <<EOF
 POSIX  ADVISORY  WRITE 2345678 ${_locking_tdb_id} 112736 112736
 POSIX  ADVISORY  WRITE 4131931 ${_locking_tdb_id} 225472 225472
 EOF
-                 )
+                           )
        fi
 
        _t=$(cat <<EOF
@@ -117,12 +126,14 @@ EOF
          )
 
        _helper_lock=""
-       if [ "$_helper_scope" = "DB" ] ; then
+       if [ "$_helper_scope" = "DB" ] && \
+          [ "$_lock_type" = "FCNTL" ] ; then
                _helper_lock=$(cat <<EOF
 -> POSIX  ADVISORY  WRITE ${_lock_helper_pid} ${_locking_tdb_id} 168 170
 EOF
                            )
-       elif [ "$_helper_scope" = "RECORD" ] ; then
+       elif [ "$_helper_scope" = "RECORD" ]  && \
+            [ "$_lock_type" = "FCNTL" ] ; then
                _helper_lock=$(cat <<EOF
 -> POSIX  ADVISORY  WRITE ${_lock_helper_pid} ${_locking_tdb_id} 112736 112736
 EOF
@@ -140,7 +151,8 @@ $_t
 POSIX  ADVISORY  READ 4131931 ${_locking_tdb_id} 4 4
 EOF
                  )
-       elif [ "$_holder_scope" = "RECORD" ] ; then
+       elif [ "$_holder_scope" = "RECORD" ]  && \
+            [ "$_lock_type" = "FCNTL" ] ; then
                _t=$(cat <<EOF
 $_t
 POSIX  ADVISORY  READ 2345678 ${_locking_tdb_id} 4 4
@@ -163,6 +175,20 @@ EOF
        FAKE_PROC_LOCKS=$(echo "$_t" | awk '{ printf "%d: %s\n", NR, $0 }')
        export FAKE_PROC_LOCKS
 
+       _holder_mutex_lock=""
+       if [ "$_lock_type" = "MUTEX" ] ; then
+               if [ "$_holder_scope" = "RECORD" ] ; then
+                       _holder_mutex_lock=$(cat <<EOF
+2345678 28142
+4131931 56284
+EOF
+                                         )
+               fi
+       fi
+
+       FAKE_TDB_MUTEX_CHECK="$_holder_mutex_lock"
+       export FAKE_TDB_MUTEX_CHECK
+
        _out=''
        _nl='
 '
@@ -179,14 +205,25 @@ EOF
        # fake lock info
        _pids=''
        _out="${_out:+${_out}${_nl}}Lock holders:"
-       while read -r _ _ _  _pid _ _start _end ; do
-               _comm="smbd"
-               _out="${_out}${_nl}"
-               _out="${_out}${_pid} smbd ${_db} ${_start} ${_end}"
-               _pids="${_pids:+${_pids} }${_pid}"
-       done <<EOF
+       if [ -n "$_holder_mutex_lock" ] ; then
+               while read -r _pid _chain ; do
+                       _comm="smbd"
+                       _out="${_out}${_nl}"
+                       _out="${_out}${_pid} smbd ${_db} ${_chain}"
+                       _pids="${_pids:+${_pids} }${_pid}"
+               done <<EOF
+$_holder_mutex_lock
+EOF
+       else
+               while read -r _ _ _  _pid _ _start _end ; do
+                       _comm="smbd"
+                       _out="${_out}${_nl}"
+                       _out="${_out}${_pid} smbd ${_db} ${_start} ${_end}"
+                       _pids="${_pids:+${_pids} }${_pid}"
+               done <<EOF
 $_holder_lock
 EOF
+       fi
 
        # fake stack traces
        for _pid in $_pids ; do
@@ -213,6 +250,6 @@ EOF
                    "$_lock_helper_pid" \
                    "$_helper_scope" \
                    "$_path" \
-                   "fcntl"
+                   "$_lock_type"
 
 }
diff --git a/ctdb/tests/UNIT/eventscripts/stubs/tdb_mutex_check b/ctdb/tests/UNIT/eventscripts/stubs/tdb_mutex_check
new file mode 100755 (executable)
index 0000000..16c229c
--- /dev/null
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+if [ -z "$FAKE_TDB_MUTEX_CHECK" ] ; then
+       exit
+fi
+
+echo "$FAKE_TDB_MUTEX_CHECK" |
+while read -r pid chain ; do
+       echo "[${chain}] pid=${pid}"
+done