2012-02-08 01:59:53 +04:00
#!/bin/bash
test_info( )
{
cat <<EOF
2016-11-18 07:09:26 +03:00
The persistent databases are recovered using sequence number.
The recovery is performed by picking the copy of the database from the
node that has the highest sequence number and ignore the content on all
other nodes.
2012-02-08 01:59:53 +04:00
Prerequisites:
* An active CTDB cluster with at least 2 active nodes.
Steps:
1. Verify that the status on all of the ctdb nodes is 'OK' .
2. create a persistent test database
2016-11-18 07:09:26 +03:00
3. test that no seqnum record blends the database during recovery
4. test that seqnum record does not blend the database during recovery
2012-02-08 01:59:53 +04:00
Expected results:
2016-11-18 07:09:26 +03:00
* that 3,4 will recover the highest seqnum database
2012-02-08 01:59:53 +04:00
EOF
}
2012-04-18 08:55:21 +04:00
. " ${ TEST_SCRIPTS_DIR } /integration.bash "
2012-02-08 01:59:53 +04:00
ctdb_test_init " $@ "
set -e
cluster_is_healthy
2013-11-15 08:21:58 +04:00
# Reset configuration
ctdb_restart_when_done
2012-02-08 01:59:53 +04:00
try_command_on_node 0 " $CTDB listnodes "
num_nodes = $( echo " $out " | wc -l)
2013-11-18 14:04:49 +04:00
add_record_per_node ( )
{
_i = 0
while [ $_i -lt $num_nodes ] ; do
_k = " KEY ${ _i } "
_d = " DATA ${ _i } "
echo " Store key( ${ _k } ) data( ${ _d } ) on node ${ _i } "
db_ctdb_tstore $_i " $test_db " " $_k " " $_d "
_i = $(( $_i + 1 ))
done
}
2012-02-08 01:59:53 +04:00
2013-11-18 14:04:49 +04:00
test_db = "persistent_test.tdb"
echo " Create persistent test database \" $test_db \" "
try_command_on_node 0 $CTDB attach " $test_db " persistent
2012-02-08 01:59:53 +04:00
2016-11-18 07:09:26 +03:00
# 3,
# If no __db_sequence_number__ recover whole database
2012-02-08 01:59:53 +04:00
#
echo
2016-11-18 07:09:26 +03:00
echo "Test that no __db_sequence_number__ does not blend the database during recovery"
2012-02-08 01:59:53 +04:00
# wipe database
2013-11-18 14:04:49 +04:00
echo "Wipe the test database"
try_command_on_node 0 $CTDB wipedb " $test_db "
2012-02-08 01:59:53 +04:00
2013-11-18 14:04:49 +04:00
add_record_per_node
2012-02-08 01:59:53 +04:00
# force a recovery
echo force a recovery
2013-11-13 07:33:31 +04:00
try_command_on_node 0 $CTDB recover
2012-02-08 01:59:53 +04:00
2013-11-18 14:04:49 +04:00
# Check that we now have 1 record on node 0
num_records = $( db_ctdb_cattdb_count_records 0 " $test_db " )
if [ $num_records = "1" ] ; then
echo "OK: databases were not blended"
else
2013-11-15 08:21:58 +04:00
echo "BAD: we did not end up with the expected single record after the recovery"
2012-02-08 01:59:53 +04:00
exit 1
2013-11-18 14:04:49 +04:00
fi
2012-02-08 01:59:53 +04:00
2016-11-18 07:09:26 +03:00
# 4,
# If __db_sequence_number__ recover whole database
2012-02-08 01:59:53 +04:00
#
2016-11-18 07:09:26 +03:00
2012-02-08 01:59:53 +04:00
echo
2016-11-18 07:09:26 +03:00
echo test that __db_sequence_number__ does not blend the database during recovery
# wipe database
2012-02-08 01:59:53 +04:00
echo wipe the test database
2013-11-13 07:33:31 +04:00
try_command_on_node 0 $CTDB wipedb persistent_test.tdb
2012-02-08 01:59:53 +04:00
2013-11-18 14:04:49 +04:00
add_record_per_node
echo "Add __db_sequence_number__==5 record to all nodes"
pnn = 0
while [ $pnn -lt $num_nodes ] ; do
db_ctdb_tstore_dbseqnum $pnn " $test_db " 5
pnn = $(( $pnn + 1 ))
2012-02-08 01:59:53 +04:00
done
2013-11-18 14:04:49 +04:00
echo "Set __db_sequence_number__ to 7 on node 0"
db_ctdb_tstore_dbseqnum 0 " $test_db " 7
2012-02-08 01:59:53 +04:00
2013-11-18 14:04:49 +04:00
echo "Set __db_sequence_number__ to 8 on node 1"
db_ctdb_tstore_dbseqnum 1 " $test_db " 8
2012-02-08 01:59:53 +04:00
# force a recovery
echo force a recovery
2013-11-13 07:33:31 +04:00
try_command_on_node 0 $CTDB recover
2012-02-08 01:59:53 +04:00
# check that we now have both records on node 0
2013-11-18 14:04:49 +04:00
num_records = $( db_ctdb_cattdb_count_records 0 " $test_db " )
if [ $num_records = "1" ] ; then
echo "OK: databases were not blended"
else
2012-02-08 01:59:53 +04:00
echo "BAD: we did not end up with the expected single record after the recovery"
exit 1
2013-11-18 14:04:49 +04:00
fi