Bug #115608 | Inplace ALTER TABLE might cause lost rows if concurrent purge | ||
---|---|---|---|
Submitted: | 16 Jul 13:10 | Modified: | 18 Jul 21:58 |
Reporter: | Dmitry Lenev (OCA) | Email Updates: | |
Status: | Verified | Impact on me: | |
Category: | MySQL Server: InnoDB storage engine | Severity: | S2 (Serious) |
Version: | 8.0 | OS: | Any |
Assigned to: | CPU Architecture: | Any |
[16 Jul 13:10]
Dmitry Lenev
[16 Jul 13:35]
MySQL Verification Team
Hi Mr. Lenev, Thank you for your bug report. We already had a debug mysqld binary built with the same DBUG_SYNC as in the previous bug, so we just ran the test. We repeated your results: -------------------------------------------------- ogging: ./mysql-test-run.pl t/dmitry_115608.test mysqld(4334,0x7ff850649fc0) malloc: nano zone abandoned due to inability to reserve vm space. MySQL Version 8.0.38 Checking supported features - Binaries are debug compiled mysqltest(4336,0x7ff850649fc0) malloc: nano zone abandoned due to inability to reserve vm space. Using 'all' suites Collecting tests Checking leftover processes Removing old var directory Creating var directory '...../mysql-test/var' Installing system database Using parallel: 1 ============================================================================== TEST NAME RESULT TIME (ms) COMMENT ------------------------------------------------------------------------------ [ 50%] main.dmitry_115608 [ fail ] Found warnings/errors in error log file! Test ended at 2024-07-16 16:29:08 include/load_error_log.inc line Mysqltest client output from logfile ----------- MYSQLTEST OUTPUT START ----------- CREATE TABLE t1 (pk CHAR(5) PRIMARY KEY); INSERT INTO t1 VALUES ('aaaaa'), ('bbbbb'), ('bbbcc'), ('ccccc'), ('ddddd'), ('eeeee'); set global innodb_purge_stop_now=ON; DELETE FROM t1 WHERE pk = 'bbbcc'; SET DEBUG='+d,ddl_buf_add_two'; SET DEBUG_SYNC='ddl_bulk_inserter_latches_released SIGNAL latches_released WAIT_FOR go'; ALTER TABLE t1 ENGINE=InnoDB, ALGORITHM=INPLACE; SET DEBUG_SYNC='now WAIT_FOR latches_released'; SET GLOBAL innodb_purge_run_now=ON; SET DEBUG_SYNC='now SIGNAL go'; SELECT * FROM t1; pk aaaaa bbbbb ccccc eeeee SET DEBUG='-d,ddl_buf_add_two'; DROP TABLE t1; ------------ MYSQLTEST OUTPUT END ----------- - the logfile can be found in ......./log/main.dmitry_115608/dmitry_115608.log' [100%] shutdown_report [ pass ] ------------------------------------------------------------------------------ The servers were restarted 0 times The servers were reinitialized 0 times Spent 0.000 of 58 seconds executing testcases Completed: Failed 1/2 tests, 50.00% were successful. Failing test(s): main.dmitry_115608 -------------------------------------------------- This bug is now verified for 8.0, 8.4 and 9.0 Thank you for your contribution. Many regards .......
[18 Jul 21:54]
Dmitry Lenev
Tentative fix for the lost rows problem. (*) I confirm the code being submitted is offered under the terms of the OCA, and that I am authorized to contribute it.
Contribution: ps-9144-bug115608-contrib.patch (text/x-patch), 10.55 KiB.
[18 Jul 21:57]
Dmitry Lenev
Hello! I am adding a patch with tentative fix to the problem described in this bug above. It would be nice if this area/code got some attention from the MySQL team as it seems that there are more bugs lurking there.
[18 Jul 21:58]
Dmitry Lenev
Forgot to add that the submitted patch is against MySQL Server 8.0.38 sources.
[19 Jul 9:45]
MySQL Verification Team
Thank you, Mr. Lenev, for your contribution.