diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 18:00:34 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 18:00:34 +0000 |
commit | 3f619478f796eddbba6e39502fe941b285dd97b1 (patch) | |
tree | e2c7b5777f728320e5b5542b6213fd3591ba51e2 /mysql-test/suite/maria/maria-recovery-rtree-ft.test | |
parent | Initial commit. (diff) | |
download | mariadb-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.test | 218 |
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; |