summaryrefslogtreecommitdiffstats
path: root/mysql-test/suite/maria/maria-recovery-rtree-ft.test
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 18:00:34 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 18:00:34 +0000
commit3f619478f796eddbba6e39502fe941b285dd97b1 (patch)
treee2c7b5777f728320e5b5542b6213fd3591ba51e2 /mysql-test/suite/maria/maria-recovery-rtree-ft.test
parentInitial commit. (diff)
downloadmariadb-upstream.tar.xz
mariadb-upstream.zip
Adding upstream version 1:10.11.6.upstream/1%10.11.6upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r--mysql-test/suite/maria/maria-recovery-rtree-ft.test218
1 files changed, 218 insertions, 0 deletions
diff --git a/mysql-test/suite/maria/maria-recovery-rtree-ft.test b/mysql-test/suite/maria/maria-recovery-rtree-ft.test
new file mode 100644
index 00000000..7112c00e
--- /dev/null
+++ b/mysql-test/suite/maria/maria-recovery-rtree-ft.test
@@ -0,0 +1,218 @@
+# Test of Recovery of R-tree (table t1) and fulltext (table t2) indices
+
+--source include/not_embedded.inc
+# Don't test this under valgrind, memory leaks will occur as we crash
+--source include/not_valgrind.inc
+# Binary must be compiled with debug for crash to occur
+--source include/have_debug.inc
+--source include/have_maria.inc
+--source include/long_test.inc
+
+set global aria_log_file_size=4294959104;
+let $MARIA_LOG=.;
+
+--disable_warnings
+drop database if exists mysqltest;
+--enable_warnings
+create database mysqltest;
+let $mms_tname=t;
+
+# Include scripts can perform SQL. For it to not influence the main test
+# they use a separate connection. This way if they use a DDL it would
+# not autocommit in the main test.
+connect (admin, localhost, root,,mysqltest,,);
+--enable_reconnect
+
+connection default;
+use mysqltest;
+--enable_reconnect
+
+-- source include/maria_empty_logs.inc
+let $mms_tables=2;
+
+CREATE TABLE t1 (
+ line POINT NOT NULL,
+ kind ENUM('po', 'pp', 'rr', 'dr', 'rd', 'ts', 'cl') NOT NULL DEFAULT 'po',
+ name VARCHAR(32)
+ ,SPATIAL key (line)
+) transactional=1 row_format=page engine=aria;
+SHOW INDEX FROM t1;
+CREATE TABLE t2 (a VARCHAR(200), b TEXT, FULLTEXT (a,b)
+) transactional=1 row_format=page engine=aria;
+SHOW INDEX FROM t2;
+
+let $query1= INSERT INTO t1 (name, kind, line) VALUES
+ ("Aadaouane", "pp", GeomFromText("POINT(32.816667 35.983333)")),
+ ("Aadassiye", "pp", GeomFromText("POINT(35.816667 36.216667)")),
+ ("Aadbel", "pp", GeomFromText("POINT(34.533333 36.100000)")),
+ ("Aadchit", "pp", GeomFromText("POINT(33.347222 35.423611)")),
+ ("Aadchite", "pp", GeomFromText("POINT(33.347222 35.423611)")),
+ ("Aadchit el Qoussair", "pp", GeomFromText("POINT(33.283333 35.483333)")),
+ ("Aaddaye", "pp", GeomFromText("POINT(36.716667 40.833333)")),
+ ("'Aadeissa", "pp", GeomFromText("POINT(32.823889 35.698889)")),
+ ("Aaderup", "pp", GeomFromText("POINT(55.216667 11.766667)")),
+ ("Qalaat Aades", "pp", GeomFromText("POINT(33.503333 35.377500)")),
+ ("A ad'ino", "pp", GeomFromText("POINT(54.812222 38.209167)")),
+ ("Aadi Noia", "pp", GeomFromText("POINT(13.800000 39.833333)")),
+ ("Aad La Macta", "pp", GeomFromText("POINT(35.779444 -0.129167)")),
+ ("Aadland", "pp", GeomFromText("POINT(60.366667 5.483333)")),
+ ("Aadliye", "pp", GeomFromText("POINT(33.366667 36.333333)")),
+ ("Aadloun", "pp", GeomFromText("POINT(33.403889 35.273889)")),
+ ("Aadma", "pp", GeomFromText("POINT(58.798333 22.663889)")),
+ ("Aadma Asundus", "pp", GeomFromText("POINT(58.798333 22.663889)")),
+ ("Aadmoun", "pp", GeomFromText("POINT(34.150000 35.650000)")),
+ ("Aadneram", "pp", GeomFromText("POINT(59.016667 6.933333)")),
+ ("Aadneskaar", "pp", GeomFromText("POINT(58.083333 6.983333)")),
+ ("Aadorf", "pp", GeomFromText("POINT(47.483333 8.900000)")),
+ ("Aadorp", "pp", GeomFromText("POINT(52.366667 6.633333)")),
+ ("Aadouane", "pp", GeomFromText("POINT(32.816667 35.983333)")),
+ ("Aadoui", "pp", GeomFromText("POINT(34.450000 35.983333)")),
+ ("Aadouiye", "pp", GeomFromText("POINT(34.583333 36.183333)")),
+ ("Aadouss", "pp", GeomFromText("POINT(33.512500 35.601389)")),
+ ("Aadra", "pp", GeomFromText("POINT(33.616667 36.500000)")),
+ ("Aadzi", "pp", GeomFromText("POINT(38.100000 64.850000)"));
+
+let $query2= INSERT INTO t2 VALUES
+ ('MySQL has now support', 'for full-text search'),
+ ('Full-text indexes', 'are called collections'),
+ ('Only MyISAM tables','support collections'),
+ ('Function MATCH ... AGAINST()','is used to do a search'),
+ ('Full-text search in MySQL', 'implements vector space model'),
+ ('We want to see', 'if this is recoverable'),
+ ('Or rather leaves a bad corrupted table', 'after a crash'),
+ ('Test of REDOs', 'and then UNDOs'),
+ ('Recovery is interesting', 'but sometimes complicated'),
+ ('But what if it was simple', 'and boring?'),
+ ('I wish I knew more', 'about how fulltext works'),
+ ('Maybe I should read about it', 'on the Internet');
+
+--echo * TEST of REDO: see if recovery can reconstruct if we give it an old table
+
+-- source include/maria_make_snapshot_for_feeding_recovery.inc
+
+--disable_query_log
+let $1=120; # 8 is smallest value to cause root split; 12 for child split
+while($1)
+{
+ eval $query1;
+ eval $query2;
+ dec $1;
+}
+let $1=120;
+while($1)
+{
+ delete from t1 limit 1;
+ delete from t1 limit 10;
+ delete from t1 limit 7;
+ delete from t1 limit 2;
+ delete from t2 limit 6;
+ dec $1;
+}
+--enable_query_log
+-- source include/maria_make_snapshot_for_comparison.inc
+# we want recovery to run on the first snapshot made above
+let $mvr_restore_old_snapshot=1;
+let $mms_compare_physically=0;
+let $mvr_debug_option="+d,maria_flush_whole_log,maria_crash";
+let $mvr_crash_statement= set global aria_checkpoint_interval=1;
+# the script below will trigger recovery and compare checksums
+-- source include/maria_verify_recovery.inc
+
+# Test of REDO + UNDO
+--echo * TEST of INSERT and DELETE's rollback
+
+# different types of crash => a loop; here are loop control variables
+let $crash_no_flush=1;
+let $crash_flush_whole_page_cache=0;
+let $crash_flush_states=0;
+let $crash_flush_whole_log=0;
+let $crash_loop=1;
+
+# we want recovery to use the tables as they were at time of crash
+let $mvr_restore_old_snapshot=0;
+# UNDO phase prevents physical comparison, normally,
+# so we'll only use checksums to compare.
+let $mms_compare_physically=0;
+let $mvr_crash_statement= set global aria_checkpoint_interval=1;
+
+# Note that we don't remove logs between iterations. Test is
+# cumulative (each new recovery processes more log records than the previous).
+
+while ($crash_loop)
+{
+ if ($crash_flush_whole_log)
+ {
+ let $mvr_debug_option="+d,maria_flush_whole_log,maria_crash";
+ # set up what next iteration should do:
+ let $crash_flush_whole_log=0;
+ let $crash_loop=0;
+ }
+ if ($crash_flush_states)
+ {
+ let $mvr_debug_option="+d,maria_flush_states,maria_flush_whole_log,maria_crash";
+ let $crash_flush_states=0;
+ let $crash_flush_whole_log=1;
+ }
+ if ($crash_flush_whole_page_cache)
+ {
+ let $mvr_debug_option="+d,maria_flush_whole_page_cache,maria_crash";
+ let $crash_flush_whole_page_cache=0;
+ let $crash_flush_states=1;
+ }
+ if ($crash_no_flush)
+ {
+ let $mvr_debug_option="+d,maria_crash";
+ let $crash_no_flush=0;
+ let $crash_flush_whole_page_cache=1;
+ }
+ # Your committed statements here
+ -- source include/maria_make_snapshot_for_comparison.inc
+ # Your statements which we expect to be rolled back
+ lock tables t1 write, t2 write;
+
+ --disable_query_log
+ let $1=120;
+ while($1)
+ {
+ eval $query1;
+ eval $query2;
+ dec $1;
+ }
+ let $1=120;
+ while($1)
+ {
+ delete from t1 limit 1;
+ delete from t1 limit 10;
+ delete from t1 limit 7;
+ delete from t1 limit 2;
+ delete from t2 limit 6;
+ dec $1;
+ }
+ --enable_query_log
+
+ -- source include/maria_verify_recovery.inc
+}
+
+# Finally check when we make the table empty
+# This is currently hitting BUG#36319 so is disabled
+
+if (0)
+{
+-- source include/maria_make_snapshot_for_comparison.inc
+lock tables t1 write, t2 write;
+select count(*) from t1;
+delete from t1;
+select count(*) from t1;
+select count(*) from t2;
+delete from t2;
+select count(*) from t2;
+}
+
+-- source include/maria_verify_recovery.inc
+
+# clean up everything
+let $mms_purpose=feeding_recovery;
+eval drop database mysqltest_for_$mms_purpose;
+let $mms_purpose=comparison;
+eval drop database mysqltest_for_$mms_purpose;
+drop database mysqltest;