-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fixed crash in aria recovery when using bulk insert
MDEV-20578 Got error 126 when executing undo undo_key_delete upon Aria crash recovery The crash happens in this scenario: - Table with unique keys and non unique keys - Batch insert (LOAD DATA or INSERT ... SELECT) with REPLACE - Some insert succeeds followed by duplicate key error In the above scenario the table gets corrupted. The bug was that we don't generate any undo entry for the failed insert as the whole insert can be ignored by undo. The code did however not take into account that when bulk insert is used, we would write cached keys to the file on failure and undo would wrongly ignore these. Fixed by moving the writing of the cache keys after we write the aborted-insert event to the log.
- Loading branch information
Showing
7 changed files
with
89 additions
and
19 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,2 @@ | ||
--skip-stack-trace --skip-core-file | ||
--default-storage-engine=Aria |
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,13 @@ | ||
create table t1 (a int primary key, b int, c int, unique key(b), key(c)) engine=aria transactional=1; | ||
insert into t1 values (1000,1000,1000); | ||
insert into t1 select seq,seq+100, seq+200 from seq_1_to_10; | ||
SET GLOBAL debug_dbug="+d,crash_end_bulk_insert"; | ||
REPLACE into t1 select seq+20,seq+95, seq + 300 from seq_1_to_10; | ||
ERROR HY000: Lost connection to MySQL server during query | ||
check table t1; | ||
Table Op Msg_type Msg_text | ||
test.t1 check status OK | ||
select sum(a),sum(b),sum(c) from t1; | ||
sum(a) sum(b) sum(c) | ||
1055 2055 3055 | ||
drop table t1; |
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,36 @@ | ||
--source include/not_embedded.inc | ||
--source include/not_valgrind.inc | ||
# Avoid CrashReporter popup on Mac | ||
--source include/not_crashrep.inc | ||
# Binary must be compiled with debug for crash to occur | ||
--source include/have_debug.inc | ||
--source include/have_sequence.inc | ||
|
||
# | ||
# MDEV-20578 Got error 126 when executing undo undo_key_delete upon Aria crash | ||
# recovery | ||
# | ||
|
||
# Write file to make mysql-test-run.pl expect crash and restart | ||
--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect | ||
|
||
create table t1 (a int primary key, b int, c int, unique key(b), key(c)) engine=aria transactional=1; | ||
insert into t1 values (1000,1000,1000); | ||
insert into t1 select seq,seq+100, seq+200 from seq_1_to_10; | ||
|
||
# Insert into t1 with batch insert where we get a rows replaced after | ||
# a few sucessful inserts | ||
|
||
SET GLOBAL debug_dbug="+d,crash_end_bulk_insert"; | ||
|
||
--error 2013 | ||
REPLACE into t1 select seq+20,seq+95, seq + 300 from seq_1_to_10; | ||
|
||
# Wait until restarted | ||
--enable_reconnect | ||
--source include/wait_until_connected_again.inc | ||
--disable_reconnect | ||
|
||
check table t1; | ||
select sum(a),sum(b),sum(c) from t1; | ||
drop table t1; |
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
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