[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