Bug #45266 | Queries in Azalea sporadically return bad results | ||
---|---|---|---|
Submitted: | 2 Jun 2009 12:39 | Modified: | 4 Sep 2009 12:57 |
Reporter: | Philip Stoev | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Optimizer | Severity: | S2 (Serious) |
Version: | 5.4 | OS: | Any |
Assigned to: | Evgeny Potemkin | CPU Architecture: | Any |
Tags: | regression |
[2 Jun 2009 12:39]
Philip Stoev
[3 Jun 2009 8:16]
Sveta Smirnova
Thank you for the report. Verified as described.
[5 Jun 2009 8:47]
Philip Stoev
Another way to reproduce with the RQG: perl runall.pl --basedir=/build/bzr/azalea/ --grammar=conf/join.yy --threads=5 --validator=SelectStability The SelectStablity Validator runs the same query a few times and signals failure if the different executions returned different results. When you run this command, apart from the other unrelated error messages, you will see things like: # 11:43:00 Query: SELECT table2 . `time_key` AS field1 FROM (BB AS table1 LEFT JOIN (B AS table2 CROSS JOIN (A AS table3 STRAIGHT_JOIN (BB AS table4 LEFT OUTER JOIN (A AS table5 RIGHT OUTER JOIN (AA AS table6 INNER JOIN C AS table7 ON ( table7 . `pk` = table6 . `time_nokey` )) ON ( table7 . `int_key` = table6 . `time_nokey` )) ON ( table7 . `date_key` = table6 . `pk` )) ON ( table7 . `datetime_nokey` = table6 . `int_key` )) ON ( table7 . `time_key` = table6 . `int_nokey` )) ON ( table7 . `date_nokey` = table6 . `varchar_key` )) WHERE NOT ( ( ( table6 . `time_nokey` < '2007-09-13 18:54:24' AND table4 . `int_nokey` < 'gjgj') AND table3 . `date_key` > table1 . `pk`) AND table1 . `pk` <= 'lclc') GROUP BY field1 ; returns different result when executed after a delay of 0 seconds. --- /tmp//randgen7556-server0.dump 2009-06-05 11:43:00.000000000 +0300 +++ /tmp//randgen7556-server1.dump 2009-06-05 11:43:00.000000000 +0300 @@ -0,0 +1 @@ +NULL
[5 Jun 2009 9:56]
Philip Stoev
I could not reproduce this issue under valgrind -- it appears that the server is running too slowly for the race condition to manifest.
[22 Jun 2009 15:31]
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/76854 2796 Evgeny Potemkin 2009-06-22 Bug#45266: Uninitialized variable lead to an empty result. The TABLE::reginfo.impossible_range is used by the optimizer to indicate that the condition applied to the table is impossible. It wasn't initialized at table opening and this led to an empty result on some queries. The open_table function now initializes the TABLE::reginfo.impossible_range variable. @ sql/sql_base.cc Bug#45266: Uninitialized variable lead to an empty result. The open_table function now initializes the TABLE::reginfo.impossible_range variable. @ sql/sql_select.cc Bug#45266: Uninitialized variable lead to an empty result. The TABLE::reginfo.impossible_range variable now initialized when the table is being opened.
[24 Jun 2009 16:32]
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/77056 2796 Evgeny Potemkin 2009-06-24 Bug#45266: Uninitialized variable lead to an empty result. The TABLE::reginfo.impossible_range is used by the optimizer to indicate that the condition applied to the table is impossible. It wasn't initialized at table opening and this led to an empty result on some queries. The open_table function now initializes the TABLE::reginfo.impossible_range variable. @ mysql-test/r/select.result A test case for the bug#45266: Uninitialized variable lead to an empty result. @ mysql-test/t/select.test A test case for the bug#45266: Uninitialized variable lead to an empty result. @ sql/sql_base.cc Bug#45266: Uninitialized variable lead to an empty result. The open_table function now initializes the TABLE::reginfo.impossible_range variable. @ sql/sql_select.cc Bug#45266: Uninitialized variable lead to an empty result. The open_table function now initializes the TABLE::reginfo.impossible_range variable.
[25 Jun 2009 8:39]
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/77120 2796 Evgeny Potemkin 2009-06-25 Bug#45266: Uninitialized variable lead to an empty result. The TABLE::reginfo.impossible_range is used by the optimizer to indicate that the condition applied to the table is impossible. It wasn't initialized at table opening and this might lead to an empty result on complex queries: a query might set the impossible_range flag on a table and when the query finishes, all tables are returned back to the table cache. The next query that uses the table with the impossible_range flag set and an index over the table will see the flag and thus return an empty result. The open_table function now initializes the TABLE::reginfo.impossible_range variable. @ mysql-test/r/select.result A test case for the bug#45266: Uninitialized variable lead to an empty result. @ mysql-test/t/select.test A test case for the bug#45266: Uninitialized variable lead to an empty result. @ sql/sql_base.cc Bug#45266: Uninitialized variable lead to an empty result. The open_table function now initializes the TABLE::reginfo.impossible_range variable. @ sql/sql_select.cc Bug#45266: Uninitialized variable lead to an empty result. The open_table function now initializes the TABLE::reginfo.impossible_range variable. @ sql/structs.h Bug#45266: Uninitialized variable lead to an empty result. A comment is added.
[25 Jun 2009 12:54]
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/77184 2796 Evgeny Potemkin 2009-06-25 Bug#45266: Uninitialized variable lead to an empty result. The TABLE::reginfo.impossible_range is used by the optimizer to indicate that the condition applied to the table is impossible. It wasn't initialized at table opening and this might lead to an empty result on complex queries: a query might set the impossible_range flag on a table and when the query finishes, all tables are returned back to the table cache. The next query that uses the table with the impossible_range flag set and an index over the table will see the flag and thus return an empty result. The open_table function now initializes the TABLE::reginfo.impossible_range variable. @ mysql-test/r/select.result A test case for the bug#45266: Uninitialized variable lead to an empty result. @ mysql-test/r/select_jcl6.result A test case result adjusted after fix for the bug#45266. @ mysql-test/t/select.test A test case for the bug#45266: Uninitialized variable lead to an empty result. @ sql/sql_base.cc Bug#45266: Uninitialized variable lead to an empty result. The open_table function now initializes the TABLE::reginfo.impossible_range variable. @ sql/sql_select.cc Bug#45266: Uninitialized variable lead to an empty result. The open_table function now initializes the TABLE::reginfo.impossible_range variable. @ sql/structs.h Bug#45266: Uninitialized variable lead to an empty result. A comment is added.
[26 Jun 2009 10:52]
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/77307 2812 Evgeny Potemkin 2009-06-26 [merge] Merged bug#45266.
[26 Jun 2009 15:58]
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/77367 2977 Evgeny Potemkin 2009-06-26 Bug#45266: Uninitialized variable lead to an empty result. The TABLE::reginfo.impossible_range is used by the optimizer to indicate that the condition applied to the table is impossible. It wasn't initialized at table opening and this might lead to an empty result on complex queries: a query might set the impossible_range flag on a table and when the query finishes, all tables are returned back to the table cache. The next query that uses the table with the impossible_range flag set and an index over the table will see the flag and thus return an empty result. The open_table function now initializes the TABLE::reginfo.impossible_range variable. @ mysql-test/r/select.result A test case for the bug#45266: Uninitialized variable lead to an empty result. @ mysql-test/t/select.test A test case for the bug#45266: Uninitialized variable lead to an empty result. @ sql/sql_base.cc Bug#45266: Uninitialized variable lead to an empty result. The open_table function now initializes the TABLE::reginfo.impossible_range variable. @ sql/sql_select.cc Bug#45266: Uninitialized variable lead to an empty result. The open_table function now initializes the TABLE::reginfo.impossible_range variable. @ sql/structs.h Bug#45266: Uninitialized variable lead to an empty result. A comment is added.
[26 Jun 2009 16:00]
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/77368 2981 Evgeny Potemkin 2009-06-26 [merge] Merged bug#45266.
[29 Jun 2009 9:02]
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/77430 3409 Evgeny Potemkin 2009-06-29 [merge] Merged fix for the bug#45266.
[3 Jul 2009 6:13]
Bugs System
Pushed into 5.4.4-alpha (revid:alik@sun.com-20090702084644-k95gd2asolvz2zpu) (version source revid:holyfoot@mysql.com-20090626134731-v8ihjcbytkyxhm7k) (merge vers: 5.4.4-alpha) (pib:11)
[8 Jul 2009 13:30]
Bugs System
Pushed into 5.1.37 (revid:joro@sun.com-20090708131116-kyz8iotbum8w9yic) (version source revid:epotemkin@mysql.com-20090626195941-1kwpfn7udfavap2o) (merge vers: 5.1.37) (pib:11)
[9 Jul 2009 7:35]
Bugs System
Pushed into 5.4.4-alpha (revid:alik@sun.com-20090702084644-k95gd2asolvz2zpu) (version source revid:holyfoot@mysql.com-20090626134731-v8ihjcbytkyxhm7k) (merge vers: 5.4.4-alpha) (pib:11)
[9 Jul 2009 7:36]
Bugs System
Pushed into 5.1.37 (revid:joro@sun.com-20090708131116-kyz8iotbum8w9yic) (version source revid:epotemkin@mysql.com-20090626195941-1kwpfn7udfavap2o) (merge vers: 5.1.37) (pib:11)
[10 Jul 2009 11:21]
Bugs System
Pushed into 5.4.4-alpha (revid:anozdrin@bk-internal.mysql.com-20090710111017-bnh2cau84ug1hvei) (version source revid:v.narayanan@sun.com-20090629093429-51ipymxqrh0n1skw) (merge vers: 5.4.4-alpha) (pib:11)
[26 Aug 2009 13:46]
Bugs System
Pushed into 5.1.37-ndb-7.0.8 (revid:jonas@mysql.com-20090826132541-yablppc59e3yb54l) (version source revid:jonas@mysql.com-20090826132541-yablppc59e3yb54l) (merge vers: 5.1.37-ndb-7.0.8) (pib:11)
[26 Aug 2009 13:46]
Bugs System
Pushed into 5.1.37-ndb-6.3.27 (revid:jonas@mysql.com-20090826105955-bkj027t47gfbamnc) (version source revid:jonas@mysql.com-20090826105955-bkj027t47gfbamnc) (merge vers: 5.1.37-ndb-6.3.27) (pib:11)
[26 Aug 2009 13:48]
Bugs System
Pushed into 5.1.37-ndb-6.2.19 (revid:jonas@mysql.com-20090825194404-37rtosk049t9koc4) (version source revid:jonas@mysql.com-20090825194404-37rtosk049t9koc4) (merge vers: 5.1.37-ndb-6.2.19) (pib:11)
[27 Aug 2009 16:33]
Bugs System
Pushed into 5.1.35-ndb-7.1.0 (revid:magnus.blaudd@sun.com-20090827163030-6o3kk6r2oua159hr) (version source revid:jonas@mysql.com-20090826132541-yablppc59e3yb54l) (merge vers: 5.1.37-ndb-7.0.8) (pib:11)
[4 Sep 2009 1:14]
Paul DuBois
Noted in 5.4.4 changelog. The optimizer mishandled "impossible range" conditions and returned empty results due to an uninitialized variable.
[4 Sep 2009 1:15]
Paul DuBois
The initial report for this bug says that it does not occur in 5.1, but there is a "pushed into 5.1.37" comment later on. Does the problem occur in 5.1 or was the 5.1 push a null merge?
[4 Sep 2009 7:07]
Evgeny Potemkin
5.1 is affected also. There is two different queries on which the bug manifests itself. The one reported here doesn't trigger it in 5.1, the second one does.
[4 Sep 2009 12:57]
Paul DuBois
Noted in 5.1.37 changelog.
[7 Oct 2009 18:37]
Paul DuBois
The 5.4 fix has been pushed to 5.4.2.