From 5184530308466e83b8a77c35e05201778cdc6827 Mon Sep 17 00:00:00 2001 From: Joerg Bruehe Date: Thu, 8 Oct 2009 21:58:17 +0200 Subject: [PATCH 1/9] Fix bug#47923 New "mf_keycache.c" requires thread support The bug is a compilation issue: Function "find_key_block()" had thread operations which were not guarded by "#if THREAD", add that now. --- mysys/mf_keycache.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mysys/mf_keycache.c b/mysys/mf_keycache.c index 3c11e6731b7..6ffa8fb3ea8 100644 --- a/mysys/mf_keycache.c +++ b/mysys/mf_keycache.c @@ -1742,6 +1742,7 @@ restart: - block assigned but not yet read from file (invalid data). */ +#if THREAD if (keycache->in_resize) { /* This is a request during a resize operation */ @@ -1983,6 +1984,9 @@ restart: } DBUG_RETURN(0); } +#else /* THREAD */ + DBUG_ASSERT(!keycache->in_resize); +#endif if (page_status == PAGE_READ && (block->status & (BLOCK_IN_EVICTION | BLOCK_IN_SWITCH | From 0f1547a0ab09b6e470d2b9f690015a99c6b7c682 Mon Sep 17 00:00:00 2001 From: Joerg Bruehe Date: Fri, 9 Oct 2009 21:31:37 +0200 Subject: [PATCH 2/9] Fix Bug #47957 A build "--without-server" fails if using "--with-ssl" (YaSSL) The problem was the lack of directory "extra" in a build which did not include the server. --- configure.in | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/configure.in b/configure.in index 3e43a5f5779..82335e2c3fd 100644 --- a/configure.in +++ b/configure.in @@ -2769,7 +2769,7 @@ server_scripts= dnl This probably should be cleaned up more - for now the threaded dnl client is just using plain-old libs. -sql_client_dirs="strings regex mysys dbug libmysql" +sql_client_dirs="strings mysys dbug extra regex libmysql" AM_CONDITIONAL(THREAD_SAFE_CLIENT, test "$THREAD_SAFE_CLIENT" != "no") @@ -2835,9 +2835,10 @@ AC_SUBST(mysql_plugin_defs) # Now that sql_client_dirs and sql_server_dirs are stable, determine the union. -# Start with the (longer) server list, add each client item not yet present. -sql_union_dirs=" $sql_server_dirs " -for DIR in $sql_client_dirs +# We support client-only builds by "--without-server", but not vice versa, +# so we start with the client list, then add each server item not yet present. +sql_union_dirs=" $sql_client_dirs " +for DIR in $sql_server_dirs do if echo " $sql_union_dirs " | grep " $DIR " >/dev/null then From 5db734a896bff99d044eb6e08bb5c849d04915ef Mon Sep 17 00:00:00 2001 From: Alexey Kopytov Date: Tue, 13 Oct 2009 19:49:32 +0400 Subject: [PATCH 3/9] Bug #47123: Endless 100% CPU loop with STRAIGHT_JOIN The problem was in incorrect handling of predicates involving NULL as a constant value by the range optimizer. For example, when creating a SEL_ARG node from a condition of the form "field < const" (which would normally result in the "NULL < field < const" SEL_ARG), the special case when "const" is NULL was not taken into account, so "NULL < field < NULL" was produced for the "field < NULL" condition. As a result, SEL_ARG structures of this form could not be further optimized which in turn could lead to incorrectly constructed SEL_ARG trees. In particular, code assuming SEL_ARG structures to always form a sequence of ordered disjoint intervals could enter an infinite loop under some circumstances. Fixed by changing get_mm_leaf() so that for any sargable predicate except "<=>" involving NULL as a constant, "empty" SEL_ARG is returned, since such a predicate is always false. --- mysql-test/r/range.result | 9 +++++++++ mysql-test/t/range.test | 10 ++++++++++ sql/opt_range.cc | 11 +++++++++++ 3 files changed, 30 insertions(+) diff --git a/mysql-test/r/range.result b/mysql-test/r/range.result index cc5e8d2be96..69ae81982a9 100644 --- a/mysql-test/r/range.result +++ b/mysql-test/r/range.result @@ -1219,3 +1219,12 @@ explain select * from t2 where a=1000 and b<11; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t2 ref a a 5 const 502 Using where drop table t1, t2; +# +# Bug #47123: Endless 100% CPU loop with STRAIGHT_JOIN +# +CREATE TABLE t1(a INT, KEY(a)); +INSERT INTO t1 VALUES (1), (NULL); +SELECT * FROM t1 WHERE a <> NULL and (a <> NULL or a <= NULL); +a +DROP TABLE t1; +# End of 5.1 tests diff --git a/mysql-test/t/range.test b/mysql-test/t/range.test index e1411e7fd46..7b35f69c041 100644 --- a/mysql-test/t/range.test +++ b/mysql-test/t/range.test @@ -1046,3 +1046,13 @@ explain select * from t2 where a=1000 and b<11; drop table t1, t2; +--echo # +--echo # Bug #47123: Endless 100% CPU loop with STRAIGHT_JOIN +--echo # + +CREATE TABLE t1(a INT, KEY(a)); +INSERT INTO t1 VALUES (1), (NULL); +SELECT * FROM t1 WHERE a <> NULL and (a <> NULL or a <= NULL); +DROP TABLE t1; + +--echo # End of 5.1 tests diff --git a/sql/opt_range.cc b/sql/opt_range.cc index 2239aafbeec..cfaff76b96b 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -5887,6 +5887,17 @@ get_mm_leaf(RANGE_OPT_PARAM *param, COND *conf_func, Field *field, goto end; } field->table->in_use->variables.sql_mode= orig_sql_mode; + + /* + Any sargable predicate except "<=>" involving NULL as a constant is always + FALSE + */ + if (type != Item_func::EQUAL_FUNC && field->is_real_null()) + { + tree= &null_element; + goto end; + } + str= (uchar*) alloc_root(alloc, key_part->store_length+1); if (!str) goto end; From cd69e34ca7c0e6fbbbac5823f22e30035566b180 Mon Sep 17 00:00:00 2001 From: Sergey Vojtovich Date: Thu, 15 Oct 2009 12:31:11 +0500 Subject: [PATCH 4/9] Disabled part of test for BUG#47073 until additional fix is pushed. --- mysql-test/r/myisam.result | 7 ------- mysql-test/t/myisam.test | 11 +++++++---- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/mysql-test/r/myisam.result b/mysql-test/r/myisam.result index df97e96c334..f5050ccf1c0 100644 --- a/mysql-test/r/myisam.result +++ b/mysql-test/r/myisam.result @@ -2290,13 +2290,6 @@ Table Op Msg_type Msg_text test.t1 repair error myisam_sort_buffer_size is too small test.t1 repair warning Number of rows changed from 0 to 7168 test.t1 repair status OK -SET myisam_repair_threads=2; -REPAIR TABLE t1; -Table Op Msg_type Msg_text -test.t1 repair error myisam_sort_buffer_size is too small -test.t1 repair warning Number of rows changed from # to 7168 -test.t1 repair status OK -SET myisam_repair_threads=@@global.myisam_repair_threads; SET myisam_sort_buffer_size=@@global.myisam_sort_buffer_size; DROP TABLE t1; End of 5.1 tests diff --git a/mysql-test/t/myisam.test b/mysql-test/t/myisam.test index faeb5ee686a..e4ea939f348 100644 --- a/mysql-test/t/myisam.test +++ b/mysql-test/t/myisam.test @@ -1538,11 +1538,14 @@ INSERT INTO t1 SELECT a+2560,b FROM t1; INSERT INTO t1 SELECT a+5120,b FROM t1; SET myisam_sort_buffer_size=4; REPAIR TABLE t1; -SET myisam_repair_threads=2; + +# !!! Disabled until additional fix for BUG#47073 is pushed. +#SET myisam_repair_threads=2; # May report different values depending on threads activity. ---replace_regex /changed from [0-9]+/changed from #/ -REPAIR TABLE t1; -SET myisam_repair_threads=@@global.myisam_repair_threads; +#--replace_regex /changed from [0-9]+/changed from #/ +#REPAIR TABLE t1; +#SET myisam_repair_threads=@@global.myisam_repair_threads; + SET myisam_sort_buffer_size=@@global.myisam_sort_buffer_size; DROP TABLE t1; From 77fd19b5ec89efd324a05be90c0d9a5f1e693231 Mon Sep 17 00:00:00 2001 From: Georgi Kodinov Date: Thu, 15 Oct 2009 14:02:29 +0300 Subject: [PATCH 5/9] Marked all the NDB related tests experimental as agreed with Bernard Ocklin. --- mysql-test/collections/default.experimental | 42 ++++++++++++++++++--- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/mysql-test/collections/default.experimental b/mysql-test/collections/default.experimental index 214b732e5cb..8b513af382c 100644 --- a/mysql-test/collections/default.experimental +++ b/mysql-test/collections/default.experimental @@ -1,9 +1,41 @@ +binlog.binlog_multi_engine.test # joro : NDB tests marked as experimental as agreed with bochklin + funcs_1.charset_collation_1 # depends on compile-time decisions -main.plugin_load @solaris # Bug#42144 +funcs_1.is_cml_ndb.test # joro : NDB tests marked as experimental as agreed with bochklin +funcs_1.is_columns_ndb.test # joro : NDB tests marked as experimental as agreed with bochklin +funcs_1.is_engines_ndb.test # joro : NDB tests marked as experimental as agreed with bochklin +funcs_1.is_tables_ndb.test # joro : NDB tests marked as experimental as agreed with bochklin +funcs_1.ndb* # joro : NDB tests marked as experimental as agreed with bochklin + +funcs_2.ndb_charset.test # joro : NDB tests marked as experimental as agreed with bochklin + main.ctype_gbk_binlog @solaris # Bug#46010: main.ctype_gbk_binlog fails sporadically : Table 't2' already exists -rpl.rpl_row_create_table* # Bug#45576: rpl_row_create_table fails on PB2 -rpl_ndb.rpl_ndb_log # Bug#38998 -rpl.rpl_innodb_bug28430* @solaris # Bug#46029 -rpl.rpl_get_master_version_and_clock* # Bug#46931 2009-08-26 alik rpl.rpl_get_master_version_and_clock fails on hpux11.31 main.innodb-autoinc* # Bug#47809 2009-10-04 joro innodb-autoinc.test fails with valgrind errors with the innodb plugin +main.plugin_load @solaris # Bug#42144 + +ndb.* # joro : NDB tests marked as experimental as agreed with bochklin + +rpl.rpl_get_master_version_and_clock* # Bug#46931 2009-08-26 alik rpl.rpl_get_master_version_and_clock fails on hpux11.31 +rpl.rpl_innodb_bug28430* @solaris # Bug#46029 +rpl.rpl_row_create_table* # Bug#45576: rpl_row_create_table fails on PB2 rpl.rpl_trigger* # Bug#47810 2009-10-04 joro rpl.rpl_trigger.test fails with valgrind errors with the innodb plugin + +rpl_ndb.* # joro : NDB tests marked as experimental as agreed with bochklin +rpl_ndb.rpl_ndb_log # Bug#38998 + +stress.ddl_ndb.test # joro : NDB tests marked as experimental as agreed with bochklin + +parts.ndb_dd_backuprestore.test # joro : NDB tests marked as experimental as agreed with bochklin +parts.part_supported_sql_func_ndb.test # joro : NDB tests marked as experimental as agreed with bochklin +parts.partition_alter1_1_ndb.test # joro : NDB tests marked as experimental as agreed with bochklin +parts.partition_alter1_1_2_ndb.test # joro : NDB tests marked as experimental as agreed with bochklin +parts.partition_alter1_2_ndb.test # joro : NDB tests marked as experimental as agreed with bochklin +parts.partition_auto_increment_ndb.test # joro : NDB tests marked as experimental as agreed with bochklin +parts.partition_basic_ndb.test # joro : NDB tests marked as experimental as agreed with bochklin +parts.partition_engine_ndb.test # joro : NDB tests marked as experimental as agreed with bochklin +parts.partition_int_ndb.test # joro : NDB tests marked as experimental as agreed with bochklin +parts.partition_mgm_lc0_ndb.test # joro : NDB tests marked as experimental as agreed with bochklin +parts.partition_mgm_lc1_ndb.test # joro : NDB tests marked as experimental as agreed with bochklin +parts.partition_mgm_lc2_ndb.test # joro : NDB tests marked as experimental as agreed with bochklin +parts.partition_syntax_ndb.test # joro : NDB tests marked as experimental as agreed with bochklin +parts.partition_value_ndb.test # joro : NDB tests marked as experimental as agreed with bochklin From ff5833d3467fa927893afe00e8032c2bce84742d Mon Sep 17 00:00:00 2001 From: Georgi Kodinov Date: Thu, 15 Oct 2009 14:22:25 +0300 Subject: [PATCH 6/9] All NDB tests made experimental after a discussion with Bernhard Ocklin. --- mysql-test/collections/default.experimental | 42 ++++++++++++++++++--- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/mysql-test/collections/default.experimental b/mysql-test/collections/default.experimental index 214b732e5cb..907f0f6fdb9 100644 --- a/mysql-test/collections/default.experimental +++ b/mysql-test/collections/default.experimental @@ -1,9 +1,41 @@ +binlog.binlog_multi_engine # joro : NDB tests marked as experimental as agreed with bochklin + funcs_1.charset_collation_1 # depends on compile-time decisions -main.plugin_load @solaris # Bug#42144 +funcs_1.is_cml_ndb # joro : NDB tests marked as experimental as agreed with bochklin +funcs_1.is_columns_ndb # joro : NDB tests marked as experimental as agreed with bochklin +funcs_1.is_engines_ndb # joro : NDB tests marked as experimental as agreed with bochklin +funcs_1.is_tables_ndb # joro : NDB tests marked as experimental as agreed with bochklin +funcs_1.ndb* # joro : NDB tests marked as experimental as agreed with bochklin + +funcs_2.ndb_charset # joro : NDB tests marked as experimental as agreed with bochklin + main.ctype_gbk_binlog @solaris # Bug#46010: main.ctype_gbk_binlog fails sporadically : Table 't2' already exists -rpl.rpl_row_create_table* # Bug#45576: rpl_row_create_table fails on PB2 -rpl_ndb.rpl_ndb_log # Bug#38998 -rpl.rpl_innodb_bug28430* @solaris # Bug#46029 -rpl.rpl_get_master_version_and_clock* # Bug#46931 2009-08-26 alik rpl.rpl_get_master_version_and_clock fails on hpux11.31 main.innodb-autoinc* # Bug#47809 2009-10-04 joro innodb-autoinc.test fails with valgrind errors with the innodb plugin +main.plugin_load @solaris # Bug#42144 + +ndb.* # joro : NDB tests marked as experimental as agreed with bochklin + +rpl.rpl_get_master_version_and_clock* # Bug#46931 2009-08-26 alik rpl.rpl_get_master_version_and_clock fails on hpux11.31 +rpl.rpl_innodb_bug28430* @solaris # Bug#46029 +rpl.rpl_row_create_table* # Bug#45576: rpl_row_create_table fails on PB2 rpl.rpl_trigger* # Bug#47810 2009-10-04 joro rpl.rpl_trigger.test fails with valgrind errors with the innodb plugin + +rpl_ndb.* # joro : NDB tests marked as experimental as agreed with bochklin +rpl_ndb.rpl_ndb_log # Bug#38998 + +stress.ddl_ndb # joro : NDB tests marked as experimental as agreed with bochklin + +parts.ndb_dd_backuprestore # joro : NDB tests marked as experimental as agreed with bochklin +parts.part_supported_sql_func_ndb # joro : NDB tests marked as experimental as agreed with bochklin +parts.partition_alter1_1_ndb # joro : NDB tests marked as experimental as agreed with bochklin +parts.partition_alter1_1_2_ndb # joro : NDB tests marked as experimental as agreed with bochklin +parts.partition_alter1_2_ndb # joro : NDB tests marked as experimental as agreed with bochklin +parts.partition_auto_increment_ndb # joro : NDB tests marked as experimental as agreed with bochklin +parts.partition_basic_ndb # joro : NDB tests marked as experimental as agreed with bochklin +parts.partition_engine_ndb # joro : NDB tests marked as experimental as agreed with bochklin +parts.partition_int_ndb # joro : NDB tests marked as experimental as agreed with bochklin +parts.partition_mgm_lc0_ndb # joro : NDB tests marked as experimental as agreed with bochklin +parts.partition_mgm_lc1_ndb # joro : NDB tests marked as experimental as agreed with bochklin +parts.partition_mgm_lc2_ndb # joro : NDB tests marked as experimental as agreed with bochklin +parts.partition_syntax_ndb # joro : NDB tests marked as experimental as agreed with bochklin +parts.partition_value_ndb # joro : NDB tests marked as experimental as agreed with bochklin From f79064c4d449abec1a96380a5494aba5c3f16994 Mon Sep 17 00:00:00 2001 From: Georgi Kodinov Date: Thu, 15 Oct 2009 14:48:12 +0300 Subject: [PATCH 7/9] version change --- .bzr-mysql/default.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.bzr-mysql/default.conf b/.bzr-mysql/default.conf index e613cefc614..f044f8e62da 100644 --- a/.bzr-mysql/default.conf +++ b/.bzr-mysql/default.conf @@ -1,4 +1,4 @@ [MYSQL] post_commit_to = "commits@lists.mysql.com" post_push_to = "commits@lists.mysql.com" -tree_name = "mysql-5.1-bugteam" +tree_name = "mysql-5.1" From 6b81bff83ce0982bc1eb65f7f87db396de18b0b9 Mon Sep 17 00:00:00 2001 From: Georgi Kodinov Date: Fri, 16 Oct 2009 11:42:16 +0300 Subject: [PATCH 8/9] Revert the fix for bug #47123 until test suite failures are resolved. --- mysql-test/r/range.result | 9 --------- mysql-test/t/range.test | 11 ----------- sql/opt_range.cc | 11 ----------- 3 files changed, 31 deletions(-) diff --git a/mysql-test/r/range.result b/mysql-test/r/range.result index 0d44e79b39a..c98a7696ea6 100644 --- a/mysql-test/r/range.result +++ b/mysql-test/r/range.result @@ -1398,12 +1398,3 @@ a < 10; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t3 range a a 5 NULL 8 Using where; Using index DROP TABLE t1, t2, t3; -# -# Bug #47123: Endless 100% CPU loop with STRAIGHT_JOIN -# -CREATE TABLE t1(a INT, KEY(a)); -INSERT INTO t1 VALUES (1), (NULL); -SELECT * FROM t1 WHERE a <> NULL and (a <> NULL or a <= NULL); -a -DROP TABLE t1; -End of 5.1 tests diff --git a/mysql-test/t/range.test b/mysql-test/t/range.test index f0fa99f3d95..dc119b6a77e 100644 --- a/mysql-test/t/range.test +++ b/mysql-test/t/range.test @@ -1171,14 +1171,3 @@ a < 5 OR a < 10; DROP TABLE t1, t2, t3; - ---echo # ---echo # Bug #47123: Endless 100% CPU loop with STRAIGHT_JOIN ---echo # - -CREATE TABLE t1(a INT, KEY(a)); -INSERT INTO t1 VALUES (1), (NULL); -SELECT * FROM t1 WHERE a <> NULL and (a <> NULL or a <= NULL); -DROP TABLE t1; - ---echo End of 5.1 tests diff --git a/sql/opt_range.cc b/sql/opt_range.cc index 04dae4fd815..119f90bc97a 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -5891,17 +5891,6 @@ get_mm_leaf(RANGE_OPT_PARAM *param, COND *conf_func, Field *field, goto end; } field->table->in_use->variables.sql_mode= orig_sql_mode; - - /* - Any sargable predicate except "<=>" involving NULL as a constant is always - FALSE - */ - if (type != Item_func::EQUAL_FUNC && field->is_real_null()) - { - tree= &null_element; - goto end; - } - str= (uchar*) alloc_root(alloc, key_part->store_length+1); if (!str) goto end; From 9ceeabd9b294c35263df29999f724c3d12ffcae9 Mon Sep 17 00:00:00 2001 From: Joerg Bruehe Date: Fri, 16 Oct 2009 14:06:33 +0200 Subject: [PATCH 9/9] Compile fix for Windows: Use "#ifdef", not plain "#if". --- mysys/mf_keycache.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysys/mf_keycache.c b/mysys/mf_keycache.c index 6ffa8fb3ea8..53a3be6f999 100644 --- a/mysys/mf_keycache.c +++ b/mysys/mf_keycache.c @@ -1742,7 +1742,7 @@ restart: - block assigned but not yet read from file (invalid data). */ -#if THREAD +#ifdef THREAD if (keycache->in_resize) { /* This is a request during a resize operation */