summaryrefslogtreecommitdiff
path: root/ctdb/tests/scripts/integration_local_daemons.bash
blob: 981a94b2982b2026b64f6ec9124a3cac40b4ef48 (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
# Hey Emacs, this is a -*- shell-script -*- !!!  :-)

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
}