Bug #20195 | INSERT DELAYED with auto_increment is assigned wrong values | ||
---|---|---|---|
Submitted: | 1 Jun 2006 11:55 | Modified: | 22 Jun 2006 14:31 |
Reporter: | Peter Olsen | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server | Severity: | S2 (Serious) |
Version: | 5.0.22 | OS: | Any (All) |
Assigned to: | Georgi Kodinov | CPU Architecture: | Any |
[1 Jun 2006 11:55]
Peter Olsen
[1 Jun 2006 12:33]
Peter Olsen
The Binary Log for this test case
Attachment: bin-log.txt (text/plain), 2.82 KiB.
[1 Jun 2006 17:35]
Jorge del Conde
Hi! Thanks for your bug report. I was able to reproduce this bug under FC5 using 5.0.23bk: mysql> CREATE TABLE IF NOT EXISTS mytable ( -> id int(10) unsigned NOT NULL auto_increment, -> info varchar(255) , -> PRIMARY KEY (id) -> ); Query OK, 0 rows affected (0.01 sec) mysql> mysql> # Make one delayed insert to start the separate thread mysql> insert delayed into mytable (id,info) values(null,'delayed'); Query OK, 1 row affected (0.00 sec) mysql> mysql> # Do some normal inserts mysql> insert into mytable (id,info) values(null,'normal'); Query OK, 1 row affected (0.00 sec) mysql> insert into mytable (id,info) values(null,'normal'); Query OK, 1 row affected (0.00 sec) mysql> mysql> # Check what we have so far mysql> select * from mytable order by id; +----+---------+ | id | info | +----+---------+ | 1 | delayed | | 2 | normal | | 3 | normal | +----+---------+ 3 rows in set (0.00 sec) mysql> mysql> insert delayed into mytable (id,info) values(null,'delayed'); Query OK, 1 row affected (0.00 sec) mysql> mysql> # Discarded, since the delayed-counter is 3, which is already used mysql> insert delayed into mytable (id,info) values(null,'delayed'); Query OK, 1 row affected (0.00 sec) mysql> mysql> # Works, since the delayed-counter is 4, which is unused mysql> insert delayed into mytable (id,info) values(null,'delayed'); Query OK, 1 row affected (0.00 sec) mysql> mysql> # Check what we have now mysql> select * from mytable order by id; +----+---------+ | id | info | +----+---------+ | 1 | delayed | | 2 | normal | | 3 | normal | | 4 | delayed | +----+---------+ 4 rows in set (0.00 sec) mysql> insert into mytable (id,info) values(null,'normal'); Query OK, 1 row affected (0.00 sec) mysql> insert into mytable (id,info) values(null,'normal'); Query OK, 1 row affected (0.01 sec) mysql> insert into mytable (id,info) values(null,'normal'); Query OK, 1 row affected (0.00 sec) mysql> mysql> # Delete one of the above to make a hole mysql> delete from mytable where id=6; Query OK, 1 row affected (0.00 sec) mysql> mysql> # Discarded, since the delayed-counter is 5, which is already used mysql> insert delayed into mytable (id,info) values(null,'delayed'); Query OK, 1 row affected (0.00 sec) mysql> mysql> # Works, since the delayed-counter is 6, which is unused (the row we deleted) mysql> insert delayed into mytable (id,info) values(null,'delayed'); Query OK, 1 row affected (0.00 sec) mysql> mysql> # Discarded, since the delayed-counter is 7, which is already used mysql> insert delayed into mytable (id,info) values(null,'delayed'); Query OK, 1 row affected (0.00 sec) mysql> mysql> # Works, since the delayed-counter is 8, which is unused mysql> insert delayed into mytable (id,info) values(null,'delayed'); Query OK, 1 row affected (0.00 sec) mysql> mysql> # Check what we have now mysql> select * from mytable order by id; +----+---------+ | id | info | +----+---------+ | 1 | delayed | | 2 | normal | | 3 | normal | | 4 | delayed | | 5 | normal | | 6 | delayed | | 7 | normal | | 8 | delayed | +----+---------+ 8 rows in set (0.00 sec) mysql>
[1 Jun 2006 20:17]
Guilhem Bichot
As pointed by Mr Olsen, BUG#20043 has large connections with this one (the "delayed has its own counter" observation explains the absence of one row from the table in BUG#20043; however the absence of another row from the binlog remains a specificity of BUG#20043 so far).
[9 Jun 2006 15:42]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/7446
[13 Jun 2006 15:14]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/7573
[19 Jun 2006 0:17]
Evgeny Potemkin
Fixed in 5.0.23, 5.1.12
[20 Jun 2006 11:01]
Evgeny Potemkin
The INSERT DELAYED should not maintain its own private auto-increment counter, because this is assuming that other threads cannot insert into the table while the INSERT DELAYED thread is inserting, which is a wrong assumption.
[22 Jun 2006 14:31]
Paul DuBois
Noted in 5.0.23, 5.1.12 changelogs.