forked from MariaDB/server
-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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
- Loading branch information
Showing
14 changed files
with
359 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
--source include/have_debug.inc | ||
--source include/have_debug_sync.inc | ||
--source include/count_sessions.inc | ||
|
||
--disable_warnings | ||
drop table if exists t0,t1,t2; | ||
--enable_warnings | ||
|
||
create table t0(a int primary key); | ||
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); | ||
|
||
create table t1(a int primary key); | ||
insert into t1 select A.a + B.a* 10 + C.a * 100 from t0 A, t0 B, t0 C; | ||
|
||
create table t2 ( | ||
kp1 int, | ||
kp2 int, | ||
col char(100), | ||
key(kp1, kp2) | ||
); | ||
insert into t2 select a, a, a from t1; | ||
|
||
select engine from information_schema.tables | ||
where table_schema=database() and table_name='t2'; | ||
|
||
explain | ||
select * from t2 where kp1 between 10 and 20 and kp2 +1 >100; | ||
|
||
let $target_id= `select connection_id()`; | ||
|
||
set debug_sync='handler_index_cond_check SIGNAL at_icp_check WAIT_FOR go'; | ||
send | ||
select * from t2 where kp1 between 10 and 20 and kp2 +1 >100; | ||
|
||
connect (con1, localhost, root,,); | ||
connection con1; | ||
set debug_sync='now WAIT_FOR at_icp_check'; | ||
evalp kill query $target_id; | ||
set debug_sync='now SIGNAL go'; | ||
|
||
connection default; | ||
|
||
--error ER_QUERY_INTERRUPTED | ||
reap; | ||
set debug_sync='RESET'; | ||
|
||
disconnect con1; | ||
drop table t0,t1,t2; | ||
--source include/wait_until_count_sessions.inc | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
--source include/have_debug.inc | ||
--source include/have_debug_sync.inc | ||
--source include/count_sessions.inc | ||
|
||
--echo # | ||
--echo # MDEV-22761 KILL QUERY during rowid_filter, crashes | ||
--echo # | ||
|
||
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; | ||
|
||
# 100 rows | ||
create table t2(a int); | ||
insert into t2 select A.a + B.a* 10 from t0 A, t0 B; | ||
|
||
# 10K rows | ||
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'; | ||
|
||
insert into t3 | ||
select | ||
A.a, | ||
A.a, | ||
'filler-data-filler-data' | ||
from | ||
t0 A, t1 B; | ||
|
||
analyze table t2,t3; | ||
|
||
explain | ||
select * from t2, t3 | ||
where | ||
t3.key1=t2.a and t3.key2 in (2,3); | ||
|
||
let $target_id= `select connection_id()`; | ||
|
||
set debug_sync='handler_rowid_filter_check SIGNAL at_rowid_filter_check WAIT_FOR go'; | ||
send | ||
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'; | ||
evalp kill query $target_id; | ||
set debug_sync='now SIGNAL go'; | ||
|
||
connection default; | ||
disconnect con1; | ||
|
||
--error ER_QUERY_INTERRUPTED | ||
reap; | ||
set debug_sync='RESET'; | ||
|
||
drop table t0,t1,t2,t3; | ||
--source include/wait_until_count_sessions.inc | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
set default_storage_engine=aria; | ||
drop table if exists t0,t1,t2; | ||
create table t0(a int primary key); | ||
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); | ||
create table t1(a int primary key); | ||
insert into t1 select A.a + B.a* 10 + C.a * 100 from t0 A, t0 B, t0 C; | ||
create table t2 ( | ||
kp1 int, | ||
kp2 int, | ||
col char(100), | ||
key(kp1, kp2) | ||
); | ||
insert into t2 select a, a, a from t1; | ||
select engine from information_schema.tables | ||
where table_schema=database() and table_name='t2'; | ||
engine | ||
Aria | ||
explain | ||
select * from t2 where kp1 between 10 and 20 and kp2 +1 >100; | ||
id select_type table type possible_keys key key_len ref rows Extra | ||
1 SIMPLE t2 range kp1 kp1 5 NULL 10 Using index condition | ||
set debug_sync='handler_index_cond_check SIGNAL at_icp_check WAIT_FOR go'; | ||
select * from t2 where kp1 between 10 and 20 and kp2 +1 >100; | ||
connect con1, localhost, root,,; | ||
connection con1; | ||
set debug_sync='now WAIT_FOR at_icp_check'; | ||
kill query $target_id; | ||
set debug_sync='now SIGNAL go'; | ||
connection default; | ||
ERROR 70100: Query execution was interrupted | ||
set debug_sync='RESET'; | ||
disconnect con1; | ||
drop table t0,t1,t2; | ||
set default_storage_engine=default; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
|
||
set default_storage_engine=aria; | ||
--source include/icp_debug_kill.inc | ||
set default_storage_engine=default; | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
set default_storage_engine=innodb; | ||
drop table if exists t0,t1,t2; | ||
create table t0(a int primary key); | ||
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); | ||
create table t1(a int primary key); | ||
insert into t1 select A.a + B.a* 10 + C.a * 100 from t0 A, t0 B, t0 C; | ||
create table t2 ( | ||
kp1 int, | ||
kp2 int, | ||
col char(100), | ||
key(kp1, kp2) | ||
); | ||
insert into t2 select a, a, a from t1; | ||
select engine from information_schema.tables | ||
where table_schema=database() and table_name='t2'; | ||
engine | ||
InnoDB | ||
explain | ||
select * from t2 where kp1 between 10 and 20 and kp2 +1 >100; | ||
id select_type table type possible_keys key key_len ref rows Extra | ||
1 SIMPLE t2 range kp1 kp1 5 NULL 11 Using index condition | ||
set debug_sync='handler_index_cond_check SIGNAL at_icp_check WAIT_FOR go'; | ||
select * from t2 where kp1 between 10 and 20 and kp2 +1 >100; | ||
connect con1, localhost, root,,; | ||
connection con1; | ||
set debug_sync='now WAIT_FOR at_icp_check'; | ||
kill query $target_id; | ||
set debug_sync='now SIGNAL go'; | ||
connection default; | ||
ERROR 70100: Query execution was interrupted | ||
set debug_sync='RESET'; | ||
disconnect con1; | ||
drop table t0,t1,t2; | ||
set default_storage_engine=default; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
--source include/have_innodb.inc | ||
|
||
set default_storage_engine=innodb; | ||
--source include/icp_debug_kill.inc | ||
set default_storage_engine=default; | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
drop table if exists t0,t1,t2; | ||
create table t0(a int primary key); | ||
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); | ||
create table t1(a int primary key); | ||
insert into t1 select A.a + B.a* 10 + C.a * 100 from t0 A, t0 B, t0 C; | ||
create table t2 ( | ||
kp1 int, | ||
kp2 int, | ||
col char(100), | ||
key(kp1, kp2) | ||
); | ||
insert into t2 select a, a, a from t1; | ||
select engine from information_schema.tables | ||
where table_schema=database() and table_name='t2'; | ||
engine | ||
MyISAM | ||
explain | ||
select * from t2 where kp1 between 10 and 20 and kp2 +1 >100; | ||
id select_type table type possible_keys key key_len ref rows Extra | ||
1 SIMPLE t2 range kp1 kp1 5 NULL 11 Using index condition | ||
set debug_sync='handler_index_cond_check SIGNAL at_icp_check WAIT_FOR go'; | ||
select * from t2 where kp1 between 10 and 20 and kp2 +1 >100; | ||
connect con1, localhost, root,,; | ||
connection con1; | ||
set debug_sync='now WAIT_FOR at_icp_check'; | ||
kill query $target_id; | ||
set debug_sync='now SIGNAL go'; | ||
connection default; | ||
ERROR 70100: Query execution was interrupted | ||
set debug_sync='RESET'; | ||
disconnect con1; | ||
drop table t0,t1,t2; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
--source include/icp_debug_kill.inc |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.