mirror of
https://github.com/samba-team/samba.git
synced 2025-01-06 13:18:07 +03:00
41ff58338a
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>
82 lines
2.3 KiB
Bash
Executable File
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.
|