1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-22 13:34:15 +03:00

ctdb-daemon: Mark RecoverPDBBySeqNum tunable deprecated

Persistent databases are now always recovered by sequence number, so
there is no need for this tunable.

Signed-off-by: Amitay Isaacs <amitay@gmail.com>
Reviewed-by: Martin Schwenke <martin@meltin.net>

Autobuild-User(master): Martin Schwenke <martins@samba.org>
Autobuild-Date(master): Fri Nov 25 08:13:59 CET 2016 on sn-devel-144
This commit is contained in:
Amitay Isaacs 2016-11-18 15:09:26 +11:00 committed by Martin Schwenke
parent 2a9584dc0a
commit f2414841f2
6 changed files with 24 additions and 155 deletions

View File

@ -119,7 +119,7 @@ static struct {
offsetof(struct ctdb_tunable_list, deferred_attach_timeout) },
{ "AllowClientDBAttach", 1, false,
offsetof(struct ctdb_tunable_list, allow_client_db_attach) },
{ "RecoverPDBBySeqNum", 1, false,
{ "RecoverPDBBySeqNum", 1, true,
offsetof(struct ctdb_tunable_list, recover_pdb_by_seqnum) },
{ "DeferredRebalanceOnNodeAdd", 300, true,
offsetof(struct ctdb_tunable_list, deferred_rebalance_on_node_add) },

View File

@ -461,27 +461,6 @@
</para>
</refsect2>
<refsect2>
<title>RecoverPDBBySeqNum</title>
<para>Default: 1</para>
<para>
When set to zero, database recovery for persistent databases is
record-by-record and recovery process simply collects the most
recent version of every individual record.
</para>
<para>
When set to non-zero, persistent databases will instead be
recovered as a whole db and not by individual records. The
node that contains the highest value stored in the record
"__db_sequence_number__" is selected and the copy of that nodes
database is used as the recovered database.
</para>
<para>
By default, recovery of persistent databses is done using
__db_sequence_number__ record.
</para>
</refsect2>
<refsect2>
<title>RecoverTimeout</title>
<para>Default: 120</para>

View File

@ -1705,7 +1705,7 @@ static void recover_db_transaction_started(struct tevent_req *subreq)
return;
}
if (state->persistent && state->tun_list->recover_pdb_by_seqnum != 0) {
if (state->persistent) {
subreq = collect_highseqnum_db_send(
state, state->ev, state->client,
state->pnn_list, state->count, state->caps,
@ -1734,7 +1734,7 @@ static void recover_db_collect_done(struct tevent_req *subreq)
int ret;
bool status;
if (state->persistent && state->tun_list->recover_pdb_by_seqnum != 0) {
if (state->persistent) {
status = collect_highseqnum_db_recv(subreq, &ret);
} else {
status = collect_all_db_recv(subreq, &ret);

View File

@ -3,16 +3,10 @@
test_info()
{
cat <<EOF
The tunable RecoverPDBBySeqNum controls how we perform recovery
on persistent databases.
The default is that persistent databases are recovered exactly the same
way as normal databases. That is that we recover record by record.
If RecoverPDBBySeqNum is set to 1 AND if a record with the key
"__db_sequence_number__" can be found in the database, then instead we will
perform the recovery by picking the copy of the database from the node
that has the highest sequence number and ignore the content on all other
nodes.
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.
Prerequisites:
@ -23,19 +17,12 @@ Steps:
1. Verify that the status on all of the ctdb nodes is 'OK'.
2. create a persistent test database
3. test that RecoveryPDBBySeqNum==0 and no seqnum record blends the database
during recovery
4. test that RecoveryPDBBySeqNum==0 and seqnum record blends the database
during recovery
5. test that RecoveryPDBBySeqNum==1 and no seqnum record blends the database
during recovery
6. test that RecoveryPDBBySeqNum==1 and seqnum record does not blend the database
during recovery
3. test that no seqnum record blends the database during recovery
4. test that seqnum record does not blend the database during recovery
Expected results:
* that 3,4,5 will blend the databases and that 6 will recovery the highest seqnum
database
* that 3,4 will recover the highest seqnum database
EOF
}
@ -70,90 +57,14 @@ test_db="persistent_test.tdb"
echo "Create persistent test database \"$test_db\""
try_command_on_node 0 $CTDB attach "$test_db" persistent
echo "Setting RecoverPDBBySeqNum=0"
try_command_on_node all $CTDB setvar "RecoverPDBBySeqNum" 0
# 3.
# If RecoverPDBBySeqNum==0 and no __db_sequence_number__
# recover record by record
# 3,
# If no __db_sequence_number__ recover whole database
#
echo
echo "Test that no __db_sequence_number__ does not blend the database during recovery"
# wipe database
echo
echo "Test that RecoverPDBBySeqNum=0 and no __db_sequence_number__ blends the database during recovery"
echo "Wipe test database"
try_command_on_node 0 $CTDB wipedb "$test_db"
add_record_per_node
# force a recovery
echo "Force a recovery"
try_command_on_node 0 $CTDB recover
# check that we now have both records on node 0
num_records=$(db_ctdb_cattdb_count_records 0 "$test_db")
if [ $num_records = "$num_nodes" ] ; then
echo "OK: databases were blended"
else
echo "BAD: we did not end up with the expected $num_nodes records after the recovery"
exit 1
fi
# 4.
# If RecoverPDBBySeqNum==0 and __db_sequence_number__
# recover record by record
#
# wipe database
echo
echo "Test that RecoverPDBBySeqNum=0 and __db_sequence_number__ blends the database during recovery"
echo "Wipe the test database"
try_command_on_node 0 $CTDB wipedb persistent_test.tdb
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))
done
echo "Set __db_sequence_number__ to 7 on node 0"
db_ctdb_tstore_dbseqnum 0 "$test_db" 7
echo "Set __db_sequence_number__ to 8 on node 1"
db_ctdb_tstore_dbseqnum 1 "$test_db" 8
# force a recovery
echo "Force a recovery"
try_command_on_node 0 $CTDB recover
# check that we now have both records on node 0
num_records=$(db_ctdb_cattdb_count_records 0 "$test_db")
if [ $num_records = "$num_nodes" ] ; then
echo "OK: databases were blended"
else
echo "BAD: we did not end up with the expected $num_nodes records after the recovery"
try_command_on_node -v 0 $CTDB cattdb "$test_db"
exit 1
fi
# set RecoverPDBBySeqNum=1
echo
echo "Setting RecoverPDBBySeqNum to 1"
try_command_on_node all $CTDB setvar "RecoverPDBBySeqNum" 1
# 5,
# If RecoverPDBBySeqNum==1 and no __db_sequence_number__
# recover whole database
#
# wipe database
echo
echo "Test that RecoverPDBBySeqNum=1 and no __db_sequence_number__ does not blend the database during recovery"
echo "Wipe the test database"
try_command_on_node 0 $CTDB wipedb "$test_db"
@ -173,14 +84,14 @@ else
fi
# 6,
# If RecoverPDBBySeqNum==1 and __db_sequence_number__
# recover whole database
# 4,
# If __db_sequence_number__ recover whole database
#
# wipe database
echo
echo test that RecoverPDBBySeqNum==1 and __db_sequence_number__ does not blend the database during recovery
echo test that __db_sequence_number__ does not blend the database during recovery
# wipe database
echo wipe the test database
try_command_on_node 0 $CTDB wipedb persistent_test.tdb

View File

@ -3,11 +3,7 @@
test_info()
{
cat <<EOF
The recovery process based on RSN for persistent databases is defective.
For persistent databases sequence number based recovery method should be
used. This test checks for the defect in the RSN based recovery method
for persistent databases and confirms that the same issue is not observed
when using sequence number based recovery method.
This test confirms that the deleted records are not resurrected after recovery.
Steps:
@ -20,8 +16,7 @@ Steps:
Expected results:
* Check that the record is deleted (RSN based recovery) and record is
present (sequence number based recovery)
* Check that the deleted record is present after recovery.
EOF
}
@ -83,21 +78,6 @@ status=0
echo "create persistent test database $TESTDB"
try_command_on_node 0 $CTDB attach $TESTDB persistent
echo "set RecoverPDBBySeqNum to 0"
try_command_on_node all $CTDB setvar RecoverPDBBySeqNum 0
do_test
if try_command_on_node 0 $CTDB pfetch $TESTDB test1 ; then
echo "GOOD: Record was not deleted (recovery by RSN worked)"
else
echo "BAD: Record was deleted"
status=1
fi
# Set RecoverPDBBySeqNum = 1
echo "set RecoverPDBBySeqNum to 1"
try_command_on_node all $CTDB setvar RecoverPDBBySeqNum 1
do_test
if try_command_on_node 0 $CTDB pfetch $TESTDB test1 ; then
echo "GOOD: Record was not deleted (recovery by sequence number worked)"

View File

@ -51,7 +51,6 @@ AllowUnhealthyDBRead = 0
StatHistoryInterval = 1
DeferredAttachTO = 120
AllowClientDBAttach = 1
RecoverPDBBySeqNum = 1
FetchCollapse = 1
HopcountMakeSticky = 50
StickyDuration = 600