[DRBD-cvs] testing by lars; missing parts of the CTH_bash
drbd-user@lists.linbit.com
drbd-user@lists.linbit.com
Thu, 27 May 2004 19:47:03 +0200 (CEST)
DRBD CVS committal
Author : lars
Project : drbd
Module : testing
Dir : drbd/testing/CTH
Modified Files:
Tag: rel-0_7-branch
CTH_bash.conf CTH_bash.helpers CTH_bash.sh README functions.sh
Log Message:
missing parts of the CTH_bash
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/testing/CTH/Attic/CTH_bash.conf,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -3 -r1.1.2.1 -r1.1.2.2
--- CTH_bash.conf 27 May 2004 12:44:18 -0000 1.1.2.1
+++ CTH_bash.conf 27 May 2004 17:46:58 -0000 1.1.2.2
@@ -1,5 +1,5 @@
#!/bin/bash -nv
-# $Id: CTH_bash.conf,v 1.1.2.1 2004/05/27 12:44:18 lars Exp $
+# $Id: CTH_bash.conf,v 1.1.2.2 2004/05/27 17:46:58 lars Exp $
# NOTE that there is no plausibility check going on
# in this bash version of the CTH.
@@ -33,18 +33,17 @@
#
# name minor port left left_real_dev right right_real_dev link
new_drbd r0 0 7788 Node_1 /dev/ubd/b Node_2 /dev/ubd/b Link_1
-new_drbd r1 1 7789 Node_1 /dev/ubd/c Node_2 /dev/ubd/c Link_1
+new_drbd r1 1 7789 Node_2 /dev/ubd/c Node_1 /dev/ubd/c Link_1
+
+# define what file systems you want to have
+# better be sure you have at most one fs per drbd :-)
+#
+# CTH currently knows about ext2, ext3, resierfs, xfs
+# DRBD type mountpoint
+FS_1="DRBD=Drbd_1 TYPE=reiserfs MNT=/mnt/ha0"
+FS_2="DRBD=Drbd_2 TYPE=ext3 MNT=/mnt/ha0"
+
+# test resources
+RS_1=wbtest
+RS_2=wbtest
-# verify
-Dump()
-{
- echo "$1=("
- eval "printf '\t%s\n' \"\${$1[@]}\""
- echo ")"
-}
-Dump_All()
-{
- for n in ${!Node_*} ${!Link_*} ${!Disk_*} ${!Drbd_*} ; do
- Dump $n
- done
-}
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/testing/CTH/Attic/CTH_bash.helpers,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -3 -r1.1.2.1 -r1.1.2.2
--- CTH_bash.helpers 27 May 2004 12:44:18 -0000 1.1.2.1
+++ CTH_bash.helpers 27 May 2004 17:46:58 -0000 1.1.2.2
@@ -1,5 +1,5 @@
#!/bin/bash -nv
-# $Id: CTH_bash.helpers,v 1.1.2.1 2004/05/27 12:44:18 lars Exp $
+# $Id: CTH_bash.helpers,v 1.1.2.2 2004/05/27 17:46:58 lars Exp $
#
# define some implicit magic
# so the definition of the DRBDs will be easier
@@ -58,7 +58,8 @@
new_drbd()
{
local name minor port left left_real_dev right right_real_dev link
- local left_ip left_disk right_ip right_disk conf
+ local left_ip left_hostname left_disk
+ local right_ip right_hostname right_disk conf
name=$1
minor=$2
port=$3
@@ -72,6 +73,8 @@
# but since thats the IP by definition, this works.
left_ip=$(ip_of $link $left) || return
right_ip=$(ip_of $link $right) || return
+ node_to_env $left ; left_hostname=$hostname
+ node_to_env $right ; right_hostname=$hostname
let ID_DISK++
left_disk="Disk_$ID_DISK"
@@ -85,13 +88,13 @@
resource $name {
protocol C;
incon-degr-cmd "reboot -f";
- on uml-1 {
+ on $left_hostname {
device /dev/nb$minor;
disk /dev/mapper/$name;
address $left_ip:$port;
meta-disk internal;
}
- on uml-2 {
+ on $right_hostname {
device /dev/nb$minor;
disk /dev/mapper/$name;
address $right_ip:$port;
@@ -142,6 +145,15 @@
on ${!n}: generic_do_crash
}
+wait_for_boot()
+{
+ local n=$1
+ node_to_env $n
+ on ${!n}: generic_do_crash
+ ip=$admin_ip
+ generic_wait_for_boot
+}
+
fail_Link()
{
local l=$1
@@ -190,5 +202,96 @@
echo "$conf" | on ${!left}: drbd_append_config NAME=$name RES=$name LO_DEV=$left_real_dev
echo "$conf" | on ${!right}: drbd_append_config NAME=$name RES=$name LO_DEV=$right_real_dev
done
+
+ # wait for connect and initial sync (which should be skipped automatically)
+ for d in ${!Drbd_*} ; do
+ drbd_to_env $d
+ on ${!left}: drbd_wait_sync minor=$minor
+ # on ${!right}: drbd_wait_sync minor=$minor
+ done
+
+ # make file systems
+ for fs in ${!FS_*} ; do
+ eval ${!fs}
+ drbd_to_env $DRBD
+ n=$left
+ on ${!n}: drbdadm_pri name=$name
+ cat <<-___
+ #
+ # on $n: mkfs.$TYPE /dev/nb$minor
+ #
+ ___
+ on ${!n}: mkfs_$TYPE DEV=/dev/nb$minor
+ on ${!n}: drbdadm_sec name=$name
+ done
+
initial=false
+}
+
+resource_Start_on_Node()
+{
+ local rs=$1 nn=$2
+ i=${rs#RS_}
+ which=${!rs}; [[ $which == *CN=* ]] && cn=${which#*CN=} || cn=''
+ fs=FS_$i; CN=""
+ eval ${!fs}
+
+ [[ -z $CN && -z $cn ]] || exit 101
+ [[ $nn == Node_* ]] || exit 102
+
+ drbd_to_env $DRBD
+ on ${!nn}: drbdadm_pri name=$name
+ on ${!nn}: do_mount DEV=/dev/nb$minor TYPE=$TYPE MNT=$MNT
+
+ # START IN BACKGROUND
+ on ${!nn}: ${which}_start MNT=$MNT &
+
+ # rememeber current node
+ eval "$fs=\"\$$fs CN=$nn\""
+ eval "$rs=\"\$$rs CN=$nn\""
+
+ echo "$rs now RUNNING on $nn"
+}
+
+resource_Stop()
+{
+ local rs=$1
+ i=${rs#RS_}
+ which=${!rs}; [[ $which == *CN=* ]] && cn=${which#*CN=} || cn=''
+ fs=FS_$i; CN=""
+ eval "${!fs}"
+
+ [[ -z $CN || -z $cn ]] && exit 101
+ [[ $CN == $cn ]] || exit 102
+ [[ $cn == Node_* ]] || exit 103
+
+ drbd_to_env $DRBD
+ on ${!cn}: generic_test_stop MNT=$MNT
+ on ${!cn}: do_umount MNT=$MNT
+ on ${!cn}: drbdadm_sec name=$name
+ eval "$fs=\${$fs% CN=*}" # forget current node
+ eval "$rs=\${$rs% CN=*}" # forget current node
+}
+
+resource_relocate_to_Node()
+{
+ local rs=$1 nn=$2
+ if [[ ${!rs} == *CN=* ]] ; then
+ resource_Stop $rs
+ fi
+ resource_Start_on_Node $rs $nn
+}
+
+# for verification
+Dump()
+{
+ echo "$1=("
+ eval "printf '\t%s\n' \"\${$1[@]}\""
+ echo ")"
+}
+Dump_All()
+{
+ for n in ${!Node_*} ${!Link_*} ${!Disk_*} ${!Drbd_*} ; do
+ Dump $n
+ done
}
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/testing/CTH/Attic/CTH_bash.sh,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -3 -r1.1.2.1 -r1.1.2.2
--- CTH_bash.sh 27 May 2004 12:44:18 -0000 1.1.2.1
+++ CTH_bash.sh 27 May 2004 17:46:58 -0000 1.1.2.2
@@ -1,5 +1,5 @@
#!/usr/bin/env - /bin/bash
-# $Id: CTH_bash.sh,v 1.1.2.1 2004/05/27 12:44:18 lars Exp $
+# $Id: CTH_bash.sh,v 1.1.2.2 2004/05/27 17:46:58 lars Exp $
# example for scripting failures
#
@@ -25,27 +25,36 @@
boot_and_setup_nodes
+cat <<___
+#
+# ok, all up and configured, and fresh file systems created...
#
-# ok, all up and configured.
# now we can
#
# start something on some node:
-# on $Node_#: drbdadm_pri name=r#
-# on $Node_#: mkfs_reiserfs DEV=/dev/nb#
-# on $Node_#: do_mount DEV=/dev/nb# TYPE=resiserfs MNT=/mnt/ha#
-# on $Node_#: wbtest_start MNT=/mnt/ha#
+# resource_Start_on_Node RS_1 Node_1
+#
+# relocate it:
+# resource_relocate_to_Node RS_1 Node_2
#
# stop it again:
-# on $Node_#: generic_test_stop MNT=/mnt/ha#
-# on $Node_#: do_umount MNT=/mnt/ha#
-# on $Node_#: drbdadm_sec name=r#
+# resource_Stop RS_1
#
-# sleep $for_a_while
+# sleep \$for_a_while # ;-)
#
# fail and heal hardware:
-# crash_Node Node_#
+# crash_Node Node_#
+# wait_for_boot Node_#
# fail_Link Link_#
# heal_Link Link_#
# fail_Disk Disk_#
# heal_Disk Disk_#
-#
+#
+___
+
+# for example:
+# resource_Start_on_Node RS_1 Node_1
+# sleep 30
+# resource_relocate_to_Node RS_1 Node_2
+# sleep 30
+# resource_Stop RS_1
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/testing/CTH/Attic/README,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -3 -r1.1.2.1 -r1.1.2.2
--- README 27 May 2004 12:44:18 -0000 1.1.2.1
+++ README 27 May 2004 17:46:58 -0000 1.1.2.2
@@ -9,12 +9,15 @@
Because it is used to test DRBDs behaviour, some DRBD specifics are built in.
The CTH expects
- * to to run on one controlling box
+ * to run on one controlling box
* which has exclusive access to at least two test nodes via ssh
* that the ssh login will not ask for a password, but just let me through
* the test nodes run linux kernel 2.6 (may work with 2.4, too)
* the test nodes to have "dm" available
* the test nodes to have "iptables" available
+ * the test nodes to '''not''' start heartbeat or drbd
+ from their init scripts, or simulating a node failure
+ won't work as intended
Test nodes may well be UML sessions.
@@ -38,6 +41,7 @@
LGE_CTH*::
The perl module. Only adventurouse people should have a look at the internals here.
+ You should be at least perl "journeyman", otherwise please stay out.
functions.sh::
The core bash scripts, which are used and triggered by the CTH.
@@ -74,5 +78,6 @@
In case you care for an explicit '''license statement''':
This is and needs to be GPL.
+# $Id: README,v 1.1.2.2 2004/05/27 17:46:58 lars Exp $
+# if you don't know wiki-moin.vim: http://linuxha.trick.ca/WikiTricks
# vim: set ft=wiki-moin :
-# $Id: README,v 1.1.2.1 2004/05/27 12:44:18 lars Exp $
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/testing/CTH/Attic/functions.sh,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -3 -r1.1.2.1 -r1.1.2.2
--- functions.sh 27 May 2004 12:44:18 -0000 1.1.2.1
+++ functions.sh 27 May 2004 17:46:58 -0000 1.1.2.2
@@ -1,6 +1,6 @@
#!/bin/bash
# vim: set foldmethod=marker nofoldenable :
-# $Id: functions.sh,v 1.1.2.1 2004/05/27 12:44:18 lars Exp $
+# $Id: functions.sh,v 1.1.2.2 2004/05/27 17:46:58 lars Exp $
#DEBUG="-vx"
#DEBUG="-v"
@@ -315,35 +315,37 @@
fi
}
-#
-# FileSystem
-########################
-
drbdadm_pri()
{
: ${name:?unknown resource name}
drbdadm primary $name
+ echo "$name now Primary on $HOSTNAME"
}
drbdadm_sec()
{
: ${name:?unknown resource name}
drbdadm secondary $name
+ echo "$name now Secondary on $HOSTNAME"
}
+#
+# FileSystem
+########################
+
do_mount()
{
: ${MNT:?unknown mount point}
: ${TYPE:?unknown fs type}
: ${DEV:?which device are you talkin about}
- mount -t $TYPE $DEV $MNT
+ mount -v -t $TYPE $DEV $MNT
}
do_umount()
{
: ${MNT:?unknown mount point}
while grep -q " $MNT " /proc/mounts ; do
- umount $MNT/ && break
+ umount -v $MNT/ && break
fuser -vmk $MNT/ || true
sleep 1
done