Permalink
Show file tree
Hide file tree
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
MDEV-23938: innodb row_search_idx_cond_check handle ICP_ABORTED_BY_USER
- row_search_mvcc() should return DB_INTERRUPTED when it got killed. - Add a syncpoint for the ICP check. - Add test coverage for killed-during-ICP-check scenario Backport of MDEV-22761 fixes for ICP from 10.4 commits: * a6f9564 * c03885c XtraDB was fixed in deb3b9a Reviewer: Daniel Black
- Loading branch information
1 parent
72cb208
commit 3e807d2
Showing
9 changed files
with
176 additions
and
6 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,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