| Bug #41098 | Query Cache returns wrong result with concurrent insert | ||
|---|---|---|---|
| Submitted: | 28 Nov 2008 15:33 | Modified: | 18 Mar 15:49 |
| Reporter: | Matthias Leich | ||
| Status: | Closed | ||
| Category: | Server: Query Cache | Severity: | S3 (Non-critical) |
| Version: | 5.1,6.0 | OS: | Any |
| Assigned to: | Davi Arnaut | Target Version: | 5.1+ |
| Tags: | regression, wrong result, qcache, query cache, qc, random | ||
| Triage: | Triaged: D2 (Serious) / R2 (Low) / E3 (Medium) | ||
[28 Nov 2008 15:33]
Matthias Leich
[28 Nov 2008 15:35]
Matthias Leich
test script
Attachment: query_cache_28249.test (application/octet-stream, text), 3.63 KiB.
[28 Nov 2008 15:35]
Matthias Leich
Expected results
Attachment: query_cache_28249.result (application/octet-stream, text), 1.78 KiB.
[28 Nov 2008 15:39]
Matthias Leich
How to avoid this bug based on my experiments: - use a engine <> MyISAM or - switch concurrent_inserts off or - switch the query cache off
[28 Nov 2008 16:45]
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/60193 2713 Matthias Leich 2008-11-28 - Fix for Bug#40179 Test main.query_cache failing randomly on Pushbuild, test weakness - disable the test suffering from Bug#41098 Query Cache returns wrong result with concurrent insert - additional improvements Details: - Move the test for the historic bug Bug 28249 Query Cache returns wrong result with concurrent insert / certain lock into its own testscript query_cache_28249.test. - query_cache.test: - replace error numbers with error names - remove trailing spaces, replace tabs with spaces - reset of @@global.log_bin_trust_function_creators to its original value at the end of the test - query_cache_28249.test: - replace sleep 5 with poll routine - avoid random differences caused by concurrent_inserts effects - improved comments and formatting
[1 Dec 2008 20:23]
Matthias Leich
Unintended action of push email processing. The changeset only disables this test.
[19 Dec 2008 21:47]
Matthias Leich
The patch for Bug#40179 Test main.query_cache failing randomly on Pushbuild, test weakness is pushed to 5.1/6.0-bugteam. Please use "query_cache_28249" (included in fix above) for replaying the problem and remove this test from t/disabled.def if the bug is fixed.
[15 Jan 7:35]
Bugs System
Pushed into 5.1.31 (revid:joro@sun.com-20090115053147-tx1oapthnzgvs1ro) (version source revid:azundris@mysql.com-20081230114838-cn52tu180wcrvh0h) (merge vers: 5.1.31) (pib:6)
[19 Jan 12:23]
Bugs System
Pushed into 5.1.31-ndb-6.2.17 (revid:tomas.ulin@sun.com-20090119095303-uwwvxiibtr38djii) (version source revid:tomas.ulin@sun.com-20090115073240-1wanl85vlvw2she1) (merge vers: 5.1.31-ndb-6.2.17) (pib:6)
[19 Jan 14:01]
Bugs System
Pushed into 5.1.31-ndb-6.3.21 (revid:tomas.ulin@sun.com-20090119104956-guxz190n2kh31fxl) (version source revid:tomas.ulin@sun.com-20090119104956-guxz190n2kh31fxl) (merge vers: 5.1.31-ndb-6.3.21) (pib:6)
[19 Jan 17:07]
Bugs System
Pushed into 5.1.31-ndb-6.4.1 (revid:tomas.ulin@sun.com-20090119144033-4aylstx5czzz88i5) (version source revid:tomas.ulin@sun.com-20090119144033-4aylstx5czzz88i5) (merge vers: 5.1.31-ndb-6.4.1) (pib:6)
[20 Jan 19:55]
Bugs System
Pushed into 6.0.10-alpha (revid:joro@sun.com-20090119171328-2hemf2ndc1dxl0et) (version source revid:azundris@mysql.com-20081230114916-c290n83z25wkt6e4) (merge vers: 6.0.9-alpha) (pib:6)
[9 Feb 18:22]
Davi Arnaut
A fix that went in 5.1 removed a unlock tables and broke the fix for Bug#28249.
[12 Feb 13:19]
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/66030 2801 Davi Arnaut 2009-02-12 Bug#41098: Query Cache returns wrong result with concurrent insert The problem is that select queries executed concurrently with concurrent inserts on a MyISAM table could be cached if the select started after the query cache invalidation but before the unlock of tables performed by the concurrent insert. This race could happen because the concurrent insert was failing to prevent cache of select queries happening at the same time. The solution is to a 'uncacheable' status flag to signal that a concurrent insert is being performed on the table and that queries executing at the same time shouldn't cache the results. modified: mysql-test/r/query_cache_debug.result mysql-test/t/disabled.def mysql-test/t/query_cache_debug.test sql/sql_cache.cc sql/sql_insert.cc storage/myisam/ha_myisam.cc storage/myisam/mi_locking.c storage/myisam/myisamdef.h
[19 Feb 22:10]
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/66972 2809 Davi Arnaut 2009-02-19 Bug#41098: Query Cache returns wrong result with concurrent insert The problem is that select queries executed concurrently with a concurrent insert on a MyISAM table could be cached if the select started after the query cache invalidation but before the unlock of tables performed by the concurrent insert. This race could happen because the concurrent insert was failing to prevent cache of select queries happening at the same time. The solution is to add a 'uncacheable' status flag to signal that a concurrent insert is being performed on the table and that queries executing at the same time shouldn't cache the results. @ mysql-test/r/query_cache_debug.result Add test case result for Bug#41098 @ mysql-test/t/disabled.def Re-enable test case. @ mysql-test/t/query_cache_debug.test Add test case for Bug#41098 @ sql/sql_cache.cc Debug sync point for regression testing purposes. @ sql/sql_insert.cc Remove meaningless query cache invalidate. There is already a preceding invalidate for queries that started before the concurrent insert. @ storage/myisam/ha_myisam.cc Check for a active concurrent insert. @ storage/myisam/mi_locking.c Signal the start of a concurrent insert. Flag is zeroed once the state is updated back. @ storage/myisam/myisamdef.h Add flag to signal a active concurrent insert.
[19 Feb 22:17]
Davi Arnaut
Queued to 5.1-bugteam
[13 Mar 20:03]
Bugs System
Pushed into 5.1.33 (revid:joro@sun.com-20090313111355-7bsi1hgkvrg8pdds) (version source revid:azundris@mysql.com-20090224070618-mr7stu6rfcvoj18g) (merge vers: 5.1.33) (pib:6)
[15 Mar 3:56]
Paul DuBois
Noted in 5.1.33 changelog. SELECT statements executed concurrently with INSERT statements for a MyISAM table could cause incorrect results to be returned from the query cache. Setting report to NDI pending push into 6.0.x.
[18 Mar 14:20]
Bugs System
Pushed into 6.0.11-alpha (revid:joro@sun.com-20090318122208-1b5kvg6zeb4hxwp9) (version source revid:azundris@mysql.com-20090223123708-n9rf2to3g15br7za) (merge vers: 6.0.10-alpha) (pib:6)
[18 Mar 15:49]
Paul DuBois
Noted in 6.0.11 changelog.
[9 May 18:40]
Bugs System
Pushed into 5.1.34-ndb-6.2.18 (revid:jonas@mysql.com-20090508185236-p9b3as7qyauybefl) (version source revid:jonas@mysql.com-20090508100057-30ote4xggi4nq14v) (merge vers: 5.1.33-ndb-6.2.18) (pib:6)
[9 May 19:37]
Bugs System
Pushed into 5.1.34-ndb-6.3.25 (revid:jonas@mysql.com-20090509063138-1u3q3v09wnn2txyt) (version source revid:jonas@mysql.com-20090508175813-s6yele2z3oh6o99z) (merge vers: 5.1.33-ndb-6.3.25) (pib:6)
[9 May 20:35]
Bugs System
Pushed into 5.1.34-ndb-7.0.6 (revid:jonas@mysql.com-20090509154927-im9a7g846c6u1hzc) (version source revid:jonas@mysql.com-20090509073226-09bljakh9eppogec) (merge vers: 5.1.33-ndb-7.0.6) (pib:6)
