ctdb-daemon: Mark RecoverPDBBySeqNum tunable deprecated
authorAmitay Isaacs <amitay@gmail.com>
Fri, 18 Nov 2016 04:09:26 +0000 (15:09 +1100)
committerMartin Schwenke <martins@samba.org>
Fri, 25 Nov 2016 07:13:59 +0000 (08:13 +0100)
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

ctdb/common/tunable.c
ctdb/doc/ctdb-tunables.7.xml
ctdb/server/ctdb_recovery_helper.c
ctdb/tests/simple/70_recoverpdbbyseqnum.sh
ctdb/tests/simple/76_ctdb_pdb_recovery.sh
ctdb/tests/tool/ctdb.listvars.001.sh

index 44e0cc5fb4df603097908249e08fc06195b5374a..5f360887f24af2e508780ea19bf56f436586c17f 100644 (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) },
index 088e8227620ac48f4a1d8fce1224499e85e1b613..8143a45a795e2bc5cc2af0bba6a7c1b670aaf381 100644 (file)
       </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>
index d54c2904764b0036e1ce929322b2be55634bd84b..7dfb707b458f0260ecd43692f61f3169a1226b34 100644 (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);
index a4765b142b0f8e834a4811a1f499a5802f1adfb5..255d58d2156e57d9c2bf1fa15fdb05ba9a4b50c6 100755 (executable)
@@ -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
 #
-# 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
-
+echo "Test that no __db_sequence_number__ does not blend the database during recovery"
 
-# 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
 
index 1c897c2ff24b3876f51fb3155b6f37e1d2e754f6..a961405a74f8cbc41bd9697343e6368227d64f93 100755 (executable)
@@ -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)"
index b24bd0203b8f737bbd463e94fac4d79f651b5fd7..539dd2f11dc09a817c37c91aa70ed6c897178175 100755 (executable)
@@ -51,7 +51,6 @@ AllowUnhealthyDBRead       = 0
 StatHistoryInterval        = 1
 DeferredAttachTO           = 120
 AllowClientDBAttach        = 1
-RecoverPDBBySeqNum         = 1
 FetchCollapse              = 1
 HopcountMakeSticky         = 50
 StickyDuration             = 600