summaryrefslogtreecommitdiffstats
path: root/ctdb/tests/scripts/integration_local_daemons.bash
blob: 643fc5ef8469270bd25dbb237aac95129b6861c7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# Hey Emacs, this is a -*- shell-script -*- !!!  :-)

hdir="$CTDB_SCRIPTS_HELPER_BINDIR"
export CTDB_EVENT_HELPER="${hdir}/ctdb-event"

if $CTDB_TESTS_ARE_INSTALLED ; then
	# Find it in $PATH
	helper="ctdb_local_daemons"
else
	helper="${CTDB_TEST_DIR}/local_daemons.sh"
fi

ctdb_local_daemons="${helper} ${CTDB_TEST_TMP_DIR}"

#######################################

setup_ctdb ()
{
	local no_event_scripts=false

	# All other options are passed through to local_daemons.sh setup
	case "$1" in
	--no-event-scripts) no_event_scripts=true ; shift ;;
	esac

	$ctdb_local_daemons setup "$@" \
		-n "$CTDB_TEST_LOCAL_DAEMONS" \
		${CTDB_USE_IPV6:+-6} \
		${CTDB_TEST_SWRAP_SO_PATH:+-S ${CTDB_TEST_SWRAP_SO_PATH}}
	# Burying the above in an if-statement condition reduces readability.
	# shellcheck disable=SC2181
	if [ $? -ne 0 ] ; then
		exit 1
	fi

	if $no_event_scripts ; then
		# Want CTDB_BASE expanded when executed under onnode
		# shellcheck disable=SC2016
		$ctdb_local_daemons onnode -q all \
				    'rm "${CTDB_BASE}/events/legacy/"*'
	fi

	if $CTDB_TEST_PRINT_LOGS_ON_ERROR ; then
		ctdb_test_exit_hook_add _print_logs_on_test_failure
	fi
}

ctdb_nodes_start ()
{
	local nodespec="${1:-all}"

	$ctdb_local_daemons start "$nodespec"
}

ctdb_nodes_stop ()
{
	local nodespec="${1:-all}"

	if $ctdb_local_daemons stop "$nodespec" ; then
		return 0
	fi

	# Failed, dump logs?
	if $CTDB_TEST_PRINT_LOGS_ON_ERROR ; then
		_print_logs
	fi

	# Next level up can log the error...
	return 1
}

onnode ()
{
	$ctdb_local_daemons onnode "$@"
}



_print_logs ()
{
	echo "*** LOG START --------------------"
	$ctdb_local_daemons print-log all | tail -n 500
	echo "*** LOG END   --------------------"
}

_print_logs_on_test_failure ()
{
	# This is called from ctdb_test_exit() where $status is available
	# shellcheck disable=SC2154
	if [ "$status" -eq 0 ] ; then
		return
	fi

	_print_logs
}