diff options
author | Sergei Petrunia <psergey@askmonty.org> | 2020-10-09 17:48:22 +0300 |
---|---|---|
committer | Sergei Petrunia <psergey@askmonty.org> | 2020-10-14 15:14:46 +0300 |
commit | c03885cd9ceb1ede7f49a9e218022b401b3a1e28 (patch) | |
tree | 08c8dee949a2efcaec3ee7dd555c308e18216cad /mysql-test/main/rowid_filter_innodb_debug.result | |
parent | 171da6b38b7e7abc0fbea8a7181ad0b4e9ad3855 (diff) | |
download | mariadb-git-c03885cd9ceb1ede7f49a9e218022b401b3a1e28.tar.gz |
MDEV-22761: innodb row_search_idx_cond_check handle CHECK_ABORTED_BY_USER
Part #2:
- row_search_mvcc() should return DB_INTERRUPTED when it got
- Move the sync point from innodb internals to
handler_rowid_filter_check() where other storage engines can use
it too
- Add a similar syncpoint for the ICP check.
- Add a bigger test and test coverage for Rowid Filter with MyISAM
- Add test coverage for killed-during-ICP-check scenario
Diffstat (limited to 'mysql-test/main/rowid_filter_innodb_debug.result')
-rw-r--r-- | mysql-test/main/rowid_filter_innodb_debug.result | 61 |
1 files changed, 59 insertions, 2 deletions
diff --git a/mysql-test/main/rowid_filter_innodb_debug.result b/mysql-test/main/rowid_filter_innodb_debug.result index 91fa66937b6..6fd75294bdb 100644 --- a/mysql-test/main/rowid_filter_innodb_debug.result +++ b/mysql-test/main/rowid_filter_innodb_debug.result @@ -1,3 +1,59 @@ +set default_storage_engine=innodb; +# +# MDEV-22761 KILL QUERY during rowid_filter, crashes +# +create table t0(a int); +insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); +create table t1(a int); +insert into t1 select A.a + B.a* 10 + C.a * 100 from t0 A, t0 B, t0 C; +create table t2(a int); +insert into t2 select A.a + B.a* 10 from t0 A, t0 B; +CREATE TABLE t3 ( +key1 int , +key2 int, +filler varchar(255), +KEY (key1), +KEY (key2) +); +select engine from information_schema.tables +where table_schema=database() and table_name='t3'; +engine +InnoDB +insert into t3 +select +A.a, +A.a, +'filler-data-filler-data' +from +t0 A, t1 B; +analyze table t2,t3; +Table Op Msg_type Msg_text +test.t2 analyze status Engine-independent statistics collected +test.t2 analyze status OK +test.t3 analyze status Engine-independent statistics collected +test.t3 analyze status OK +explain +select * from t2, t3 +where +t3.key1=t2.a and t3.key2 in (2,3); +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t2 ALL NULL NULL NULL NULL 100 Using where +1 SIMPLE t3 ref|filter key1,key2 key1|key2 5|5 test.t2.a 1000 (20%) Using where; Using rowid filter +set debug_sync='handler_rowid_filter_check SIGNAL at_rowid_filter_check WAIT_FOR go'; +select * from t2, t3 +where +t3.key1=t2.a and t3.key2 in (2,3); +connect con1, localhost, root,,; +connection con1; +set debug_sync='now WAIT_FOR at_rowid_filter_check'; +kill query $target_id; +set debug_sync='now SIGNAL go'; +connection default; +disconnect con1; +ERROR 70100: Query execution was interrupted +set debug_sync='RESET'; +drop table t0,t1,t2,t3; +set default_storage_engine=default; set @save_optimizer_switch= @@optimizer_switch; set @save_use_stat_tables= @@use_stat_tables; set @save_optimizer_use_condition_selectivity= @@optimizer_use_condition_selectivity; @@ -6,10 +62,11 @@ set optimizer_use_condition_selectivity=2; set optimizer_switch='rowid_filter=on'; # # MDEV-22761 KILL QUERY during rowid_filter, crashes +# (The smaller testcase) # CREATE TABLE t1 (a INT, b INT, INDEX(a), INDEX(b)) ENGINE=InnoDB; INSERT INTO t1 VALUES (0,0),(1,0),(-1,1), (-2,1), (-2,3), (-3,4), (-2,4); -set debug_sync='row_search_pre_rowid_filter_check SIGNAL killme WAIT_FOR go'; +set debug_sync='handler_rowid_filter_check SIGNAL killme WAIT_FOR go'; SELECT * FROM t1 WHERE a > 0 AND b=0; connect con1, localhost, root,,; connection con1; @@ -17,7 +74,7 @@ set debug_sync='now WAIT_FOR killme'; kill query @id; set debug_sync='now SIGNAL go'; connection default; -a b +ERROR 70100: Query execution was interrupted set debug_sync='RESET'; disconnect con1; drop table t1; |