1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-06 13:18:07 +03:00
samba-mirror/ctdb/tests/CLUSTER/complex/34_nfs_tickle_restart.sh
Martin Schwenke 41ff58338a ctdb-tests: Drop uses of "onnode any ..." in testcases
It would be nice to get rid of "onnode any".  There's no use making
tests nondeterministic.  If covering different cases matters then they
should be explicitly handled.

In most places "any" is replaced by "$test_node".  In some cases,
where $test_node is not set, a fixed node that is already used
elsewhere can be reused.

Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
2020-07-22 07:53:36 +00:00

82 lines
2.3 KiB
Bash
Executable File

#!/bin/bash
# Verify that a newly started CTDB node gets updated tickle details
# Prerequisites:
# * An active CTDB cluster with at least 2 nodes with public addresses.
# * Test must be run on a real or virtual cluster rather than against
# local daemons.
# * Cluster nodes must be listening on the NFS TCP port (2049).
# Steps:
# As with 31_nfs_tickle.sh but restart a node after the tickle is
# registered.
# Expected results:
# * CTDB should correctly communicated tickles to new CTDB instances as
# they join the cluster.
. "${TEST_SCRIPTS_DIR}/cluster.bash"
set -e
ctdb_test_init
select_test_node_and_ips
try_command_on_node $test_node "$CTDB listnodes -X"
listnodes_output="$out"
numnodes=$(wc -l <<<"$listnodes_output")
test_port=2049
echo "Connecting to node ${test_node} on IP ${test_ip}:${test_port} with netcat..."
sleep 600 | nc $test_ip $test_port &
nc_pid=$!
ctdb_test_exit_hook_add "kill $nc_pid >/dev/null 2>&1"
wait_until_get_src_socket "tcp" "${test_ip}:${test_port}" $nc_pid "nc"
src_socket="$out"
echo "Source socket is $src_socket"
wait_for_monitor_event $test_node
echo "Wait until NFS connection is tracked by CTDB on test node ..."
wait_until 10 check_tickles $test_node $test_ip $test_port $src_socket
echo "Select a node to restart ctdbd"
rn=$(awk -F'|' -v test_node=$test_node \
'$2 != test_node { print $2 ; exit }' <<<"$listnodes_output")
echo "Restarting CTDB on node ${rn}"
ctdb_nodes_restart "$rn"
# In some theoretical world this is racy. In practice, the node will
# take quite a while to become healthy, so this will beat any
# assignment of IPs to the node.
echo "Setting NoIPTakeover on node ${rn}"
try_command_on_node $rn $CTDB setvar NoIPTakeover 1
wait_until_ready
echo "Getting TickleUpdateInterval..."
try_command_on_node $test_node $CTDB getvar TickleUpdateInterval
update_interval="$out"
echo "Wait until NFS connection is tracked by CTDB on all nodes..."
if ! wait_until $(($update_interval * 2)) \
check_tickles_all $numnodes $test_ip $test_port $src_socket ; then
echo "BAD: connection not tracked on all nodes:"
echo "$out"
exit 1
fi
# We could go on to test whether the tickle ACK gets sent. However,
# this is tested in previous tests and the use of NoIPTakeover
# complicates things on a 2 node cluster.