From ddb24be133cdd6d95914a638eb35a544fde3a2b9 Mon Sep 17 00:00:00 2001 From: unknown <murthy.narkedimilli@oracle.com> Date: Mon, 25 Aug 2014 13:04:23 +0200 Subject: [PATCH 01/99] Raise version number after cloning 5.5.40 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index ae997143dac..8d4846bdd50 100644 --- a/VERSION +++ b/VERSION @@ -1,4 +1,4 @@ MYSQL_VERSION_MAJOR=5 MYSQL_VERSION_MINOR=5 -MYSQL_VERSION_PATCH=40 +MYSQL_VERSION_PATCH=41 MYSQL_VERSION_EXTRA= From 2f8bd757cd02888d1bf14802fdb046f0e9b1a5c4 Mon Sep 17 00:00:00 2001 From: Annamalai Gurusami <annamalai.gurusami@oracle.com> Date: Mon, 25 Aug 2014 16:25:07 +0200 Subject: [PATCH 02/99] Bug #19471516 SERVER CRASHES WHEN EXECUTING ALTER TABLE ADD FOREIGN KEY Problem: We maintain two rb trees in each dict_table_t. The foreign_rbt must be in sync with foreign_list. The referenced_rbt must be in sync with referenced_list. There is one function which checks this consistency and it failed, resulting in an assert failure. The root cause of the problem was identified that the search order was lost in the referenced_rbt. This is because while renaming the table, we didn't not refresh this referenced_rbt. Solution: When a foreign key is renamed, we must delete and re-insert into both foreign_rbt and referenced_rbt. rb#6412 approved by Jimmy. --- mysql-test/suite/innodb/r/foreign-keys.result | 16 ++++++++++++ mysql-test/suite/innodb/t/foreign-keys.test | 26 +++++++++++++++++++ storage/innobase/dict/dict0dict.c | 10 +++++++ 3 files changed, 52 insertions(+) create mode 100644 mysql-test/suite/innodb/r/foreign-keys.result create mode 100644 mysql-test/suite/innodb/t/foreign-keys.test diff --git a/mysql-test/suite/innodb/r/foreign-keys.result b/mysql-test/suite/innodb/r/foreign-keys.result new file mode 100644 index 00000000000..be8d27b152c --- /dev/null +++ b/mysql-test/suite/innodb/r/foreign-keys.result @@ -0,0 +1,16 @@ +# +# Bug #19471516 SERVER CRASHES WHEN EXECUTING ALTER TABLE +# ADD FOREIGN KEY +# +CREATE TABLE `department` (`department_id` INT, `department_people_fk` INT, +PRIMARY KEY (`department_id`)) engine=innodb; +CREATE TABLE `title` (`title_id` INT, `title_manager_fk` INT, +`title_reporter_fk` INT, PRIMARY KEY (`title_id`)); +CREATE TABLE `people` (`people_id` INT, PRIMARY KEY (`people_id`)); +ALTER TABLE `department` ADD FOREIGN KEY (`department_people_fk`) REFERENCES +`people` (`people_id`); +ALTER TABLE `title` ADD FOREIGN KEY (`title_manager_fk`) REFERENCES `people` +(`people_id`); +ALTER TABLE `title` ADD FOREIGN KEY (`title_reporter_fk`) REFERENCES `people` +(`people_id`); +drop table title, department, people; diff --git a/mysql-test/suite/innodb/t/foreign-keys.test b/mysql-test/suite/innodb/t/foreign-keys.test new file mode 100644 index 00000000000..45642cf28a7 --- /dev/null +++ b/mysql-test/suite/innodb/t/foreign-keys.test @@ -0,0 +1,26 @@ +--source include/have_innodb.inc +--source include/have_debug.inc + +--echo # +--echo # Bug #19471516 SERVER CRASHES WHEN EXECUTING ALTER TABLE +--echo # ADD FOREIGN KEY +--echo # + +CREATE TABLE `department` (`department_id` INT, `department_people_fk` INT, +PRIMARY KEY (`department_id`)) engine=innodb; + +CREATE TABLE `title` (`title_id` INT, `title_manager_fk` INT, +`title_reporter_fk` INT, PRIMARY KEY (`title_id`)); + +CREATE TABLE `people` (`people_id` INT, PRIMARY KEY (`people_id`)); + +ALTER TABLE `department` ADD FOREIGN KEY (`department_people_fk`) REFERENCES +`people` (`people_id`); + +ALTER TABLE `title` ADD FOREIGN KEY (`title_manager_fk`) REFERENCES `people` +(`people_id`); + +ALTER TABLE `title` ADD FOREIGN KEY (`title_reporter_fk`) REFERENCES `people` +(`people_id`); + +drop table title, department, people; diff --git a/storage/innobase/dict/dict0dict.c b/storage/innobase/dict/dict0dict.c index e225966afe6..0e4691658d5 100644 --- a/storage/innobase/dict/dict0dict.c +++ b/storage/innobase/dict/dict0dict.c @@ -1123,6 +1123,11 @@ dict_table_rename_in_cache( /* The id will be changed. So remove old one */ rbt_delete(foreign->foreign_table->foreign_rbt, foreign->id); + if (foreign->referenced_table) { + rbt_delete(foreign->referenced_table->referenced_rbt, + foreign->id); + } + if (ut_strlen(foreign->foreign_table_name) < ut_strlen(table->name)) { /* Allocate a longer name buffer; @@ -1273,6 +1278,11 @@ dict_table_rename_in_cache( rbt_insert(foreign->foreign_table->foreign_rbt, foreign->id, &foreign); + if (foreign->referenced_table) { + rbt_insert(foreign->referenced_table->referenced_rbt, + foreign->id, &foreign); + } + foreign = UT_LIST_GET_NEXT(foreign_list, foreign); } From db32c38c67fe02e9ac10a918275810539140c645 Mon Sep 17 00:00:00 2001 From: Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> Date: Tue, 26 Aug 2014 11:40:54 +0200 Subject: [PATCH 04/99] Rename enterprise repo packages to commercial --- packaging/rpm-oel/mysql.spec.in | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/packaging/rpm-oel/mysql.spec.in b/packaging/rpm-oel/mysql.spec.in index e6fc6cd634d..d8cf49fe993 100644 --- a/packaging/rpm-oel/mysql.spec.in +++ b/packaging/rpm-oel/mysql.spec.in @@ -156,8 +156,8 @@ Requires: net-tools Provides: MySQL-server-advanced%{?_isa} = %{version}-%{release} Obsoletes: MySQL-server-advanced < %{version}-%{release} Obsoletes: mysql-community-server < %{version}-%{release} -Requires: mysql-enterprise-client%{?_isa} = %{version}-%{release} -Requires: mysql-enterprise-common%{?_isa} = %{version}-%{release} +Requires: mysql-commercial-client%{?_isa} = %{version}-%{release} +Requires: mysql-commercial-common%{?_isa} = %{version}-%{release} %else Provides: MySQL-server%{?_isa} = %{version}-%{release} Requires: mysql-community-client%{?_isa} = %{version}-%{release} @@ -209,7 +209,7 @@ Group: Applications/Databases Provides: MySQL-client-advanced%{?_isa} = %{version}-%{release} Obsoletes: MySQL-client-advanced < %{version}-%{release} Obsoletes: mysql-community-client < %{version}-%{release} -Requires: mysql-enterprise-libs%{?_isa} = %{version}-%{release} +Requires: mysql-commercial-libs%{?_isa} = %{version}-%{release} %else Provides: MySQL-client%{?_isa} = %{version}-%{release} Requires: mysql-community-libs%{?_isa} = %{version}-%{release} @@ -248,7 +248,7 @@ Group: Applications/Databases Provides: MySQL-test-advanced%{?_isa} = %{version}-%{release} Obsoletes: MySQL-test-advanced < %{version}-%{release} Obsoletes: mysql-community-test < %{version}-%{release} -Requires: mysql-enterprise-server%{?_isa} = %{version}-%{release} +Requires: mysql-commercial-server%{?_isa} = %{version}-%{release} %else Provides: MySQL-test%{?_isa} = %{version}-%{release} Requires: mysql-community-server%{?_isa} = %{version}-%{release} @@ -270,7 +270,7 @@ Summary: MySQL benchmark suite Group: Applications/Databases %if 0%{?commercial} Obsoletes: mysql-community-bench < %{version}-%{release} -Requires: mysql-enterprise-server%{?_isa} = %{version}-%{release} +Requires: mysql-commercial-server%{?_isa} = %{version}-%{release} %else Requires: mysql-community-server%{?_isa} = %{version}-%{release} %endif @@ -291,7 +291,7 @@ Group: Applications/Databases Provides: MySQL-devel-advanced%{?_isa} = %{version}-%{release} Obsoletes: MySQL-devel-advanced < %{version}-%{release} Obsoletes: mysql-community-devel < %{version}-%{release} -Requires: mysql-enterprise-libs%{?_isa} = %{version}-%{release} +Requires: mysql-commercial-libs%{?_isa} = %{version}-%{release} %else Provides: MySQL-devel%{?_isa} = %{version}-%{release} Requires: mysql-community-libs%{?_isa} = %{version}-%{release} @@ -313,7 +313,7 @@ Group: Applications/Databases Provides: MySQL-shared-advanced%{?_isa} = %{version}-%{release} Obsoletes: MySQL-shared-advanced < %{version}-%{release} Obsoletes: mysql-community-libs < %{version}-%{release} -Requires: mysql-enterprise-common%{?_isa} = %{version}-%{release} +Requires: mysql-commercial-common%{?_isa} = %{version}-%{release} %else Provides: MySQL-shared%{?_isa} = %{version}-%{release} Requires: mysql-community-common%{?_isa} = %{version}-%{release} @@ -339,7 +339,7 @@ Provides: mysql-libs-compat%{?_isa} = %{version}-%{release} Provides: MySQL-shared-compat-advanced%{?_isa} = %{version}-%{release} Obsoletes: MySQL-shared-compat-advanced < %{version}-%{release} Obsoletes: mysql-community-libs-compat < %{version}-%{release} -Requires: mysql-enterprise-libs%{?_isa} = %{version}-%{release} +Requires: mysql-commercial-libs%{?_isa} = %{version}-%{release} %else Provides: MySQL-shared-compat%{?_isa} = %{version}-%{release} Requires: mysql-community-libs%{?_isa} = %{version}-%{release} @@ -361,7 +361,7 @@ Group: Applications/Databases Provides: MySQL-embedded-advanced%{?_isa} = %{version}-%{release} Obsoletes: MySQL-embedded-advanced < %{version}-%{release} Obsoletes: mysql-community-embedded < %{version}-%{release} -Requires: mysql-enterprise-common%{?_isa} = %{version}-%{release} +Requires: mysql-commercial-common%{?_isa} = %{version}-%{release} %else Provides: MySQL-embedded%{?_isa} = %{version}-%{release} Requires: mysql-community-common%{?_isa} = %{version}-%{release} @@ -389,8 +389,8 @@ Summary: Development header files and libraries for MySQL as an embeddabl Group: Applications/Databases %if 0%{?commercial} Obsoletes: mysql-community-embedded-devel < %{version}-%{release} -Requires: mysql-enterprise-devel%{?_isa} = %{version}-%{release} -Requires: mysql-enterprise-embedded%{?_isa} = %{version}-%{release} +Requires: mysql-commercial-devel%{?_isa} = %{version}-%{release} +Requires: mysql-commercial-embedded%{?_isa} = %{version}-%{release} %else Requires: mysql-community-devel%{?_isa} = %{version}-%{release} Requires: mysql-community-embedded%{?_isa} = %{version}-%{release} @@ -409,9 +409,9 @@ the embedded version of the MySQL server. Summary: Convenience package for easy upgrades of MySQL package set Group: Applications/Databases %if 0%{?commercial} -Requires: mysql-enterprise-client%{?_isa} = %{version}-%{release} -Requires: mysql-enterprise-libs%{?_isa} = %{version}-%{release} -Requires: mysql-enterprise-libs-compat%{?_isa} = %{version}-%{release} +Requires: mysql-commercial-client%{?_isa} = %{version}-%{release} +Requires: mysql-commercial-libs%{?_isa} = %{version}-%{release} +Requires: mysql-commercial-libs-compat%{?_isa} = %{version}-%{release} %else Requires: mysql-community-client%{?_isa} = %{version}-%{release} Requires: mysql-community-libs%{?_isa} = %{version}-%{release} From de71240ed3c01e433e70dd9f685b14e5ed715130 Mon Sep 17 00:00:00 2001 From: Murthy Narkedimilli <murthy.narkedimilli@oracle.com> Date: Wed, 27 Aug 2014 16:06:50 +0200 Subject: [PATCH 05/99] Changing the copyright headers a bit to be complaint with the standards --- storage/myisam/ftbench/ft-test-run.sh | 2 +- tests/fork_big.pl | 2 +- tests/fork_big2.pl | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/storage/myisam/ftbench/ft-test-run.sh b/storage/myisam/ftbench/ft-test-run.sh index 17b13d73d47..08e03474dac 100755 --- a/storage/myisam/ftbench/ft-test-run.sh +++ b/storage/myisam/ftbench/ft-test-run.sh @@ -2,7 +2,7 @@ # Copyright (c) 2003, 2005, 2006 MySQL AB # Use is subject to license terms - +# # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; version 2 diff --git a/tests/fork_big.pl b/tests/fork_big.pl index b866b899f8d..6e78e779d11 100755 --- a/tests/fork_big.pl +++ b/tests/fork_big.pl @@ -2,7 +2,7 @@ # Copyright (c) 2001, 2006 MySQL AB # Use is subject to license terms - +# # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 2 of the License. diff --git a/tests/fork_big2.pl b/tests/fork_big2.pl index a042f18ef2e..269358de401 100644 --- a/tests/fork_big2.pl +++ b/tests/fork_big2.pl @@ -2,7 +2,7 @@ # Copyright (c) 2002, 2003, 2005, 2006 MySQL AB # Use is subject to license terms - +# # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 2 of the License. From 341ca222cff6181205df9123ac4a85bbcf293809 Mon Sep 17 00:00:00 2001 From: Alexander Nozdrin <alexander.nozdrin@oracle.com> Date: Thu, 28 Aug 2014 12:16:53 +0400 Subject: [PATCH 06/99] Update copyright text. --- libmysqld/lib_sql.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libmysqld/lib_sql.cc b/libmysqld/lib_sql.cc index 0e77ddc923c..7c8e9d3426a 100644 --- a/libmysqld/lib_sql.cc +++ b/libmysqld/lib_sql.cc @@ -2,6 +2,9 @@ * Copyright (c) 2000 * SWsoft company * + * Modifications copyright (c) 2001, 2013. Oracle and/or its affiliates. + * All rights reserved. + * * This material is provided "as is", with absolutely no warranty expressed * or implied. Any use is at your own risk. * From 2b33138d002b628820509cf308bbd828e334688c Mon Sep 17 00:00:00 2001 From: Venkatesh Duggirala <venkatesh.duggirala@oracle.com> Date: Thu, 28 Aug 2014 14:29:54 +0530 Subject: [PATCH 07/99] Bug#19145712 USER AFTER FREE / DOUBLE FREE ISSUE Problem: A corrupted header length in FORMAT_DESCRIPTION_LOG_EVENT can cause server to crash. Analysis: FORMAT_DESCRIPTION_EVENT will be considered invalid if header len is too small (i.e. below OLD_HEADER_LEN). Format_description_log_event:: Format_description_log_event(...) { ... if ((common_header_len=buf[ST_COMMON_HEADER_LEN_OFFSET]) < OLD_HEADER_LEN) DBUG_VOID_RETURN; /* sanity check */ ... post_header_len= my_memdup(...) } In that case Format_description_log_event constructor will return early, without allocating any memory for post_header_len. Thence this variable is left uninitialized and making server to crash when server is trying to free the uninitialized value. Fix: When Format_description_log_event constructor returns early, assign NULL to post_header_len. --- sql/log_event.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sql/log_event.cc b/sql/log_event.cc index 4f55d08933e..71ca722ffd6 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -4087,7 +4087,11 @@ Format_description_log_event(const char* buf, DBUG_ENTER("Format_description_log_event::Format_description_log_event(char*,...)"); buf+= LOG_EVENT_MINIMAL_HEADER_LEN; if ((common_header_len=buf[ST_COMMON_HEADER_LEN_OFFSET]) < OLD_HEADER_LEN) + { + /* this makes is_valid() return false. */ + post_header_len= NULL; DBUG_VOID_RETURN; /* sanity check */ + } number_of_event_types= event_len-(LOG_EVENT_MINIMAL_HEADER_LEN+ST_COMMON_HEADER_LEN_OFFSET+1); DBUG_PRINT("info", ("common_header_len=%d number_of_event_types=%d", From 863bcdfd89df5f62d1e31f8f8e23f1c8d885ef6e Mon Sep 17 00:00:00 2001 From: Sayantan Dutta <sayantan.dutta@oracle.com> Date: Tue, 2 Sep 2014 15:12:55 +0530 Subject: [PATCH 08/99] Bug #19361402 - ADD --MANUAL-LLDB OPTION TO MYSQL-TEST-RUN.PL, contributed --- mysql-test/mysql-test-run.pl | 42 +++++++++++++++++++++++++++++++++--- scripts/mysqlaccess.conf | 0 2 files changed, 39 insertions(+), 3 deletions(-) mode change 100644 => 100755 scripts/mysqlaccess.conf diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index e236d3ce267..636f3d88c62 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -232,6 +232,7 @@ our $opt_ddd; our $opt_client_ddd; my $opt_boot_ddd; our $opt_manual_gdb; +our $opt_manual_lldb; our $opt_manual_dbx; our $opt_manual_ddd; our $opt_manual_debug; @@ -1086,6 +1087,7 @@ sub command_line_setup { 'gdb' => \$opt_gdb, 'client-gdb' => \$opt_client_gdb, 'manual-gdb' => \$opt_manual_gdb, + 'manual-lldb' => \$opt_manual_lldb, 'boot-gdb' => \$opt_boot_gdb, 'manual-debug' => \$opt_manual_debug, 'ddd' => \$opt_ddd, @@ -1536,8 +1538,9 @@ sub command_line_setup { $opt_debugger= undef; } - if ( $opt_gdb || $opt_ddd || $opt_manual_gdb || $opt_manual_ddd || - $opt_manual_debug || $opt_debugger || $opt_dbx || $opt_manual_dbx) + if ( $opt_gdb || $opt_ddd || $opt_manual_gdb || $opt_manual_lldb || + $opt_manual_ddd || $opt_manual_debug || $opt_debugger || $opt_dbx || + $opt_manual_dbx) { mtr_error("You need to use the client debug options for the", "embedded server. Ex: --client-gdb"); @@ -1564,7 +1567,7 @@ sub command_line_setup { # Check debug related options # -------------------------------------------------------------------------- if ( $opt_gdb || $opt_client_gdb || $opt_ddd || $opt_client_ddd || - $opt_manual_gdb || $opt_manual_ddd || $opt_manual_debug || + $opt_manual_gdb || $opt_manual_gdb || $opt_manual_ddd || $opt_manual_debug || $opt_dbx || $opt_client_dbx || $opt_manual_dbx || $opt_debugger || $opt_client_debugger ) { @@ -4985,6 +4988,10 @@ sub mysqld_start ($$) { { gdb_arguments(\$args, \$exe, $mysqld->name()); } + elsif ( $opt_manual_lldb ) + { + lldb_arguments(\$args, \$exe, $mysqld->name()); + } elsif ( $opt_ddd || $opt_manual_ddd ) { ddd_arguments(\$args, \$exe, $mysqld->name()); @@ -5730,6 +5737,33 @@ sub gdb_arguments { $$exe= "xterm"; } + # +# Modify the exe and args so that program is run in lldb +# +sub lldb_arguments { + my $args= shift; + my $exe= shift; + my $type= shift; + my $input= shift; + + my $lldb_init_file= "$opt_vardir/tmp/lldbinit.$type"; + unlink($lldb_init_file); + + my $str= join(" ", @$$args); + my $runline= $input ? "r $str < $input" : "r $str"; + + # write init file for mysqld or client + mtr_tofile($lldb_init_file, + "b main\n" . + $runline); + + print "\nTo start lldb for $type, type in another window:\n"; + print "cd $glob_mysql_test_dir && lldb -s $lldb_init_file $$exe\n"; + + # Indicate the exe should not be started + $$exe= undef; + return; +} # # Modify the exe and args so that program is run in ddd @@ -6190,6 +6224,8 @@ Options for debugging the product test(s) manual-dbx Let user manually start mysqld in dbx, before running test(s) + manual-lldb Let user manually start mysqld in lldb, before running + test(s) strace-client Create strace output for mysqltest client, strace-server Create strace output for mysqltest server, max-save-core Limit the number of core files saved (to avoid filling diff --git a/scripts/mysqlaccess.conf b/scripts/mysqlaccess.conf old mode 100644 new mode 100755 From b1d88a21c2c9dec980f5d251ac72857fb4e6bf9a Mon Sep 17 00:00:00 2001 From: Sayantan Dutta <sayantan.dutta@oracle.com> Date: Wed, 3 Sep 2014 14:37:00 +0530 Subject: [PATCH 09/99] Bug #19361317 - --MANUAL-GDB EFFECTIVELY TRUNCATES OPTION FILE ARGS AT FIRST SEMICOLON --- mysql-test/mysql-test-run.pl | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 636f3d88c62..7616a1ec39d 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -5684,6 +5684,24 @@ sub start_mysqltest ($) { return $proc; } +sub create_debug_statement { + my $args= shift; + my $input= shift; + + # Put $args into a single string + my $str= join(" ", @$$args); + my $runline= $input ? "run $str < $input" : "run $str"; + + # add quotes to escape ; in plugin_load option + my $pos1 = index($runline, "--plugin_load="); + if ( $pos1 != -1 ) { + my $pos2 = index($runline, " ",$pos1); + substr($runline,$pos1+14,0) = "\""; + substr($runline,$pos2+1,0) = "\""; + } + + return $runline; +} # # Modify the exe and args so that program is run in gdb in xterm @@ -5699,9 +5717,7 @@ sub gdb_arguments { # Remove the old gdbinit file unlink($gdb_init_file); - # Put $args into a single string - my $str= join(" ", @$$args); - my $runline= $input ? "run $str < $input" : "run $str"; + my $runline=create_debug_statement($args,$input); # write init file for mysqld or client mtr_tofile($gdb_init_file, @@ -5749,8 +5765,7 @@ sub lldb_arguments { my $lldb_init_file= "$opt_vardir/tmp/lldbinit.$type"; unlink($lldb_init_file); - my $str= join(" ", @$$args); - my $runline= $input ? "r $str < $input" : "r $str"; + my $runline=create_debug_statement($args,$input); # write init file for mysqld or client mtr_tofile($lldb_init_file, @@ -5779,9 +5794,7 @@ sub ddd_arguments { # Remove the old gdbinit file unlink($gdb_init_file); - # Put $args into a single string - my $str= join(" ", @$$args); - my $runline= $input ? "run $str < $input" : "run $str"; + my $runline=create_debug_statement($args,$input); # write init file for mysqld or client mtr_tofile($gdb_init_file, From c8d49a8dabd4adcb050f3f167170ba0e3814addd Mon Sep 17 00:00:00 2001 From: Ramil Kalimullin <ramil.kalimullin@oracle.com> Date: Fri, 5 Sep 2014 09:26:57 +0400 Subject: [PATCH 10/99] removed WL7219: Audit Log Filtering from mysql-5.5. --- sql/sql_audit.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/sql_audit.cc b/sql/sql_audit.cc index 6ccdcefe8eb..bf672b6ea48 100644 --- a/sql/sql_audit.cc +++ b/sql/sql_audit.cc @@ -353,7 +353,7 @@ int initialize_audit_plugin(st_plugin_int *plugin) return 1; } - if (plugin->plugin->init && plugin->plugin->init(plugin)) + if (plugin->plugin->init && plugin->plugin->init(NULL)) { sql_print_error("Plugin '%s' init function returned error.", plugin->name.str); From 0b28d7e048fa097280be54f9baffd202f7626bdd Mon Sep 17 00:00:00 2001 From: Praveenkumar Hulakund <praveenkumar.hulakund@oracle.com> Date: Wed, 10 Sep 2014 10:50:17 +0530 Subject: [PATCH 11/99] Bug#18790730 - CROSS-DATABASE FOREIGN KEY WITHOUT PERMISSIONS CHECK. Analysis: ---------- Issue here is, while creating or altering the InnoDB table, if the foreign key defined on the table references a parent table on which the user has no access privileges then the table is created without reporting any error. Currently the privilege level REFERENCES_ACL is unused and is not used for access evaluation while creating the table with a foreign key constraint or adding the foreign key constraint to a table. But when no privileges are granted to user then also access evaluation on parent table is ignored. Fix: --------- For DMLs, irrelevant of the fact, support does not want any changes to avoid permission checks on every operation. So, as a fix, added a function "check_fk_parent_table_access" to check whether any of the SELECT_ACL, INSERT_ACL, UDPATE_ACL, DELETE_ACL or REFERENCE_ACL privileges are granted for user at table level. If none of them is granted then error is reported. This function is called during the table creation and alter operation. --- sql/handler.h | 1 + sql/sql_parse.cc | 120 +++++++++++++++++++++++++- sql/sql_parse.h | 3 + sql/sql_table.cc | 12 +++ storage/innobase/handler/ha_innodb.cc | 2 +- 5 files changed, 136 insertions(+), 2 deletions(-) diff --git a/sql/handler.h b/sql/handler.h index 5eb2d6b440a..17306fe7dd4 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -868,6 +868,7 @@ struct handlerton #define HTON_TEMPORARY_NOT_SUPPORTED (1 << 6) //Having temporary tables not supported #define HTON_SUPPORT_LOG_TABLES (1 << 7) //Engine supports log tables #define HTON_NO_PARTITION (1 << 8) //You can not partition these tables +#define HTON_SUPPORTS_FOREIGN_KEYS (1 << 9) //Foreign key constraint supported. class Ha_trx_info; diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index ea63d23d182..f52f56447f4 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -5251,6 +5251,121 @@ bool check_global_access(THD *thd, ulong want_access) #endif } + +/** + Checks foreign key's parent table access. + + @param thd [in] Thread handler + @param create_info [in] Create information (like MAX_ROWS, ENGINE or + temporary table flag) + @param alter_info [in] Initial list of columns and indexes for the + table to be created + + @retval + false ok. + @retval + true error or access denied. Error is sent to client in this case. +*/ +bool check_fk_parent_table_access(THD *thd, + HA_CREATE_INFO *create_info, + Alter_info *alter_info) +{ + Key *key; + List_iterator<Key> key_iterator(alter_info->key_list); + handlerton *db_type= create_info->db_type ? create_info->db_type : + ha_default_handlerton(thd); + + // Return if engine does not support Foreign key Constraint. + if (!ha_check_storage_engine_flag(db_type, HTON_SUPPORTS_FOREIGN_KEYS)) + return false; + + while ((key= key_iterator++)) + { + if (key->type == Key::FOREIGN_KEY) + { + TABLE_LIST parent_table; + bool is_qualified_table_name; + Foreign_key *fk_key= (Foreign_key *)key; + LEX_STRING db_name; + LEX_STRING table_name= { fk_key->ref_table->table.str, + fk_key->ref_table->table.length }; + const ulong privileges= (SELECT_ACL | INSERT_ACL | UPDATE_ACL | + DELETE_ACL | REFERENCES_ACL); + + // Check if tablename is valid or not. + DBUG_ASSERT(table_name.str != NULL); + if (check_table_name(table_name.str, table_name.length, false)) + { + my_error(ER_WRONG_TABLE_NAME, MYF(0), table_name.str); + return true; + } + + if (fk_key->ref_table->db.str) + { + is_qualified_table_name= true; + db_name.str= (char *) thd->memdup(fk_key->ref_table->db.str, + fk_key->ref_table->db.length+1); + db_name.length= fk_key->ref_table->db.length; + + // Check if database name is valid or not. + if (fk_key->ref_table->db.str && check_db_name(&db_name)) + { + my_error(ER_WRONG_DB_NAME, MYF(0), db_name.str); + return true; + } + } + else if (thd->lex->copy_db_to(&db_name.str, &db_name.length)) + return true; + else + is_qualified_table_name= false; + + // if lower_case_table_names is set then convert tablename to lower case. + if (lower_case_table_names) + { + table_name.str= (char *) thd->memdup(fk_key->ref_table->table.str, + fk_key->ref_table->table.length+1); + table_name.length= my_casedn_str(files_charset_info, table_name.str); + } + + parent_table.init_one_table(db_name.str, db_name.length, + table_name.str, table_name.length, + table_name.str, TL_IGNORE); + + /* + Check if user has any of the "privileges" at table level on + "parent_table". + Having privilege on any of the parent_table column is not + enough so checking whether user has any of the "privileges" + at table level only here. + */ + if (check_some_access(thd, privileges, &parent_table) || + parent_table.grant.want_privilege) + { + if (is_qualified_table_name) + { + const size_t qualified_table_name_len= NAME_LEN + 1 + NAME_LEN + 1; + char *qualified_table_name= (char *) thd->alloc(qualified_table_name_len); + + my_snprintf(qualified_table_name, qualified_table_name_len, "%s.%s", + db_name.str, table_name.str); + table_name.str= qualified_table_name; + } + + my_error(ER_TABLEACCESS_DENIED_ERROR, MYF(0), + "REFERENCES", + thd->security_ctx->priv_user, + thd->security_ctx->host_or_ip, + table_name.str); + + return true; + } + } + } + + return false; +} + + /**************************************************************************** Check stack size; Send error if there isn't enough stack to continue ****************************************************************************/ @@ -7072,8 +7187,11 @@ bool create_table_precheck(THD *thd, TABLE_LIST *tables, if (check_table_access(thd, SELECT_ACL, tables, FALSE, UINT_MAX, FALSE)) goto err; } - error= FALSE; + if (check_fk_parent_table_access(thd, &lex->create_info, &lex->alter_info)) + goto err; + + error= FALSE; err: DBUG_RETURN(error); } diff --git a/sql/sql_parse.h b/sql/sql_parse.h index 9a55174b0fb..f7b4d530543 100644 --- a/sql/sql_parse.h +++ b/sql/sql_parse.h @@ -45,6 +45,9 @@ bool delete_precheck(THD *thd, TABLE_LIST *tables); bool insert_precheck(THD *thd, TABLE_LIST *tables); bool create_table_precheck(THD *thd, TABLE_LIST *tables, TABLE_LIST *create_table); +bool check_fk_parent_table_access(THD *thd, + HA_CREATE_INFO *create_info, + Alter_info *alter_info); bool parse_sql(THD *thd, Parser_state *parser_state, diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 8b4873cb834..e8de6a6928a 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -6004,6 +6004,18 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name, goto err; } + /* + If foreign key is added then check permission to access parent table. + + In function "check_fk_parent_table_access", create_info->db_type is used + to identify whether engine supports FK constraint or not. Since + create_info->db_type is set here, check to parent table access is delayed + till this point for the alter operation. + */ + if ((alter_info->flags & ALTER_FOREIGN_KEY) && + check_fk_parent_table_access(thd, create_info, alter_info)) + goto err; + /* If this is an ALTER TABLE and no explicit row type specified reuse the table's row type. diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index adedc4fa961..8f299aed213 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -2251,7 +2251,7 @@ innobase_init( innobase_hton->start_consistent_snapshot=innobase_start_trx_and_assign_read_view; innobase_hton->flush_logs=innobase_flush_logs; innobase_hton->show_status=innobase_show_status; - innobase_hton->flags=HTON_NO_FLAGS; + innobase_hton->flags=HTON_SUPPORTS_FOREIGN_KEYS; innobase_hton->release_temporary_latches=innobase_release_temporary_latches; innobase_hton->alter_table_flags = innobase_alter_table_flags; From 4afd7e9ff21e5e2645dae6967fa9d83b4eed25a9 Mon Sep 17 00:00:00 2001 From: Sayantan Dutta <sayantan.dutta@oracle.com> Date: Thu, 11 Sep 2014 14:48:21 +0530 Subject: [PATCH 13/99] Bug #18964545 ADD MTR SUPPORT FOR DEBUGGING WITH LLDB --- mysql-test/mysql-test-run.pl | 61 +++++++++++++++++++++++++++++------- 1 file changed, 50 insertions(+), 11 deletions(-) diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 7616a1ec39d..472dc91ea69 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -223,8 +223,11 @@ our %gprof_dirs; our $glob_debugger= 0; our $opt_gdb; +our $opt_lldb; our $opt_client_gdb; +our $opt_client_lldb; my $opt_boot_gdb; +my $opt_boot_lldb; our $opt_dbx; our $opt_client_dbx; my $opt_boot_dbx; @@ -1085,10 +1088,13 @@ sub command_line_setup { 'debug-common' => \$opt_debug_common, 'debug-server' => \$opt_debug_server, 'gdb' => \$opt_gdb, + 'lldb' => \$opt_lldb, 'client-gdb' => \$opt_client_gdb, + 'client-lldb' => \$opt_client_lldb, 'manual-gdb' => \$opt_manual_gdb, 'manual-lldb' => \$opt_manual_lldb, 'boot-gdb' => \$opt_boot_gdb, + 'boot-lldb' => \$opt_boot_lldb, 'manual-debug' => \$opt_manual_debug, 'ddd' => \$opt_ddd, 'client-ddd' => \$opt_client_ddd, @@ -1518,6 +1524,13 @@ sub command_line_setup { $opt_gdb= undef; } + if ($opt_lldb) + { + mtr_warning("Silently converting --lldb to --client-lldb in embedded mode"); + $opt_client_lldb= $opt_lldb; + $opt_lldb= undef; + } + if ($opt_ddd) { mtr_warning("Silently converting --ddd to --client-ddd in embedded mode"); @@ -1538,7 +1551,7 @@ sub command_line_setup { $opt_debugger= undef; } - if ( $opt_gdb || $opt_ddd || $opt_manual_gdb || $opt_manual_lldb || + if ( $opt_gdb || $opt_ddd || $opt_lldb || $opt_manual_gdb || $opt_manual_lldb || $opt_manual_ddd || $opt_manual_debug || $opt_debugger || $opt_dbx || $opt_manual_dbx) { @@ -1566,10 +1579,10 @@ sub command_line_setup { # -------------------------------------------------------------------------- # Check debug related options # -------------------------------------------------------------------------- - if ( $opt_gdb || $opt_client_gdb || $opt_ddd || $opt_client_ddd || - $opt_manual_gdb || $opt_manual_gdb || $opt_manual_ddd || $opt_manual_debug || - $opt_dbx || $opt_client_dbx || $opt_manual_dbx || - $opt_debugger || $opt_client_debugger ) + if ( $opt_gdb || $opt_client_gdb || $opt_lldb || $opt_client_lldb || + $opt_ddd || $opt_client_ddd || $opt_manual_gdb || $opt_manual_gdb || + $opt_manual_ddd || $opt_manual_debug || $opt_dbx || $opt_client_dbx || + $opt_manual_dbx || $opt_debugger || $opt_client_debugger ) { # Indicate that we are using debugger $glob_debugger= 1; @@ -3328,6 +3341,10 @@ sub mysql_install_db { gdb_arguments(\$args, \$exe_mysqld_bootstrap, $mysqld->name(), $bootstrap_sql_file); } + if ($opt_boot_lldb) { + lldb_arguments(\$args, \$exe_mysqld_bootstrap, $mysqld->name(), + $bootstrap_sql_file); + } if ($opt_boot_dbx) { dbx_arguments(\$args, \$exe_mysqld_bootstrap, $mysqld->name(), $bootstrap_sql_file); @@ -4988,7 +5005,7 @@ sub mysqld_start ($$) { { gdb_arguments(\$args, \$exe, $mysqld->name()); } - elsif ( $opt_manual_lldb ) + elsif ( $opt_lldb || $opt_manual_lldb ) { lldb_arguments(\$args, \$exe, $mysqld->name()); } @@ -5659,6 +5676,10 @@ sub start_mysqltest ($) { { gdb_arguments(\$args, \$exe, "client"); } + if ( $opt_client_lldb ) + { + lldb_arguments(\$args, \$exe, "client"); + } elsif ( $opt_client_ddd ) { ddd_arguments(\$args, \$exe, "client"); @@ -5772,12 +5793,30 @@ sub lldb_arguments { "b main\n" . $runline); - print "\nTo start lldb for $type, type in another window:\n"; - print "cd $glob_mysql_test_dir && lldb -s $lldb_init_file $$exe\n"; + if ( $opt_manual_ddd ) + { + print "\nTo start lldb for $type, type in another window:\n"; + print "cd $glob_mysql_test_dir && lldb -s $lldb_init_file $$exe\n"; - # Indicate the exe should not be started - $$exe= undef; - return; + # Indicate the exe should not be started + $$exe= undef; + return; + } + + my $save_exe= $$exe; + $$args= []; + if ( $exe_libtool ) + { + $$exe= $exe_libtool; + mtr_add_arg($$args, "--mode=execute"); + mtr_add_arg($$args, "lldb"); + } + else + { + $$exe= "lldb"; + } + mtr_add_arg($$args, "--command=$lldb_init_file"); + mtr_add_arg($$args, "$save_exe"); } # From 43d880b7e940f5c72f03a3d588b86162bda172e4 Mon Sep 17 00:00:00 2001 From: Praveenkumar Hulakund <praveenkumar.hulakund@oracle.com> Date: Tue, 16 Sep 2014 11:28:46 +0530 Subject: [PATCH 14/99] Bug#19070633 - POSSIBLE ACCESS TO FREED MEMORY IN IS_FREE_LOCK() AND IS_USED_LOCK(). Analysis: ----------- In functions Item_func_is_free_lock::val_int() and Item_func_is_used_lock::val_int(), for the specified user lock name, pointer to its "User_level_lock" object is obtained from hash "hash_user_locks". Mutex "LOCK_user_locks" is acquired for this and released immediately. And we are accessing members of User_level_lock after releasing the mutex. If same user lock is deleted(released) from concurrent thread then accessing members results in invalid(freed) memory access issue. Deleting of user lock is also protected from the mutex "LOCK_user_locks". Since this mutex is released in "val_int" functions mentioned above, delete operation proceeds while concurrent thread tries to access its members. With the test case, valgrind reports invalid read issues in val_int functions. Fix: ----------- To fix this issue, in "val_int" function of classes "Item_func_is_free_lock" and "Item_func_is_used_lock", now releasing mutex "LOCK_user_locks" after accessing User_level_lock members. --- mysql-test/r/lock_sync.result | 51 ++++++++++++++++++++++++++++++++ mysql-test/t/lock_sync.test | 55 +++++++++++++++++++++++++++++++++++ sql/item_func.cc | 23 ++++++++++----- 3 files changed, 121 insertions(+), 8 deletions(-) diff --git a/mysql-test/r/lock_sync.result b/mysql-test/r/lock_sync.result index 8fe94679e70..3877e70372c 100644 --- a/mysql-test/r/lock_sync.result +++ b/mysql-test/r/lock_sync.result @@ -773,3 +773,54 @@ Warning 1356 View 'test.v1' references invalid table(s) or column(s) or function SET DEBUG_SYNC= 'RESET'; DROP VIEW v1; DROP TABLE t1; +# +# Bug#19070633 - POSSIBLE ACCESS TO FREED MEMORY IN IS_FREE_LOCK() AND IS_USED_LOCK(). +# +# Verifying issue for IS_FREE_LOCK() function. +SELECT GET_LOCK("lock_19070633", 600); +GET_LOCK("lock_19070633", 600) +1 +connect con1, localhost, root,,; +# Waiting after getting user level lock info and releasing mutex. +SET DEBUG_SYNC= 'after_getting_user_level_lock_info SIGNAL parked WAIT_FOR go'; +# Sending: SELECT IS_FREE_LOCK("lock_19070633"); +SELECT IS_FREE_LOCK("lock_19070633"); +connection default; +SET DEBUG_SYNC= 'now WAIT_FOR parked'; +SELECT RELEASE_LOCK("lock_19070633"); +RELEASE_LOCK("lock_19070633") +1 +# Signaling connection con1 after releasing the lock. +# Without fix, accessing user level lock info in con1 would result in +# crash or valgrind issue invalid read is reported. +SET DEBUG_SYNC= 'now SIGNAL go'; +connection con1; +# Reaping: SELECT IS_FREE_LOCK("lock_19070633"); +IS_FREE_LOCK("lock_19070633") +0 +connection default; +# Verifying issue for IS_USED_LOCK() function. +SELECT GET_LOCK("lock_19070633", 600); +GET_LOCK("lock_19070633", 600) +1 +connection con1; +# Waiting after getting user level lock info and releasing mutex. +SET DEBUG_SYNC= 'after_getting_user_level_lock_info SIGNAL parked WAIT_FOR go'; +# Sending: SELECT IS_USED_LOCK("lock_19070633"); +SELECT IS_USED_LOCK("lock_19070633"); +connection default; +SET DEBUG_SYNC= 'now WAIT_FOR parked'; +SELECT RELEASE_LOCK("lock_19070633"); +RELEASE_LOCK("lock_19070633") +1 +# Signaling connection con1 after releasing the lock. +# Without fix, accessing user level lock info in con1 would result in +# crash or valgrind issue invalid read is reported. +SET DEBUG_SYNC= 'now SIGNAL go'; +connection con1; +# Reaping: SELECT IS_USED_LOCK("lock_19070633"); +IS_USED_LOCK("lock_19070633") +# +connection default; +SET DEBUG_SYNC= 'RESET'; +disconnect con1; diff --git a/mysql-test/t/lock_sync.test b/mysql-test/t/lock_sync.test index d5ad7becd7d..bcb78b5b600 100644 --- a/mysql-test/t/lock_sync.test +++ b/mysql-test/t/lock_sync.test @@ -1136,6 +1136,61 @@ DROP TABLE t1; disconnect con1; disconnect con2; +--echo # +--echo # Bug#19070633 - POSSIBLE ACCESS TO FREED MEMORY IN IS_FREE_LOCK() AND IS_USED_LOCK(). +--echo # + +--enable_connect_log + +--echo # Verifying issue for IS_FREE_LOCK() function. +SELECT GET_LOCK("lock_19070633", 600); + +connect (con1, localhost, root,,); +--echo # Waiting after getting user level lock info and releasing mutex. +SET DEBUG_SYNC= 'after_getting_user_level_lock_info SIGNAL parked WAIT_FOR go'; +--echo # Sending: SELECT IS_FREE_LOCK("lock_19070633"); +send SELECT IS_FREE_LOCK("lock_19070633"); + +connection default; +SET DEBUG_SYNC= 'now WAIT_FOR parked'; +SELECT RELEASE_LOCK("lock_19070633"); +--echo # Signaling connection con1 after releasing the lock. +--echo # Without fix, accessing user level lock info in con1 would result in +--echo # crash or valgrind issue invalid read is reported. +SET DEBUG_SYNC= 'now SIGNAL go'; + +connection con1; +--echo # Reaping: SELECT IS_FREE_LOCK("lock_19070633"); +--reap + +connection default; +--echo # Verifying issue for IS_USED_LOCK() function. +SELECT GET_LOCK("lock_19070633", 600); + +connection con1; +--echo # Waiting after getting user level lock info and releasing mutex. +SET DEBUG_SYNC= 'after_getting_user_level_lock_info SIGNAL parked WAIT_FOR go'; +--echo # Sending: SELECT IS_USED_LOCK("lock_19070633"); +send SELECT IS_USED_LOCK("lock_19070633"); + +connection default; +SET DEBUG_SYNC= 'now WAIT_FOR parked'; +SELECT RELEASE_LOCK("lock_19070633"); +--echo # Signaling connection con1 after releasing the lock. +--echo # Without fix, accessing user level lock info in con1 would result in +--echo # crash or valgrind issue invalid read is reported. +SET DEBUG_SYNC= 'now SIGNAL go'; + +connection con1; +--echo # Reaping: SELECT IS_USED_LOCK("lock_19070633"); +--replace_column 1 # +--reap + +connection default; +SET DEBUG_SYNC= 'RESET'; +disconnect con1; + +--disable_connect_log # Check that all connections opened by test cases in this file are really # gone so execution of other tests won't be affected by their presence. diff --git a/sql/item_func.cc b/sql/item_func.cc index 3e3079f317f..96cf07550d8 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -6159,21 +6159,24 @@ longlong Item_func_is_free_lock::val_int() DBUG_ASSERT(fixed == 1); String *res=args[0]->val_str(&value); User_level_lock *ull; + longlong ret_val= 0LL; null_value=0; if (!res || !res->length()) { null_value=1; - return 0; + return ret_val; } mysql_mutex_lock(&LOCK_user_locks); ull= (User_level_lock *) my_hash_search(&hash_user_locks, (uchar*) res->ptr(), (size_t) res->length()); - mysql_mutex_unlock(&LOCK_user_locks); if (!ull || !ull->locked) - return 1; - return 0; + ret_val= 1; + mysql_mutex_unlock(&LOCK_user_locks); + DEBUG_SYNC(current_thd, "after_getting_user_level_lock_info"); + + return ret_val; } longlong Item_func_is_used_lock::val_int() @@ -6181,6 +6184,7 @@ longlong Item_func_is_used_lock::val_int() DBUG_ASSERT(fixed == 1); String *res=args[0]->val_str(&value); User_level_lock *ull; + my_thread_id thread_id= 0UL; null_value=1; if (!res || !res->length()) @@ -6189,12 +6193,15 @@ longlong Item_func_is_used_lock::val_int() mysql_mutex_lock(&LOCK_user_locks); ull= (User_level_lock *) my_hash_search(&hash_user_locks, (uchar*) res->ptr(), (size_t) res->length()); + if ((ull != NULL) && ull->locked) + { + null_value= 0; + thread_id= ull->thread_id; + } mysql_mutex_unlock(&LOCK_user_locks); - if (!ull || !ull->locked) - return 0; + DEBUG_SYNC(current_thd, "after_getting_user_level_lock_info"); - null_value=0; - return ull->thread_id; + return thread_id; } From 40f30ee6cc1062c56e2ab1ff7cf9cbf921d729f3 Mon Sep 17 00:00:00 2001 From: Annamalai Gurusami <annamalai.gurusami@oracle.com> Date: Wed, 17 Sep 2014 10:42:31 +0530 Subject: [PATCH 15/99] Bug #17852083 PRINT A WARNING WHEN DDL HAS AN ERROR IN INNODB_STRICT_MODE = 1 Problem: Creation of a table fails when innodb_strict_mode is enabled, but the same table is created without any warning when innodb_strict_mode is enabled. Solution: If creation of a table fails with an error when innodb_strict_mode is enabled, it must issue a warning when innodb_strict_mode is disabled. rb#6723 approved by Krunal. --- mysql-test/suite/innodb/r/strict_mode.result | 242 ++++++++++++++++++ mysql-test/suite/innodb/t/strict_mode.test | 246 +++++++++++++++++++ storage/innobase/dict/dict0dict.c | 21 +- storage/innobase/handler/ha_innodb.cc | 27 ++ 4 files changed, 532 insertions(+), 4 deletions(-) create mode 100644 mysql-test/suite/innodb/r/strict_mode.result create mode 100644 mysql-test/suite/innodb/t/strict_mode.test diff --git a/mysql-test/suite/innodb/r/strict_mode.result b/mysql-test/suite/innodb/r/strict_mode.result new file mode 100644 index 00000000000..7a550e105e6 --- /dev/null +++ b/mysql-test/suite/innodb/r/strict_mode.result @@ -0,0 +1,242 @@ +# +# Bug #17852083 PRINT A WARNING WHEN DDL HAS AN ERROR IN +# INNODB_STRICT_MODE = 1 +# +set innodb_strict_mode = 0; +create table t1 (id int auto_increment primary key, +v varchar(32), +col1 text, +col2 text, +col3 text, +col4 text, +col5 text, +col6 text, +col7 text, +col8 text, +col9 text, +col10 text, +col11 text, +col12 text, +col13 text, +col14 text, +col15 text, +col16 text, +col17 text, +col18 text, +col19 text, +col20 text, +col21 text, +col22 text, +col23 text, +col24 text, +col25 text, +col26 text, +col27 text, +col28 text, +col29 text, +col30 text, +col31 text, +col32 text, +col33 text, +col34 text, +col35 text, +col36 text, +col37 text, +col38 text, +col39 text, +col40 text, +col41 text, +col42 text, +col43 text, +col44 text, +col45 text , +col46 text, +col47 text, +col48 text, +col49 text, +col50 text, +col51 text, +col52 text, +col53 text, +col54 text, +col55 text, +col56 text, +col57 text, +col58 text, +col59 text, +col60 text, +col61 text, +col62 text, +col63 text, +col64 text, +col65 text, +col66 text, +col67 text, +col68 text , +col69 text, +col70 text, +col71 text, +col72 text, +col73 text, +col74 text, +col75 text, +col76 text, +col77 text, +col78 text, +col79 text, +col80 text, +col81 text, +col82 text, +col83 text, +col84 text, +col85 text, +col86 text, +col87 text, +col88 text, +col89 text, +col90 text, +col91 text, +col92 text, +col93 text, +col94 text, +col95 text, +col96 text, +col97 text, +col98 text, +col99 text, +col100 text, +col101 text, +col102 text, +col103 text, +col104 text, +col105 text, +col106 text, +col107 text, +col108 text, +col109 text, +col110 text, +col111 text, +col112 text, +col113 text, +col114 text, +col115 text, +col116 text, +col117 text, +col118 text, +col119 text, +col120 text, +col121 text, +col122 text, +col123 text, +col124 text, +col125 text, +col126 text , +col127 text, +col128 text, +col129 text, +col130 text, +col131 text, +col132 text, +col133 text, +col134 text, +col135 text, +col136 text, +col137 text, +col138 text, +col139 text, +col140 text, +col141 text, +col142 text, +col143 text, +col144 text, +col145 text, +col146 text, +col147 text , +col148 text, +col149 text, +col150 text, +col151 text, +col152 text, +col153 text, +col154 text, +col155 text, +col156 text, +col157 text, +col158 text, +col159 text, +col160 text, +col161 text, +col162 text, +col163 text, +col164 text, +col165 text, +col166 text, +col167 text, +col168 text, +col169 text, +col170 text, +col171 text, +col172 text , +col173 text, +col174 text, +col175 text, +col176 text, +col177 text, +col178 text, +col179 text, +col180 text, +col181 text, +col182 text, +col183 text, +col184 text, +col185 text, +col186 text, +col187 text, +col188 text, +col189 text, +col190 text, +col191 text, +col192 text, +col193 text, +col194 text, +col195 text, +col196 text, +col197 text, +col198 text, +col199 text, +col200 text, +col201 text, +col202 text, +col203 text, +col204 text, +col205 text, +col206 text, +col207 text, +col208 text, +col209 text, +col210 text, +col211 text, +col212 text, +col213 text, +col214 text, +col215 text, +col216 text, +col217 text, +col218 text, +col219 text, +col220 text, +col221 text, +col222 text, +col223 text, +col224 text, +col225 text, +col226 text, +col227 text, +col228 text +) ENGINE=InnoDB; +Warnings: +Warning 139 Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. +set innodb_strict_mode = 1; +alter table t1 engine=InnoDB; +ERROR 42000: Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. +drop table t1; diff --git a/mysql-test/suite/innodb/t/strict_mode.test b/mysql-test/suite/innodb/t/strict_mode.test new file mode 100644 index 00000000000..86b56a09c0e --- /dev/null +++ b/mysql-test/suite/innodb/t/strict_mode.test @@ -0,0 +1,246 @@ +--source include/have_innodb.inc + +--echo # +--echo # Bug #17852083 PRINT A WARNING WHEN DDL HAS AN ERROR IN +--echo # INNODB_STRICT_MODE = 1 +--echo # + +set innodb_strict_mode = 0; + +create table t1 (id int auto_increment primary key, +v varchar(32), +col1 text, +col2 text, +col3 text, +col4 text, +col5 text, +col6 text, +col7 text, +col8 text, +col9 text, +col10 text, +col11 text, +col12 text, +col13 text, +col14 text, +col15 text, +col16 text, +col17 text, +col18 text, +col19 text, +col20 text, +col21 text, +col22 text, +col23 text, +col24 text, +col25 text, +col26 text, +col27 text, +col28 text, +col29 text, +col30 text, +col31 text, +col32 text, +col33 text, +col34 text, +col35 text, +col36 text, +col37 text, +col38 text, +col39 text, +col40 text, +col41 text, +col42 text, +col43 text, +col44 text, +col45 text , +col46 text, +col47 text, +col48 text, +col49 text, +col50 text, +col51 text, +col52 text, +col53 text, +col54 text, +col55 text, +col56 text, +col57 text, +col58 text, +col59 text, +col60 text, +col61 text, +col62 text, +col63 text, +col64 text, +col65 text, +col66 text, +col67 text, +col68 text , +col69 text, +col70 text, +col71 text, +col72 text, +col73 text, +col74 text, +col75 text, +col76 text, +col77 text, +col78 text, +col79 text, +col80 text, +col81 text, +col82 text, +col83 text, +col84 text, +col85 text, +col86 text, +col87 text, +col88 text, +col89 text, +col90 text, +col91 text, +col92 text, +col93 text, +col94 text, +col95 text, +col96 text, +col97 text, +col98 text, +col99 text, +col100 text, +col101 text, +col102 text, +col103 text, +col104 text, +col105 text, +col106 text, +col107 text, +col108 text, +col109 text, +col110 text, +col111 text, +col112 text, +col113 text, +col114 text, +col115 text, +col116 text, +col117 text, +col118 text, +col119 text, +col120 text, +col121 text, +col122 text, +col123 text, +col124 text, +col125 text, +col126 text , +col127 text, +col128 text, +col129 text, +col130 text, +col131 text, +col132 text, +col133 text, +col134 text, +col135 text, +col136 text, +col137 text, +col138 text, +col139 text, +col140 text, +col141 text, +col142 text, +col143 text, +col144 text, +col145 text, +col146 text, +col147 text , +col148 text, +col149 text, +col150 text, +col151 text, +col152 text, +col153 text, +col154 text, +col155 text, +col156 text, +col157 text, +col158 text, +col159 text, +col160 text, +col161 text, +col162 text, +col163 text, +col164 text, +col165 text, +col166 text, +col167 text, +col168 text, +col169 text, +col170 text, +col171 text, +col172 text , +col173 text, +col174 text, +col175 text, +col176 text, +col177 text, +col178 text, +col179 text, +col180 text, +col181 text, +col182 text, +col183 text, +col184 text, +col185 text, +col186 text, +col187 text, +col188 text, +col189 text, +col190 text, +col191 text, +col192 text, +col193 text, +col194 text, +col195 text, +col196 text, +col197 text, +col198 text, +col199 text, +col200 text, +col201 text, +col202 text, +col203 text, +col204 text, +col205 text, +col206 text, +col207 text, +col208 text, +col209 text, +col210 text, +col211 text, +col212 text, +col213 text, +col214 text, +col215 text, +col216 text, +col217 text, +col218 text, +col219 text, +col220 text, +col221 text, +col222 text, +col223 text, +col224 text, +col225 text, +col226 text, +col227 text, +col228 text +) ENGINE=InnoDB; + +set innodb_strict_mode = 1; +--error ER_TOO_BIG_ROWSIZE +alter table t1 engine=InnoDB; + +drop table t1; diff --git a/storage/innobase/dict/dict0dict.c b/storage/innobase/dict/dict0dict.c index 0e4691658d5..2bf774ad039 100644 --- a/storage/innobase/dict/dict0dict.c +++ b/storage/innobase/dict/dict0dict.c @@ -42,6 +42,12 @@ UNIV_INTERN dict_index_t* dict_ind_compact; UNIV_INTERN uint ibuf_debug; #endif /* UNIV_DEBUG || UNIV_IBUF_DEBUG */ +/********************************************************************** +Issue a warning that the row is too big. */ +void +ib_warn_row_too_big(const dict_table_t* table); + + #ifndef UNIV_HOTBACKUP #include "buf0buf.h" #include "data0type.h" @@ -1765,11 +1771,18 @@ dict_index_add_to_cache( new_index->n_fields = new_index->n_def; - if (strict && dict_index_too_big_for_tree(table, new_index)) { + if (dict_index_too_big_for_tree(table, new_index)) { + + if (strict) { too_big: - dict_mem_index_free(new_index); - dict_mem_index_free(index); - return(DB_TOO_BIG_RECORD); + dict_mem_index_free(new_index); + dict_mem_index_free(index); + return(DB_TOO_BIG_RECORD); + } else { + + ib_warn_row_too_big(table); + + } } if (UNIV_UNLIKELY(index->type & DICT_UNIVERSAL)) { diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 8f299aed213..28f7c95d243 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -12063,3 +12063,30 @@ innobase_convert_to_filename_charset( return(strconvert(cs_from, from, cs_to, to, len, &errors)); } + + +/********************************************************************** +Issue a warning that the row is too big. */ +extern "C" +void +ib_warn_row_too_big(const dict_table_t* table) +{ + /* If prefix is true then a 768-byte prefix is stored + locally for BLOB fields. Refer to dict_table_get_format() */ + const bool prefix = ((table->flags & DICT_TF_FORMAT_MASK) + >> DICT_TF_FORMAT_SHIFT) < UNIV_FORMAT_B; + + const ulint free_space = page_get_free_space_of_empty( + table->flags & DICT_TF_COMPACT) / 2; + + THD* thd = current_thd; + + push_warning_printf( + thd, MYSQL_ERROR::WARN_LEVEL_WARN, HA_ERR_TO_BIG_ROW, + "Row size too large (> %lu). Changing some columns to TEXT" + " or BLOB %smay help. In current row format, BLOB prefix of" + " %d bytes is stored inline.", free_space + , prefix ? "or using ROW_FORMAT=DYNAMIC or" + " ROW_FORMAT=COMPRESSED ": "" + , prefix ? DICT_MAX_FIXED_COL_LEN : 0); +} From b8c9d93bf3ebf69243e38ce77fd9fdc256913af6 Mon Sep 17 00:00:00 2001 From: Annamalai Gurusami <annamalai.gurusami@oracle.com> Date: Thu, 18 Sep 2014 15:17:39 +0530 Subject: [PATCH 16/99] Bug #19306524 FAILING ASSERTION WITH TEMP TABLE FOR A PROCEDURE CALLED FROM A FUNCTION Scenario: In a stored procedure, CREATE TABLE statement is not allowed. But an exception is provided for CREATE TEMPORARY TABLE. We can create a temporary table in a stored procedure. Let there be two stored functions f1 and f2 and two stored procedures p1 and p2. Their properties are as follows: . stored function f1() calls stored procedure p1(). . stored function f2() calls stored procedure p2(). . stored procedure p1() creates temporary table t1. . stored procedure p2() does DML on t1. Consider the following situation: 1. Autocommit mode is on. 2. select f1() 3. select f2() Step 2: In this step, t1 would be created via p1(). A table level transaction lock would have been taken. The ::external_lock() would not have been called on this table. At the end of step 2, because of autocommit mode on, this table level lock will be released. Step 3: When we execute DML on table t1 via p2() we have two problems: Problem 1: The function ha_innobase::external_lock() would have been called but since it is a select query no table level locks would have been taken. Hence the following assert will fail: ut_ad(lock_table_has(thr_get_trx(thr), index->table, LOCK_IX)); Solution: The solution would be to identify this situation and take a table level lock and use the proper lock type prebuilt->select_lock_type = LOCK_X for DML operations. Problem 2: Another problem is that in step 3, ha_innobase::open() is never called on the table t1. Solution: The solution would be to identify this situation and call re-init the handler of table t1. rb#6429 approved by Krunal. --- .../suite/innodb/r/sp_temp_table.result | 253 ++++++++++++++++++ mysql-test/suite/innodb/t/sp_temp_table.test | 103 +++++++ storage/innobase/handler/ha_innodb.cc | 25 +- storage/innobase/include/dict0dict.h | 8 + storage/innobase/include/dict0dict.ic | 12 + storage/innobase/row/row0mysql.c | 9 +- 6 files changed, 406 insertions(+), 4 deletions(-) create mode 100644 mysql-test/suite/innodb/r/sp_temp_table.result create mode 100644 mysql-test/suite/innodb/t/sp_temp_table.test diff --git a/mysql-test/suite/innodb/r/sp_temp_table.result b/mysql-test/suite/innodb/r/sp_temp_table.result new file mode 100644 index 00000000000..49a2a4aa831 --- /dev/null +++ b/mysql-test/suite/innodb/r/sp_temp_table.result @@ -0,0 +1,253 @@ +# +# Bug #19306524 FAILING ASSERTION WITH TEMP TABLE FOR A PROCEDURE +# CALLED FROM A FUNCTION +# +call mtr.add_suppression("MySQL is trying to drop table"); +CREATE PROCEDURE cachedata( +IN obj_id BIGINT UNSIGNED, +IN start DATETIME, +IN end DATETIME +) +cachedata:BEGIN +DECLARE cache_count BIGINT; +SET @timestamp := NOW(); +CREATE TEMPORARY TABLE IF NOT EXISTS cachedata ( +timestamp DATETIME, +object_id BIGINT UNSIGNED NOT NULL, +start DATETIME, +end DATETIME, +seqno BIGINT AUTO_INCREMENT, +value FLOAT, +PRIMARY KEY (seqno), +INDEX (timestamp), +INDEX (object_id, start, end) +) ENGINE=INNODB; +DELETE FROM cachedata WHERE +timestamp < DATE_SUB(@timestamp, INTERVAL 15 SECOND); +SELECT count(*) INTO cache_count FROM cachedata WHERE +object_id = obj_id +AND start = start +AND end = end; +IF cache_count > 0 THEN LEAVE cachedata; +END IF; +INSERT INTO cachedata (timestamp, object_id, start, end, value) VALUES +(@timestamp, obj_id, start, end, 1234), +(@timestamp, obj_id, start, end, 4567), +(@timestamp, obj_id, start, end, 8901), +(@timestamp, obj_id, start, end, 1234), +(@timestamp, obj_id, start, end, 4567), +(@timestamp, obj_id, start, end, 8901), +(@timestamp, obj_id, start, end, 1234), +(@timestamp, obj_id, start, end, 4567), +(@timestamp, obj_id, start, end, 8901), +(@timestamp, obj_id, start, end, 1234), +(@timestamp, obj_id, start, end, 4567), +(@timestamp, obj_id, start, end, 8901), +(@timestamp, obj_id, start, end, 2345), +(@timestamp, obj_id, start, end, 1234), +(@timestamp, obj_id, start, end, 4567), +(@timestamp, obj_id, start, end, 8901), +(@timestamp, obj_id, start, end, 2345), +(@timestamp, obj_id, start, end, 1234), +(@timestamp, obj_id, start, end, 4567), +(@timestamp, obj_id, start, end, 8901), +(@timestamp, obj_id, start, end, 2345); +END$$ +CREATE FUNCTION get_cache( +obj_id BIGINT UNSIGNED, +start DATETIME, +end DATETIME +) +RETURNS FLOAT +READS SQL DATA +BEGIN +DECLARE result FLOAT; +CALL cachedata(obj_id, start, end); +SELECT SUM(value) INTO result FROM cachedata WHERE +object_id = obj_id +AND start = start +AND end = end; +RETURN result; +END$$ +SELECT get_cache(1, '2014-01-01', '2014-02-01'); +get_cache(1, '2014-01-01', '2014-02-01') +95247 +select sleep(1); +sleep(1) +0 +SELECT get_cache(1, '2014-01-01', '2014-02-01'); +get_cache(1, '2014-01-01', '2014-02-01') +95247 +select sleep(1); +sleep(1) +0 +SELECT get_cache(1, '2014-01-01', '2014-02-01'); +get_cache(1, '2014-01-01', '2014-02-01') +95247 +select sleep(1); +sleep(1) +0 +SELECT get_cache(1, '2014-01-01', '2014-02-01'); +get_cache(1, '2014-01-01', '2014-02-01') +95247 +select sleep(1); +sleep(1) +0 +SELECT get_cache(1, '2014-01-01', '2014-02-01'); +get_cache(1, '2014-01-01', '2014-02-01') +95247 +select sleep(1); +sleep(1) +0 +SELECT get_cache(1, '2014-01-01', '2014-02-01'); +get_cache(1, '2014-01-01', '2014-02-01') +95247 +select sleep(1); +sleep(1) +0 +SELECT get_cache(1, '2014-01-01', '2014-02-01'); +get_cache(1, '2014-01-01', '2014-02-01') +95247 +select sleep(1); +sleep(1) +0 +SELECT get_cache(1, '2014-01-01', '2014-02-01'); +get_cache(1, '2014-01-01', '2014-02-01') +95247 +select sleep(1); +sleep(1) +0 +SELECT get_cache(1, '2014-01-01', '2014-02-01'); +get_cache(1, '2014-01-01', '2014-02-01') +95247 +select sleep(1); +sleep(1) +0 +SELECT get_cache(1, '2014-01-01', '2014-02-01'); +get_cache(1, '2014-01-01', '2014-02-01') +95247 +select sleep(1); +sleep(1) +0 +SELECT get_cache(1, '2014-01-01', '2014-02-01'); +get_cache(1, '2014-01-01', '2014-02-01') +95247 +select sleep(1); +sleep(1) +0 +SELECT get_cache(1, '2014-01-01', '2014-02-01'); +get_cache(1, '2014-01-01', '2014-02-01') +95247 +select sleep(1); +sleep(1) +0 +SELECT get_cache(1, '2014-01-01', '2014-02-01'); +get_cache(1, '2014-01-01', '2014-02-01') +95247 +select sleep(1); +sleep(1) +0 +SELECT get_cache(1, '2014-01-01', '2014-02-01'); +get_cache(1, '2014-01-01', '2014-02-01') +95247 +select sleep(1); +sleep(1) +0 +SELECT get_cache(1, '2014-01-01', '2014-02-01'); +get_cache(1, '2014-01-01', '2014-02-01') +95247 +select sleep(1); +sleep(1) +0 +SELECT get_cache(1, '2014-01-01', '2014-02-01'); +get_cache(1, '2014-01-01', '2014-02-01') +95247 +select sleep(1); +sleep(1) +0 +SELECT get_cache(1, '2014-01-01', '2014-02-01'); +get_cache(1, '2014-01-01', '2014-02-01') +95247 +select sleep(1); +sleep(1) +0 +SELECT get_cache(1, '2014-01-01', '2014-02-01'); +get_cache(1, '2014-01-01', '2014-02-01') +95247 +select sleep(1); +sleep(1) +0 +SELECT get_cache(1, '2014-01-01', '2014-02-01'); +get_cache(1, '2014-01-01', '2014-02-01') +95247 +select sleep(1); +sleep(1) +0 +SELECT get_cache(1, '2014-01-01', '2014-02-01'); +get_cache(1, '2014-01-01', '2014-02-01') +95247 +select sleep(1); +sleep(1) +0 +SELECT get_cache(1, '2014-01-01', '2014-02-01'); +get_cache(1, '2014-01-01', '2014-02-01') +95247 +select sleep(1); +sleep(1) +0 +SELECT get_cache(1, '2014-01-01', '2014-02-01'); +get_cache(1, '2014-01-01', '2014-02-01') +95247 +select sleep(1); +sleep(1) +0 +SELECT get_cache(1, '2014-01-01', '2014-02-01'); +get_cache(1, '2014-01-01', '2014-02-01') +95247 +select sleep(1); +sleep(1) +0 +SELECT get_cache(1, '2014-01-01', '2014-02-01'); +get_cache(1, '2014-01-01', '2014-02-01') +95247 +select sleep(1); +sleep(1) +0 +SELECT get_cache(1, '2014-01-01', '2014-02-01'); +get_cache(1, '2014-01-01', '2014-02-01') +95247 +select sleep(1); +sleep(1) +0 +SELECT get_cache(1, '2014-01-01', '2014-02-01'); +get_cache(1, '2014-01-01', '2014-02-01') +95247 +select sleep(1); +sleep(1) +0 +SELECT get_cache(1, '2014-01-01', '2014-02-01'); +get_cache(1, '2014-01-01', '2014-02-01') +95247 +select sleep(1); +sleep(1) +0 +SELECT get_cache(1, '2014-01-01', '2014-02-01'); +get_cache(1, '2014-01-01', '2014-02-01') +95247 +select sleep(1); +sleep(1) +0 +SELECT get_cache(1, '2014-01-01', '2014-02-01'); +get_cache(1, '2014-01-01', '2014-02-01') +95247 +select sleep(1); +sleep(1) +0 +SELECT get_cache(1, '2014-01-01', '2014-02-01'); +get_cache(1, '2014-01-01', '2014-02-01') +95247 +select sleep(1); +sleep(1) +0 +DROP FUNCTION get_cache; +DROP PROCEDURE cachedata; diff --git a/mysql-test/suite/innodb/t/sp_temp_table.test b/mysql-test/suite/innodb/t/sp_temp_table.test new file mode 100644 index 00000000000..b2883f551b9 --- /dev/null +++ b/mysql-test/suite/innodb/t/sp_temp_table.test @@ -0,0 +1,103 @@ +--source include/have_innodb.inc +--source include/big_test.inc + +--echo # +--echo # Bug #19306524 FAILING ASSERTION WITH TEMP TABLE FOR A PROCEDURE +--echo # CALLED FROM A FUNCTION +--echo # + +call mtr.add_suppression("MySQL is trying to drop table"); + +DELIMITER $$; +CREATE PROCEDURE cachedata( + IN obj_id BIGINT UNSIGNED, + IN start DATETIME, + IN end DATETIME +) + +cachedata:BEGIN + DECLARE cache_count BIGINT; + + SET @timestamp := NOW(); + + CREATE TEMPORARY TABLE IF NOT EXISTS cachedata ( + timestamp DATETIME, + object_id BIGINT UNSIGNED NOT NULL, + start DATETIME, + end DATETIME, + seqno BIGINT AUTO_INCREMENT, + value FLOAT, + PRIMARY KEY (seqno), + INDEX (timestamp), + INDEX (object_id, start, end) + ) ENGINE=INNODB; + + DELETE FROM cachedata WHERE + timestamp < DATE_SUB(@timestamp, INTERVAL 15 SECOND); + + SELECT count(*) INTO cache_count FROM cachedata WHERE + object_id = obj_id + AND start = start + AND end = end; + + IF cache_count > 0 THEN LEAVE cachedata; + END IF; + + INSERT INTO cachedata (timestamp, object_id, start, end, value) VALUES + (@timestamp, obj_id, start, end, 1234), + (@timestamp, obj_id, start, end, 4567), + (@timestamp, obj_id, start, end, 8901), + (@timestamp, obj_id, start, end, 1234), + (@timestamp, obj_id, start, end, 4567), + (@timestamp, obj_id, start, end, 8901), + (@timestamp, obj_id, start, end, 1234), + (@timestamp, obj_id, start, end, 4567), + (@timestamp, obj_id, start, end, 8901), + (@timestamp, obj_id, start, end, 1234), + (@timestamp, obj_id, start, end, 4567), + (@timestamp, obj_id, start, end, 8901), + (@timestamp, obj_id, start, end, 2345), + (@timestamp, obj_id, start, end, 1234), + (@timestamp, obj_id, start, end, 4567), + (@timestamp, obj_id, start, end, 8901), + (@timestamp, obj_id, start, end, 2345), + (@timestamp, obj_id, start, end, 1234), + (@timestamp, obj_id, start, end, 4567), + (@timestamp, obj_id, start, end, 8901), + (@timestamp, obj_id, start, end, 2345); + +END$$ + + +CREATE FUNCTION get_cache( + obj_id BIGINT UNSIGNED, + start DATETIME, + end DATETIME +) + RETURNS FLOAT + READS SQL DATA +BEGIN + DECLARE result FLOAT; + + CALL cachedata(obj_id, start, end); + + SELECT SUM(value) INTO result FROM cachedata WHERE + object_id = obj_id + AND start = start + AND end = end; + + RETURN result; +END$$ + +DELIMITER ;$$ + +let $i = 30; +while ($i) +{ + SELECT get_cache(1, '2014-01-01', '2014-02-01'); + select sleep(1); + dec $i; +} + +DROP FUNCTION get_cache; +DROP PROCEDURE cachedata; diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 28f7c95d243..137a89dc9de 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -9173,6 +9173,7 @@ ha_innobase::start_stmt( thr_lock_type lock_type) { trx_t* trx; + DBUG_ENTER("ha_innobase::start_stmt"); update_thd(thd); @@ -9195,6 +9196,28 @@ ha_innobase::start_stmt( prebuilt->hint_need_to_fetch_extra_cols = 0; reset_template(prebuilt); + if (dict_table_is_temporary(prebuilt->table) + && prebuilt->mysql_has_locked + && prebuilt->select_lock_type == LOCK_NONE) { + ulint error; + + switch (thd_sql_command(thd)) { + case SQLCOM_INSERT: + case SQLCOM_UPDATE: + case SQLCOM_DELETE: + init_table_handle_for_HANDLER(); + prebuilt->select_lock_type = LOCK_X; + error = row_lock_table_for_mysql(prebuilt, NULL, 1); + + if (error != DB_SUCCESS) { + error = convert_error_code_to_mysql( + (int) error, 0, thd); + DBUG_RETURN((int) error); + } + break; + } + } + if (!prebuilt->mysql_has_locked) { /* This handle is for a temporary table created inside this same LOCK TABLES; since MySQL does NOT call external_lock @@ -9227,7 +9250,7 @@ ha_innobase::start_stmt( innobase_register_trx(ht, thd, trx); - return(0); + DBUG_RETURN(0); } /******************************************************************//** diff --git a/storage/innobase/include/dict0dict.h b/storage/innobase/include/dict0dict.h index 254d4e149ca..003639d55b5 100644 --- a/storage/innobase/include/dict0dict.h +++ b/storage/innobase/include/dict0dict.h @@ -1367,6 +1367,14 @@ dict_table_init_referenced_rbt( /*===========================*/ dict_table_t* table); /*!< in: the table object whose table->referenced_rbt will be initialized */ +/********************************************************************//** +Check if it is a temporary table. +@return true if temporary table flag is set. */ +UNIV_INLINE +ibool +dict_table_is_temporary( +/*====================*/ + const dict_table_t* table); /*!< in: table to check */ #ifndef UNIV_NONINL #include "dict0dict.ic" diff --git a/storage/innobase/include/dict0dict.ic b/storage/innobase/include/dict0dict.ic index a63e1d16427..b65cae2a1d8 100644 --- a/storage/innobase/include/dict0dict.ic +++ b/storage/innobase/include/dict0dict.ic @@ -1004,3 +1004,15 @@ dict_table_init_referenced_rbt( ut_a(table->referenced_rbt != NULL); return(table->referenced_rbt); } + +/********************************************************************//** +Check if it is a temporary table. +@return true if temporary table flag is set. */ +UNIV_INLINE +ibool +dict_table_is_temporary( +/*====================*/ + const dict_table_t* table) /*!< in: table to check */ +{ + return(table->flags & (DICT_TF2_TEMPORARY << DICT_TF2_SHIFT)); +} diff --git a/storage/innobase/row/row0mysql.c b/storage/innobase/row/row0mysql.c index 8555054b86f..181ca966451 100644 --- a/storage/innobase/row/row0mysql.c +++ b/storage/innobase/row/row0mysql.c @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2000, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2000, 2014, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -3089,6 +3089,9 @@ row_drop_table_for_mysql( ulint namelen; ibool locked_dictionary = FALSE; pars_info_t* info = NULL; + DBUG_ENTER("row_drop_table_for_mysql"); + + DBUG_PRINT("row_drop_table_for_mysql", ("table: %s", name)); ut_a(name != NULL); @@ -3099,7 +3102,7 @@ row_drop_table_for_mysql( "InnoDB: Shut down mysqld and edit my.cnf so that newraw" " is replaced with raw.\n", stderr); - return(DB_ERROR); + DBUG_RETURN(DB_ERROR); } trx->op_info = "dropping table"; @@ -3504,7 +3507,7 @@ funct_exit: srv_wake_master_thread(); - return((int) err); + DBUG_RETURN((int) err); } /*********************************************************************//** From cdb8e6ed38ce641a6cb90a4a93bc5ff15f3ba9f2 Mon Sep 17 00:00:00 2001 From: Bill Qu <bill.qu@Oracle.com> Date: Wed, 24 Sep 2014 09:44:48 +0800 Subject: [PATCH 17/99] Bug #15868071 USING SET GLOBAL SQL_LOG_BIN SHOULD NOT BE ALLOWED Normally, SET SESSION SQL_LOG_BIN is used by DBAs to run a non-conflicting command locally only, ensuring it does not get replicated. Setting GLOBAL SQL_LOG_BIN would not require all sessions to disconnect. When SQL_LOG_BIN is changed globally, it does not immediately take effect for any sessions. It takes effect by becoming the session-level default inherited at the start of each new session, and this setting is kept and cached for the duration of that session. Setting it intentionally is unlikely to have a useful effect under any circumstance; setting it unintentionally, such as while intending to use SET [SESSION] is potentially disastrous. Accidentally using SET GLOBAL SQL_LOG_BIN will not show an immediate effect to the user, instead not having the desired session-level effect, and thus causing other potential problems with local-only maintenance being binlogged and executed on slaves; And transactions from new sessions (after SQL_LOG_BIN is changed globally) are not binlogged and replicated, which would result in irrecoverable or difficult data loss. This is the regular GLOBAL variables way to work, but in replication context it does not look right on a working server (with connected sessions) 'set global sql_log_bin' and none of that connections is affected. Unexperienced DBA after noticing that the command did "nothing" will change the session var and most probably won't unset the global var, causing new sessions to not be binlog. Setting GLOBAL SQL_LOG_BIN allows DBA to stop binlogging on all new sessions, which can be used to make a server "replication read-only" without restarting the server. But this has such big requirements, stop all existing connections, that it is more likely to make a mess, it is too risky to allow the GLOBAL variable. The statement 'SET GLOBAL SQL_LOG_BIN=N' will produce an error in 5.5, 5.6 and 5.7. Reading the GLOBAL SQL_LOG_BIN will produce a deprecation warning in 5.7. --- .../r/binlog_switch_inside_trans.result | 8 +------ mysql-test/suite/binlog/t/binlog_grant.test | 2 +- .../binlog/t/binlog_switch_inside_trans.test | 6 +---- .../suite/sys_vars/r/sql_log_bin_basic.result | 9 ++++++-- .../suite/sys_vars/t/sql_log_bin_basic.test | 6 ++++- sql/sys_vars.cc | 22 +++++++++---------- 6 files changed, 26 insertions(+), 27 deletions(-) diff --git a/mysql-test/suite/binlog/r/binlog_switch_inside_trans.result b/mysql-test/suite/binlog/r/binlog_switch_inside_trans.result index 48b6dfa61d9..0819d4e778f 100644 --- a/mysql-test/suite/binlog/r/binlog_switch_inside_trans.result +++ b/mysql-test/suite/binlog/r/binlog_switch_inside_trans.result @@ -1,6 +1,5 @@ set @save_binlog_format= @@global.binlog_format; set @save_binlog_dirct= @@global.binlog_direct_non_transactional_updates; -set @save_sql_log_bin= @@global.sql_log_bin; create table t1 (a int) engine= myisam; create table t2 (a int) engine= innodb; SELECT @@session.binlog_format; @@ -129,7 +128,7 @@ commit; begin; insert into t2 values (5); # Test that the global variable 'binlog_format' and -# 'binlog_direct_non_transactional_updates' and 'sql_log_bin' are +# 'binlog_direct_non_transactional_updates' are # writable inside a transaction. # Current session values are ROW, FALSE, TRUE respectively. SELECT @@global.binlog_format; @@ -137,20 +136,15 @@ SELECT @@global.binlog_format; ROW set @@global.binlog_format= statement; set @@global.binlog_direct_non_transactional_updates= TRUE; -set @@global.sql_log_bin= FALSE; SELECT @@global.binlog_format; @@global.binlog_format STATEMENT SELECT @@global.binlog_direct_non_transactional_updates; @@global.binlog_direct_non_transactional_updates 1 -SELECT @@global.sql_log_bin; -@@global.sql_log_bin -0 commit; set @@global.binlog_format= @save_binlog_format; set @@global.binlog_direct_non_transactional_updates= @save_binlog_dirct; -set @@global.sql_log_bin= @save_sql_log_bin; create table t3(a int, b int) engine= innodb; create table t4(a int) engine= innodb; create table t5(a int) engine= innodb; diff --git a/mysql-test/suite/binlog/t/binlog_grant.test b/mysql-test/suite/binlog/t/binlog_grant.test index f0367b3aa79..0c9d9a45ec9 100644 --- a/mysql-test/suite/binlog/t/binlog_grant.test +++ b/mysql-test/suite/binlog/t/binlog_grant.test @@ -15,7 +15,7 @@ show grants for mysqltest_1@localhost; connect (plain,localhost,mysqltest_1,,test); connect (root,localhost,root,,test); -# Testing setting both session and global SQL_LOG_BIN variable both as +# Testing setting session SQL_LOG_BIN variable both as # root and as plain user. --echo **** Variable SQL_LOG_BIN **** diff --git a/mysql-test/suite/binlog/t/binlog_switch_inside_trans.test b/mysql-test/suite/binlog/t/binlog_switch_inside_trans.test index 06c5e78bd0e..a93cd44fa17 100644 --- a/mysql-test/suite/binlog/t/binlog_switch_inside_trans.test +++ b/mysql-test/suite/binlog/t/binlog_switch_inside_trans.test @@ -10,7 +10,6 @@ source include/have_binlog_format_row.inc; set @save_binlog_format= @@global.binlog_format; set @save_binlog_dirct= @@global.binlog_direct_non_transactional_updates; -set @save_sql_log_bin= @@global.sql_log_bin; create table t1 (a int) engine= myisam; create table t2 (a int) engine= innodb; @@ -117,21 +116,18 @@ commit; begin; insert into t2 values (5); --echo # Test that the global variable 'binlog_format' and ---echo # 'binlog_direct_non_transactional_updates' and 'sql_log_bin' are +--echo # 'binlog_direct_non_transactional_updates' are --echo # writable inside a transaction. --echo # Current session values are ROW, FALSE, TRUE respectively. SELECT @@global.binlog_format; set @@global.binlog_format= statement; set @@global.binlog_direct_non_transactional_updates= TRUE; - set @@global.sql_log_bin= FALSE; SELECT @@global.binlog_format; SELECT @@global.binlog_direct_non_transactional_updates; - SELECT @@global.sql_log_bin; commit; set @@global.binlog_format= @save_binlog_format; set @@global.binlog_direct_non_transactional_updates= @save_binlog_dirct; -set @@global.sql_log_bin= @save_sql_log_bin; create table t3(a int, b int) engine= innodb; create table t4(a int) engine= innodb; diff --git a/mysql-test/suite/sys_vars/r/sql_log_bin_basic.result b/mysql-test/suite/sys_vars/r/sql_log_bin_basic.result index 5e8fe4e02f7..7d9ef4f76ed 100644 --- a/mysql-test/suite/sys_vars/r/sql_log_bin_basic.result +++ b/mysql-test/suite/sys_vars/r/sql_log_bin_basic.result @@ -57,11 +57,16 @@ ERROR 42000: Variable 'sql_log_bin' can't be set to the value of ' SET @@session.sql_log_bin = NO; ERROR 42000: Variable 'sql_log_bin' can't be set to the value of 'NO' '#-------------------FN_DYNVARS_156_05----------------------------#' -SET @@global.sql_log_bin = 0; SELECT @@global.sql_log_bin; @@global.sql_log_bin -0 +1 +SET @@global.sql_log_bin = 0; +ERROR 42000: Variable 'sql_log_bin' can't be set to the value of '0' +SELECT @@global.sql_log_bin; +@@global.sql_log_bin +1 SET @@global.sql_log_bin = 1; +ERROR 42000: Variable 'sql_log_bin' can't be set to the value of '1' '#----------------------FN_DYNVARS_156_06------------------------#' SELECT count(VARIABLE_VALUE) FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME='sql_log_bin'; count(VARIABLE_VALUE) diff --git a/mysql-test/suite/sys_vars/t/sql_log_bin_basic.test b/mysql-test/suite/sys_vars/t/sql_log_bin_basic.test index 153a0be0b8f..1e697e72221 100644 --- a/mysql-test/suite/sys_vars/t/sql_log_bin_basic.test +++ b/mysql-test/suite/sys_vars/t/sql_log_bin_basic.test @@ -109,11 +109,15 @@ SET @@session.sql_log_bin = NO; --echo '#-------------------FN_DYNVARS_156_05----------------------------#' ########################################################################### -# Test if accessing global sql_log_bin gives error # +# Test if setting global sql_log_bin gives error, # +# and there is no error on reading it. # ########################################################################### +SELECT @@global.sql_log_bin; +--Error ER_WRONG_VALUE_FOR_VAR SET @@global.sql_log_bin = 0; SELECT @@global.sql_log_bin; +--Error ER_WRONG_VALUE_FOR_VAR SET @@global.sql_log_bin = 1; --echo '#----------------------FN_DYNVARS_156_06------------------------#' diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc index 3cb72480341..e826624b42f 100644 --- a/sql/sys_vars.cc +++ b/sql/sys_vars.cc @@ -2447,13 +2447,13 @@ static Sys_var_bit Sys_log_off( static bool fix_sql_log_bin_after_update(sys_var *self, THD *thd, enum_var_type type) { - if (type == OPT_SESSION) - { - if (thd->variables.sql_log_bin) - thd->variables.option_bits |= OPTION_BIN_LOG; - else - thd->variables.option_bits &= ~OPTION_BIN_LOG; - } + DBUG_ASSERT(type == OPT_SESSION); + + if (thd->variables.sql_log_bin) + thd->variables.option_bits |= OPTION_BIN_LOG; + else + thd->variables.option_bits &= ~OPTION_BIN_LOG; + return FALSE; } @@ -2475,7 +2475,7 @@ static bool check_sql_log_bin(sys_var *self, THD *thd, set_var *var) return TRUE; if (var->type == OPT_GLOBAL) - return FALSE; + return TRUE; /* If in a stored function/trigger, it's too late to change sql_log_bin. */ if (thd->in_sub_stmt) @@ -2494,9 +2494,9 @@ static bool check_sql_log_bin(sys_var *self, THD *thd, set_var *var) } static Sys_var_mybool Sys_log_binlog( - "sql_log_bin", "sql_log_bin", - SESSION_VAR(sql_log_bin), NO_CMD_LINE, - DEFAULT(TRUE), NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(check_sql_log_bin), + "sql_log_bin", "Controls whether logging to the binary log is done", + SESSION_VAR(sql_log_bin), NO_CMD_LINE, DEFAULT(TRUE), + NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(check_sql_log_bin), ON_UPDATE(fix_sql_log_bin_after_update)); static Sys_var_bit Sys_sql_warnings( From f44113583caa0c439649f613fe16216e67283fc3 Mon Sep 17 00:00:00 2001 From: Sayantan Dutta <sayantan.dutta@oracle.com> Date: Fri, 26 Sep 2014 11:50:07 +0530 Subject: [PATCH 18/99] Bug #18964545 - ADD MTR SUPPORT FOR DEBUGGING WITH LLDB revert --- mysql-test/mysql-test-run.pl | 51 +++++------------------------------- 1 file changed, 6 insertions(+), 45 deletions(-) diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 472dc91ea69..7ddde593503 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -223,11 +223,8 @@ our %gprof_dirs; our $glob_debugger= 0; our $opt_gdb; -our $opt_lldb; our $opt_client_gdb; -our $opt_client_lldb; my $opt_boot_gdb; -my $opt_boot_lldb; our $opt_dbx; our $opt_client_dbx; my $opt_boot_dbx; @@ -1088,13 +1085,10 @@ sub command_line_setup { 'debug-common' => \$opt_debug_common, 'debug-server' => \$opt_debug_server, 'gdb' => \$opt_gdb, - 'lldb' => \$opt_lldb, 'client-gdb' => \$opt_client_gdb, - 'client-lldb' => \$opt_client_lldb, 'manual-gdb' => \$opt_manual_gdb, 'manual-lldb' => \$opt_manual_lldb, 'boot-gdb' => \$opt_boot_gdb, - 'boot-lldb' => \$opt_boot_lldb, 'manual-debug' => \$opt_manual_debug, 'ddd' => \$opt_ddd, 'client-ddd' => \$opt_client_ddd, @@ -1524,13 +1518,6 @@ sub command_line_setup { $opt_gdb= undef; } - if ($opt_lldb) - { - mtr_warning("Silently converting --lldb to --client-lldb in embedded mode"); - $opt_client_lldb= $opt_lldb; - $opt_lldb= undef; - } - if ($opt_ddd) { mtr_warning("Silently converting --ddd to --client-ddd in embedded mode"); @@ -1551,7 +1538,7 @@ sub command_line_setup { $opt_debugger= undef; } - if ( $opt_gdb || $opt_ddd || $opt_lldb || $opt_manual_gdb || $opt_manual_lldb || + if ( $opt_gdb || $opt_ddd || $opt_manual_gdb || $opt_manual_lldb || $opt_manual_ddd || $opt_manual_debug || $opt_debugger || $opt_dbx || $opt_manual_dbx) { @@ -1579,10 +1566,10 @@ sub command_line_setup { # -------------------------------------------------------------------------- # Check debug related options # -------------------------------------------------------------------------- - if ( $opt_gdb || $opt_client_gdb || $opt_lldb || $opt_client_lldb || - $opt_ddd || $opt_client_ddd || $opt_manual_gdb || $opt_manual_gdb || - $opt_manual_ddd || $opt_manual_debug || $opt_dbx || $opt_client_dbx || - $opt_manual_dbx || $opt_debugger || $opt_client_debugger ) + if ( $opt_gdb || $opt_client_gdb || $opt_ddd || $opt_client_ddd || + $opt_manual_gdb || $opt_manual_lldb || $opt_manual_ddd || + $opt_manual_debug || $opt_dbx || $opt_client_dbx || $opt_manual_dbx || + $opt_debugger || $opt_client_debugger ) { # Indicate that we are using debugger $glob_debugger= 1; @@ -3341,10 +3328,6 @@ sub mysql_install_db { gdb_arguments(\$args, \$exe_mysqld_bootstrap, $mysqld->name(), $bootstrap_sql_file); } - if ($opt_boot_lldb) { - lldb_arguments(\$args, \$exe_mysqld_bootstrap, $mysqld->name(), - $bootstrap_sql_file); - } if ($opt_boot_dbx) { dbx_arguments(\$args, \$exe_mysqld_bootstrap, $mysqld->name(), $bootstrap_sql_file); @@ -5005,7 +4988,7 @@ sub mysqld_start ($$) { { gdb_arguments(\$args, \$exe, $mysqld->name()); } - elsif ( $opt_lldb || $opt_manual_lldb ) + elsif ( $opt_manual_lldb ) { lldb_arguments(\$args, \$exe, $mysqld->name()); } @@ -5676,10 +5659,6 @@ sub start_mysqltest ($) { { gdb_arguments(\$args, \$exe, "client"); } - if ( $opt_client_lldb ) - { - lldb_arguments(\$args, \$exe, "client"); - } elsif ( $opt_client_ddd ) { ddd_arguments(\$args, \$exe, "client"); @@ -5793,30 +5772,12 @@ sub lldb_arguments { "b main\n" . $runline); - if ( $opt_manual_ddd ) - { print "\nTo start lldb for $type, type in another window:\n"; print "cd $glob_mysql_test_dir && lldb -s $lldb_init_file $$exe\n"; # Indicate the exe should not be started $$exe= undef; return; - } - - my $save_exe= $$exe; - $$args= []; - if ( $exe_libtool ) - { - $$exe= $exe_libtool; - mtr_add_arg($$args, "--mode=execute"); - mtr_add_arg($$args, "lldb"); - } - else - { - $$exe= "lldb"; - } - mtr_add_arg($$args, "--command=$lldb_init_file"); - mtr_add_arg($$args, "$save_exe"); } # From 911587287fb341cdba9efbed7c66f3891f0efd63 Mon Sep 17 00:00:00 2001 From: Kristofer Pettersson <kristofer.pettersson@oracle.com> Date: Mon, 29 Sep 2014 10:17:38 +0200 Subject: [PATCH 19/99] Bug#19695101 UPGRADE YASSL TO 2.3.5 --- extra/yassl/README | 9 +++++++++ extra/yassl/include/openssl/ssl.h | 2 +- extra/yassl/taocrypt/src/rsa.cpp | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/extra/yassl/README b/extra/yassl/README index b18e2baeea8..30c7af4a702 100644 --- a/extra/yassl/README +++ b/extra/yassl/README @@ -12,6 +12,15 @@ before calling SSL_new(); *** end Note *** +yaSSL Release notes, version 2.3.5 (9/29/2014) + + This release of yaSSL fixes an RSA Padding check vulnerability reported by + Intel Security Advanced Threat Research team + +See normal build instructions below under 1.0.6. +See libcurl build instructions below under 1.3.0 and note in 1.5.8. + + yaSSL Release notes, version 2.3.4 (8/15/2014) This release of yaSSL adds checking to the input_buffer class itself. diff --git a/extra/yassl/include/openssl/ssl.h b/extra/yassl/include/openssl/ssl.h index 993822d0ab0..e678c600fed 100644 --- a/extra/yassl/include/openssl/ssl.h +++ b/extra/yassl/include/openssl/ssl.h @@ -35,7 +35,7 @@ #include "rsa.h" -#define YASSL_VERSION "2.3.4" +#define YASSL_VERSION "2.3.5" #if defined(__cplusplus) diff --git a/extra/yassl/taocrypt/src/rsa.cpp b/extra/yassl/taocrypt/src/rsa.cpp index 69c59402e48..79a8a8f1c4f 100644 --- a/extra/yassl/taocrypt/src/rsa.cpp +++ b/extra/yassl/taocrypt/src/rsa.cpp @@ -177,7 +177,7 @@ word32 RSA_BlockType1::UnPad(const byte* pkcsBlock, word32 pkcsBlockLen, // skip past the padding until we find the separator unsigned i=1; - while (i<pkcsBlockLen && pkcsBlock[i++]) { // null body + while (i<pkcsBlockLen && pkcsBlock[i++] == 0xFF) { // null body } if (!(i==pkcsBlockLen || pkcsBlock[i-1]==0)) return 0; From 4af63f5d9631285d279f5501e5fc2747285d3596 Mon Sep 17 00:00:00 2001 From: unknown <magnus.blaudd@oracle.com> Date: Thu, 2 Oct 2014 15:58:02 +0200 Subject: [PATCH 20/99] Bug#19553099 EXPIRE_LOGS_DAYS=1 CRASH MYSQLD DURING RESTART, DBUG_SYNC(NULL, ...) - Restarting mysqld with --expire-log-days=1 triggers 'log_in_use()' to be called while current_thd is NULL. - Check current_thd before calling DEBUG_SYNC() to avoid passing NULL pointer to DEBUG_SYNC() - Wrap debug code construct inside #ifndef DBUG_OFF like in other parts of the file --- sql/sql_repl.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc index 343e128af7a..8bbb8c52d95 100644 --- a/sql/sql_repl.cc +++ b/sql/sql_repl.cc @@ -248,7 +248,10 @@ bool log_in_use(const char* log_name) size_t log_name_len = strlen(log_name) + 1; THD *tmp; bool result = 0; - DEBUG_SYNC(current_thd,"purge_logs_after_lock_index_before_thread_count"); +#ifndef BDUG_OFF + if (current_thd) + DEBUG_SYNC(current_thd,"purge_logs_after_lock_index_before_thread_count"); +#endif mysql_mutex_lock(&LOCK_thread_count); I_List_iterator<THD> it(threads); From 27938d14bb5a0313f13e99556d051f3df13d4237 Mon Sep 17 00:00:00 2001 From: Jon Olav Hauglid <jon.hauglid@oracle.com> Date: Mon, 6 Oct 2014 12:54:53 +0200 Subject: [PATCH 21/99] Create .gitignore as a copy of .bzrignore --- .gitignore | 3071 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 3071 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000000..4012ee96751 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3071 @@ +*-t +*.Plo +*.Po +*.a +*.bb +*.bbg +*.bin +*.cdf +*.core +*.d +*.da +*.dir +*.dll +*.dylib +*.exe +*.exp +*.gcda +*.gcno +*.gcov +*.idb +*.ilk +*.la +*.lai +*.lib +*.lo +*.manifest +*.map +*.o +*.obj +*.old +*.pch +*.pdb +*.reject +*.res +*.rule +*.sbr +*.so +*.so.* +*.spec +*.user +*.vcproj +*.vcproj.cmake +*.vcxproj +*.vcxproj.filters +*/*.dir/* +Debug +MySql.sdf +Win32 +*/*_pure_*warnings +*/.deps +*/.libs/* +*/.pure +*/debug/* +*/minsizerel/* +*/release/* +RelWithDebInfo +*~ +.*.swp +./CMakeCache.txt +./MySql.ncb +./MySql.sln +./MySql.suo +./README.build-files +./cmakecache.txt +./config.h +./copy_mysql_files.bat +./fix-project-files +./mysql*.ds? +./mysql.ncb +./mysql.sln +./mysql.suo +./prepare +.DS_Store +.defs.mk +.depend +.depend.mk +.deps +.gdb_history +.gdbinit +.libs +.o +.out +.snprj/* +.vimrc +50 +=6 +BUILD/compile-pentium-maintainer +BitKeeper/etc/RESYNC_TREE +BitKeeper/etc/config +BitKeeper/etc/csets +BitKeeper/etc/csets-in +BitKeeper/etc/csets-out +BitKeeper/etc/gone +BitKeeper/etc/level +BitKeeper/etc/pushed +BitKeeper/post-commit +BitKeeper/post-commit-manual +BitKeeper/tmp/* +BitKeeper/tmp/bkr3sAHD +BitKeeper/tmp/gone +CMakeFiles +CMakeFiles/* +CTestTestfile.cmake +COPYING +COPYING.LIB +Docs/#manual.texi# +Docs/INSTALL-BINARY +Docs/Images/myaccess-odbc.txt +Docs/Images/myaccess.txt +Docs/Images/myarchitecture.txt +Docs/Images/mydll-properties.txt +Docs/Images/mydsn-example.txt +Docs/Images/mydsn-icon.txt +Docs/Images/mydsn-options.txt +Docs/Images/mydsn-setup.txt +Docs/Images/mydsn-test-fail.txt +Docs/Images/mydsn-test-success.txt +Docs/Images/mydsn-trace.txt +Docs/Images/mydsn.txt +Docs/Images/myflowchart.txt +Docs/include.texi +Docs/internals.html +Docs/internals.info +Docs/internals.pdf +Docs/internals.txt +Docs/internals_toc.html +Docs/manual.aux +Docs/manual.cp +Docs/manual.cps +Docs/manual.de.log +Docs/manual.dvi +Docs/manual.fn +Docs/manual.fns +Docs/manual.html +Docs/manual.ky +Docs/manual.log +Docs/manual.pdf +Docs/manual.pg +Docs/manual.texi.orig +Docs/manual.texi.rej +Docs/manual.toc +Docs/manual.tp +Docs/manual.txt +Docs/manual.vr +Docs/manual_a4.ps +Docs/manual_letter.ps +Docs/manual_toc.html +Docs/my_sys.doc +Docs/mysql.info +Docs/mysql.xml +Docs/safe-mysql.xml +Docs/tex.fmt +Docs/texi2dvi.out +EXCEPTIONS-CLIENT +INSTALL-SOURCE +INSTALL-WIN-SOURCE +Logs/* +MIRRORS +Makefile +Makefile.in +Makefile.in' +PENDING/* +scripts/scripts +TAGS +VC++Files/client/mysql_amd64.dsp +ac_available_languages_fragment +acinclude.m4 +aclocal.m4 +analyse.test +autom4te-2.53.cache/* +autom4te-2.53.cache/output.0 +autom4te-2.53.cache/requests +autom4te-2.53.cache/traces.0 +autom4te.cache/* +autom4te.cache/output.0 +autom4te.cache/requests +autom4te.cache/traces.0 +bdb/*.ds? +bdb/*.vcproj +bdb/README +bdb/btree/btree_auto.c +bdb/build_unix/* +bdb/build_vxworks/db.h +bdb/build_vxworks/db_int.h +bdb/build_win32/db.h +bdb/build_win32/db_archive.dsp +bdb/build_win32/db_checkpoint.dsp +bdb/build_win32/db_config.h +bdb/build_win32/db_cxx.h +bdb/build_win32/db_deadlock.dsp +bdb/build_win32/db_dll.dsp +bdb/build_win32/db_dump.dsp +bdb/build_win32/db_int.h +bdb/build_win32/db_java.dsp +bdb/build_win32/db_load.dsp +bdb/build_win32/db_perf.dsp +bdb/build_win32/db_printlog.dsp +bdb/build_win32/db_recover.dsp +bdb/build_win32/db_stat.dsp +bdb/build_win32/db_static.dsp +bdb/build_win32/db_tcl.dsp +bdb/build_win32/db_test.dsp +bdb/build_win32/db_upgrade.dsp +bdb/build_win32/db_verify.dsp +bdb/build_win32/ex_access.dsp +bdb/build_win32/ex_btrec.dsp +bdb/build_win32/ex_env.dsp +bdb/build_win32/ex_lock.dsp +bdb/build_win32/ex_mpool.dsp +bdb/build_win32/ex_tpcb.dsp +bdb/build_win32/excxx_access.dsp +bdb/build_win32/excxx_btrec.dsp +bdb/build_win32/excxx_env.dsp +bdb/build_win32/excxx_lock.dsp +bdb/build_win32/excxx_mpool.dsp +bdb/build_win32/excxx_tpcb.dsp +bdb/build_win32/include.tcl +bdb/build_win32/libdb.def +bdb/build_win32/libdb.rc +bdb/db/crdel_auto.c +bdb/db/db_auto.c +bdb/dbinc_auto/*.* +bdb/dbreg/dbreg_auto.c +bdb/dist/autom4te-2.53.cache/* +bdb/dist/autom4te-2.53.cache/output.0 +bdb/dist/autom4te-2.53.cache/requests +bdb/dist/autom4te-2.53.cache/traces.0 +bdb/dist/autom4te.cache/* +bdb/dist/autom4te.cache/output.0 +bdb/dist/autom4te.cache/requests +bdb/dist/autom4te.cache/traces.0 +bdb/dist/config.hin +bdb/dist/configure +bdb/dist/db.h +bdb/dist/db_config.h +bdb/dist/db_cxx.h +bdb/dist/db_int.h +bdb/dist/include.tcl +bdb/dist/tags +bdb/dist/template/db_server_proc +bdb/dist/template/gen_client_ret +bdb/dist/template/rec_btree +bdb/dist/template/rec_crdel +bdb/dist/template/rec_db +bdb/dist/template/rec_dbreg +bdb/dist/template/rec_fileops +bdb/dist/template/rec_hash +bdb/dist/template/rec_log +bdb/dist/template/rec_qam +bdb/dist/template/rec_txn +bdb/examples_c/ex_apprec/ex_apprec_auto.c +bdb/examples_c/ex_apprec/ex_apprec_auto.h +bdb/examples_c/ex_apprec/ex_apprec_template +bdb/examples_java +bdb/fileops/fileops_auto.c +bdb/hash/hash_auto.c +bdb/include/btree_auto.h +bdb/include/btree_ext.h +bdb/include/clib_ext.h +bdb/include/common_ext.h +bdb/include/crdel_auto.h +bdb/include/db_auto.h +bdb/include/db_ext.h +bdb/include/db_server.h +bdb/include/env_ext.h +bdb/include/gen_client_ext.h +bdb/include/gen_server_ext.h +bdb/include/hash_auto.h +bdb/include/hash_ext.h +bdb/include/lock_ext.h +bdb/include/log_auto.h +bdb/include/log_ext.h +bdb/include/mp_ext.h +bdb/include/mutex_ext.h +bdb/include/os_ext.h +bdb/include/qam_auto.h +bdb/include/qam_ext.h +bdb/include/rpc_client_ext.h +bdb/include/rpc_server_ext.h +bdb/include/tcl_ext.h +bdb/include/txn_auto.h +bdb/include/txn_ext.h +bdb/include/xa_ext.h +bdb/java/src/com/sleepycat/db/Db.java +bdb/java/src/com/sleepycat/db/DbBtreeStat.java +bdb/java/src/com/sleepycat/db/DbConstants.java +bdb/java/src/com/sleepycat/db/DbHashStat.java +bdb/java/src/com/sleepycat/db/DbLockStat.java +bdb/java/src/com/sleepycat/db/DbLogStat.java +bdb/java/src/com/sleepycat/db/DbMpoolFStat.java +bdb/java/src/com/sleepycat/db/DbQueueStat.java +bdb/java/src/com/sleepycat/db/DbRepStat.java +bdb/java/src/com/sleepycat/db/DbTxnStat.java +bdb/libdb_java/java_stat_auto.c +bdb/libdb_java/java_stat_auto.h +bdb/log/log_auto.c +bdb/qam/qam_auto.c +bdb/rpc_client/db_server_clnt.c +bdb/rpc_client/gen_client.c +bdb/rpc_server/c/db_server_proc.c +bdb/rpc_server/c/db_server_proc.sed +bdb/rpc_server/c/db_server_svc.c +bdb/rpc_server/c/db_server_xdr.c +bdb/rpc_server/c/gen_db_server.c +bdb/rpc_server/db_server.x +bdb/rpc_server/db_server_proc.sed +bdb/rpc_server/db_server_svc.c +bdb/rpc_server/db_server_xdr.c +bdb/rpc_server/gen_db_server.c +bdb/test/TESTS +bdb/test/include.tcl +bdb/test/logtrack.list +bdb/txn/txn_auto.c +binary/* +bkpull.log +bkpull.log* +bkpull.log.2 +bkpull.log.3 +bkpull.log.4 +bkpull.log.5 +bkpull.log.6 +bkpush.log +bkpush.log* +build.log +build_tags.sh +client/#mysql.cc# +client/*.ds? +client/*.vcproj +client/.deps/base64.Po +client/.deps/completion_hash.Po +client/.deps/dummy.Po +client/.deps/mf_tempdir.Po +client/.deps/my_bit.Po +client/.deps/my_bitmap.Po +client/.deps/my_getsystime.Po +client/.deps/my_new.Po +client/.deps/my_user.Po +client/.deps/my_vle.Po +client/.deps/mysql.Po +client/.deps/mysql_upgrade.Po +client/.deps/mysqladmin.Po +client/.deps/mysqlbinlog.Po +client/.deps/mysqlcheck.Po +client/.deps/mysqldump.Po +client/.deps/mysqlimport.Po +client/.deps/mysqlshow.Po +client/.deps/mysqlslap.Po +client/.deps/mysqltest.Po +client/.deps/readline.Po +client/.deps/sql_string.Po +client/.libs -prune +client/.libs/lt-mysql +client/.libs/lt-mysqladmin +client/.libs/lt-mysqlbinlog +client/.libs/lt-mysqlcheck +client/.libs/lt-mysqldump +client/.libs/lt-mysqlimport +client/.libs/lt-mysqlshow +client/.libs/lt-mysqlslap +client/.libs/lt-mysqltest +client/.libs/mysql +client/.libs/mysql_upgrade +client/.libs/mysqladmin +client/.libs/mysqlbinlog +client/.libs/mysqlcheck +client/.libs/mysqldump +client/.libs/mysqlimport +client/.libs/mysqlshow +client/.libs/mysqlslap +client/.libs/mysqltest +client/completion_hash.cpp +client/decimal.c +client/insert_test +client/link_sources +client/log_event.cc +client/log_event.h +client/log_event_old.cc +client/log_event_old.h +client/mf_iocache.c +client/mf_iocache.cc +client/my_decimal.cc +client/my_decimal.h +client/my_user.c +client/mysql +client/mysql.cpp +client/mysql_upgrade +client/mysqladmin +client/mysqladmin.c +client/mysqladmin.cpp +client/mysqlbinlog +client/mysqlbinlog.cpp +client/mysqlcheck +client/mysqldump +client/mysqlimport +client/mysqlmanager-pwgen +client/mysqlmanagerc +client/mysqlshow +client/mysqlslap +client/mysqltest +client/mysqltestmanager-pwgen +client/mysqltestmanagerc +client/mysys_priv.h +client/readline.cpp +client/rpl_constants.h +client/rpl_record_old.cc +client/rpl_record_old.h +client/rpl_tblmap.h +client/rpl_tblmap.cc +client/rpl_utility.h +client/rpl_utility.cc +client/select_test +client/sql_const.h +client/sql_string.cpp +client/ssl_test +client/thimble +client/thread_test +client/tmp.diff +client_debug/* +client_release/* +client_test +cmake_install.cmake +cmd-line-utils/libedit/.deps/chared.Po +cmd-line-utils/libedit/.deps/common.Po +cmd-line-utils/libedit/.deps/el.Po +cmd-line-utils/libedit/.deps/emacs.Po +cmd-line-utils/libedit/.deps/fcns.Po +cmd-line-utils/libedit/.deps/fgetln.Po +cmd-line-utils/libedit/.deps/help.Po +cmd-line-utils/libedit/.deps/hist.Po +cmd-line-utils/libedit/.deps/history.Po +cmd-line-utils/libedit/.deps/key.Po +cmd-line-utils/libedit/.deps/map.Po +cmd-line-utils/libedit/.deps/parse.Po +cmd-line-utils/libedit/.deps/prompt.Po +cmd-line-utils/libedit/.deps/read.Po +cmd-line-utils/libedit/.deps/readline.Po +cmd-line-utils/libedit/.deps/refresh.Po +cmd-line-utils/libedit/.deps/search.Po +cmd-line-utils/libedit/.deps/sig.Po +cmd-line-utils/libedit/.deps/strlcat.Po +cmd-line-utils/libedit/.deps/strlcpy.Po +cmd-line-utils/libedit/.deps/term.Po +cmd-line-utils/libedit/.deps/tokenizer.Po +cmd-line-utils/libedit/.deps/tty.Po +cmd-line-utils/libedit/.deps/unvis.Po +cmd-line-utils/libedit/.deps/vi.Po +cmd-line-utils/libedit/.deps/vis.Po +cmd-line-utils/libedit/common.h +cmd-line-utils/libedit/makelist +cmd-line-utils/readline/.deps/bind.Po +cmd-line-utils/readline/.deps/callback.Po +cmd-line-utils/readline/.deps/compat.Po +cmd-line-utils/readline/.deps/complete.Po +cmd-line-utils/readline/.deps/display.Po +cmd-line-utils/readline/.deps/funmap.Po +cmd-line-utils/readline/.deps/histexpand.Po +cmd-line-utils/readline/.deps/histfile.Po +cmd-line-utils/readline/.deps/history.Po +cmd-line-utils/readline/.deps/histsearch.Po +cmd-line-utils/readline/.deps/input.Po +cmd-line-utils/readline/.deps/isearch.Po +cmd-line-utils/readline/.deps/keymaps.Po +cmd-line-utils/readline/.deps/kill.Po +cmd-line-utils/readline/.deps/macro.Po +cmd-line-utils/readline/.deps/mbutil.Po +cmd-line-utils/readline/.deps/misc.Po +cmd-line-utils/readline/.deps/nls.Po +cmd-line-utils/readline/.deps/parens.Po +cmd-line-utils/readline/.deps/readline.Po +cmd-line-utils/readline/.deps/rltty.Po +cmd-line-utils/readline/.deps/savestring.Po +cmd-line-utils/readline/.deps/search.Po +cmd-line-utils/readline/.deps/shell.Po +cmd-line-utils/readline/.deps/signals.Po +cmd-line-utils/readline/.deps/terminal.Po +cmd-line-utils/readline/.deps/text.Po +cmd-line-utils/readline/.deps/tilde.Po +cmd-line-utils/readline/.deps/undo.Po +cmd-line-utils/readline/.deps/util.Po +cmd-line-utils/readline/.deps/vi_mode.Po +cmd-line-utils/readline/.deps/xmalloc.Po +comon.h +comp_err/*.ds? +comp_err/*.vcproj +compile +config.cache +config.guess +config.h +config.h.in +config.log +config.status +config.sub +configure +configure.lineno +contrib/*.ds? +contrib/*.vcproj +core +core.* +cscope.in.out +cscope.out +cscope.po.out +db-*.*.* +dbug/*.ds? +dbug/*.vcproj +dbug/.deps/dbug.Po +dbug/.deps/dbug_analyze.Po +dbug/.deps/factorial.Po +dbug/.deps/my_main.Po +dbug/.deps/sanity.Po +dbug/dbug_analyze +dbug/example*.r +dbug/factorial +dbug/factorial.r +dbug/main.r +dbug/output*.r +dbug/user.ps +dbug/user.t +debian/control +debian/defs.mk +depcomp +emacs.h +examples/*.ds? +examples/*.vcproj +examples/udf_example/udf_example.def +extra/.deps/charset2html.Po +extra/.deps/comp_err.Po +extra/.deps/innochecksum.Po +extra/.deps/my_print_defaults.Po +extra/.deps/mysql_waitpid.Po +extra/.deps/perror.Po +extra/.deps/replace.Po +extra/.deps/resolve_stack_dump.Po +extra/.deps/resolveip.Po +extra/charset2html +extra/comp_err +extra/created_include_files +extra/innochecksum +extra/my_print_defaults +extra/mysql_install +extra/mysql_tzinfo_to_sql +extra/mysql_waitpid +extra/mysqld_ername.h +extra/mysqld_error.h +extra/perror +extra/replace +extra/resolve_stack_dump +extra/resolveip +extra/sql_state.h +extra/tztime.cc +extra/yassl/src/.deps/buffer.Plo +extra/yassl/src/.deps/cert_wrapper.Plo +extra/yassl/src/.deps/crypto_wrapper.Plo +extra/yassl/src/.deps/handshake.Plo +extra/yassl/src/.deps/lock.Plo +extra/yassl/src/.deps/log.Plo +extra/yassl/src/.deps/socket_wrapper.Plo +extra/yassl/src/.deps/ssl.Plo +extra/yassl/src/.deps/template_instnt.Plo +extra/yassl/src/.deps/timer.Plo +extra/yassl/src/.deps/yassl_error.Plo +extra/yassl/src/.deps/yassl_imp.Plo +extra/yassl/src/.deps/yassl_int.Plo +extra/yassl/taocrypt/benchmark/.deps/benchmark-benchmark.Po +extra/yassl/taocrypt/benchmark/benchmark +extra/yassl/taocrypt/src/.deps/libtaocrypt_la-aes.Plo +extra/yassl/taocrypt/src/.deps/libtaocrypt_la-aestables.Plo +extra/yassl/taocrypt/src/.deps/libtaocrypt_la-algebra.Plo +extra/yassl/taocrypt/src/.deps/libtaocrypt_la-arc4.Plo +extra/yassl/taocrypt/src/.deps/libtaocrypt_la-asn.Plo +extra/yassl/taocrypt/src/.deps/libtaocrypt_la-bftables.Plo +extra/yassl/taocrypt/src/.deps/libtaocrypt_la-blowfish.Plo +extra/yassl/taocrypt/src/.deps/libtaocrypt_la-coding.Plo +extra/yassl/taocrypt/src/.deps/libtaocrypt_la-des.Plo +extra/yassl/taocrypt/src/.deps/libtaocrypt_la-dh.Plo +extra/yassl/taocrypt/src/.deps/libtaocrypt_la-dsa.Plo +extra/yassl/taocrypt/src/.deps/libtaocrypt_la-file.Plo +extra/yassl/taocrypt/src/.deps/libtaocrypt_la-hash.Plo +extra/yassl/taocrypt/src/.deps/libtaocrypt_la-integer.Plo +extra/yassl/taocrypt/src/.deps/libtaocrypt_la-md2.Plo +extra/yassl/taocrypt/src/.deps/libtaocrypt_la-md4.Plo +extra/yassl/taocrypt/src/.deps/libtaocrypt_la-md5.Plo +extra/yassl/taocrypt/src/.deps/libtaocrypt_la-misc.Plo +extra/yassl/taocrypt/src/.deps/libtaocrypt_la-random.Plo +extra/yassl/taocrypt/src/.deps/libtaocrypt_la-ripemd.Plo +extra/yassl/taocrypt/src/.deps/libtaocrypt_la-rsa.Plo +extra/yassl/taocrypt/src/.deps/libtaocrypt_la-sha.Plo +extra/yassl/taocrypt/src/.deps/libtaocrypt_la-template_instnt.Plo +extra/yassl/taocrypt/src/.deps/libtaocrypt_la-tftables.Plo +extra/yassl/taocrypt/src/.deps/libtaocrypt_la-twofish.Plo +extra/yassl/taocrypt/test/.deps/test-test.Po +extra/yassl/taocrypt/test/test +extra/yassl/testsuite/.deps/testsuite-client.Po +extra/yassl/testsuite/.deps/testsuite-echoclient.Po +extra/yassl/testsuite/.deps/testsuite-echoserver.Po +extra/yassl/testsuite/.deps/testsuite-server.Po +extra/yassl/testsuite/.deps/testsuite-test.Po +extra/yassl/testsuite/.deps/testsuite-testsuite.Po +extra/yassl/testsuite/testsuite +fcns.c +fcns.h +gdbinit +gmon.out +hardcopy.0 +heap/*.ds? +heap/*.vcproj +heap/hp_test1 +heap/hp_test2 +help +help.c +help.h +include/abi_check +include/check_abi +include/link_sources +include/my_config.h +include/my_global.h +include/mysql_h.ic +include/mysql_version.h +include/mysqld_ername.h +include/mysqld_error.h +include/mysqld_error.h.rule +include/openssl +include/probes_mysql_dtrace.h +include/readline +include/readline/*.h +include/readline/readline.h +include/sql_state.h +include/widec.h +innobase/*.ds? +innobase/*.vcproj +innobase/autom4te-2.53.cache/* +innobase/autom4te-2.53.cache/output.0 +innobase/autom4te-2.53.cache/requests +innobase/autom4te-2.53.cache/traces.0 +innobase/autom4te.cache/* +innobase/autom4te.cache/output.0 +innobase/autom4te.cache/requests +innobase/autom4te.cache/traces.0 +innobase/configure.lineno +innobase/conftest.s1 +innobase/conftest.subs +innobase/ib_config.h +innobase/ib_config.h.in +innobase/mkinstalldirs +innobase/stamp-h1 +insert_test +install +install-sh +isam/*.ds? +isam/*.vcproj +isam/isamchk +isam/isamlog +isam/pack_isam +isam/test1 +isam/test2 +isam/test3 +isamchk/*.ds? +isamchk/*.vcproj +item_xmlfunc.cc +lib_debug/* +lib_release/* +libmysql/*.c +libmysql/*.ds? +libmysql/*.vcproj +libmysql/.deps/array.Plo +libmysql/.deps/bchange.Plo +libmysql/.deps/bcmp.Plo +libmysql/.deps/bmove.Plo +libmysql/.deps/bmove_upp.Plo +libmysql/.deps/charset-def.Plo +libmysql/.deps/charset.Plo +libmysql/.deps/client.Plo +libmysql/.deps/conf_to_src.Po +libmysql/.deps/ctype-big5.Plo +libmysql/.deps/ctype-bin.Plo +libmysql/.deps/ctype-cp932.Plo +libmysql/.deps/ctype-czech.Plo +libmysql/.deps/ctype-euc_kr.Plo +libmysql/.deps/ctype-eucjpms.Plo +libmysql/.deps/ctype-extra.Plo +libmysql/.deps/ctype-gb2312.Plo +libmysql/.deps/ctype-gbk.Plo +libmysql/.deps/ctype-latin1.Plo +libmysql/.deps/ctype-mb.Plo +libmysql/.deps/ctype-simple.Plo +libmysql/.deps/ctype-sjis.Plo +libmysql/.deps/ctype-tis620.Plo +libmysql/.deps/ctype-uca.Plo +libmysql/.deps/ctype-ucs2.Plo +libmysql/.deps/ctype-ujis.Plo +libmysql/.deps/ctype-utf8.Plo +libmysql/.deps/ctype-win1250ch.Plo +libmysql/.deps/ctype.Plo +libmysql/.deps/dbug.Plo +libmysql/.deps/default.Plo +libmysql/.deps/default_modify.Plo +libmysql/.deps/errmsg.Plo +libmysql/.deps/errors.Plo +libmysql/.deps/get_password.Plo +libmysql/.deps/hash.Plo +libmysql/.deps/int2str.Plo +libmysql/.deps/is_prefix.Plo +libmysql/.deps/libmysql.Plo +libmysql/.deps/list.Plo +libmysql/.deps/llstr.Plo +libmysql/.deps/longlong2str.Plo +libmysql/.deps/manager.Plo +libmysql/.deps/md5.Plo +libmysql/.deps/mf_cache.Plo +libmysql/.deps/mf_dirname.Plo +libmysql/.deps/mf_fn_ext.Plo +libmysql/.deps/mf_format.Plo +libmysql/.deps/mf_iocache.Plo +libmysql/.deps/mf_iocache2.Plo +libmysql/.deps/mf_loadpath.Plo +libmysql/.deps/mf_pack.Plo +libmysql/.deps/mf_path.Plo +libmysql/.deps/mf_tempfile.Plo +libmysql/.deps/mf_unixpath.Plo +libmysql/.deps/mf_wcomp.Plo +libmysql/.deps/mulalloc.Plo +libmysql/.deps/my_alloc.Plo +libmysql/.deps/my_chsize.Plo +libmysql/.deps/my_compress.Plo +libmysql/.deps/my_create.Plo +libmysql/.deps/my_delete.Plo +libmysql/.deps/my_div.Plo +libmysql/.deps/my_error.Plo +libmysql/.deps/my_file.Plo +libmysql/.deps/my_fopen.Plo +libmysql/.deps/my_fstream.Plo +libmysql/.deps/my_gethostbyname.Plo +libmysql/.deps/my_getopt.Plo +libmysql/.deps/my_getwd.Plo +libmysql/.deps/my_init.Plo +libmysql/.deps/my_lib.Plo +libmysql/.deps/my_malloc.Plo +libmysql/.deps/my_messnc.Plo +libmysql/.deps/my_net.Plo +libmysql/.deps/my_once.Plo +libmysql/.deps/my_open.Plo +libmysql/.deps/my_port.Plo +libmysql/.deps/my_pread.Plo +libmysql/.deps/my_pthread.Plo +libmysql/.deps/my_read.Plo +libmysql/.deps/my_realloc.Plo +libmysql/.deps/my_rename.Plo +libmysql/.deps/my_seek.Plo +libmysql/.deps/my_sleep.Plo +libmysql/.deps/my_static.Plo +libmysql/.deps/my_strtoll10.Plo +libmysql/.deps/my_symlink.Plo +libmysql/.deps/my_thr_init.Plo +libmysql/.deps/my_time.Plo +libmysql/.deps/my_vsnprintf.Plo +libmysql/.deps/my_write.Plo +libmysql/.deps/net.Plo +libmysql/.deps/pack.Plo +libmysql/.deps/password.Plo +libmysql/.deps/safemalloc.Plo +libmysql/.deps/sha1.Plo +libmysql/.deps/str2int.Plo +libmysql/.deps/str_alloc.Plo +libmysql/.deps/strcend.Plo +libmysql/.deps/strcont.Plo +libmysql/.deps/strend.Plo +libmysql/.deps/strfill.Plo +libmysql/.deps/string.Plo +libmysql/.deps/strinstr.Plo +libmysql/.deps/strmake.Plo +libmysql/.deps/strmov.Plo +libmysql/.deps/strnlen.Plo +libmysql/.deps/strnmov.Plo +libmysql/.deps/strtod.Plo +libmysql/.deps/strtoll.Plo +libmysql/.deps/strtoull.Plo +libmysql/.deps/strxmov.Plo +libmysql/.deps/strxnmov.Plo +libmysql/.deps/thr_mutex.Plo +libmysql/.deps/typelib.Plo +libmysql/.deps/vio.Plo +libmysql/.deps/viosocket.Plo +libmysql/.deps/viossl.Plo +libmysql/.deps/viosslfactories.Plo +libmysql/.deps/xml.Plo +libmysql/.libs/libmysqlclient.lai +libmysql/.libs/libmysqlclient.so.15 +libmysql/.libs/libmysqlclient.so.15.0.0 +libmysql/conf_to_src +libmysql/debug/libmysql.exp +libmysql/libmysql.ver +libmysql/link_sources +libmysql/my_static.h +libmysql/my_time.c +libmysql/mysys_priv.h +libmysql/net.c +libmysql/release/libmysql.exp +libmysql/vio_priv.h +libmysql/viosocket.o.6WmSJk +libmysql_r/*.c +libmysql_r/.deps/array.Plo +libmysql_r/.deps/bchange.Plo +libmysql_r/.deps/bcmp.Plo +libmysql_r/.deps/bmove.Plo +libmysql_r/.deps/bmove_upp.Plo +libmysql_r/.deps/charset-def.Plo +libmysql_r/.deps/charset.Plo +libmysql_r/.deps/client.Plo +libmysql_r/.deps/conf_to_src.Po +libmysql_r/.deps/ctype-big5.Plo +libmysql_r/.deps/ctype-bin.Plo +libmysql_r/.deps/ctype-cp932.Plo +libmysql_r/.deps/ctype-czech.Plo +libmysql_r/.deps/ctype-euc_kr.Plo +libmysql_r/.deps/ctype-eucjpms.Plo +libmysql_r/.deps/ctype-extra.Plo +libmysql_r/.deps/ctype-gb2312.Plo +libmysql_r/.deps/ctype-gbk.Plo +libmysql_r/.deps/ctype-latin1.Plo +libmysql_r/.deps/ctype-mb.Plo +libmysql_r/.deps/ctype-simple.Plo +libmysql_r/.deps/ctype-sjis.Plo +libmysql_r/.deps/ctype-tis620.Plo +libmysql_r/.deps/ctype-uca.Plo +libmysql_r/.deps/ctype-ucs2.Plo +libmysql_r/.deps/ctype-ujis.Plo +libmysql_r/.deps/ctype-utf8.Plo +libmysql_r/.deps/ctype-win1250ch.Plo +libmysql_r/.deps/ctype.Plo +libmysql_r/.deps/dbug.Plo +libmysql_r/.deps/default.Plo +libmysql_r/.deps/default_modify.Plo +libmysql_r/.deps/errmsg.Plo +libmysql_r/.deps/errors.Plo +libmysql_r/.deps/get_password.Plo +libmysql_r/.deps/hash.Plo +libmysql_r/.deps/int2str.Plo +libmysql_r/.deps/is_prefix.Plo +libmysql_r/.deps/libmysql.Plo +libmysql_r/.deps/list.Plo +libmysql_r/.deps/llstr.Plo +libmysql_r/.deps/longlong2str.Plo +libmysql_r/.deps/manager.Plo +libmysql_r/.deps/md5.Plo +libmysql_r/.deps/mf_cache.Plo +libmysql_r/.deps/mf_dirname.Plo +libmysql_r/.deps/mf_fn_ext.Plo +libmysql_r/.deps/mf_format.Plo +libmysql_r/.deps/mf_iocache.Plo +libmysql_r/.deps/mf_iocache2.Plo +libmysql_r/.deps/mf_loadpath.Plo +libmysql_r/.deps/mf_pack.Plo +libmysql_r/.deps/mf_path.Plo +libmysql_r/.deps/mf_tempfile.Plo +libmysql_r/.deps/mf_unixpath.Plo +libmysql_r/.deps/mf_wcomp.Plo +libmysql_r/.deps/mulalloc.Plo +libmysql_r/.deps/my_alloc.Plo +libmysql_r/.deps/my_chsize.Plo +libmysql_r/.deps/my_compress.Plo +libmysql_r/.deps/my_create.Plo +libmysql_r/.deps/my_delete.Plo +libmysql_r/.deps/my_div.Plo +libmysql_r/.deps/my_error.Plo +libmysql_r/.deps/my_file.Plo +libmysql_r/.deps/my_fopen.Plo +libmysql_r/.deps/my_fstream.Plo +libmysql_r/.deps/my_gethostbyname.Plo +libmysql_r/.deps/my_getopt.Plo +libmysql_r/.deps/my_getwd.Plo +libmysql_r/.deps/my_init.Plo +libmysql_r/.deps/my_lib.Plo +libmysql_r/.deps/my_malloc.Plo +libmysql_r/.deps/my_messnc.Plo +libmysql_r/.deps/my_net.Plo +libmysql_r/.deps/my_once.Plo +libmysql_r/.deps/my_open.Plo +libmysql_r/.deps/my_port.Plo +libmysql_r/.deps/my_pread.Plo +libmysql_r/.deps/my_pthread.Plo +libmysql_r/.deps/my_read.Plo +libmysql_r/.deps/my_realloc.Plo +libmysql_r/.deps/my_rename.Plo +libmysql_r/.deps/my_seek.Plo +libmysql_r/.deps/my_sleep.Plo +libmysql_r/.deps/my_static.Plo +libmysql_r/.deps/my_strtoll10.Plo +libmysql_r/.deps/my_symlink.Plo +libmysql_r/.deps/my_thr_init.Plo +libmysql_r/.deps/my_time.Plo +libmysql_r/.deps/my_vsnprintf.Plo +libmysql_r/.deps/my_write.Plo +libmysql_r/.deps/net.Plo +libmysql_r/.deps/pack.Plo +libmysql_r/.deps/password.Plo +libmysql_r/.deps/safemalloc.Plo +libmysql_r/.deps/sha1.Plo +libmysql_r/.deps/str2int.Plo +libmysql_r/.deps/str_alloc.Plo +libmysql_r/.deps/strcend.Plo +libmysql_r/.deps/strcont.Plo +libmysql_r/.deps/strend.Plo +libmysql_r/.deps/strfill.Plo +libmysql_r/.deps/string.Plo +libmysql_r/.deps/strinstr.Plo +libmysql_r/.deps/strmake.Plo +libmysql_r/.deps/strmov.Plo +libmysql_r/.deps/strnlen.Plo +libmysql_r/.deps/strnmov.Plo +libmysql_r/.deps/strtod.Plo +libmysql_r/.deps/strtoll.Plo +libmysql_r/.deps/strtoull.Plo +libmysql_r/.deps/strxmov.Plo +libmysql_r/.deps/strxnmov.Plo +libmysql_r/.deps/thr_mutex.Plo +libmysql_r/.deps/typelib.Plo +libmysql_r/.deps/vio.Plo +libmysql_r/.deps/viosocket.Plo +libmysql_r/.deps/viossl.Plo +libmysql_r/.deps/viosslfactories.Plo +libmysql_r/.deps/xml.Plo +libmysql_r/.libs/libmysqlclient_r.lai +libmysql_r/.libs/libmysqlclient_r.so.15 +libmysql_r/.libs/libmysqlclient_r.so.15.0.0 +libmysql_r/acconfig.h +libmysql_r/client_settings.h +libmysql_r/conf_to_src +libmysql_r/link_sources +libmysql_r/my_static.h +libmysql_r/mysys_priv.h +libmysql_r/vio_priv.h +libmysqld/*.ds? +libmysqld/*.vcproj +libmysqld/.deps/client.Po +libmysqld/.deps/derror.Po +libmysqld/.deps/discover.Po +libmysqld/.deps/emb_qcache.Po +libmysqld/.deps/errmsg.Po +libmysqld/.deps/event_data_objects.Po +libmysqld/.deps/event_db_repository.Po +libmysqld/.deps/event_queue.Po +libmysqld/.deps/event_scheduler.Po +libmysqld/.deps/events.Po +libmysqld/.deps/field.Po +libmysqld/.deps/field_conv.Po +libmysqld/.deps/filesort.Po +libmysqld/.deps/get_password.Po +libmysqld/.deps/gstream.Po +libmysqld/.deps/ha_berkeley.Po +libmysqld/.deps/ha_federated.Po +libmysqld/.deps/ha_heap.Po +libmysqld/.deps/ha_innodb.Po +libmysqld/.deps/ha_myisam.Po +libmysqld/.deps/ha_myisammrg.Po +libmysqld/.deps/ha_ndbcluster.Po +libmysqld/.deps/ha_ndbcluster_binlog.Po +libmysqld/.deps/ha_partition.Po +libmysqld/.deps/handler.Po +libmysqld/.deps/hash_filo.Po +libmysqld/.deps/hostname.Po +libmysqld/.deps/init.Po +libmysqld/.deps/item.Po +libmysqld/.deps/item_buff.Po +libmysqld/.deps/item_cmpfunc.Po +libmysqld/.deps/item_create.Po +libmysqld/.deps/item_func.Po +libmysqld/.deps/item_geofunc.Po +libmysqld/.deps/item_row.Po +libmysqld/.deps/item_strfunc.Po +libmysqld/.deps/item_subselect.Po +libmysqld/.deps/item_sum.Po +libmysqld/.deps/item_timefunc.Po +libmysqld/.deps/item_uniq.Po +libmysqld/.deps/item_xmlfunc.Po +libmysqld/.deps/key.Po +libmysqld/.deps/lib_sql.Po +libmysqld/.deps/libmysql.Po +libmysqld/.deps/libmysqld.Po +libmysqld/.deps/lock.Po +libmysqld/.deps/log.Po +libmysqld/.deps/log_event.Po +libmysqld/.deps/my_decimal.Po +libmysqld/.deps/my_time.Po +libmysqld/.deps/my_user.Po +libmysqld/.deps/net_serv.Po +libmysqld/.deps/opt_range.Po +libmysqld/.deps/opt_sum.Po +libmysqld/.deps/pack.Po +libmysqld/.deps/parse_file.Po +libmysqld/.deps/partition_info.Po +libmysqld/.deps/password.Po +libmysqld/.deps/procedure.Po +libmysqld/.deps/protocol.Po +libmysqld/.deps/records.Po +libmysqld/.deps/rpl_filter.Po +libmysqld/.deps/rpl_injector.Po +libmysqld/.deps/set_var.Po +libmysqld/.deps/sp.Po +libmysqld/.deps/sp_cache.Po +libmysqld/.deps/sp_head.Po +libmysqld/.deps/sp_pcontext.Po +libmysqld/.deps/sp_rcontext.Po +libmysqld/.deps/spatial.Po +libmysqld/.deps/sql_acl.Po +libmysqld/.deps/sql_analyse.Po +libmysqld/.deps/sql_base.Po +libmysqld/.deps/sql_builtin.Po +libmysqld/.deps/sql_cache.Po +libmysqld/.deps/sql_class.Po +libmysqld/.deps/sql_crypt.Po +libmysqld/.deps/sql_cursor.Po +libmysqld/.deps/sql_db.Po +libmysqld/.deps/sql_delete.Po +libmysqld/.deps/sql_truncate.Po +libmysqld/.deps/sql_reload.Po +libmysqld/.deps/datadict.Po +libmysqld/.deps/sql_derived.Po +libmysqld/.deps/sql_do.Po +libmysqld/.deps/sql_error.Po +libmysqld/.deps/sql_handler.Po +libmysqld/.deps/sql_help.Po +libmysqld/.deps/sql_insert.Po +libmysqld/.deps/sql_lex.Po +libmysqld/.deps/sql_list.Po +libmysqld/.deps/sql_load.Po +libmysqld/.deps/sql_manager.Po +libmysqld/.deps/sql_map.Po +libmysqld/.deps/sql_parse.Po +libmysqld/.deps/sql_partition.Po +libmysqld/.deps/sql_plugin.Po +libmysqld/.deps/sql_prepare.Po +libmysqld/.deps/sql_rename.Po +libmysqld/.deps/sql_select.Po +libmysqld/.deps/sql_show.Po +libmysqld/.deps/sql_state.Po +libmysqld/.deps/sql_string.Po +libmysqld/.deps/sql_table.Po +libmysqld/.deps/sql_tablespace.Po +libmysqld/.deps/sql_test.Po +libmysqld/.deps/sql_trigger.Po +libmysqld/.deps/sql_udf.Po +libmysqld/.deps/sql_union.Po +libmysqld/.deps/sql_update.Po +libmysqld/.deps/sql_view.Po +libmysqld/.deps/sql_yacc.Po +libmysqld/.deps/stacktrace.Po +libmysqld/.deps/strfunc.Po +libmysqld/.deps/table.Po +libmysqld/.deps/thr_malloc.Po +libmysqld/.deps/time.Po +libmysqld/.deps/tztime.Po +libmysqld/.deps/uniques.Po +libmysqld/.deps/unireg.Po +libmysqld/backup_dir +libmysqld/client.c +libmysqld/client_settings.h +libmysqld/cmake_dummy.c +libmysqld/convert.cc +libmysqld/derror.cc +libmysqld/discover.cc +libmysqld/emb_qcache.cpp +libmysqld/errmsg.c +libmysqld/event.cc +libmysqld/event_data_objects.cc +libmysqld/event_db_repository.cc +libmysqld/event_executor.cc +libmysqld/event_queue.cc +libmysqld/event_scheduler.cc +libmysqld/event_timed.cc +libmysqld/events.cc +libmysqld/examples/.deps/completion_hash.Po +libmysqld/examples/.deps/mysql.Po +libmysqld/examples/.deps/mysql_client_test.Po +libmysqld/examples/.deps/mysqltest.Po +libmysqld/examples/.deps/readline.Po +libmysqld/examples/client_test.c +libmysqld/examples/client_test.cc +libmysqld/examples/completion_hash.cc +libmysqld/examples/completion_hash.h +libmysqld/examples/link_sources +libmysqld/examples/my_readline.h +libmysqld/examples/mysql +libmysqld/examples/mysql.cc +libmysqld/examples/mysql_client_test.c +libmysqld/examples/mysql_client_test_embedded +libmysqld/examples/mysqltest +libmysqld/examples/mysqltest.c +libmysqld/examples/mysqltest_embedded +libmysqld/examples/readline.cc +libmysqld/examples/sql_string.cc +libmysqld/examples/sql_string.h +libmysqld/examples/test-gdbinit +libmysqld/field.cc +libmysqld/field_conv.cc +libmysqld/filesort.cc +libmysqld/get_password.c +libmysqld/gstream.cc +libmysqld/ha_archive.cc +libmysqld/ha_berkeley.cc +libmysqld/ha_blackhole.cc +libmysqld/ha_example.cc +libmysqld/ha_federated.cc +libmysqld/ha_heap.cc +libmysqld/ha_innobase.cc +libmysqld/ha_innodb.cc +libmysqld/ha_isam.cc +libmysqld/ha_isammrg.cc +libmysqld/ha_myisam.cc +libmysqld/ha_myisammrg.cc +libmysqld/ha_ndbcluster.cc +libmysqld/ha_ndbcluster_binlog.cc +libmysqld/ha_ndbcluster_cond.cc +libmysqld/ha_partition.cc +libmysqld/ha_tina.cc +libmysqld/handler.cc +libmysqld/handlerton.cc +libmysqld/hash_filo.cc +libmysqld/hostname.cc +libmysqld/init.cc +libmysqld/item.cc +libmysqld/item_buff.cc +libmysqld/item_cmpfunc.cc +libmysqld/item_create.cc +libmysqld/item_func.cc +libmysqld/item_geofunc.cc +libmysqld/item_row.cc +libmysqld/item_strfunc.cc +libmysqld/item_subselect.cc +libmysqld/item_sum.cc +libmysqld/item_timefunc.cc +libmysqld/item_uniq.cc +libmysqld/key.cc +libmysqld/lex_hash.h +libmysqld/lib_sql.cpp +libmysqld/libmysql.c +libmysqld/link_sources +libmysqld/lock.cc +libmysqld/log.cc +libmysqld/log_event.cc +libmysqld/log_event_old.cc +libmysqld/md5.c +libmysqld/message.h +libmysqld/message.rc +libmysqld/mf_iocache.cc +libmysqld/mini_client.cc +libmysqld/my_decimal.cc +libmysqld/my_time.c +libmysqld/my_user.c +libmysqld/net_pkg.cc +libmysqld/net_serv.cc +libmysqld/opt_ft.cc +libmysqld/opt_range.cc +libmysqld/opt_sum.cc +libmysqld/pack.c +libmysqld/parse_file.cc +libmysqld/partition_info.cc +libmysqld/password.c +libmysqld/procedure.cc +libmysqld/protocol.cc +libmysqld/protocol_cursor.cc +libmysqld/records.cc +libmysqld/repl_failsafe.cc +libmysqld/rpl_filter.cc +libmysqld/rpl_handler.cc +libmysqld/rpl_injector.cc +libmysqld/rpl_record.cc +libmysqld/rpl_record_old.cc +libmysqld/rpl_utility.cc +libmysqld/scheduler.cc +libmysqld/set_var.cc +libmysqld/sha2.cc +libmysqld/simple-test +libmysqld/slave.cc +libmysqld/sp.cc +libmysqld/sp_cache.cc +libmysqld/sp_head.cc +libmysqld/sp_pcontext.cc +libmysqld/sp_rcontext.cc +libmysqld/spatial.cc +libmysqld/sql_acl.cc +libmysqld/sql_analyse.cc +libmysqld/sql_base.cc +libmysqld/sql_builtin.cc +libmysqld/sql_cache.cc +libmysqld/sql_class.cc +libmysqld/sql_command +libmysqld/sql_connect.cc +libmysqld/sql_crypt.cc +libmysqld/sql_cursor.cc +libmysqld/sql_cursor.h +libmysqld/sql_db.cc +libmysqld/sql_delete.cc +libmysqld/sql_truncate.cc +libmysqld/sql_reload.cc +libmysqld/datadict.cc +libmysqld/sql_derived.cc +libmysqld/sql_do.cc +libmysqld/sql_error.cc +libmysqld/sql_handler.cc +libmysqld/sql_help.cc +libmysqld/sql_insert.cc +libmysqld/sql_lex.cc +libmysqld/sql_list.cc +libmysqld/sql_load.cc +libmysqld/sql_locale.cc +libmysqld/sql_manager.cc +libmysqld/sql_map.cc +libmysqld/sql_olap.cc +libmysqld/sql_parse.cc +libmysqld/sql_partition.cc +libmysqld/sql_plugin.cc +libmysqld/sql_prepare.cc +libmysqld/sql_profile.cc +libmysqld/sql_rename.cc +libmysqld/sql_repl.cc +libmysqld/sql_select.cc +libmysqld/sql_servers.cc +libmysqld/sql_show.cc +libmysqld/sql_state.c +libmysqld/sql_string.cc +libmysqld/sql_table.cc +libmysqld/sql_tablespace.cc +libmysqld/sql_test.cc +libmysqld/sql_trigger.cc +libmysqld/sql_udf.cc +libmysqld/sql_union.cc +libmysqld/sql_unions.cc +libmysqld/sql_update.cc +libmysqld/sql_view.cc +libmysqld/sql_yacc.cc +libmysqld/sql_yacc.cpp +libmysqld/sql_yacc.h +libmysqld/stacktrace.c +libmysqld/strfunc.cc +libmysqld/table.cc +libmysqld/thr_malloc.cc +libmysqld/sql_time.cc +libmysqld/tztime.cc +libmysqld/uniques.cc +libmysqld/unireg.cc +libmysqltest/*.ds? +libmysqltest/*.vcproj +libmysqltest/mytest.c +libtool +linked_client_sources +linked_include_sources +linked_libmysql_r_sources +linked_libmysql_sources +linked_libmysqld_sources +linked_libmysqldex_sources +linked_server_sources +linked_tools_sources +locked +ltmain.sh +man/*.1 +merge/*.ds? +merge/*.vcproj +missing +mit-pthreads/config.flags +mit-pthreads/include/bits +mit-pthreads/include/pthread/machdep.h +mit-pthreads/include/pthread/posix.h +mit-pthreads/include/sys +mit-pthreads/machdep.c +mit-pthreads/pg++ +mit-pthreads/pgcc +mit-pthreads/syscall.S +mkinstalldirs +my_print_defaults/*.ds? +my_print_defaults/*.vcproj +myisam/*.ds? +myisam/*.vcproj +myisam/FT1.MYD +myisam/FT1.MYI +myisam/ft_dump +myisam/ft_eval +myisam/ft_test1 +myisam/ftbench/data +myisam/ftbench/t +myisam/ftbench/var/* +myisam/mi_test1 +myisam/mi_test2 +myisam/mi_test3 +myisam/mi_test_all +myisam/myisam.log +myisam/myisam_ftdump +myisam/myisamchk +myisam/myisamlog +myisam/myisampack +myisam/rt_test +myisam/rt_test.MYD +myisam/rt_test.MYI +myisam/sp_test +myisam/test1.MYD +myisam/test1.MYI +myisam/test2.MYD +myisam/test2.MYI +myisam_ftdump/*.ds? +myisam_ftdump/*.vcproj +myisamchk/*.ds? +myisamchk/*.vcproj +myisamlog/*.ds? +myisamlog/*.vcproj +myisammrg/*.ds? +myisammrg/*.vcproj +myisampack/*.ds? +myisampack/*.vcproj +mysql-4.0.2-alpha-pc-linux-gnu-i686.tar.gz +mysql-4.0.2-alpha.tar.gz +mysql-4.1.8-win-src.zip +mysql-5.0.2-alpha.tar.gz +mysql-max-4.0.2-alpha-pc-linux-gnu-i686.tar.gz +mysql-test/*.ds? +mysql-test/*.vcproj +mysql-test/.DS_Store +mysql-test/collections/default.release +mysql-test/collections/default.release.done +mysql-test/funcs_1.log +mysql-test/funcs_1.tar +mysql-test/gmon.out +mysql-test/install_test_db +mysql-test/lib/My/SafeProcess/my_safe_process +mysql-test/lib/init_db.sql +mysql-test/linux_sys_vars.inc +mysql-test/load_sysvars.inc +mysql-test/mtr +mysql-test/mysql-test-run +mysql-test/mysql-test-gcov.err +mysql-test/mysql-test-gcov.msg +mysql-test/mysql-test-run-shell +mysql-test/mysql-test-run.log +mysql-test/mysql_test_run_new +mysql-test/ndb/ndbcluster +mysql-test/partitions.log +mysql-test/r/*.err +mysql-test/r/*.log +mysql-test/r/*.out +mysql-test/r/*.reject +mysql-test/r/index_merge_load.result +mysql-test/r/max_allowed_packet_func.result +mysql-test/r/rpl000001.eval +mysql-test/r/rpl000002.eval +mysql-test/r/rpl000014.eval +mysql-test/r/rpl000015.eval +mysql-test/r/rpl000016.eval +mysql-test/r/rpl_log.eval +mysql-test/r/slave-running.eval +mysql-test/r/slave-stopped.eval +mysql-test/r/tmp.result +mysql-test/reg.log +mysql-test/rpl.log +mysql-test/share/mysql +mysql-test/std_data/*.pem +mysql-test/suite/funcs_1.tar.gz +mysql-test/suite/funcs_1.tar.zip +mysql-test/suite/funcs_1/r/innodb_trig_03e.warnings +mysql-test/suite/funcs_1/r/innodb_views.warnings +mysql-test/suite/funcs_1/r/memory_trig_03e.warnings +mysql-test/suite/funcs_1/r/memory_views.warnings +mysql-test/suite/funcs_1/r/myisam_trig_03e.warnings +mysql-test/suite/funcs_1/r/myisam_views.warnings +mysql-test/suite/funcs_1/r/ndb_trig_03e.warnings +mysql-test/suite/funcs_1/r/ndb_views.warnings +mysql-test/suite/partitions/r/dif +mysql-test/suite/partitions/r/diff +mysql-test/suite/partitions/r/partition.result +mysql-test/suite/partitions/r/partition_bit_ndb.warnings +mysql-test/suite/partitions/r/partition_special_innodb.warnings +mysql-test/suite/partitions/r/partition_special_myisam.warnings +mysql-test/suite/partitions/r/partition_t55.out +mysql-test/suite/partitions/r/partition_t55.refout +mysql-test/suite/partitions/t/partition.test +mysql-test/t/index_merge.load +mysql-test/t/tmp.test +mysql-test/var +mysql-test/var/* +mysql-test/windows_sys_vars.inc +mysql.kdevprj +mysql.proj +sql_priv.h +mysqlbinlog/*.ds? +mysqlbinlog/*.vcproj +mysqlcheck/*.ds? +mysqlcheck/*.vcproj +mysqld.S +mysqld.sym +mysqldemb/*.ds? +mysqldemb/*.vcproj +mysqlserver/*.ds? +mysqlserver/*.vcproj +mysys/#mf_iocache.c# +mysys/*.ds? +mysys/*.vcproj +mysys/.deps/array.Po +mysys/.deps/base64.Po +mysys/.deps/charset-def.Po +mysys/.deps/charset.Po +mysys/.deps/checksum.Po +mysys/.deps/default.Po +mysys/.deps/default_modify.Po +mysys/.deps/errors.Po +mysys/.deps/hash.Po +mysys/.deps/list.Po +mysys/.deps/md5.Po +mysys/.deps/mf_brkhant.Po +mysys/.deps/mf_cache.Po +mysys/.deps/mf_dirname.Po +mysys/.deps/mf_fn_ext.Po +mysys/.deps/mf_format.Po +mysys/.deps/mf_getdate.Po +mysys/.deps/mf_iocache.Po +mysys/.deps/mf_iocache2.Po +mysys/.deps/mf_keycache.Po +mysys/.deps/mf_keycaches.Po +mysys/.deps/mf_loadpath.Po +mysys/.deps/mf_pack.Po +mysys/.deps/mf_path.Po +mysys/.deps/mf_qsort.Po +mysys/.deps/mf_qsort2.Po +mysys/.deps/mf_radix.Po +mysys/.deps/mf_same.Po +mysys/.deps/mf_sort.Po +mysys/.deps/mf_strip.Po +mysys/.deps/mf_tempdir.Po +mysys/.deps/mf_tempfile.Po +mysys/.deps/mf_unixpath.Po +mysys/.deps/mf_wcomp.Po +mysys/.deps/mf_wfile.Po +mysys/.deps/mulalloc.Po +mysys/.deps/my_access.Po +mysys/.deps/my_aes.Po +mysys/.deps/my_alarm.Po +mysys/.deps/my_alloc.Po +mysys/.deps/my_append.Po +mysys/.deps/my_atomic.Po +mysys/.deps/my_bit.Po +mysys/.deps/my_bitmap.Po +mysys/.deps/my_chsize.Po +mysys/.deps/my_clock.Po +mysys/.deps/my_compress.Po +mysys/.deps/my_copy.Po +mysys/.deps/my_crc32.Po +mysys/.deps/my_create.Po +mysys/.deps/my_delete.Po +mysys/.deps/my_div.Po +mysys/.deps/my_dup.Po +mysys/.deps/my_error.Po +mysys/.deps/my_file.Po +mysys/.deps/my_fopen.Po +mysys/.deps/my_fstream.Po +mysys/.deps/my_gethostbyname.Po +mysys/.deps/my_gethwaddr.Po +mysys/.deps/my_getncpus.Po +mysys/.deps/my_getopt.Po +mysys/.deps/my_getsystime.Po +mysys/.deps/my_getwd.Po +mysys/.deps/my_handler.Po +mysys/.deps/my_init.Po +mysys/.deps/my_largepage.Po +mysys/.deps/my_lib.Po +mysys/.deps/my_libwrap.Po +mysys/.deps/my_lock.Po +mysys/.deps/my_lockmem.Po +mysys/.deps/my_lread.Po +mysys/.deps/my_lwrite.Po +mysys/.deps/my_malloc.Po +mysys/.deps/my_memmem.Po +mysys/.deps/my_messnc.Po +mysys/.deps/my_mkdir.Po +mysys/.deps/my_mmap.Po +mysys/.deps/my_net.Po +mysys/.deps/my_netware.Po +mysys/.deps/my_new.Po +mysys/.deps/my_once.Po +mysys/.deps/my_open.Po +mysys/.deps/my_port.Po +mysys/.deps/my_pread.Po +mysys/.deps/my_pthread.Po +mysys/.deps/my_quick.Po +mysys/.deps/my_read.Po +mysys/.deps/my_realloc.Po +mysys/.deps/my_redel.Po +mysys/.deps/my_rename.Po +mysys/.deps/my_seek.Po +mysys/.deps/my_semaphore.Po +mysys/.deps/my_sleep.Po +mysys/.deps/my_static.Po +mysys/.deps/my_symlink.Po +mysys/.deps/my_symlink2.Po +mysys/.deps/my_sync.Po +mysys/.deps/my_thr_init.Po +mysys/.deps/my_vle.Po +mysys/.deps/my_windac.Po +mysys/.deps/my_write.Po +mysys/.deps/ptr_cmp.Po +mysys/.deps/queues.Po +mysys/.deps/rijndael.Po +mysys/.deps/safemalloc.Po +mysys/.deps/sha1.Po +mysys/.deps/string.Po +mysys/.deps/thr_alarm.Po +mysys/.deps/thr_lock.Po +mysys/.deps/thr_mutex.Po +mysys/.deps/thr_rwlock.Po +mysys/.deps/tree.Po +mysys/.deps/trie.Po +mysys/.deps/typelib.Po +mysys/charset2html +mysys/getopt.c +mysys/getopt1.c +mysys/main.cc +mysys/my_new.cpp +mysys/raid.cpp +mysys/ste5KbMa +mysys/test_atomic +mysys/test_bitmap +mysys/test_charset +mysys/test_dir +mysys/test_gethwaddr +mysys/test_io_cache +mysys/test_thr_alarm +mysys/test_thr_lock +mysys/test_vsnprintf +mysys/testhash +ndb/bin/DbAsyncGenerator +ndb/bin/DbCreate +ndb/bin/acid +ndb/bin/async-lmc-bench-l-p10.sh +ndb/bin/async-lmc-bench-l.sh +ndb/bin/async-lmc-bench-p10.sh +ndb/bin/async-lmc-bench.sh +ndb/bin/atrt +ndb/bin/atrt-analyze-result.sh +ndb/bin/atrt-clear-result.sh +ndb/bin/atrt-gather-result.sh +ndb/bin/atrt-setup.sh +ndb/bin/bankCreator +ndb/bin/bankMakeGL +ndb/bin/bankSumAccounts +ndb/bin/bankTimer +ndb/bin/bankTransactionMaker +ndb/bin/bankValidateAllGLs +ndb/bin/basicTransporterTest +ndb/bin/benchronja +ndb/bin/bulk_copy +ndb/bin/copy_tab +ndb/bin/create_all_tabs +ndb/bin/create_index +ndb/bin/create_tab +ndb/bin/delete_all +ndb/bin/desc +ndb/bin/drop_all_tabs +ndb/bin/drop_index +ndb/bin/drop_tab +ndb/bin/flexAsynch +ndb/bin/flexBench +ndb/bin/flexHammer +ndb/bin/flexScan +ndb/bin/flexTT +ndb/bin/hugoCalculator +ndb/bin/hugoFill +ndb/bin/hugoLoad +ndb/bin/hugoLockRecords +ndb/bin/hugoPkDelete +ndb/bin/hugoPkRead +ndb/bin/hugoPkReadRecord +ndb/bin/hugoPkUpdate +ndb/bin/hugoScanRead +ndb/bin/hugoScanUpdate +ndb/bin/index +ndb/bin/index2 +ndb/bin/initronja +ndb/bin/interpreterInTup +ndb/bin/list_tables +ndb/bin/make-config.sh +ndb/bin/mgmtclient +ndb/bin/mgmtsrvr +ndb/bin/mkconfig +ndb/bin/ndb +ndb/bin/ndb_cpcc +ndb/bin/ndb_cpcd +ndb/bin/ndb_rep +ndb/bin/ndbsql +ndb/bin/newton_basic +ndb/bin/newton_br +ndb/bin/newton_pb +ndb/bin/newton_perf +ndb/bin/perfTransporterTest +ndb/bin/printConfig +ndb/bin/printSchemafile +ndb/bin/printSysfile +ndb/bin/redoLogFileReader +ndb/bin/restart +ndb/bin/restarter +ndb/bin/restarter2 +ndb/bin/restarts +ndb/bin/restore +ndb/bin/select_all +ndb/bin/select_count +ndb/bin/telco +ndb/bin/testBackup +ndb/bin/testBank +ndb/bin/testBasic +ndb/bin/testBasicAsynch +ndb/bin/testCopy +ndb/bin/testDataBuffers +ndb/bin/testDict +ndb/bin/testGrep +ndb/bin/testGrepVerify +ndb/bin/testIndex +ndb/bin/testInterpreter +ndb/bin/testKernelDataBuffer +ndb/bin/testLongSig +ndb/bin/testMgm +ndb/bin/testMgmapi +ndb/bin/testNdbApi +ndb/bin/testNodeRestart +ndb/bin/testOIBasic +ndb/bin/testOdbcDriver +ndb/bin/testOperations +ndb/bin/testRestartGci +ndb/bin/testScan +ndb/bin/testScanInterpreter +ndb/bin/testSimplePropertiesSection +ndb/bin/testSystemRestart +ndb/bin/testTimeout +ndb/bin/testTransactions +ndb/bin/test_cpcd +ndb/bin/test_event +ndb/bin/verify_index +ndb/bin/waiter +ndb/config/autom4te.cache/* +ndb/config/config.mk +ndb/examples/ndbapi_example1/ndbapi_example1 +ndb/examples/ndbapi_example2/ndbapi_example2 +ndb/examples/ndbapi_example3/ndbapi_example3 +ndb/examples/ndbapi_example5/ndbapi_example5 +ndb/examples/select_all/select_all +ndb/include/ndb_global.h +ndb/include/ndb_types.h +ndb/include/ndb_version.h +ndb/lib/libMGM_API.so +ndb/lib/libNDB_API.so +ndb/lib/libNDB_ODBC.so +ndb/lib/libNEWTON_API.so +ndb/lib/libNEWTON_BASICTEST_COMMON.so +ndb/lib/libREP_API.so +ndb/lib/libndbclient.so +ndb/lib/libndbclient_extra.so +ndb/src/common/debugger/libtrace.dsp +ndb/src/common/debugger/signaldata/libsignaldataprint.dsp +ndb/src/common/logger/liblogger.dsp +ndb/src/common/mgmcommon/libmgmsrvcommon.dsp +ndb/src/common/mgmcommon/printConfig/*.d +ndb/src/common/portlib/libportlib.dsp +ndb/src/common/transporter/libtransporter.dsp +ndb/src/common/util/libgeneral.dsp +ndb/src/common/util/testBitmask.cpp +ndb/src/cw/cpcd/ndb_cpcd +ndb/src/dummy.cpp +ndb/src/kernel/blocks/backup/libbackup.dsp +ndb/src/kernel/blocks/backup/restore/ndb_restore +ndb/src/kernel/blocks/cmvmi/libcmvmi.dsp +ndb/src/kernel/blocks/dbacc/libdbacc.dsp +ndb/src/kernel/blocks/dbdict/libdbdict.dsp +ndb/src/kernel/blocks/dbdih/libdbdih.dsp +ndb/src/kernel/blocks/dblqh/libdblqh.dsp +ndb/src/kernel/blocks/dbtc/libdbtc.dsp +ndb/src/kernel/blocks/dbtup/libdbtup.dsp +ndb/src/kernel/blocks/dbtux/libdbtux.dsp +ndb/src/kernel/blocks/dbutil/libdbutil.dsp +ndb/src/kernel/blocks/grep/libgrep.dsp +ndb/src/kernel/blocks/ndbcntr/libndbcntr.dsp +ndb/src/kernel/blocks/ndbfs/libndbfs.dsp +ndb/src/kernel/blocks/qmgr/libqmgr.dsp +ndb/src/kernel/blocks/suma/libsuma.dsp +ndb/src/kernel/blocks/trix/libtrix.dsp +ndb/src/kernel/error/liberror.dsp +ndb/src/kernel/ndbd +ndb/src/kernel/ndbd.dsp +ndb/src/kernel/vm/libkernel.dsp +ndb/src/libndb.ver +ndb/src/libndbclient.dsp +ndb/src/mgmapi/libmgmapi.dsp +ndb/src/mgmclient/libndbmgmclient.dsp +ndb/src/mgmclient/ndb_mgm +ndb/src/mgmclient/ndb_mgm.dsp +ndb/src/mgmclient/test_cpcd/*.d +ndb/src/mgmsrv/ndb_mgmd +ndb/src/mgmsrv/ndb_mgmd.dsp +ndb/src/ndbapi/libndbapi.dsp +ndb/test/ndbapi/bank/bankCreator +ndb/test/ndbapi/bank/bankMakeGL +ndb/test/ndbapi/bank/bankSumAccounts +ndb/test/ndbapi/bank/bankTimer +ndb/test/ndbapi/bank/bankTransactionMaker +ndb/test/ndbapi/bank/bankValidateAllGLs +ndb/test/ndbapi/bank/testBank +ndb/test/ndbapi/create_all_tabs +ndb/test/ndbapi/create_tab +ndb/test/ndbapi/drop_all_tabs +ndb/test/ndbapi/flexAsynch +ndb/test/ndbapi/flexBench +ndb/test/ndbapi/flexBench.dsp +ndb/test/ndbapi/flexHammer +ndb/test/ndbapi/flexTT +ndb/test/ndbapi/testBackup +ndb/test/ndbapi/testBasic +ndb/test/ndbapi/testBasic.dsp +ndb/test/ndbapi/testBasicAsynch +ndb/test/ndbapi/testBlobs +ndb/test/ndbapi/testBlobs.dsp +ndb/test/ndbapi/testDataBuffers +ndb/test/ndbapi/testDeadlock +ndb/test/ndbapi/testDict +ndb/test/ndbapi/testIndex +ndb/test/ndbapi/testMgm +ndb/test/ndbapi/testNdbApi +ndb/test/ndbapi/testNodeRestart +ndb/test/ndbapi/testOIBasic +ndb/test/ndbapi/testOperations +ndb/test/ndbapi/testRestartGci +ndb/test/ndbapi/testSRBank +ndb/test/ndbapi/testScan +ndb/test/ndbapi/testScan.dsp +ndb/test/ndbapi/testScanInterpreter +ndb/test/ndbapi/testScanPerf +ndb/test/ndbapi/testSystemRestart +ndb/test/ndbapi/testTimeout +ndb/test/ndbapi/testTransactions +ndb/test/ndbapi/test_event +ndb/test/run-test/atrt +ndb/test/src/libNDBT.dsp +ndb/test/tools/copy_tab +ndb/test/tools/create_index +ndb/test/tools/hugoCalculator +ndb/test/tools/hugoFill +ndb/test/tools/hugoLoad +ndb/test/tools/hugoLockRecords +ndb/test/tools/hugoPkDelete +ndb/test/tools/hugoPkRead +ndb/test/tools/hugoPkReadRecord +ndb/test/tools/hugoPkUpdate +ndb/test/tools/hugoScanRead +ndb/test/tools/hugoScanUpdate +ndb/test/tools/ndb_cpcc +ndb/test/tools/restart +ndb/test/tools/verify_index +ndb/tools/ndb_config +ndb/tools/ndb_delete_all +ndb/tools/ndb_delete_all.dsp +ndb/tools/ndb_desc +ndb/tools/ndb_desc.dsp +ndb/tools/ndb_drop_index +ndb/tools/ndb_drop_index.dsp +ndb/tools/ndb_drop_table +ndb/tools/ndb_drop_table.dsp +ndb/tools/ndb_restore +ndb/tools/ndb_select_all +ndb/tools/ndb_select_all.dsp +ndb/tools/ndb_select_count +ndb/tools/ndb_select_count.dsp +ndb/tools/ndb_show_tables +ndb/tools/ndb_show_tables.dsp +ndb/tools/ndb_test_platform +ndb/tools/ndb_waiter +ndb/tools/ndb_waiter.dsp +ndbcluster-1186 +ndbcluster-1186/SCCS +ndbcluster-1186/config.ini +ndbcluster-1186/ndb_1.pid +ndbcluster-1186/ndb_1_out.log +ndbcluster-1186/ndb_1_signal.log +ndbcluster-1186/ndb_2.pid +ndbcluster-1186/ndb_2_out.log +ndbcluster-1186/ndb_2_signal.log +ndbcluster-1186/ndb_3.pid +ndbcluster-1186/ndb_3_cluster.log +ndbcluster-1186/ndb_3_out.log +ndbcluster-1186/ndbcluster.pid +netware/.deps/libmysqlmain.Po +netware/.deps/my_manage.Po +netware/.deps/mysql_install_db.Po +netware/.deps/mysql_test_run.Po +netware/.deps/mysqld_safe.Po +netware/init_db.sql +netware/libmysql.imp +netware/test_db.sql +pack_isam/*.ds? +perror/*.ds? +perror/*.vcproj +plugin/fulltext/.deps/mypluglib_la-plugin_example.Plo +plugin/fulltext/.libs/mypluglib.lai +plugin/fulltext/.libs/mypluglib.so.0 +plugin/fulltext/.libs/mypluglib.so.0.0.0 +pstack/.deps/bucomm.Po +pstack/.deps/debug.Po +pstack/.deps/filemode.Po +pstack/.deps/ieee.Po +pstack/.deps/linuxthreads.Po +pstack/.deps/pstack.Po +pstack/.deps/rddbg.Po +pstack/.deps/stabs.Po +pull.log +regex/*.ds? +regex/*.vcproj +regex/.deps/debug.Po +regex/.deps/main.Po +regex/.deps/regcomp.Po +regex/.deps/regerror.Po +regex/.deps/regexec.Po +regex/.deps/regfree.Po +regex/.deps/reginit.Po +regex/.deps/split.Po +regex/re +repl-tests/test-repl-ts/repl-timestamp.master.reject +repl-tests/test-repl/foo-dump-slave.master. +repl-tests/test-repl/sum-wlen-slave.master. +repl-tests/test-repl/sum-wlen-slave.master.re +repl-tests/test-repl/sum-wlen-slave.master.reje +replace/*.ds? +replace/*.vcproj +scripts/comp_sql +scripts/fill_func_tables +scripts/fill_func_tables.sql +scripts/fill_help_tables +scripts/fill_help_tables.sql +scripts/make_binary_distribution +scripts/make_sharedlib_distribution +scripts/make_win_binary_distribution +scripts/make_win_src_distribution +scripts/make_win_src_distribution_old +scripts/msql2mysql +scripts/mysql_config +scripts/mysql_convert_table_format +scripts/mysql_create_system_tables +scripts/mysql_explain_log +scripts/mysql_find_rows +scripts/mysql_fix_extensions +scripts/mysql_fix_privilege_tables +scripts/mysql_fix_privilege_tables.sql +scripts/mysql_fix_privilege_tables.sql.rule +scripts/mysql_fix_privilege_tables_sql.c +scripts/mysql_fix_privilege_tables_sql.c.rule +scripts/mysql_install_db +scripts/mysql_secure_installation +scripts/mysql_setpermission +scripts/mysql_tableinfo +scripts/mysql_upgrade +scripts/mysql_upgrade_shell +scripts/mysql_zap +scripts/mysqlaccess +scripts/mysqlbug +scripts/mysqld_multi +scripts/mysqld_safe +scripts/mysqldumpslow +scripts/mysqlhotcopy +scripts/mysqlhotcopy.sh.rej +scripts/safe_mysqld +select_test +server-tools/instance-manager/.deps/buffer.Po +server-tools/instance-manager/.deps/command.Po +server-tools/instance-manager/.deps/commands.Po +server-tools/instance-manager/.deps/guardian.Po +server-tools/instance-manager/.deps/instance.Po +server-tools/instance-manager/.deps/instance_map.Po +server-tools/instance-manager/.deps/instance_options.Po +server-tools/instance-manager/.deps/liboptions_la-options.Plo +server-tools/instance-manager/.deps/liboptions_la-priv.Plo +server-tools/instance-manager/.deps/listener.Po +server-tools/instance-manager/.deps/log.Po +server-tools/instance-manager/.deps/manager.Po +server-tools/instance-manager/.deps/messages.Po +server-tools/instance-manager/.deps/mysql_connection.Po +server-tools/instance-manager/.deps/mysqlmanager.Po +server-tools/instance-manager/.deps/net_serv.Po +server-tools/instance-manager/.deps/parse.Po +server-tools/instance-manager/.deps/parse_output.Po +server-tools/instance-manager/.deps/protocol.Po +server-tools/instance-manager/.deps/thread_registry.Po +server-tools/instance-manager/.deps/user_management_commands.Po +server-tools/instance-manager/.deps/user_map.Po +server-tools/instance-manager/buffer.cpp +server-tools/instance-manager/client.c +server-tools/instance-manager/client_settings.h +server-tools/instance-manager/command.cpp +server-tools/instance-manager/commands.cpp +server-tools/instance-manager/errmsg.c +server-tools/instance-manager/guardian.cpp +server-tools/instance-manager/instance.cpp +server-tools/instance-manager/instance_map.cpp +server-tools/instance-manager/instance_options.cpp +server-tools/instance-manager/listener.cpp +server-tools/instance-manager/log.cpp +server-tools/instance-manager/manager.cpp +server-tools/instance-manager/messages.cpp +server-tools/instance-manager/mysql_connection.cpp +server-tools/instance-manager/mysqlmanager +server-tools/instance-manager/mysqlmanager.cpp +server-tools/instance-manager/net_serv.cc +server-tools/instance-manager/options.cpp +server-tools/instance-manager/parse.cpp +server-tools/instance-manager/parse_output.cpp +server-tools/instance-manager/priv.cpp +server-tools/instance-manager/protocol.cpp +server-tools/instance-manager/thr_alarm.c +server-tools/instance-manager/thread_registry.cpp +server-tools/instance-manager/user_map.cpp +sql-bench/Results-linux/ATIS-mysql_bdb-Linux_2.2.14_my_SMP_i686 +sql-bench/bench-count-distinct +sql-bench/bench-init.pl +sql-bench/compare-results +sql-bench/compare-results-all +sql-bench/copy-db +sql-bench/crash-me +sql-bench/gif/* +sql-bench/graph-compare-results +sql-bench/innotest1 +sql-bench/innotest1a +sql-bench/innotest1b +sql-bench/innotest2 +sql-bench/innotest2a +sql-bench/innotest2b +sql-bench/output/* +sql-bench/run-all-tests +sql-bench/server-cfg +sql-bench/template.html +sql-bench/test-ATIS +sql-bench/test-alter-table +sql-bench/test-big-tables +sql-bench/test-connect +sql-bench/test-create +sql-bench/test-insert +sql-bench/test-select +sql-bench/test-transactions +sql-bench/test-wisconsin +sql/*.cpp +sql/*.ds? +sql/*.def +sql/*.vcproj +sql/.deps/client.Po +sql/.deps/derror.Po +sql/.deps/des_key_file.Po +sql/.deps/discover.Po +sql/.deps/event_data_objects.Po +sql/.deps/event_db_repository.Po +sql/.deps/event_queue.Po +sql/.deps/event_scheduler.Po +sql/.deps/events.Po +sql/.deps/field.Po +sql/.deps/field_conv.Po +sql/.deps/filesort.Po +sql/.deps/gen_lex_hash.Po +sql/.deps/gstream.Po +sql/.deps/ha_berkeley.Po +sql/.deps/ha_federated.Po +sql/.deps/ha_heap.Po +sql/.deps/ha_innodb.Po +sql/.deps/ha_myisam.Po +sql/.deps/ha_myisammrg.Po +sql/.deps/ha_ndbcluster.Po +sql/.deps/ha_ndbcluster_binlog.Po +sql/.deps/ha_partition.Po +sql/.deps/handler.Po +sql/.deps/hash_filo.Po +sql/.deps/hostname.Po +sql/.deps/init.Po +sql/.deps/item.Po +sql/.deps/item_buff.Po +sql/.deps/item_cmpfunc.Po +sql/.deps/item_create.Po +sql/.deps/item_func.Po +sql/.deps/item_geofunc.Po +sql/.deps/item_row.Po +sql/.deps/item_strfunc.Po +sql/.deps/item_subselect.Po +sql/.deps/item_sum.Po +sql/.deps/item_timefunc.Po +sql/.deps/item_uniq.Po +sql/.deps/item_xmlfunc.Po +sql/.deps/key.Po +sql/.deps/lock.Po +sql/.deps/log.Po +sql/.deps/log_event.Po +sql/.deps/mf_iocache.Po +sql/.deps/mini_client_errors.Po +sql/.deps/my_decimal.Po +sql/.deps/my_lock.Po +sql/.deps/my_time.Po +sql/.deps/my_user.Po +sql/.deps/mysql_tzinfo_to_sql.Po +sql/.deps/mysqld.Po +sql/.deps/net_serv.Po +sql/.deps/opt_range.Po +sql/.deps/opt_sum.Po +sql/.deps/pack.Po +sql/.deps/parse_file.Po +sql/.deps/partition_info.Po +sql/.deps/password.Po +sql/.deps/procedure.Po +sql/.deps/protocol.Po +sql/.deps/records.Po +sql/.deps/repl_failsafe.Po +sql/.deps/rpl_filter.Po +sql/.deps/rpl_injector.Po +sql/.deps/rpl_tblmap.Po +sql/.deps/set_var.Po +sql/.deps/slave.Po +sql/.deps/sp.Po +sql/.deps/sp_cache.Po +sql/.deps/sp_head.Po +sql/.deps/sp_pcontext.Po +sql/.deps/sp_rcontext.Po +sql/.deps/spatial.Po +sql/.deps/sql_acl.Po +sql/.deps/sql_analyse.Po +sql/.deps/sql_base.Po +sql/.deps/sql_binlog.Po +sql/.deps/sql_builtin.Po +sql/.deps/sql_cache.Po +sql/.deps/sql_class.Po +sql/.deps/sql_client.Po +sql/.deps/sql_crypt.Po +sql/.deps/sql_cursor.Po +sql/.deps/sql_db.Po +sql/.deps/sql_delete.Po +sql/.deps/sql_truncate.Po +sql/.deps/sql_reload.Po +sql/.deps/datadict.Po +sql/.deps/sql_derived.Po +sql/.deps/sql_do.Po +sql/.deps/sql_error.Po +sql/.deps/sql_handler.Po +sql/.deps/sql_help.Po +sql/.deps/sql_insert.Po +sql/.deps/sql_lex.Po +sql/.deps/sql_list.Po +sql/.deps/sql_load.Po +sql/.deps/sql_manager.Po +sql/.deps/sql_map.Po +sql/.deps/sql_olap.Po +sql/.deps/sql_parse.Po +sql/.deps/sql_partition.Po +sql/.deps/sql_plugin.Po +sql/.deps/sql_prepare.Po +sql/.deps/sql_rename.Po +sql/.deps/sql_repl.Po +sql/.deps/sql_select.Po +sql/.deps/sql_show.Po +sql/.deps/sql_state.Po +sql/.deps/sql_string.Po +sql/.deps/sql_table.Po +sql/.deps/sql_tablespace.Po +sql/.deps/sql_test.Po +sql/.deps/sql_trigger.Po +sql/.deps/sql_udf.Po +sql/.deps/sql_union.Po +sql/.deps/sql_update.Po +sql/.deps/sql_view.Po +sql/.deps/sql_yacc.Po +sql/.deps/stacktrace.Po +sql/.deps/strfunc.Po +sql/.deps/table.Po +sql/.deps/thr_malloc.Po +sql/.deps/time.Po +sql/.deps/tztime.Po +sql/.deps/udf_example.Plo +sql/.deps/uniques.Po +sql/.deps/unireg.Po +sql/.gdbinit +sql/.libs/udf_example.lai +sql/.libs/udf_example.so.0 +sql/.libs/udf_example.so.0.0.0 +sql/client.c +sql/cmake_dummy.cc +sql/Doxyfile +sql/f.c +sql/gen_lex_hash +sql/gmon.out +sql/handlerton.cc +sql/html +sql/latex +sql/lex_hash.h +sql/lex_hash.h.rule +sql/link_sources +sql/max/* +sql/message.h +sql/message.mc +sql/message.rc +sql/mini_client_errors.c +sql/my_time.c +sql/my_user.c +sql/mysql_tzinfo_to_sql +sql/mysql_tzinfo_to_sql.cc +sql/mysql_tzinfo_to_sql_tztime.cc +sql/mysqlbinlog +sql/mysqld +sql/mysqld-purecov +sql/mysqld-purify +sql/mysqld-quantify +sql/new.cc +sql/pack.c +sql/safe_to_cache_query.txt +sql/share/*.sys +sql/share/charsets/gmon.out +sql/share/fixerrmsg.pl +sql/share/gmon.out +sql/share/iso639-2.txt +sql/share/mysql +sql/share/norwegian-ny/errmsg.sys +sql/share/norwegian/errmsg.sys +sql/sql_builtin.cc +sql/sql_select.cc.orig +sql/sql_yacc.cc +sql/sql_yacc.h +sql/sql_yacc.h.rule +sql/sql_yacc.output +sql/sql_yacc.yy.orig +sql/test_time +sql/udf_example.so +sql_error.cc +sql_prepare.cc +stamp-h +stamp-h.in +stamp-h1 +stamp-h1.in +stamp-h2 +stamp-h2.in +stamp-h3 +stamp-h4 +start_mysqld.sh +storage/archive/.deps/archive_test-archive_test.Po +storage/archive/.deps/archive_test-azio.Po +storage/archive/.deps/ha_archive_la-azio.Plo +storage/archive/.deps/ha_archive_la-ha_archive.Plo +storage/archive/.deps/libarchive_a-azio.Po +storage/archive/.deps/libarchive_a-ha_archive.Po +storage/archive/archive_reader +storage/archive/archive_test +storage/bdb/*.ds? +storage/bdb/*.vcproj +storage/bdb/README +storage/bdb/btree/btree_auto.c +storage/bdb/btree/btree_autop.c +storage/bdb/build_unix/* +storage/bdb/build_vxworks/BerkeleyDB20.wpj +storage/bdb/build_vxworks/BerkeleyDB20small.wpj +storage/bdb/build_vxworks/BerkeleyDB22.wpj +storage/bdb/build_vxworks/BerkeleyDB22small.wpj +storage/bdb/build_vxworks/db.h +storage/bdb/build_vxworks/db_config.h +storage/bdb/build_vxworks/db_config_small.h +storage/bdb/build_vxworks/db_deadlock/db_deadlock20.wpj +storage/bdb/build_vxworks/db_deadlock/db_deadlock22.wpj +storage/bdb/build_vxworks/db_int.h +storage/bdb/build_vxworks/dbdemo/dbdemo.c +storage/bdb/build_vxworks/dbdemo/dbdemo20.wpj +storage/bdb/build_vxworks/dbdemo/dbdemo22.wpj +storage/bdb/build_win32/*.dsp +storage/bdb/build_win32/*.h +storage/bdb/build_win32/db.h +storage/bdb/build_win32/db_archive.dsp +storage/bdb/build_win32/db_checkpoint.dsp +storage/bdb/build_win32/db_config.h +storage/bdb/build_win32/db_cxx.h +storage/bdb/build_win32/db_deadlock.dsp +storage/bdb/build_win32/db_dll.dsp +storage/bdb/build_win32/db_dump.dsp +storage/bdb/build_win32/db_int.h +storage/bdb/build_win32/db_java.dsp +storage/bdb/build_win32/db_load.dsp +storage/bdb/build_win32/db_perf.dsp +storage/bdb/build_win32/db_printlog.dsp +storage/bdb/build_win32/db_recover.dsp +storage/bdb/build_win32/db_stat.dsp +storage/bdb/build_win32/db_static.dsp +storage/bdb/build_win32/db_tcl.dsp +storage/bdb/build_win32/db_test.dsp +storage/bdb/build_win32/db_upgrade.dsp +storage/bdb/build_win32/db_verify.dsp +storage/bdb/build_win32/ex_access.dsp +storage/bdb/build_win32/ex_btrec.dsp +storage/bdb/build_win32/ex_env.dsp +storage/bdb/build_win32/ex_lock.dsp +storage/bdb/build_win32/ex_mpool.dsp +storage/bdb/build_win32/ex_tpcb.dsp +storage/bdb/build_win32/excxx_access.dsp +storage/bdb/build_win32/excxx_btrec.dsp +storage/bdb/build_win32/excxx_env.dsp +storage/bdb/build_win32/excxx_lock.dsp +storage/bdb/build_win32/excxx_mpool.dsp +storage/bdb/build_win32/excxx_tpcb.dsp +storage/bdb/build_win32/include.tcl +storage/bdb/build_win32/libdb.def +storage/bdb/build_win32/libdb.rc +storage/bdb/build_win64/*.dsp +storage/bdb/build_win64/*.dsw +storage/bdb/build_win64/*.h +storage/bdb/db/crdel_auto.c +storage/bdb/db/crdel_autop.c +storage/bdb/db/db_auto.c +storage/bdb/db/db_autop.c +storage/bdb/dbinc_auto/*.* +storage/bdb/dbreg/dbreg_auto.c +storage/bdb/dbreg/dbreg_autop.c +storage/bdb/dist/autom4te-2.53.cache/* +storage/bdb/dist/autom4te-2.53.cache/output.0 +storage/bdb/dist/autom4te-2.53.cache/requests +storage/bdb/dist/autom4te-2.53.cache/traces.0 +storage/bdb/dist/autom4te.cache/* +storage/bdb/dist/autom4te.cache/output.0 +storage/bdb/dist/autom4te.cache/requests +storage/bdb/dist/autom4te.cache/traces.0 +storage/bdb/dist/config.hin +storage/bdb/dist/configure +storage/bdb/dist/tags +storage/bdb/dist/template/db_server_proc +storage/bdb/dist/template/gen_client_ret +storage/bdb/dist/template/rec_btree +storage/bdb/dist/template/rec_crdel +storage/bdb/dist/template/rec_db +storage/bdb/dist/template/rec_dbreg +storage/bdb/dist/template/rec_fileops +storage/bdb/dist/template/rec_hash +storage/bdb/dist/template/rec_log +storage/bdb/dist/template/rec_qam +storage/bdb/dist/template/rec_txn +storage/bdb/examples_c/ex_apprec/ex_apprec_auto.c +storage/bdb/examples_c/ex_apprec/ex_apprec_auto.h +storage/bdb/examples_c/ex_apprec/ex_apprec_template +storage/bdb/examples_java +storage/bdb/fileops/fileops_auto.c +storage/bdb/fileops/fileops_autop.c +storage/bdb/hash/hash_auto.c +storage/bdb/hash/hash_autop.c +storage/bdb/include/btree_auto.h +storage/bdb/include/btree_ext.h +storage/bdb/include/clib_ext.h +storage/bdb/include/common_ext.h +storage/bdb/include/crdel_auto.h +storage/bdb/include/db_auto.h +storage/bdb/include/db_ext.h +storage/bdb/include/db_server.h +storage/bdb/include/env_ext.h +storage/bdb/include/gen_client_ext.h +storage/bdb/include/gen_server_ext.h +storage/bdb/include/hash_auto.h +storage/bdb/include/hash_ext.h +storage/bdb/include/lock_ext.h +storage/bdb/include/log_auto.h +storage/bdb/include/log_ext.h +storage/bdb/include/mp_ext.h +storage/bdb/include/mutex_ext.h +storage/bdb/include/os_ext.h +storage/bdb/include/qam_auto.h +storage/bdb/include/qam_ext.h +storage/bdb/include/rpc_client_ext.h +storage/bdb/include/rpc_server_ext.h +storage/bdb/include/tcl_ext.h +storage/bdb/include/txn_auto.h +storage/bdb/include/txn_ext.h +storage/bdb/include/xa_ext.h +storage/bdb/java/src/com/sleepycat/db/Db.java +storage/bdb/java/src/com/sleepycat/db/DbBtreeStat.java +storage/bdb/java/src/com/sleepycat/db/DbConstants.java +storage/bdb/java/src/com/sleepycat/db/DbHashStat.java +storage/bdb/java/src/com/sleepycat/db/DbLockStat.java +storage/bdb/java/src/com/sleepycat/db/DbLogStat.java +storage/bdb/java/src/com/sleepycat/db/DbMpoolFStat.java +storage/bdb/java/src/com/sleepycat/db/DbQueueStat.java +storage/bdb/java/src/com/sleepycat/db/DbRepStat.java +storage/bdb/java/src/com/sleepycat/db/DbTxnStat.java +storage/bdb/libdb_java/java_stat_auto.c +storage/bdb/libdb_java/java_stat_auto.h +storage/bdb/libdb_java/java_util.i +storage/bdb/log/log_auto.c +storage/bdb/qam/qam_auto.c +storage/bdb/qam/qam_autop.c +storage/bdb/rep/rep_auto.c +storage/bdb/rep/rep_autop.c +storage/bdb/rpc_client/db_server_clnt.c +storage/bdb/rpc_client/gen_client.c +storage/bdb/rpc_server/c/db_server_proc.c +storage/bdb/rpc_server/c/db_server_proc.sed +storage/bdb/rpc_server/c/db_server_svc.c +storage/bdb/rpc_server/c/db_server_xdr.c +storage/bdb/rpc_server/c/gen_db_server.c +storage/bdb/rpc_server/db_server.x +storage/bdb/rpc_server/db_server_proc.sed +storage/bdb/rpc_server/db_server_svc.c +storage/bdb/rpc_server/db_server_xdr.c +storage/bdb/rpc_server/gen_db_server.c +storage/bdb/test/TESTS +storage/bdb/test/include.tcl +storage/bdb/test/logtrack.list +storage/bdb/txn/txn_auto.c +storage/bdb/txn/txn_autop.c +storage/blackhole/.deps/ha_blackhole_la-ha_blackhole.Plo +storage/blackhole/.deps/libblackhole_a-ha_blackhole.Po +storage/csv/.deps/ha_csv_la-ha_tina.Plo +storage/csv/.deps/libcsv_a-ha_tina.Po +storage/example/.deps/ha_example_la-ha_example.Plo +storage/example/.deps/libexample_a-ha_example.Po +storage/heap/.deps/_check.Po +storage/heap/.deps/_rectest.Po +storage/heap/.deps/hp_block.Po +storage/heap/.deps/hp_clear.Po +storage/heap/.deps/hp_close.Po +storage/heap/.deps/hp_create.Po +storage/heap/.deps/hp_delete.Po +storage/heap/.deps/hp_extra.Po +storage/heap/.deps/hp_hash.Po +storage/heap/.deps/hp_info.Po +storage/heap/.deps/hp_open.Po +storage/heap/.deps/hp_panic.Po +storage/heap/.deps/hp_rename.Po +storage/heap/.deps/hp_rfirst.Po +storage/heap/.deps/hp_rkey.Po +storage/heap/.deps/hp_rlast.Po +storage/heap/.deps/hp_rnext.Po +storage/heap/.deps/hp_rprev.Po +storage/heap/.deps/hp_rrnd.Po +storage/heap/.deps/hp_rsame.Po +storage/heap/.deps/hp_scan.Po +storage/heap/.deps/hp_static.Po +storage/heap/.deps/hp_test1.Po +storage/heap/.deps/hp_test2.Po +storage/heap/.deps/hp_update.Po +storage/heap/.deps/hp_write.Po +storage/heap/hp_test1 +storage/heap/hp_test2 +storage/innobase/autom4te-2.53.cache/* +storage/innobase/autom4te-2.53.cache/output.0 +storage/innobase/autom4te-2.53.cache/requests +storage/innobase/autom4te-2.53.cache/traces.0 +storage/innobase/autom4te.cache/* +storage/innobase/autom4te.cache/output.0 +storage/innobase/autom4te.cache/requests +storage/innobase/autom4te.cache/traces.0 +storage/innobase/btr/.deps/btr0btr.Po +storage/innobase/btr/.deps/btr0cur.Po +storage/innobase/btr/.deps/btr0pcur.Po +storage/innobase/btr/.deps/btr0sea.Po +storage/innobase/buf/.deps/buf0buf.Po +storage/innobase/buf/.deps/buf0flu.Po +storage/innobase/buf/.deps/buf0lru.Po +storage/innobase/buf/.deps/buf0rea.Po +storage/innobase/configure.lineno +storage/innobase/conftest.s1 +storage/innobase/conftest.subs +storage/innobase/data/.deps/data0data.Po +storage/innobase/data/.deps/data0type.Po +storage/innobase/dict/.deps/dict0boot.Po +storage/innobase/dict/.deps/dict0crea.Po +storage/innobase/dict/.deps/dict0dict.Po +storage/innobase/dict/.deps/dict0load.Po +storage/innobase/dict/.deps/dict0mem.Po +storage/innobase/dyn/.deps/dyn0dyn.Po +storage/innobase/eval/.deps/eval0eval.Po +storage/innobase/eval/.deps/eval0proc.Po +storage/innobase/fil/.deps/fil0fil.Po +storage/innobase/fsp/.deps/fsp0fsp.Po +storage/innobase/fut/.deps/fut0fut.Po +storage/innobase/fut/.deps/fut0lst.Po +storage/innobase/ha/.deps/ha0ha.Po +storage/innobase/ha/.deps/hash0hash.Po +storage/innobase/ib_config.h +storage/innobase/ib_config.h.in +storage/innobase/ibuf/.deps/ibuf0ibuf.Po +storage/innobase/lock/.deps/lock0lock.Po +storage/innobase/log/.deps/log0log.Po +storage/innobase/log/.deps/log0recv.Po +storage/innobase/mach/.deps/mach0data.Po +storage/innobase/mem/.deps/mem0mem.Po +storage/innobase/mem/.deps/mem0pool.Po +storage/innobase/mkinstalldirs +storage/innobase/mtr/.deps/mtr0log.Po +storage/innobase/mtr/.deps/mtr0mtr.Po +storage/innobase/os/.deps/os0file.Po +storage/innobase/os/.deps/os0proc.Po +storage/innobase/os/.deps/os0sync.Po +storage/innobase/os/.deps/os0thread.Po +storage/innobase/page/.deps/page0cur.Po +storage/innobase/page/.deps/page0page.Po +storage/innobase/pars/.deps/lexyy.Po +storage/innobase/pars/.deps/pars0grm.Po +storage/innobase/pars/.deps/pars0opt.Po +storage/innobase/pars/.deps/pars0pars.Po +storage/innobase/pars/.deps/pars0sym.Po +storage/innobase/que/.deps/que0que.Po +storage/innobase/read/.deps/read0read.Po +storage/innobase/rem/.deps/rem0cmp.Po +storage/innobase/rem/.deps/rem0rec.Po +storage/innobase/row/.deps/row0ins.Po +storage/innobase/row/.deps/row0mysql.Po +storage/innobase/row/.deps/row0purge.Po +storage/innobase/row/.deps/row0row.Po +storage/innobase/row/.deps/row0sel.Po +storage/innobase/row/.deps/row0uins.Po +storage/innobase/row/.deps/row0umod.Po +storage/innobase/row/.deps/row0undo.Po +storage/innobase/row/.deps/row0upd.Po +storage/innobase/row/.deps/row0vers.Po +storage/innobase/srv/.deps/srv0que.Po +storage/innobase/srv/.deps/srv0srv.Po +storage/innobase/srv/.deps/srv0start.Po +storage/innobase/stamp-h1 +storage/innobase/sync/.deps/sync0arr.Po +storage/innobase/sync/.deps/sync0rw.Po +storage/innobase/sync/.deps/sync0sync.Po +storage/innobase/thr/.deps/thr0loc.Po +storage/innobase/trx/.deps/trx0purge.Po +storage/innobase/trx/.deps/trx0rec.Po +storage/innobase/trx/.deps/trx0roll.Po +storage/innobase/trx/.deps/trx0rseg.Po +storage/innobase/trx/.deps/trx0sys.Po +storage/innobase/trx/.deps/trx0trx.Po +storage/innobase/trx/.deps/trx0undo.Po +storage/innobase/usr/.deps/usr0sess.Po +storage/innobase/ut/.deps/ut0byte.Po +storage/innobase/ut/.deps/ut0dbg.Po +storage/innobase/ut/.deps/ut0list.Po +storage/innobase/ut/.deps/ut0mem.Po +storage/innobase/ut/.deps/ut0rnd.Po +storage/innobase/ut/.deps/ut0ut.Po +storage/innobase/ut/.deps/ut0vec.Po +storage/innobase/ut/.deps/ut0wqueue.Po +storage/myisam/.deps/ft_boolean_search.Po +storage/myisam/.deps/ft_nlq_search.Po +storage/myisam/.deps/ft_parser.Po +storage/myisam/.deps/ft_static.Po +storage/myisam/.deps/ft_stopwords.Po +storage/myisam/.deps/ft_update.Po +storage/myisam/.deps/mi_cache.Po +storage/myisam/.deps/mi_changed.Po +storage/myisam/.deps/mi_check.Po +storage/myisam/.deps/mi_checksum.Po +storage/myisam/.deps/mi_close.Po +storage/myisam/.deps/mi_create.Po +storage/myisam/.deps/mi_dbug.Po +storage/myisam/.deps/mi_delete.Po +storage/myisam/.deps/mi_delete_all.Po +storage/myisam/.deps/mi_delete_table.Po +storage/myisam/.deps/mi_dynrec.Po +storage/myisam/.deps/mi_extra.Po +storage/myisam/.deps/mi_info.Po +storage/myisam/.deps/mi_key.Po +storage/myisam/.deps/mi_keycache.Po +storage/myisam/.deps/mi_locking.Po +storage/myisam/.deps/mi_log.Po +storage/myisam/.deps/mi_open.Po +storage/myisam/.deps/mi_packrec.Po +storage/myisam/.deps/mi_page.Po +storage/myisam/.deps/mi_panic.Po +storage/myisam/.deps/mi_preload.Po +storage/myisam/.deps/mi_range.Po +storage/myisam/.deps/mi_rename.Po +storage/myisam/.deps/mi_rfirst.Po +storage/myisam/.deps/mi_rkey.Po +storage/myisam/.deps/mi_rlast.Po +storage/myisam/.deps/mi_rnext.Po +storage/myisam/.deps/mi_rnext_same.Po +storage/myisam/.deps/mi_rprev.Po +storage/myisam/.deps/mi_rrnd.Po +storage/myisam/.deps/mi_rsame.Po +storage/myisam/.deps/mi_rsamepos.Po +storage/myisam/.deps/mi_scan.Po +storage/myisam/.deps/mi_search.Po +storage/myisam/.deps/mi_static.Po +storage/myisam/.deps/mi_statrec.Po +storage/myisam/.deps/mi_test1.Po +storage/myisam/.deps/mi_test2.Po +storage/myisam/.deps/mi_test3.Po +storage/myisam/.deps/mi_unique.Po +storage/myisam/.deps/mi_update.Po +storage/myisam/.deps/mi_write.Po +storage/myisam/.deps/myisam_ftdump.Po +storage/myisam/.deps/myisamchk.Po +storage/myisam/.deps/myisamlog.Po +storage/myisam/.deps/myisampack.Po +storage/myisam/.deps/rt_index.Po +storage/myisam/.deps/rt_key.Po +storage/myisam/.deps/rt_mbr.Po +storage/myisam/.deps/rt_split.Po +storage/myisam/.deps/rt_test.Po +storage/myisam/.deps/sort.Po +storage/myisam/.deps/sp_key.Po +storage/myisam/.deps/sp_test.Po +storage/myisam/FT1.MYD +storage/myisam/FT1.MYI +storage/myisam/ft_dump +storage/myisam/ft_eval +storage/myisam/ft_test1 +storage/myisam/ftbench/data +storage/myisam/ftbench/t +storage/myisam/ftbench/var/* +storage/myisam/mi_test1 +storage/myisam/mi_test2 +storage/myisam/mi_test3 +storage/myisam/mi_test_all +storage/myisam/myisam.log +storage/myisam/myisam_ftdump +storage/myisam/myisamchk +storage/myisam/myisamlog +storage/myisam/myisampack +storage/myisam/rt_test +storage/myisam/rt_test.MYD +storage/myisam/rt_test.MYI +storage/myisam/sp_test +storage/myisam/test1.MYD +storage/myisam/test1.MYI +storage/myisam/test2.MYD +storage/myisam/test2.MYI +storage/myisammrg/.deps/myrg_close.Po +storage/myisammrg/.deps/myrg_create.Po +storage/myisammrg/.deps/myrg_delete.Po +storage/myisammrg/.deps/myrg_extra.Po +storage/myisammrg/.deps/myrg_info.Po +storage/myisammrg/.deps/myrg_locking.Po +storage/myisammrg/.deps/myrg_open.Po +storage/myisammrg/.deps/myrg_panic.Po +storage/myisammrg/.deps/myrg_queue.Po +storage/myisammrg/.deps/myrg_range.Po +storage/myisammrg/.deps/myrg_rfirst.Po +storage/myisammrg/.deps/myrg_rkey.Po +storage/myisammrg/.deps/myrg_rlast.Po +storage/myisammrg/.deps/myrg_rnext.Po +storage/myisammrg/.deps/myrg_rnext_same.Po +storage/myisammrg/.deps/myrg_rprev.Po +storage/myisammrg/.deps/myrg_rrnd.Po +storage/myisammrg/.deps/myrg_rsame.Po +storage/myisammrg/.deps/myrg_static.Po +storage/myisammrg/.deps/myrg_update.Po +storage/myisammrg/.deps/myrg_write.Po +storage/ndb/bin/DbAsyncGenerator +storage/ndb/bin/DbCreate +storage/ndb/bin/acid +storage/ndb/bin/async-lmc-bench-l-p10.sh +storage/ndb/bin/async-lmc-bench-l.sh +storage/ndb/bin/async-lmc-bench-p10.sh +storage/ndb/bin/async-lmc-bench.sh +storage/ndb/bin/atrt +storage/ndb/bin/atrt-analyze-result.sh +storage/ndb/bin/atrt-clear-result.sh +storage/ndb/bin/atrt-gather-result.sh +storage/ndb/bin/atrt-setup.sh +storage/ndb/bin/bankCreator +storage/ndb/bin/bankMakeGL +storage/ndb/bin/bankSumAccounts +storage/ndb/bin/bankTimer +storage/ndb/bin/bankTransactionMaker +storage/ndb/bin/bankValidateAllGLs +storage/ndb/bin/basicTransporterTest +storage/ndb/bin/benchronja +storage/ndb/bin/bulk_copy +storage/ndb/bin/copy_tab +storage/ndb/bin/create_all_tabs +storage/ndb/bin/create_index +storage/ndb/bin/create_tab +storage/ndb/bin/delete_all +storage/ndb/bin/desc +storage/ndb/bin/drop_all_tabs +storage/ndb/bin/drop_index +storage/ndb/bin/drop_tab +storage/ndb/bin/flexAsynch +storage/ndb/bin/flexBench +storage/ndb/bin/flexHammer +storage/ndb/bin/flexScan +storage/ndb/bin/flexTT +storage/ndb/bin/hugoCalculator +storage/ndb/bin/hugoFill +storage/ndb/bin/hugoLoad +storage/ndb/bin/hugoLockRecords +storage/ndb/bin/hugoPkDelete +storage/ndb/bin/hugoPkRead +storage/ndb/bin/hugoPkReadRecord +storage/ndb/bin/hugoPkUpdate +storage/ndb/bin/hugoScanRead +storage/ndb/bin/hugoScanUpdate +storage/ndb/bin/index +storage/ndb/bin/index2 +storage/ndb/bin/initronja +storage/ndb/bin/interpreterInTup +storage/ndb/bin/list_tables +storage/ndb/bin/make-config.sh +storage/ndb/bin/mgmtclient +storage/ndb/bin/mgmtsrvr +storage/ndb/bin/mkconfig +storage/ndb/bin/ndb +storage/ndb/bin/ndb_cpcc +storage/ndb/bin/ndb_cpcd +storage/ndb/bin/ndb_rep +storage/ndb/bin/ndbsql +storage/ndb/bin/newton_basic +storage/ndb/bin/newton_br +storage/ndb/bin/newton_pb +storage/ndb/bin/newton_perf +storage/ndb/bin/perfTransporterTest +storage/ndb/bin/printConfig +storage/ndb/bin/printSchemafile +storage/ndb/bin/printSysfile +storage/ndb/bin/redoLogFileReader +storage/ndb/bin/restart +storage/ndb/bin/restarter +storage/ndb/bin/restarter2 +storage/ndb/bin/restarts +storage/ndb/bin/restore +storage/ndb/bin/select_all +storage/ndb/bin/select_count +storage/ndb/bin/telco +storage/ndb/bin/testBackup +storage/ndb/bin/testBank +storage/ndb/bin/testBasic +storage/ndb/bin/testBasicAsynch +storage/ndb/bin/testCopy +storage/ndb/bin/testDataBuffers +storage/ndb/bin/testDict +storage/ndb/bin/testGrep +storage/ndb/bin/testGrepVerify +storage/ndb/bin/testIndex +storage/ndb/bin/testInterpreter +storage/ndb/bin/testKernelDataBuffer +storage/ndb/bin/testLongSig +storage/ndb/bin/testMgm +storage/ndb/bin/testMgmapi +storage/ndb/bin/testNdbApi +storage/ndb/bin/testNodeRestart +storage/ndb/bin/testOIBasic +storage/ndb/bin/testOdbcDriver +storage/ndb/bin/testOperations +storage/ndb/bin/testRestartGci +storage/ndb/bin/testScan +storage/ndb/bin/testScanInterpreter +storage/ndb/bin/testSimplePropertiesSection +storage/ndb/bin/testSystemRestart +storage/ndb/bin/testTimeout +storage/ndb/bin/testTransactions +storage/ndb/bin/test_cpcd +storage/ndb/bin/test_event +storage/ndb/bin/verify_index +storage/ndb/bin/waiter +storage/ndb/config/autom4te.cache/* +storage/ndb/config/config.mk +storage/ndb/examples/ndbapi_example1/ndbapi_example1 +storage/ndb/examples/ndbapi_example2/ndbapi_example2 +storage/ndb/examples/ndbapi_example3/ndbapi_example3 +storage/ndb/examples/ndbapi_example5/ndbapi_example5 +storage/ndb/examples/select_all/select_all +storage/ndb/include/ndb_global.h +storage/ndb/include/ndb_types.h +storage/ndb/include/ndb_version.h +storage/ndb/lib/libMGM_API.so +storage/ndb/lib/libNDB_API.so +storage/ndb/lib/libNDB_ODBC.so +storage/ndb/lib/libNEWTON_API.so +storage/ndb/lib/libNEWTON_BASICTEST_COMMON.so +storage/ndb/lib/libREP_API.so +storage/ndb/lib/libndbclient.so +storage/ndb/lib/libndbclient_extra.so +storage/ndb/ndbapi-examples/mgmapi_logevent/mgmapi_logevent +storage/ndb/ndbapi-examples/mgmapi_logevent2/mgmapi_logevent2 +storage/ndb/ndbapi-examples/ndbapi_async/ndbapi_async +storage/ndb/ndbapi-examples/ndbapi_async1/ndbapi_async1 +storage/ndb/ndbapi-examples/ndbapi_event/ndbapi_event +storage/ndb/ndbapi-examples/ndbapi_retries/ndbapi_retries +storage/ndb/ndbapi-examples/ndbapi_scan/ndbapi_scan +storage/ndb/ndbapi-examples/ndbapi_simple/ndbapi_simple +storage/ndb/ndbapi-examples/ndbapi_simple_dual/ndbapi_simple_dual +storage/ndb/ndbapi-examples/ndbapi_simple_index/ndbapi_simple_index +storage/ndb/src/common/debugger/libtrace.dsp +storage/ndb/src/common/debugger/signaldata/libsignaldataprint.dsp +storage/ndb/src/common/logger/liblogger.dsp +storage/ndb/src/common/mgmcommon/libmgmsrvcommon.dsp +storage/ndb/src/common/mgmcommon/printConfig/*.d +storage/ndb/src/common/portlib/libportlib.dsp +storage/ndb/src/common/transporter/libtransporter.dsp +storage/ndb/src/common/util/libgeneral.dsp +storage/ndb/src/common/util/testBitmask.cpp +storage/ndb/src/cw/cpcd/ndb_cpcd +storage/ndb/src/dummy.cpp +storage/ndb/src/kernel/blocks/backup/libbackup.dsp +storage/ndb/src/kernel/blocks/backup/ndb_print_backup_file +storage/ndb/src/kernel/blocks/backup/restore/ndb_restore +storage/ndb/src/kernel/blocks/cmvmi/libcmvmi.dsp +storage/ndb/src/kernel/blocks/dbacc/libdbacc.dsp +storage/ndb/src/kernel/blocks/dbdict/libdbdict.dsp +storage/ndb/src/kernel/blocks/dbdict/ndb_print_schema_file +storage/ndb/src/kernel/blocks/dbdih/libdbdih.dsp +storage/ndb/src/kernel/blocks/dbdih/ndb_print_sys_file +storage/ndb/src/kernel/blocks/dblqh/libdblqh.dsp +storage/ndb/src/kernel/blocks/dbtc/libdbtc.dsp +storage/ndb/src/kernel/blocks/dbtup/libdbtup.dsp +storage/ndb/src/kernel/blocks/dbtup/test_varpage +storage/ndb/src/kernel/blocks/dbtux/libdbtux.dsp +storage/ndb/src/kernel/blocks/dbutil/libdbutil.dsp +storage/ndb/src/kernel/blocks/grep/libgrep.dsp +storage/ndb/src/kernel/blocks/ndb_print_file +storage/ndb/src/kernel/blocks/ndbcntr/libndbcntr.dsp +storage/ndb/src/kernel/blocks/ndbfs/libndbfs.dsp +storage/ndb/src/kernel/blocks/qmgr/libqmgr.dsp +storage/ndb/src/kernel/blocks/suma/libsuma.dsp +storage/ndb/src/kernel/blocks/trix/libtrix.dsp +storage/ndb/src/kernel/error/liberror.dsp +storage/ndb/src/kernel/ndbd +storage/ndb/src/kernel/ndbd.dsp +storage/ndb/src/kernel/vm/libkernel.dsp +storage/ndb/src/libndb.ver +storage/ndb/src/libndbclient.dsp +storage/ndb/src/mgmapi/libmgmapi.dsp +storage/ndb/src/mgmclient/libndbmgmclient.dsp +storage/ndb/src/mgmclient/ndb_mgm +storage/ndb/src/mgmclient/ndb_mgm.dsp +storage/ndb/src/mgmclient/test_cpcd/*.d +storage/ndb/src/mgmsrv/ndb_mgmd +storage/ndb/src/mgmsrv/ndb_mgmd.dsp +storage/ndb/src/ndbapi/libndbapi.dsp +storage/ndb/src/ndbapi/ndberror_check +storage/ndb/test/ndbapi/DbAsyncGenerator +storage/ndb/test/ndbapi/DbCreate +storage/ndb/test/ndbapi/bank/bankCreator +storage/ndb/test/ndbapi/bank/bankMakeGL +storage/ndb/test/ndbapi/bank/bankSumAccounts +storage/ndb/test/ndbapi/bank/bankTimer +storage/ndb/test/ndbapi/bank/bankTransactionMaker +storage/ndb/test/ndbapi/bank/bankValidateAllGLs +storage/ndb/test/ndbapi/bank/testBank +storage/ndb/test/ndbapi/create_all_tabs +storage/ndb/test/ndbapi/create_tab +storage/ndb/test/ndbapi/drop_all_tabs +storage/ndb/test/ndbapi/flexAsynch +storage/ndb/test/ndbapi/flexBench +storage/ndb/test/ndbapi/flexBench.dsp +storage/ndb/test/ndbapi/flexHammer +storage/ndb/test/ndbapi/flexTT +storage/ndb/test/ndbapi/ndbapi_slow_select +storage/ndb/test/ndbapi/testBackup +storage/ndb/test/ndbapi/testBasic +storage/ndb/test/ndbapi/testBasic.dsp +storage/ndb/test/ndbapi/testBasicAsynch +storage/ndb/test/ndbapi/testBitfield +storage/ndb/test/ndbapi/testBlobs +storage/ndb/test/ndbapi/testBlobs.dsp +storage/ndb/test/ndbapi/testDataBuffers +storage/ndb/test/ndbapi/testDeadlock +storage/ndb/test/ndbapi/testDict +storage/ndb/test/ndbapi/testIndex +storage/ndb/test/ndbapi/testIndexStat +storage/ndb/test/ndbapi/testInterpreter +storage/ndb/test/ndbapi/testLcp +storage/ndb/test/ndbapi/testMgm +storage/ndb/test/ndbapi/testNdbApi +storage/ndb/test/ndbapi/testNodeRestart +storage/ndb/test/ndbapi/testOIBasic +storage/ndb/test/ndbapi/testOperations +storage/ndb/test/ndbapi/testPartitioning +storage/ndb/test/ndbapi/testReadPerf +storage/ndb/test/ndbapi/testRestartGci +storage/ndb/test/ndbapi/testSRBank +storage/ndb/test/ndbapi/testScan +storage/ndb/test/ndbapi/testScan.dsp +storage/ndb/test/ndbapi/testScanInterpreter +storage/ndb/test/ndbapi/testScanPerf +storage/ndb/test/ndbapi/testSystemRestart +storage/ndb/test/ndbapi/testTimeout +storage/ndb/test/ndbapi/testTransactions +storage/ndb/test/ndbapi/test_event +storage/ndb/test/ndbapi/test_event_merge +storage/ndb/test/run-test/atrt +storage/ndb/test/src/libNDBT.dsp +storage/ndb/test/tools/copy_tab +storage/ndb/test/tools/create_index +storage/ndb/test/tools/hugoCalculator +storage/ndb/test/tools/hugoFill +storage/ndb/test/tools/hugoLoad +storage/ndb/test/tools/hugoLockRecords +storage/ndb/test/tools/hugoPkDelete +storage/ndb/test/tools/hugoPkRead +storage/ndb/test/tools/hugoPkReadRecord +storage/ndb/test/tools/hugoPkUpdate +storage/ndb/test/tools/hugoScanRead +storage/ndb/test/tools/hugoScanUpdate +storage/ndb/test/tools/listen_event +storage/ndb/test/tools/ndb_cpcc +storage/ndb/test/tools/rep_latency +storage/ndb/test/tools/restart +storage/ndb/test/tools/verify_index +storage/ndb/tools/ndb_config +storage/ndb/tools/ndb_delete_all +storage/ndb/tools/ndb_delete_all.dsp +storage/ndb/tools/ndb_desc +storage/ndb/tools/ndb_desc.dsp +storage/ndb/tools/ndb_drop_index +storage/ndb/tools/ndb_drop_index.dsp +storage/ndb/tools/ndb_drop_table +storage/ndb/tools/ndb_drop_table.dsp +storage/ndb/tools/ndb_restore +storage/ndb/tools/ndb_select_all +storage/ndb/tools/ndb_select_all.dsp +storage/ndb/tools/ndb_select_count +storage/ndb/tools/ndb_select_count.dsp +storage/ndb/tools/ndb_show_tables +storage/ndb/tools/ndb_show_tables.dsp +storage/ndb/tools/ndb_test_platform +storage/ndb/tools/ndb_waiter +storage/ndb/tools/ndb_waiter.dsp +strings/*.ds? +strings/*.vcproj +strings/.deps/bchange.Po +strings/.deps/bcmp.Po +strings/.deps/bfill.Po +strings/.deps/bmove.Po +strings/.deps/bmove512.Po +strings/.deps/bmove_upp.Po +strings/.deps/conf_to_src.Po +strings/.deps/ctype-big5.Po +strings/.deps/ctype-bin.Po +strings/.deps/ctype-cp932.Po +strings/.deps/ctype-czech.Po +strings/.deps/ctype-euc_kr.Po +strings/.deps/ctype-eucjpms.Po +strings/.deps/ctype-extra.Po +strings/.deps/ctype-gb2312.Po +strings/.deps/ctype-gbk.Po +strings/.deps/ctype-latin1.Po +strings/.deps/ctype-mb.Po +strings/.deps/ctype-simple.Po +strings/.deps/ctype-sjis.Po +strings/.deps/ctype-tis620.Po +strings/.deps/ctype-uca.Po +strings/.deps/ctype-ucs2.Po +strings/.deps/ctype-ujis.Po +strings/.deps/ctype-utf8.Po +strings/.deps/ctype-win1250ch.Po +strings/.deps/ctype.Po +strings/.deps/decimal.Po +strings/.deps/int2str.Po +strings/.deps/is_prefix.Po +strings/.deps/llstr.Po +strings/.deps/longlong2str.Po +strings/.deps/longlong2str_asm.Po +strings/.deps/my_strchr.Po +strings/.deps/my_strtoll10.Po +strings/.deps/my_vsnprintf.Po +strings/.deps/r_strinstr.Po +strings/.deps/str2int.Po +strings/.deps/str_alloc.Po +strings/.deps/strappend.Po +strings/.deps/strcend.Po +strings/.deps/strcont.Po +strings/.deps/strend.Po +strings/.deps/strfill.Po +strings/.deps/strinstr.Po +strings/.deps/strmake.Po +strings/.deps/strmov.Po +strings/.deps/strnlen.Po +strings/.deps/strnmov.Po +strings/.deps/strstr.Po +strings/.deps/strtod.Po +strings/.deps/strtol.Po +strings/.deps/strtoll.Po +strings/.deps/strtoul.Po +strings/.deps/strtoull.Po +strings/.deps/strxmov.Po +strings/.deps/strxnmov.Po +strings/.deps/xml.Po +strings/conf_to_src +strings/ctype_autoconf.c +strings/ctype_extra_sources.c +strings/str_test +strings/test_decimal +support-files/*.ini +support-files/MacOSX/Description.plist +support-files/MacOSX/Info.plist +support-files/MacOSX/ReadMe.txt +support-files/MacOSX/StartupParameters.plist +support-files/MacOSX/postflight +support-files/MacOSX/postinstall +support-files/MacOSX/preflight +support-files/MacOSX/preinstall +support-files/binary-configure +support-files/my-huge.cnf +support-files/my-innodb-heavy-4G.cnf +support-files/my-large.cnf +support-files/my-medium.cnf +support-files/my-small.cnf +support-files/mysql-3.23.25-beta.spec +support-files/mysql-3.23.26-beta.spec +support-files/mysql-3.23.27-beta.spec +support-files/mysql-3.23.28-gamma.spec +support-files/mysql-3.23.29-gamma.spec +support-files/mysql-log-rotate +support-files/mysql.server +support-files/mysql.spec +support-files/mysqld_multi.server +support-files/ndb-config-2-node.ini +tags +test/ndbapi/bank/bankCreator +test/ndbapi/bank/bankMakeGL +test/ndbapi/bank/bankSumAccounts +test/ndbapi/bank/bankTimer +test/ndbapi/bank/bankTransactionMaker +test/ndbapi/bank/bankValidateAllGLs +test/ndbapi/bank/testBank +test/ndbapi/create_all_tabs +test/ndbapi/create_tab +test/ndbapi/drop_all_tabs +test/ndbapi/flexAsynch +test/ndbapi/flexBench +test/ndbapi/flexHammer +test/ndbapi/flexTT +test/ndbapi/testBackup +test/ndbapi/testBasic +test/ndbapi/testBasicAsynch +test/ndbapi/testBlobs +test/ndbapi/testDataBuffers +test/ndbapi/testDeadlock +test/ndbapi/testDict +test/ndbapi/testIndex +test/ndbapi/testMgm +test/ndbapi/testNdbApi +test/ndbapi/testNodeRestart +test/ndbapi/testOIBasic +test/ndbapi/testOperations +test/ndbapi/testRestartGci +test/ndbapi/testScan +test/ndbapi/testScanInterpreter +test/ndbapi/testScanPerf +test/ndbapi/testSystemRestart +test/ndbapi/testTimeout +test/ndbapi/testTransactions +test/ndbapi/test_event +test/run-test/atrt +test/tools/copy_tab +test/tools/create_index +test/tools/hugoCalculator +test/tools/hugoFill +test/tools/hugoLoad +test/tools/hugoLockRecords +test/tools/hugoPkDelete +test/tools/hugoPkRead +test/tools/hugoPkReadRecord +test/tools/hugoPkUpdate +test/tools/hugoScanRead +test/tools/hugoScanUpdate +test/tools/ndb_cpcc +test/tools/restart +test/tools/verify_index +test1/* +test_xml +tests/*.ds? +tests/*.vcproj +tests/.deps/dummy.Po +tests/.deps/insert_test.Po +tests/.deps/mysql_client_test.Po +tests/.deps/select_test.Po +tests/.deps/thread_test.Po +tests/.libs -prune +tests/.libs/lt-mysql_client_test +tests/.libs/mysql_client_test +tests/bug25714 +tests/client_test +tests/connect_test +tests/mysql_client_test +thr_insert_test/* +thr_test/* +thread_test +tmp/* +tools/.libs -prune +tools/my_vsnprintf.c +tools/mysqlmanager +tools/mysqlmngd +tools/mysqltestmanager +tools/mysys_priv.h +unittest/examples/*.t +unittest/examples/.deps/no_plan-t.Po +unittest/examples/.deps/simple-t.Po +unittest/examples/.deps/skip-t.Po +unittest/examples/.deps/skip_all-t.Po +unittest/examples/.deps/todo-t.Po +unittest/mysys/*.t +unittest/mysys/.deps/base64-t.Po +unittest/mysys/.deps/bitmap-t.Po +unittest/mysys/.deps/my_atomic-t.Po +unittest/mytap/.deps/tap.Po +unittest/mytap/t/*.t +unittest/mytap/t/.deps/basic-t.Po +unittest/unit +vi.h +vio/*.ds? +vio/*.vcproj +vio/.deps/dummy.Po +vio/.deps/test-ssl.Po +vio/.deps/test-sslclient.Po +vio/.deps/test-sslserver.Po +vio/.deps/vio.Po +vio/.deps/viosocket.Po +vio/.deps/viossl.Po +vio/.deps/viosslfactories.Po +vio/test-ssl +vio/test-sslclient +vio/test-sslserver +vio/viotest-ssl +vio/viotest-sslconnect.cpp +vio/viotest.cpp +win/configure.data +win/vs71cache.txt +win/vs8cache.txt +win/nmake_cache.txt +ylwrap +zlib/*.ds? +zlib/*.vcproj +mysql-test/bug36522-64.tar +mysql-test/bug36522.tar +mysql-test/t.log +mysql-test/tps.log +libmysqld/event_parse_data.cc +autom4te.cache +sql/share/czech +sql/share/danish +sql/share/dutch +sql/share/english +sql/share/estonian +sql/share/french +sql/share/german +sql/share/greek +sql/share/hungarian +sql/share/italian +sql/share/japanese +sql/share/japanese-sjis +sql/share/korean +sql/share/norwegian +sql/share/norwegian-ny +sql/share/polish +sql/share/portuguese +sql/share/romanian +sql/share/russian +sql/share/serbian +sql/share/slovak +sql/share/spanish +sql/share/swedish +sql/share/ukrainian +libmysqld/examples/mysqltest.cc +libmysqld/sql_signal.cc +libmysqld/debug_sync.cc +dbug/tests +libmysqld/mdl.cc +client/transaction.h +libmysqld/transaction.cc +libmysqld/sys_vars.cc +libmysqld/keycaches.cc +client/dtoa.c +libmysqld/sql_audit.cc +configure.am +libmysqld/des_key_file.cc +CPackConfig.cmake +CPackSourceConfig.cmake +make_dist.cmake +client/echo +libmysql/libmysql_exports_file.cc +libmysql/merge_archives_mysqlclient.cmake +libmysqld/merge_archives_mysqlserver.cmake +libmysqld/mysqlserver_depends.c +libmysqld/examples/mysql_embedded +sql/dummy.bak +mysys/thr_lock +VERSION.dep +info_macros.cmake +Docs/INFO_BIN +Docs/INFO_SRC +Testing +FilesCopied +source_downloads From 929680913417e6a09330376b9d99f3bf33db7ff3 Mon Sep 17 00:00:00 2001 From: Sujatha Sivakumar <sujatha.sivakumar@oracle.com> Date: Wed, 8 Oct 2014 10:50:02 +0530 Subject: [PATCH 22/99] Bug#19145698: READ OUT OF BOUNDS ISSUE Problem: ======== In a master slave replication if a slave receives a Start_log_event_v3 the payload is expected to be of fixed size. If a payload which is smaller than the fixed size is received it causes a read out of bounds issue. Analysis: ======== According to documentation the fixed data part of Start_log_event_v3 looks as shown below. 2 bytes: The binary log format version 50 bytes: The MySQL server's version 4 bytes: Timestamp in seconds when this event was created Since the payload is expected to be of fixed size, therefore ST_SERVER_VER_LEN (50) bytes are memcpy'ed into server_version. But if a malicious master sends a shorter payload it causes a read out of bounds issue. Fix: === In Start_log_event_v3 event's constructor a check has been added which expects the minimum payload length to be of size common_header_len + ST_COMMON_HEADER_LEN_OFFSET bytes. If a malicious packet of lesser length is received it will be considered as an invalid event. sql/log_event.cc: Added code changes to check the minimum packet length of Start_log_event_v3 should be > 56. sql/log_event.h: Moved server_version from stack to heap and modified is_valid function for Start_log_event_v3. --- sql/log_event.cc | 21 +++++++++++++-------- sql/log_event.h | 4 ++-- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/sql/log_event.cc b/sql/log_event.cc index 71ca722ffd6..403c512ab3a 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -1307,7 +1307,7 @@ Log_event* Log_event::read_log_event(const char* buf, uint event_len, ev = new Execute_load_log_event(buf, event_len, description_event); break; case START_EVENT_V3: /* this is sent only by MySQL <=4.x */ - ev = new Start_log_event_v3(buf, description_event); + ev = new Start_log_event_v3(buf, event_len, description_event); break; case STOP_EVENT: ev = new Stop_log_event(buf, description_event); @@ -3788,11 +3788,17 @@ void Start_log_event_v3::print(FILE* file, PRINT_EVENT_INFO* print_event_info) Start_log_event_v3::Start_log_event_v3() */ -Start_log_event_v3::Start_log_event_v3(const char* buf, +Start_log_event_v3::Start_log_event_v3(const char* buf, uint event_len, const Format_description_log_event *description_event) - :Log_event(buf, description_event) + :Log_event(buf, description_event), binlog_version(BINLOG_VERSION) { + if (event_len < (uint)description_event->common_header_len + + ST_COMMON_HEADER_LEN_OFFSET) + { + server_version[0]= 0; + return; + } buf+= description_event->common_header_len; binlog_version= uint2korr(buf+ST_BINLOG_VER_OFFSET); memcpy(server_version, buf+ST_SERVER_VER_OFFSET, @@ -4082,16 +4088,15 @@ Format_description_log_event(const char* buf, const Format_description_log_event* description_event) - :Start_log_event_v3(buf, description_event), event_type_permutation(0) + :Start_log_event_v3(buf, event_len, description_event), + common_header_len(0), post_header_len(NULL), event_type_permutation(0) { DBUG_ENTER("Format_description_log_event::Format_description_log_event(char*,...)"); + if (!Start_log_event_v3::is_valid()) + DBUG_VOID_RETURN; /* sanity check */ buf+= LOG_EVENT_MINIMAL_HEADER_LEN; if ((common_header_len=buf[ST_COMMON_HEADER_LEN_OFFSET]) < OLD_HEADER_LEN) - { - /* this makes is_valid() return false. */ - post_header_len= NULL; DBUG_VOID_RETURN; /* sanity check */ - } number_of_event_types= event_len-(LOG_EVENT_MINIMAL_HEADER_LEN+ST_COMMON_HEADER_LEN_OFFSET+1); DBUG_PRINT("info", ("common_header_len=%d number_of_event_types=%d", diff --git a/sql/log_event.h b/sql/log_event.h index d8f04454a7a..0dd1a9f41e6 100644 --- a/sql/log_event.h +++ b/sql/log_event.h @@ -2276,14 +2276,14 @@ public: void print(FILE* file, PRINT_EVENT_INFO* print_event_info); #endif - Start_log_event_v3(const char* buf, + Start_log_event_v3(const char* buf, uint event_len, const Format_description_log_event* description_event); ~Start_log_event_v3() {} Log_event_type get_type_code() { return START_EVENT_V3;} #ifdef MYSQL_SERVER bool write(IO_CACHE* file); #endif - bool is_valid() const { return 1; } + bool is_valid() const { return server_version[0] != 0; } int get_data_size() { return START_V3_HEADER_LEN; //no variable-sized part From 0827d756276dfaaeac6873daae852c8263146294 Mon Sep 17 00:00:00 2001 From: Venkatesh Duggirala <venkatesh.duggirala@oracle.com> Date: Wed, 8 Oct 2014 21:54:35 +0530 Subject: [PATCH 23/99] Bug #18808072 MYSQLBINLOG USES LOCALTIME() TO PRINT EVENTS, CAUSES KERNEL MUTEX CONTENTION Problem: For every event read, mysqlbinlog calls localtime() which in turn calls stat(/etc/localtime) which is causing kernel mutex contention. Analysis and Fix: localtime() calls stat(/etc/localtime) for every instance of the call where as localtime_r() the reentrant version was optimized to store the read only tz internal structure. Hence it will not call stat(/etc/localtime). It will call only once at the beginning. The mysql server is calling localtime_r() and mysqlbinlog tool is one place where we are still using localtime(). Once the process (mysqlbinlog) is started if timezone is changed it will be not picked up the the process and it will continue with the same values as the beginning of the process. This behavior is in-lined with mysql server. Also adding localtime_r() and gmtime_r() support for windows. --- client/mysqlbinlog.cc | 3 ++- cmake/os/WindowsCache.cmake | 6 +++--- include/my_pthread.h | 16 +++++++++++++--- mysys/my_wincond.c | 24 +----------------------- sql/log_event.cc | 5 ----- 5 files changed, 19 insertions(+), 35 deletions(-) diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc index dbc30680959..73a801c4b21 100644 --- a/client/mysqlbinlog.cc +++ b/client/mysqlbinlog.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -2102,6 +2102,7 @@ int main(int argc, char** argv) DBUG_PROCESS(argv[0]); my_init_time(); // for time functions + tzset(); // set tzname if (load_defaults("my", load_default_groups, &argc, &argv)) exit(1); diff --git a/cmake/os/WindowsCache.cmake b/cmake/os/WindowsCache.cmake index 897012896c8..bbed14556b9 100644 --- a/cmake/os/WindowsCache.cmake +++ b/cmake/os/WindowsCache.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -88,7 +88,7 @@ SET(HAVE_GETRLIMIT CACHE INTERNAL "") SET(HAVE_GETRUSAGE CACHE INTERNAL "") SET(HAVE_GETTIMEOFDAY CACHE INTERNAL "") SET(HAVE_GETWD CACHE INTERNAL "") -SET(HAVE_GMTIME_R CACHE INTERNAL "") +SET(HAVE_GMTIME_R 1 CACHE INTERNAL "") SET(HAVE_GRP_H CACHE INTERNAL "") SET(HAVE_IA64INTRIN_H CACHE INTERNAL "") SET(HAVE_IEEEFP_H CACHE INTERNAL "") @@ -109,7 +109,7 @@ SET(HAVE_LANGINFO_H CACHE INTERNAL "") SET(HAVE_LDIV 1 CACHE INTERNAL "") SET(HAVE_LIMITS_H 1 CACHE INTERNAL "") SET(HAVE_LOCALE_H 1 CACHE INTERNAL "") -SET(HAVE_LOCALTIME_R CACHE INTERNAL "") +SET(HAVE_LOCALTIME_R 1 CACHE INTERNAL "") SET(HAVE_LOG2 CACHE INTERNAL "") SET(HAVE_LONGJMP 1 CACHE INTERNAL "") SET(HAVE_LRAND48 CACHE INTERNAL "") diff --git a/include/my_pthread.h b/include/my_pthread.h index 20d929ba8eb..92676bd727c 100644 --- a/include/my_pthread.h +++ b/include/my_pthread.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -142,8 +142,18 @@ int pthread_attr_init(pthread_attr_t *connect_att); int pthread_attr_setstacksize(pthread_attr_t *connect_att,DWORD stack); int pthread_attr_destroy(pthread_attr_t *connect_att); int my_pthread_once(my_pthread_once_t *once_control,void (*init_routine)(void)); -struct tm *localtime_r(const time_t *timep,struct tm *tmp); -struct tm *gmtime_r(const time_t *timep,struct tm *tmp); + +static inline struct tm *localtime_r(const time_t *timep, struct tm *tmp) +{ + localtime_s(tmp, timep); + return tmp; +} + +static inline struct tm *gmtime_r(const time_t *clock, struct tm *res) +{ + gmtime_s(res, clock); + return res; +} void pthread_exit(void *a); int pthread_join(pthread_t thread, void **value_ptr); diff --git a/mysys/my_wincond.c b/mysys/my_wincond.c index 4794bb391b6..ac0166c87b8 100644 --- a/mysys/my_wincond.c +++ b/mysys/my_wincond.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -344,26 +344,4 @@ int pthread_attr_destroy(pthread_attr_t *connect_att) return 0; } -/**************************************************************************** -** Fix localtime_r() to be a bit safer -****************************************************************************/ - -struct tm *localtime_r(const time_t *timep,struct tm *tmp) -{ - if (*timep == (time_t) -1) /* This will crash win32 */ - { - bzero(tmp,sizeof(*tmp)); - } - else - { - struct tm *res=localtime(timep); - if (!res) /* Wrong date */ - { - bzero(tmp,sizeof(*tmp)); /* Keep things safe */ - return 0; - } - *tmp= *res; - } - return tmp; -} #endif /* __WIN__ */ diff --git a/sql/log_event.cc b/sql/log_event.cc index 403c512ab3a..38efb2a9c6b 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -2162,13 +2162,8 @@ void Log_event::print_timestamp(IO_CACHE* file, time_t* ts) DBUG_ENTER("Log_event::print_timestamp"); if (!ts) ts = &when; -#ifdef MYSQL_SERVER // This is always false struct tm tm_tmp; localtime_r(ts,(res= &tm_tmp)); -#else - res=localtime(ts); -#endif - my_b_printf(file,"%02d%02d%02d %2d:%02d:%02d", res->tm_year % 100, res->tm_mon+1, From 57eec7bc29734d55600260f93d191664b15ef7cf Mon Sep 17 00:00:00 2001 From: Jon Olav Hauglid <jon.hauglid@oracle.com> Date: Mon, 13 Oct 2014 09:52:28 +0200 Subject: [PATCH 24/99] Bug#17633291: SET PROPER COMPILE OPTIONS FOR CLANG Bug#17959689: MAKE GCC AND CLANG GIVE CONSISTENT COMPILATION WARNINGS Bug#18313717: ENABLE -WERROR IN MAINTANER MODE WHEN COMPILING WITH CLANG Bug#18510941: REMOVE CMAKE WORKAROUNDS FOR OLDER VERSIONS OF OS X/XCODE Backport from mysql-5.6 to mysql-5.5 --- CMakeLists.txt | 92 +++++++++++-------- client/CMakeLists.txt | 6 ++ .../build_configurations/mysql_release.cmake | 19 ++-- cmake/compile_flags.cmake | 44 +++++++++ cmake/maintainer.cmake | 67 +++++++------- cmake/os/Darwin.cmake | 21 +---- configure.cmake | 9 -- libmysqld/CMakeLists.txt | 8 ++ libmysqld/examples/CMakeLists.txt | 6 ++ plugin/auth/CMakeLists.txt | 4 +- scripts/CMakeLists.txt | 12 ++- sql/CMakeLists.txt | 8 ++ storage/innobase/CMakeLists.txt | 8 ++ 13 files changed, 187 insertions(+), 117 deletions(-) create mode 100644 cmake/compile_flags.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index f43473f76a5..8ce5f4734c9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,10 +27,12 @@ ENDIF() # We use the LOCATION target property (CMP0026) # and get_target_property() for non-existent targets (CMP0045) +# and INSTALL_NAME_DIR (CMP0042) IF(CMAKE_VERSION VERSION_EQUAL "3.0.0" OR CMAKE_VERSION VERSION_GREATER "3.0.0") CMAKE_POLICY(SET CMP0026 OLD) CMAKE_POLICY(SET CMP0045 OLD) + CMAKE_POLICY(SET CMP0042 OLD) ENDIF() MESSAGE(STATUS "Running cmake version ${CMAKE_VERSION}") @@ -73,11 +75,9 @@ ENDIF() SET(BUILDTYPE_DOCSTRING "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel") - + IF(WITH_DEBUG) SET(CMAKE_BUILD_TYPE "Debug" CACHE STRING ${BUILDTYPE_DOCSTRING} FORCE) - SET(MYSQL_MAINTAINER_MODE ON CACHE BOOL - "MySQL maintainer-specific development environment") IF(UNIX AND NOT APPLE) # Compiling with PIC speeds up embedded build, on PIC sensitive systems # Predefine it to ON, in case user chooses to build embedded. @@ -107,6 +107,15 @@ ELSE() ENDIF() PROJECT(${MYSQL_PROJECT_NAME}) +# Maintainer mode is default on only for Linux debug builds using GCC/G++ +IF(CMAKE_BUILD_TYPE MATCHES "Debug" OR WITH_DEBUG) + IF(CMAKE_SYSTEM_NAME MATCHES "Linux" AND + CMAKE_COMPILER_IS_GNUCC AND CMAKE_COMPILER_IS_GNUCXX) + SET(MYSQL_MAINTAINER_MODE ON CACHE BOOL + "MySQL maintainer-specific development environment") + ENDIF() +ENDIF() + IF(BUILD_CONFIG) INCLUDE( ${CMAKE_SOURCE_DIR}/cmake/build_configurations/${BUILD_CONFIG}.cmake) @@ -130,38 +139,12 @@ FOREACH(_base ENDFOREACH() - # Following autotools tradition, add preprocessor definitions # specified in environment variable CPPFLAGS IF(DEFINED ENV{CPPFLAGS}) ADD_DEFINITIONS($ENV{CPPFLAGS}) ENDIF() -# -# Control aspects of the development environment which are -# specific to MySQL maintainers and developers. -# -INCLUDE(maintainer) - -OPTION(MYSQL_MAINTAINER_MODE - "MySQL maintainer-specific development environment" OFF) - -# Whether the maintainer mode compiler options should be enabled. -IF(MYSQL_MAINTAINER_MODE) - IF(CMAKE_C_COMPILER_ID MATCHES "GNU") - SET_MYSQL_MAINTAINER_GNU_C_OPTIONS() - ENDIF() - IF(CMAKE_CXX_COMPILER_ID MATCHES "GNU") - SET_MYSQL_MAINTAINER_GNU_CXX_OPTIONS() - ENDIF() - IF(CMAKE_C_COMPILER_ID MATCHES "Intel") - SET_MYSQL_MAINTAINER_INTEL_C_OPTIONS() - ENDIF() - IF(CMAKE_CXX_COMPILER_ID MATCHES "Intel") - SET_MYSQL_MAINTAINER_INTEL_CXX_OPTIONS() - ENDIF() -ENDIF() - # Add macros INCLUDE(character_sets) INCLUDE(zlib) @@ -192,7 +175,6 @@ OPTION (WITH_UNIT_TESTS "Compile MySQL with unit tests" ON) MARK_AS_ADVANCED(CYBOZU BACKUP_TEST WITHOUT_SERVER DISABLE_SHARED) - include(CheckCSourceCompiles) include(CheckCXXSourceCompiles) # We need some extra FAIL_REGEX patterns @@ -373,13 +355,13 @@ MYSQL_CHECK_READLINE() # not run with the warning options as to not perturb fragile checks # (i.e. do not make warnings into errors). # -IF(MYSQL_MAINTAINER_MODE) - # Set compiler flags required under maintainer mode. - MESSAGE(STATUS "C warning options: ${MY_MAINTAINER_C_WARNINGS}") - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MY_MAINTAINER_C_WARNINGS}") - MESSAGE(STATUS "C++ warning options: ${MY_MAINTAINER_CXX_WARNINGS}") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MY_MAINTAINER_CXX_WARNINGS}") -ENDIF() +# Why doesn't these flags affect the entire build? +# Because things may already have been included with ADD_SUBDIRECTORY +# +OPTION(MYSQL_MAINTAINER_MODE + "MySQL maintainer-specific development environment" OFF) + +INCLUDE(maintainer) IF(NOT WITHOUT_SERVER) SET (MYSQLD_STATIC_PLUGIN_LIBS "" CACHE INTERNAL "") @@ -395,7 +377,6 @@ ADD_SUBDIRECTORY(regex) ADD_SUBDIRECTORY(mysys) ADD_SUBDIRECTORY(libmysql) - IF(WITH_UNIT_TESTS) ENABLE_TESTING() ENDIF() @@ -487,7 +468,6 @@ IF(NOT INSTALL_LAYOUT MATCHES "RPM") ) INSTALL(FILES README DESTINATION ${INSTALL_DOCREADMEDIR} COMPONENT Readme) INSTALL(FILES ${CMAKE_BINARY_DIR}/Docs/INFO_SRC ${CMAKE_BINARY_DIR}/Docs/INFO_BIN DESTINATION ${INSTALL_DOCDIR}) - IF(UNIX) INSTALL(FILES Docs/INSTALL-BINARY DESTINATION ${INSTALL_DOCREADMEDIR} COMPONENT Readme) ENDIF() @@ -507,3 +487,37 @@ IF(NOT INSTALL_LAYOUT MATCHES "RPM") ENDIF() INCLUDE(CPack) + +# C compiler flags consist of: +# CPPFLAGS Taken from environment, see above. +# ADD_DEFINITIONS In each individual CMakeLists.txt +# CMAKE_C_FLAGS From command line. +# We extend these in maintainer.cmake +# ENV{CFLAGS} From environment, but environment is ignored if +# CMAKE_C_FLAGS is also given on command line +# CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE} +# We extend these in compiler_options.cmake +# +# Note that CMakeCache.txt contains cmake builtins for these variables, +# *not* the values that will actually be used: + +IF(CMAKE_GENERATOR MATCHES "Makefiles") + MESSAGE(STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}") +ENDIF() +GET_PROPERTY(cwd_definitions DIRECTORY PROPERTY COMPILE_DEFINITIONS) +MESSAGE(STATUS "COMPILE_DEFINITIONS: ${cwd_definitions}") +MESSAGE(STATUS "CMAKE_C_FLAGS: ${CMAKE_C_FLAGS}") +MESSAGE(STATUS "CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS}") +IF(CMAKE_BUILD_TYPE AND CMAKE_GENERATOR MATCHES "Makefiles") + STRING(TOUPPER "${CMAKE_BUILD_TYPE}" CMAKEBT) + MESSAGE(STATUS "CMAKE_C_FLAGS_${CMAKEBT}: ${CMAKE_C_FLAGS_${CMAKEBT}}") + MESSAGE(STATUS "CMAKE_CXX_FLAGS_${CMAKEBT}: ${CMAKE_CXX_FLAGS_${CMAKEBT}}") +ENDIF() +IF(NOT CMAKE_GENERATOR MATCHES "Makefiles") + MESSAGE(STATUS "CMAKE_C_FLAGS_DEBUG: ${CMAKE_C_FLAGS_DEBUG}") + MESSAGE(STATUS "CMAKE_CXX_FLAGS_DEBUG: ${CMAKE_CXX_FLAGS_DEBUG}") + MESSAGE(STATUS + "CMAKE_C_FLAGS_RELWITHDEBINFO: ${CMAKE_C_FLAGS_RELWITHDEBINFO}") + MESSAGE(STATUS + "CMAKE_CXX_FLAGS_RELWITHDEBINFO: ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}") +ENDIF() diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index 4d8fab3f4b9..0d67cf2e0d4 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -35,6 +35,12 @@ ENDIF(UNIX) MYSQL_ADD_EXECUTABLE(mysqltest mysqltest.cc COMPONENT Test) SET_SOURCE_FILES_PROPERTIES(mysqltest.cc PROPERTIES COMPILE_FLAGS "-DTHREADS") +# mysqltest has unused result errors, so we skip Werror +CHECK_C_COMPILER_FLAG("-Werror" HAVE_WERROR_FLAG) +IF(HAVE_WERROR_FLAG) + INCLUDE(${MYSQL_CMAKE_SCRIPT_DIR}/compile_flags.cmake) + ADD_COMPILE_FLAGS(mysqltest.cc COMPILE_FLAGS "-Wno-error") +ENDIF() TARGET_LINK_LIBRARIES(mysqltest mysqlclient regex) diff --git a/cmake/build_configurations/mysql_release.cmake b/cmake/build_configurations/mysql_release.cmake index e2b815ef830..b0d3de10299 100644 --- a/cmake/build_configurations/mysql_release.cmake +++ b/cmake/build_configurations/mysql_release.cmake @@ -189,15 +189,16 @@ IF(UNIX) ENDIF() ENDIF() - # OSX flags - IF(APPLE) - SET(COMMON_C_FLAGS "-g -fno-common -fno-strict-aliasing") - # XXX: why are we using -felide-constructors on OSX? - SET(COMMON_CXX_FLAGS "-g -fno-common -felide-constructors -fno-strict-aliasing") - SET(CMAKE_C_FLAGS_DEBUG "-O ${COMMON_C_FLAGS}") - SET(CMAKE_CXX_FLAGS_DEBUG "-O ${COMMON_CXX_FLAGS}") - SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-Os ${COMMON_C_FLAGS}") - SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-Os ${COMMON_CXX_FLAGS}") + # Default Clang flags + IF(CMAKE_C_COMPILER_ID MATCHES "Clang") + SET(COMMON_C_FLAGS "-g -fno-omit-frame-pointer -fno-strict-aliasing") + SET(CMAKE_C_FLAGS_DEBUG "${COMMON_C_FLAGS}") + SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-O3 ${COMMON_C_FLAGS}") + ENDIF() + IF(CMAKE_CXX_COMPILER_ID MATCHES "Clang") + SET(COMMON_CXX_FLAGS "-g -fno-omit-frame-pointer -fno-strict-aliasing") + SET(CMAKE_CXX_FLAGS_DEBUG "${COMMON_CXX_FLAGS}") + SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 ${COMMON_CXX_FLAGS}") ENDIF() # Solaris flags diff --git a/cmake/compile_flags.cmake b/cmake/compile_flags.cmake new file mode 100644 index 00000000000..5e872f981b0 --- /dev/null +++ b/cmake/compile_flags.cmake @@ -0,0 +1,44 @@ +# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +## ADD_COMPILE_FLAGS(<source files> COMPILE_FLAGS <flags>) +MACRO(ADD_COMPILE_FLAGS) + SET(FILES "") + SET(FLAGS "") + SET(COMPILE_FLAGS) + FOREACH(ARG ${ARGV}) + IF(ARG STREQUAL "COMPILE_FLAGS") + SET(COMPILE_FLAGS "COMPILE_FLAGS") + ELSEIF(COMPILE_FLAGS) + LIST(APPEND FLAGS ${ARG}) + ELSE() + LIST(APPEND FILES ${ARG}) + ENDIF() + ENDFOREACH() + FOREACH(FILE ${FILES}) + FOREACH(FLAG ${FLAGS}) + GET_SOURCE_FILE_PROPERTY(PROP ${FILE} COMPILE_FLAGS) + IF(NOT PROP) + SET(PROP ${FLAG}) + ELSE() + SET(PROP "${PROP} ${FLAG}") + ENDIF() + SET_SOURCE_FILES_PROPERTIES( + ${FILE} PROPERTIES COMPILE_FLAGS "${PROP}" + ) + ENDFOREACH() + ENDFOREACH() +ENDMACRO() diff --git a/cmake/maintainer.cmake b/cmake/maintainer.cmake index a91905a281b..c537d00260f 100644 --- a/cmake/maintainer.cmake +++ b/cmake/maintainer.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -13,42 +13,39 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -INCLUDE(CheckCCompilerFlag) +# Common warning flags for GCC, G++, Clang and Clang++ +SET(MY_WARNING_FLAGS "-Wall -Wextra -Wformat-security") +MY_CHECK_C_COMPILER_FLAG("-Wvla" HAVE_WVLA) # Requires GCC 4.3+ or Clang +IF(HAVE_WVLA) + SET(MY_WARNING_FLAGS "${MY_WARNING_FLAGS} -Wvla") +ENDIF() -# Setup GCC (GNU C compiler) warning options. -MACRO(SET_MYSQL_MAINTAINER_GNU_C_OPTIONS) - SET(MY_MAINTAINER_WARNINGS - "-Wall -Wextra -Wunused -Wwrite-strings -Wno-strict-aliasing -Werror") - CHECK_C_COMPILER_FLAG("-Wdeclaration-after-statement" - HAVE_DECLARATION_AFTER_STATEMENT) - IF(HAVE_DECLARATION_AFTER_STATEMENT) - SET(MY_MAINTAINER_DECLARATION_AFTER_STATEMENT - "-Wdeclaration-after-statement") - ENDIF() - SET(MY_MAINTAINER_C_WARNINGS - "${MY_MAINTAINER_WARNINGS} ${MY_MAINTAINER_DECLARATION_AFTER_STATEMENT}" - CACHE STRING "C warning options used in maintainer builds.") - # Do not make warnings in checks into errors. - SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -Wno-error") -ENDMACRO() +# Common warning flags for GCC and Clang +SET(MY_C_WARNING_FLAGS + "${MY_WARNING_FLAGS} -Wwrite-strings -Wdeclaration-after-statement") -# Setup G++ (GNU C++ compiler) warning options. -MACRO(SET_MYSQL_MAINTAINER_GNU_CXX_OPTIONS) - SET(MY_MAINTAINER_CXX_WARNINGS - "${MY_MAINTAINER_WARNINGS} -Wno-unused-parameter -Woverloaded-virtual" - CACHE STRING "C++ warning options used in maintainer builds.") -ENDMACRO() +# Common warning flags for G++ and Clang++ +SET(MY_CXX_WARNING_FLAGS + "${MY_WARNING_FLAGS} -Woverloaded-virtual -Wno-unused-parameter") -# Setup ICC (Intel C Compiler) warning options. -MACRO(SET_MYSQL_MAINTAINER_INTEL_C_OPTIONS) - SET(MY_MAINTAINER_WARNINGS "-Wcheck") - SET(MY_MAINTAINER_C_WARNINGS "${MY_MAINTAINER_WARNINGS}" - CACHE STRING "C warning options used in maintainer builds.") -ENDMACRO() +# Extra warning flags for Clang++ +IF(CMAKE_CXX_COMPILER_ID MATCHES "Clang") + SET(MY_CXX_WARNING_FLAGS + "${MY_CXX_WARNING_FLAGS} -Wno-null-conversion -Wno-unused-private-field") +ENDIF() -# Setup ICPC (Intel C++ Compiler) warning options. -MACRO(SET_MYSQL_MAINTAINER_INTEL_CXX_OPTIONS) - SET(MY_MAINTAINER_CXX_WARNINGS "${MY_MAINTAINER_WARNINGS}" - CACHE STRING "C++ warning options used in maintainer builds.") -ENDMACRO() +# Turn on Werror (warning => error) when using maintainer mode. +IF(MYSQL_MAINTAINER_MODE) + SET(MY_C_WARNING_FLAGS "${MY_C_WARNING_FLAGS} -Werror") + SET(MY_CXX_WARNING_FLAGS "${MY_CXX_WARNING_FLAGS} -Werror") + SET(COMPILE_FLAG_WERROR 1) +ENDIF() +# Set warning flags for GCC/Clang +IF(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang") + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MY_C_WARNING_FLAGS}") +ENDIF() +# Set warning flags for G++/Clang++ +IF(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MY_CXX_WARNING_FLAGS}") +ENDIF() diff --git a/cmake/os/Darwin.cmake b/cmake/os/Darwin.cmake index 0d8bac106f0..4ac72070e8b 100644 --- a/cmake/os/Darwin.cmake +++ b/cmake/os/Darwin.cmake @@ -1,5 +1,4 @@ -# Copyright (c) 2010 Sun Microsystems, Inc. -# Use is subject to license terms. +# Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,21 +14,3 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # This file includes OSX specific options and quirks, related to system checks - -# Workaround for CMake bug#9051 -# (CMake does not pass CMAKE_OSX_SYSROOT and CMAKE_OSX_DEPLOYMENT_TARGET when -# running TRY_COMPILE) - -IF(CMAKE_OSX_SYSROOT) - SET(ENV{CMAKE_OSX_SYSROOT} ${CMAKE_OSX_SYSROOT}) -ENDIF() -IF(CMAKE_OSX_SYSROOT) - SET(ENV{MACOSX_DEPLOYMENT_TARGET} ${OSX_DEPLOYMENT_TARGET}) -ENDIF() - -IF(CMAKE_OSX_DEPLOYMENT_TARGET) - # Workaround linker problems on OSX 10.4 - IF(CMAKE_OSX_DEPLOYMENT_TARGET VERSION_LESS "10.5") - ADD_DEFINITIONS(-fno-common) - ENDIF() -ENDIF() diff --git a/configure.cmake b/configure.cmake index c3ac3a8222f..28974a84c49 100644 --- a/configure.cmake +++ b/configure.cmake @@ -53,15 +53,6 @@ IF(NOT SYSTEM_TYPE) ENDIF() -# Always enable -Wall for gnu C/C++ -IF(CMAKE_COMPILER_IS_GNUCXX) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-unused-parameter") -ENDIF() -IF(CMAKE_COMPILER_IS_GNUCC) - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall") -ENDIF() - - IF(CMAKE_COMPILER_IS_GNUCXX) # MySQL "canonical" GCC flags. At least -fno-rtti flag affects # ABI and cannot be simply removed. diff --git a/libmysqld/CMakeLists.txt b/libmysqld/CMakeLists.txt index f31aa819ed5..abbf887e1e6 100644 --- a/libmysqld/CMakeLists.txt +++ b/libmysqld/CMakeLists.txt @@ -93,6 +93,14 @@ SET(SQL_EMBEDDED_SOURCES emb_qcache.cc libmysqld.c lib_sql.cc ) +# These files have unused result errors, so we skip Werror +CHECK_C_COMPILER_FLAG("-Werror" HAVE_WERROR_FLAG) +IF(HAVE_WERROR_FLAG) + INCLUDE(${MYSQL_CMAKE_SCRIPT_DIR}/compile_flags.cmake) + ADD_COMPILE_FLAGS(../sql/filesort.cc COMPILE_FLAGS "-Wno-error") + ADD_COMPILE_FLAGS(../sql/opt_range.cc COMPILE_FLAGS "-Wno-error") +ENDIF() + ADD_CONVENIENCE_LIBRARY(sql_embedded ${SQL_EMBEDDED_SOURCES}) DTRACE_INSTRUMENT(sql_embedded) ADD_DEPENDENCIES(sql_embedded GenError GenServerSource) diff --git a/libmysqld/examples/CMakeLists.txt b/libmysqld/examples/CMakeLists.txt index c4055a56303..55b2079c320 100644 --- a/libmysqld/examples/CMakeLists.txt +++ b/libmysqld/examples/CMakeLists.txt @@ -33,6 +33,12 @@ IF(UNIX) ENDIF(UNIX) MYSQL_ADD_EXECUTABLE(mysqltest_embedded ../../client/mysqltest.cc) +# mysqltest has unused result errors, so we skip Werror +CHECK_C_COMPILER_FLAG("-Werror" HAVE_WERROR_FLAG) +IF(HAVE_WERROR_FLAG) + INCLUDE(${MYSQL_CMAKE_SCRIPT_DIR}/compile_flags.cmake) + ADD_COMPILE_FLAGS(../../client/mysqltest.cc COMPILE_FLAGS "-Wno-error") +ENDIF() TARGET_LINK_LIBRARIES(mysqltest_embedded mysqlserver) diff --git a/plugin/auth/CMakeLists.txt b/plugin/auth/CMakeLists.txt index 6a9c31f82ce..9a3682a5e96 100644 --- a/plugin/auth/CMakeLists.txt +++ b/plugin/auth/CMakeLists.txt @@ -28,7 +28,9 @@ MYSQL_ADD_PLUGIN(qa_auth_client qa_auth_client.c MODULE_ONLY) CHECK_CXX_SOURCE_COMPILES( -"#define _GNU_SOURCE +"#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif #include <sys/socket.h> int main() { struct ucred cred; diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt index 5e03acb654b..05bf8530a26 100644 --- a/scripts/CMakeLists.txt +++ b/scripts/CMakeLists.txt @@ -88,16 +88,20 @@ ENDIF() IF(CMAKE_GENERATOR MATCHES "Makefiles") # Strip maintainer mode options if necessary - STRING(REPLACE "${MY_MAINTAINER_C_WARNINGS}" "" CFLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_RELWITHDEBINFO}") - STRING(REPLACE "${MY_MAINTAINER_CXX_WARNINGS}" "" CXXFLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}") + STRING(REPLACE "${MY_C_WARNING_FLAGS}" "" CFLAGS + "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_RELWITHDEBINFO}") + STRING(REPLACE "${MY_CXX_WARNING_FLAGS}" "" CXXFLAGS + "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}") FOREACH(ARCH ${CMAKE_OSX_ARCHITECTURES}) SET(CFLAGS "${CFLAGS} -arch ${ARCH}") SET(CXXFLAGS "${CXXFLAGS} -arch ${ARCH}") ENDFOREACH() ELSE() # Strip maintainer mode options if necessary - STRING(REPLACE "${MY_MAINTAINER_C_WARNINGS}" "" CFLAGS "${CMAKE_C_FLAGS_RELWITHDEBINFO}") - STRING(REPLACE "${MY_MAINTAINER_CXX_WARNINGS}" "" CXXFLAGS "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}") + STRING(REPLACE "${MY_C_WARNING_FLAGS}" "" CFLAGS + "${CMAKE_C_FLAGS_RELWITHDEBINFO}") + STRING(REPLACE "${MY_CXX_WARNING_FLAGS}" "" CXXFLAGS + "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}") ENDIF() IF(UNIX) diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt index c19ea9b17bd..030f183d5f7 100644 --- a/sql/CMakeLists.txt +++ b/sql/CMakeLists.txt @@ -80,6 +80,14 @@ SET (SQL_SOURCE ${GEN_SOURCES} ${MYSYS_LIBWRAP_SOURCE}) +# These files have unused result errors, so we skip Werror +CHECK_C_COMPILER_FLAG("-Werror" HAVE_WERROR_FLAG) +IF(HAVE_WERROR_FLAG) + INCLUDE(${MYSQL_CMAKE_SCRIPT_DIR}/compile_flags.cmake) + ADD_COMPILE_FLAGS(filesort.cc COMPILE_FLAGS "-Wno-error") + ADD_COMPILE_FLAGS(opt_range.cc COMPILE_FLAGS "-Wno-error") +ENDIF() + MYSQL_ADD_PLUGIN(partition ha_partition.cc STORAGE_ENGINE DEFAULT STATIC_ONLY RECOMPILE_FOR_EMBEDDED) diff --git a/storage/innobase/CMakeLists.txt b/storage/innobase/CMakeLists.txt index 01034eede69..4f000434eb9 100644 --- a/storage/innobase/CMakeLists.txt +++ b/storage/innobase/CMakeLists.txt @@ -247,6 +247,14 @@ SET(INNOBASE_SOURCES btr/btr0btr.c btr/btr0cur.c btr/btr0pcur.c btr/btr0sea.c ut/ut0byte.c ut/ut0dbg.c ut/ut0list.c ut/ut0mem.c ut/ut0rbt.c ut/ut0rnd.c ut/ut0ut.c ut/ut0vec.c ut/ut0wqueue.c ut/ut0bh.c) +# These files have unused result errors, so we skip Werror +CHECK_C_COMPILER_FLAG("-Werror" HAVE_WERROR) +IF(HAVE_WERROR) + INCLUDE(${MYSQL_CMAKE_SCRIPT_DIR}/compile_flags.cmake) + ADD_COMPILE_FLAGS(page/page0zip.c COMPILE_FLAGS "-Wno-error") + ADD_COMPILE_FLAGS(ut/ut0ut.c COMPILE_FLAGS "-Wno-error") +ENDIF() + IF(WITH_INNODB) # Legacy option SET(WITH_INNOBASE_STORAGE_ENGINE TRUE) From 635f38a2c1bb0d4e2d382a04e03d7ab716915e45 Mon Sep 17 00:00:00 2001 From: Arun Kuruvila <arun.kuruvila@oracle.com> Date: Fri, 17 Oct 2014 11:14:26 +0530 Subject: [PATCH 25/99] Bug #14486004 MYSQL_SETPERMISSION DOES NOT QUOTE USER NAMES Description: Certain operations using the client tool 'mysql\_setpermisson' which uses username of the format "xxx-yyy" results in a syntax error. Analysis: The user name variable ( $user ) was not quoted properly in the 'mysql\_setpermission' script. As a result, while granting user privileges for a user with username of the format 'xxx-yyy', results in a syntax error. Fix: The escape sequence has been applied for the user variable in the script file. Note: Test case is not added for this fix. 'mysql\_setpermission' executable resides in different directories on pb2 machines and on local boxes. Hence the test case cannot be made generic. --- scripts/mysql_setpermission.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/mysql_setpermission.sh b/scripts/mysql_setpermission.sh index f23011a5ae6..48f0b09b566 100644 --- a/scripts/mysql_setpermission.sh +++ b/scripts/mysql_setpermission.sh @@ -264,13 +264,13 @@ sub addall { foreach $host (@hosts) { # user privileges: SELECT if (($todo == 2) || ($todo == 3)) { - $sth = $dbh->do("GRANT SELECT ON $db.* TO $user@\"$host\" IDENTIFIED BY \'$pass\'") || die $dbh->errstr; + $sth = $dbh->do("GRANT SELECT ON $db.* TO \'$user\'@\'$host\' IDENTIFIED BY \'$pass\'") || die $dbh->errstr; } elsif ($todo == 4) { # user privileges: SELECT,INSERT,UPDATE,DELETE - $sth = $dbh->do("GRANT SELECT,INSERT,UPDATE,DELETE ON $db.* TO $user@\"$host\" IDENTIFIED BY \'$pass\'") || die $dbh->errstr; + $sth = $dbh->do("GRANT SELECT,INSERT,UPDATE,DELETE ON $db.* TO \'$user\'@\'$host\' IDENTIFIED BY \'$pass\'") || die $dbh->errstr; } elsif ($todo == 5) { # user privileges: SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,LOCK TABLES,CREATE TEMPORARY TABLES - $sth = $dbh->do("GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,LOCK TABLES,CREATE TEMPORARY TABLES ON $db.* TO $user@\"$host\" IDENTIFIED BY \'$pass\'") || die $dbh->errstr; + $sth = $dbh->do("GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,LOCK TABLES,CREATE TEMPORARY TABLES ON $db.* TO \'$user\'@\'$host\' IDENTIFIED BY \'$pass\'") || die $dbh->errstr; } elsif ($todo == 6) { # all privileges $sth = $dbh->do("GRANT ALL ON $db.* TO \'$user\'\@\'$host\' IDENTIFIED BY \'$pass\'") || die $dbh->errstr; From 5c41d52904be50c77b204a8450829fbeacbf080f Mon Sep 17 00:00:00 2001 From: Annamalai Gurusami <annamalai.gurusami@oracle.com> Date: Mon, 20 Oct 2014 15:43:28 +0530 Subject: [PATCH 26/99] The test case innodb.foreign-keys is failing in pb2 5.5. This is because some of the tables are created in InnoDB and some tables are created in MyISAM. We need to create all tables on InnoDB. Fix is to add engine=innodb to the CREATE TABLE statements. approved in IM by Marko and Vasil. --- mysql-test/suite/innodb/r/foreign-keys.result | 4 ++-- mysql-test/suite/innodb/t/foreign-keys.test | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/mysql-test/suite/innodb/r/foreign-keys.result b/mysql-test/suite/innodb/r/foreign-keys.result index be8d27b152c..53ddf618244 100644 --- a/mysql-test/suite/innodb/r/foreign-keys.result +++ b/mysql-test/suite/innodb/r/foreign-keys.result @@ -5,8 +5,8 @@ CREATE TABLE `department` (`department_id` INT, `department_people_fk` INT, PRIMARY KEY (`department_id`)) engine=innodb; CREATE TABLE `title` (`title_id` INT, `title_manager_fk` INT, -`title_reporter_fk` INT, PRIMARY KEY (`title_id`)); -CREATE TABLE `people` (`people_id` INT, PRIMARY KEY (`people_id`)); +`title_reporter_fk` INT, PRIMARY KEY (`title_id`)) engine=innodb; +CREATE TABLE `people` (`people_id` INT, PRIMARY KEY (`people_id`)) engine=innodb; ALTER TABLE `department` ADD FOREIGN KEY (`department_people_fk`) REFERENCES `people` (`people_id`); ALTER TABLE `title` ADD FOREIGN KEY (`title_manager_fk`) REFERENCES `people` diff --git a/mysql-test/suite/innodb/t/foreign-keys.test b/mysql-test/suite/innodb/t/foreign-keys.test index 45642cf28a7..2d586e2d6be 100644 --- a/mysql-test/suite/innodb/t/foreign-keys.test +++ b/mysql-test/suite/innodb/t/foreign-keys.test @@ -10,9 +10,9 @@ CREATE TABLE `department` (`department_id` INT, `department_people_fk` INT, PRIMARY KEY (`department_id`)) engine=innodb; CREATE TABLE `title` (`title_id` INT, `title_manager_fk` INT, -`title_reporter_fk` INT, PRIMARY KEY (`title_id`)); +`title_reporter_fk` INT, PRIMARY KEY (`title_id`)) engine=innodb; -CREATE TABLE `people` (`people_id` INT, PRIMARY KEY (`people_id`)); +CREATE TABLE `people` (`people_id` INT, PRIMARY KEY (`people_id`)) engine=innodb; ALTER TABLE `department` ADD FOREIGN KEY (`department_people_fk`) REFERENCES `people` (`people_id`); From 349ac8c9b3bec7f56922ab55a2504e225b03ba87 Mon Sep 17 00:00:00 2001 From: Arun Kuruvila <arun.kuruvila@oracle.com> Date: Tue, 21 Oct 2014 16:25:35 +0530 Subject: [PATCH 27/99] Bug #16581605: REPLACE.EXE UTILITY IS BROKEN IN 5.5 Description:- Replace, the string replacement utility fails on the windows platform. Analysis:- The utility takes files and multiple string pairs as input. In the windows platform, the utility maps the standard input incorrectly (Considers 0 as the fd for standard input instead of 2048 on windows). Hence when the input file is supplied to the utility due to the incorrect mapping, a bad file descriptor error is generated causing the utility to exit with an error. Fix:- "my_fileno()" is used for getting the correct file despscriptor for standard input. --- extra/replace.c | 4 ++-- mysql-test/mysql-test-run.pl | 8 ++++++++ mysql-test/r/windows.result | 5 +++++ mysql-test/t/windows.test | 16 ++++++++++++++++ 4 files changed, 31 insertions(+), 2 deletions(-) diff --git a/extra/replace.c b/extra/replace.c index 53bc1fd925a..53d9830ad40 100644 --- a/extra/replace.c +++ b/extra/replace.c @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -1020,7 +1020,7 @@ FILE *in,*out; updated=retain=0; reset_buffer(); - while ((error=fill_buffer_retaining(fileno(in),retain)) > 0) + while ((error=fill_buffer_retaining(my_fileno(in),retain)) > 0) { end_of_line=buffer ; buffer[bufbytes]=0; /* Sentinel */ diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 7ddde593503..f82e67ef5b6 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -2461,6 +2461,14 @@ sub environment_setup { "$path_client_bindir/perror"); $ENV{'MY_PERROR'}= native_path($exe_perror); + # ---------------------------------------------------- + # replace + # ---------------------------------------------------- + my $exe_replace= mtr_exe_exists(vs_config_dirs('extra', 'replace'), + "$basedir/extra/replace", + "$path_client_bindir/replace"); + $ENV{'REPLACE'}= native_path($exe_replace); + # Create an environment variable to make it possible # to detect that valgrind is being used from test cases $ENV{'VALGRIND_TEST'}= $opt_valgrind; diff --git a/mysql-test/r/windows.result b/mysql-test/r/windows.result index d0cdd858d4a..05e4600f4b7 100644 --- a/mysql-test/r/windows.result +++ b/mysql-test/r/windows.result @@ -60,3 +60,8 @@ SELECT VARIABLE_NAME FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME = 'socket'; VARIABLE_NAME SOCKET +# +# Bug#16581605: REPLACE.EXE UTILITY IS BROKEN IN 5.5 +# +xyz +def diff --git a/mysql-test/t/windows.test b/mysql-test/t/windows.test index b7d31948d23..617daba6b8e 100644 --- a/mysql-test/t/windows.test +++ b/mysql-test/t/windows.test @@ -98,3 +98,19 @@ deallocate prepare abc; SELECT VARIABLE_NAME FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME = 'socket'; + +--echo # +--echo # Bug#16581605: REPLACE.EXE UTILITY IS BROKEN IN 5.5 +--echo # + +# Creating a temporary text file. +--write_file $MYSQL_TMP_DIR/bug16581605.txt +abc +def +EOF + +#REPLACE.EXE UTILITY will work fine after the fix. +--exec $REPLACE abc xyz < $MYSQL_TMP_DIR/bug16581605.txt + +#Cleanup +remove_file $MYSQL_TMP_DIR/bug16581605.txt; From db14346db1109dc0d2320d507746742aa42d7a37 Mon Sep 17 00:00:00 2001 From: Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> Date: Tue, 21 Oct 2014 14:48:58 +0200 Subject: [PATCH 28/99] Bug#19775856: When the socket option is relative, mysqld startup script fails on CentOS 6 --- packaging/rpm-oel/mysql-systemd-start | 22 +++++++++++++++++++--- packaging/rpm-oel/mysql.init | 8 ++++++-- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/packaging/rpm-oel/mysql-systemd-start b/packaging/rpm-oel/mysql-systemd-start index 9cb2a25c990..8670f889574 100644 --- a/packaging/rpm-oel/mysql-systemd-start +++ b/packaging/rpm-oel/mysql-systemd-start @@ -8,10 +8,19 @@ # post mode : ping server until answer is received # +get_option () { + local section=$1 + local option=$2 + local default=$3 + ret=$(/usr/bin/my_print_defaults $section | grep '^--'${option}'=' | cut -d= -f2-) + [ -z $ret ] && ret=$default + echo $ret +} + install_db () { # Note: something different than datadir=/var/lib/mysql requires SELinux policy changes (in enforcing mode) - datadir=$(/usr/bin/my_print_defaults server mysqld | grep '^--datadir=' | sed -n 's/--datadir=//p') - + datadir=$(get_option mysqld datadir "/var/lib/mysql") + # Restore log, dir, perms and SELinux contexts [ -d "$datadir" ] || install -d -m 0755 -omysql -gmysql "$datadir" || exit 1 log=/var/log/mysqld.log @@ -35,9 +44,16 @@ pinger () { # Wait for ping to answer to signal startup completed, # might take a while in case of e.g. crash recovery # MySQL systemd service will timeout script if no answer + datadir=$(get_option mysqld datadir "/var/lib/mysql") + socket=$(get_option mysqld socket "$datadir/mysql.sock") + case $socket in + /*) adminsocket="$socket" ;; + *) adminsocket="$datadir/$socket" ;; + esac + while /bin/true ; do sleep 1 - mysqladmin ping >/dev/null 2>&1 && break + mysqladmin --no-defaults --socket="$adminsocket" --user=UNKNOWN_MYSQL_USER ping >/dev/null 2>&1 && break done exit 0 } diff --git a/packaging/rpm-oel/mysql.init b/packaging/rpm-oel/mysql.init index d6f8f023850..79c8a8daa7d 100644 --- a/packaging/rpm-oel/mysql.init +++ b/packaging/rpm-oel/mysql.init @@ -50,11 +50,15 @@ errlogfile="$result" get_mysql_option mysqld_safe pid-file "/var/run/mysqld/mysqld.pid" mypidfile="$result" +case $socketfile in + /*) adminsocket="$socketfile" ;; + *) adminsocket="$datadir/$socketfile" ;; +esac start(){ [ -x $exec ] || exit 5 # check to see if it's already running - RESPONSE=`/usr/bin/mysqladmin --socket="$socketfile" --user=UNKNOWN_MYSQL_USER ping 2>&1` + RESPONSE=$(/usr/bin/mysqladmin --no-defaults --socket="$adminsocket" --user=UNKNOWN_MYSQL_USER ping 2>&1) if [ $? = 0 ]; then # already running, do nothing action $"Starting $prog: " /bin/true @@ -107,7 +111,7 @@ start(){ ret=0 TIMEOUT="$STARTTIMEOUT" while [ $TIMEOUT -gt 0 ]; do - RESPONSE=`/usr/bin/mysqladmin --socket="$socketfile" --user=UNKNOWN_MYSQL_USER ping 2>&1` && break + RESPONSE=$(/usr/bin/mysqladmin --no-defaults --socket="$adminsocket" --user=UNKNOWN_MYSQL_USER ping 2>&1) && break echo "$RESPONSE" | grep -q "Access denied for user" && break if ! /bin/kill -0 $safe_pid 2>/dev/null; then echo "MySQL Daemon failed to start." From 54fd994a5d580f2bec526ef02794c5cda8f5cfad Mon Sep 17 00:00:00 2001 From: Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> Date: Tue, 21 Oct 2014 16:19:47 +0200 Subject: [PATCH 29/99] Fix changelog entries build failure --- support-files/mysql.spec.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/support-files/mysql.spec.sh b/support-files/mysql.spec.sh index ee95e65780b..8548be8ca4c 100644 --- a/support-files/mysql.spec.sh +++ b/support-files/mysql.spec.sh @@ -499,12 +499,14 @@ mkdir debug # Attempt to remove any optimisation flags from the debug build CFLAGS=`echo " ${CFLAGS} " | \ sed -e 's/ -O[0-9]* / /' \ + -e 's/-Wp,-D_FORTIFY_SOURCE=2/ /' \ -e 's/ -unroll2 / /' \ -e 's/ -ip / /' \ -e 's/^ //' \ -e 's/ $//'` CXXFLAGS=`echo " ${CXXFLAGS} " | \ sed -e 's/ -O[0-9]* / /' \ + -e 's/-Wp,-D_FORTIFY_SOURCE=2/ /' \ -e 's/ -unroll2 / /' \ -e 's/ -ip / /' \ -e 's/^ //' \ From b821be7df5e6f570d4d475a6c59ee0a47d7ace7b Mon Sep 17 00:00:00 2001 From: Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> Date: Thu, 23 Oct 2014 06:56:47 +0200 Subject: [PATCH 30/99] Rpm 4.9 and newer is more strict regarding weekday in %changelog --- support-files/mysql.spec.sh | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/support-files/mysql.spec.sh b/support-files/mysql.spec.sh index 8548be8ca4c..e45573a6d77 100644 --- a/support-files/mysql.spec.sh +++ b/support-files/mysql.spec.sh @@ -1252,12 +1252,12 @@ echo "=====" >> $STATUS_HISTORY * Mon Jun 11 2012 Joerg Bruehe <joerg.bruehe@oracle.com> - Make sure newly added "SPECIFIC-ULN/" directory does not disturb packaging. - + * Wed Sep 28 2011 Joerg Bruehe <joerg.bruehe@oracle.com> - Fix duplicate mentioning of "mysql_plugin" and its manual page, it is better to keep alphabetic order in the files list (merging!). - + * Wed Sep 14 2011 Joerg Bruehe <joerg.bruehe@oracle.com> - Let the RPM capabilities ("obsoletes" etc) ensure that an upgrade may replace @@ -1290,7 +1290,7 @@ echo "=====" >> $STATUS_HISTORY * Fri Aug 19 2011 Joerg Bruehe <joerg.bruehe@oracle.com> - Null-upmerge the fix of bug#37165: This spec file is not affected. -- Replace "/var/lib/mysql" by the spec file variable "%{mysqldatadir}". +- Replace "/var/lib/mysql" by the spec file variable "%%{mysqldatadir}". * Fri Aug 12 2011 Daniel Fischer <daniel.fischer@oracle.com> @@ -1311,13 +1311,13 @@ echo "=====" >> $STATUS_HISTORY not in an RPM upgrade. This affects both the "mkdir" and the call of "mysql_install_db". -* Thu Feb 09 2011 Joerg Bruehe <joerg.bruehe@oracle.com> +* Wed Feb 09 2011 Joerg Bruehe <joerg.bruehe@oracle.com> - Fix bug#56581: If an installation deviates from the default file locations ("datadir" and "pid-file"), the mechanism to detect a running server (on upgrade) should still work, and use these locations. The problem was that the fix for bug#27072 did not check for local settings. - + * Mon Jan 31 2011 Joerg Bruehe <joerg.bruehe@oracle.com> - Install the new "manifest" files: "INFO_SRC" and "INFO_BIN". @@ -1432,7 +1432,7 @@ echo "=====" >> $STATUS_HISTORY - Fix some problems with the directives around "tcmalloc" (experimental), remove erroneous traces of the InnoDB plugin (that is 5.1 only). -* Fri Oct 06 2009 Magnus Blaudd <mvensson@mysql.com> +* Tue Oct 06 2009 Magnus Blaudd <mvensson@mysql.com> - Removed mysql_fix_privilege_tables @@ -1550,7 +1550,7 @@ echo "=====" >> $STATUS_HISTORY * Thu Nov 30 2006 Joerg Bruehe <joerg@mysql.com> -- Call "make install" using "benchdir_root=%{_datadir}", +- Call "make install" using "benchdir_root=%%{_datadir}", because that is affecting the regression test suite as well. * Thu Nov 16 2006 Joerg Bruehe <joerg@mysql.com> @@ -1629,7 +1629,7 @@ echo "=====" >> $STATUS_HISTORY - Set $LDFLAGS from $MYSQL_BUILD_LDFLAGS -* Wed Mar 07 2006 Kent Boortz <kent@mysql.com> +* Tue Mar 07 2006 Kent Boortz <kent@mysql.com> - Changed product name from "Community Edition" to "Community Server" @@ -1667,7 +1667,7 @@ echo "=====" >> $STATUS_HISTORY - Added zlib to the list of (static) libraries installed - Added check against libtool wierdness (WRT: sql/mysqld || sql/.libs/mysqld) - Compile MySQL with bundled zlib -- Fixed %packager name to "MySQL Production Engineering Team" +- Fixed %%packager name to "MySQL Production Engineering Team" * Mon Dec 05 2005 Joerg Bruehe <joerg@mysql.com> @@ -1817,7 +1817,7 @@ echo "=====" >> $STATUS_HISTORY - ISAM and merge storage engines were purged. As well as appropriate tools and manpages (isamchk and isamlog) -* Thu Dec 31 2004 Lenz Grimmer <lenz@mysql.com> +* Fri Dec 31 2004 Lenz Grimmer <lenz@mysql.com> - enabled the "Archive" storage engine for the max binary - enabled the "CSV" storage engine for the max binary @@ -1877,7 +1877,7 @@ echo "=====" >> $STATUS_HISTORY - marked /etc/logrotate.d/mysql as a config file (BUG 2156) -* Fri Dec 13 2003 Lenz Grimmer <lenz@mysql.com> +* Sat Dec 13 2003 Lenz Grimmer <lenz@mysql.com> - fixed file permissions (BUG 1672) @@ -2019,7 +2019,7 @@ echo "=====" >> $STATUS_HISTORY - Added separate libmysql_r directory; now both a threaded and non-threaded library is shipped. -* Wed Sep 28 1999 David Axmark <davida@mysql.com> +* Tue Sep 28 1999 David Axmark <davida@mysql.com> - Added the support-files/my-example.cnf to the docs directory. From c978f6988d17819db4be8fb440f5841d48f4a68a Mon Sep 17 00:00:00 2001 From: Marko Makela <marko.makela@oracle.com> Date: Mon, 27 Oct 2014 14:27:08 +0200 Subject: [PATCH 31/99] Bug#19584379 Reporting corruption may corrupt the innodb data dictionary dict_set_corrupted(): Use the canonical way of searching for less-than-equal (PAGE_CUR_LE) and then checking low_match. The code that was introduced in MySQL 5.5.17 in Bug#11830883 SUPPORT "CORRUPTED" BIT FOR INNODB TABLES AND INDEXES could position the cursor on the page supremum, and then attempt to overwrite non-existing 7th field of the 1-field supremum record. Approved by Jimmy Yang --- mysql-test/suite/innodb/r/innodb_corrupt_bit.result | 1 + mysql-test/suite/innodb/t/innodb_corrupt_bit.test | 12 +++++++++--- storage/innobase/dict/dict0dict.c | 4 ++-- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/mysql-test/suite/innodb/r/innodb_corrupt_bit.result b/mysql-test/suite/innodb/r/innodb_corrupt_bit.result index 7e8792bb5b4..fac00bd0510 100644 --- a/mysql-test/suite/innodb/r/innodb_corrupt_bit.result +++ b/mysql-test/suite/innodb/r/innodb_corrupt_bit.result @@ -78,4 +78,5 @@ z 31 32 drop table corrupt_bit_test_ā; +DROP DATABASE pad; SET GLOBAL innodb_change_buffering_debug = 0; diff --git a/mysql-test/suite/innodb/t/innodb_corrupt_bit.test b/mysql-test/suite/innodb/t/innodb_corrupt_bit.test index b8d19ddfcee..3554e5e06b1 100644 --- a/mysql-test/suite/innodb/t/innodb_corrupt_bit.test +++ b/mysql-test/suite/innodb/t/innodb_corrupt_bit.test @@ -16,14 +16,20 @@ # It instructs InnoDB to try to evict pages from the buffer pool when # change buffering is possible, so that the change buffer will be used # whenever possible. --- error 0,ER_UNKNOWN_SYSTEM_VARIABLE SET @innodb_change_buffering_debug_orig = @@innodb_change_buffering_debug; --- error 0,ER_UNKNOWN_SYSTEM_VARIABLE SET GLOBAL innodb_change_buffering_debug = 1; # Turn off Unique Check to create corrupted index with dup key SET UNIQUE_CHECKS=0; +CREATE DATABASE pad; +let $i=345; +while ($i) +{ + --eval CREATE TABLE pad.t$i (a INT PRIMARY KEY) ENGINE=InnoDB; + dec $i; +} + -- enable_query_log set names utf8; @@ -119,6 +125,6 @@ select z from corrupt_bit_test_ā limit 10; # Drop table drop table corrupt_bit_test_ā; +DROP DATABASE pad; --- error 0, ER_UNKNOWN_SYSTEM_VARIABLE SET GLOBAL innodb_change_buffering_debug = 0; diff --git a/storage/innobase/dict/dict0dict.c b/storage/innobase/dict/dict0dict.c index 2bf774ad039..63571bb26c8 100644 --- a/storage/innobase/dict/dict0dict.c +++ b/storage/innobase/dict/dict0dict.c @@ -5498,11 +5498,11 @@ dict_set_corrupted( dict_index_copy_types(tuple, sys_index, 2); - btr_cur_search_to_nth_level(sys_index, 0, tuple, PAGE_CUR_GE, + btr_cur_search_to_nth_level(sys_index, 0, tuple, PAGE_CUR_LE, BTR_MODIFY_LEAF, &cursor, 0, __FILE__, __LINE__, &mtr); - if (cursor.up_match == dtuple_get_n_fields(tuple)) { + if (cursor.low_match == dtuple_get_n_fields(tuple)) { /* UPDATE SYS_INDEXES SET TYPE=index->type WHERE TABLE_ID=index->table->id AND INDEX_ID=index->id */ ulint len; From ffc33cffe3e06956537b03b688543caa367eba5b Mon Sep 17 00:00:00 2001 From: Annamalai Gurusami <annamalai.gurusami@oracle.com> Date: Wed, 29 Oct 2014 16:53:53 +0530 Subject: [PATCH 32/99] Bug #19908343 SERVER CRASHES WHEN EXECUTING ALTER TABLE Problem: In the function dict_foreign_remove_from_cache(), the rb tree was updated without actually verifying whether the given foreign key object is there in the rb tree or not. There can be an existing foreign key object with the same id in the rb tree, which must not be removed. Such a scenario comes when an attempt is made to add a foreign key object with a duplicate identifier. Solution: When the foreign key object is removed from the dictionary cache, ensure that the foreign key object removed from the rbt is the correct one. rb#7168 approved by Jimmy and Marko. --- storage/innobase/dict/dict0dict.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/storage/innobase/dict/dict0dict.c b/storage/innobase/dict/dict0dict.c index 63571bb26c8..c298f867ae3 100644 --- a/storage/innobase/dict/dict0dict.c +++ b/storage/innobase/dict/dict0dict.c @@ -2529,8 +2529,15 @@ dict_foreign_remove_from_cache( foreign); rbt = foreign->referenced_table->referenced_rbt; + if (rbt != NULL) { - rbt_delete(rbt, foreign->id); + const ib_rbt_node_t* node + = rbt_lookup(rbt, foreign->id); + dict_foreign_t* val = *(dict_foreign_t**) node->value; + + if (val == foreign) { + rbt_delete(rbt, foreign->id); + } } } @@ -2543,7 +2550,13 @@ dict_foreign_remove_from_cache( rbt = foreign->foreign_table->foreign_rbt; if (rbt != NULL) { - rbt_delete(rbt, foreign->id); + const ib_rbt_node_t* node + = rbt_lookup(rbt, foreign->id); + dict_foreign_t* val = *(dict_foreign_t**) node->value; + + if (val == foreign) { + rbt_delete(rbt, foreign->id); + } } } From a265914018f06c036f8de8504725ff191b42ba92 Mon Sep 17 00:00:00 2001 From: Marko Makela <marko.makela@oracle.com> Date: Thu, 30 Oct 2014 08:53:46 +0200 Subject: [PATCH 33/99] Bug#19904003 INNODB_LIMIT_OPTIMISTIC_INSERT_DEBUG=1 CAUSES INFINITE PAGE SPLIT The debug configuration parameter innodb_optimistic_insert_debug which was introduced for testing corner cases in B-tree handling had a bug in it. The value 1 would trigger an infinite sequence of page splits. Fix: When the value 1 is specified, disable this debug feature. Approved by Yasufumi Kinoshita --- mysql-test/suite/innodb/r/insert_debug.result | 11 +++++++++++ mysql-test/suite/innodb/t/insert_debug.test | 16 ++++++++++++++++ storage/innobase/include/btr0cur.ic | 4 ++-- 3 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 mysql-test/suite/innodb/r/insert_debug.result create mode 100644 mysql-test/suite/innodb/t/insert_debug.test diff --git a/mysql-test/suite/innodb/r/insert_debug.result b/mysql-test/suite/innodb/r/insert_debug.result new file mode 100644 index 00000000000..0d176afa116 --- /dev/null +++ b/mysql-test/suite/innodb/r/insert_debug.result @@ -0,0 +1,11 @@ +# +# Bug#19904003 INNODB_LIMIT_OPTIMISTIC_INSERT_DEBUG=1 +# CAUSES INFINITE PAGE SPLIT +# +SET GLOBAL innodb_change_buffering_debug=1; +SET GLOBAL innodb_limit_optimistic_insert_debug=1; +CREATE TABLE t1(c1 INT PRIMARY KEY) ENGINE=InnoDB +PARTITION BY HASH (c1) PARTITIONS 15; +DROP TABLE t1; +SET GLOBAL innodb_change_buffering_debug=0; +SET GLOBAL innodb_limit_optimistic_insert_debug=0; diff --git a/mysql-test/suite/innodb/t/insert_debug.test b/mysql-test/suite/innodb/t/insert_debug.test new file mode 100644 index 00000000000..96ac0473f77 --- /dev/null +++ b/mysql-test/suite/innodb/t/insert_debug.test @@ -0,0 +1,16 @@ +--source include/have_innodb.inc +--source include/have_debug.inc + +--echo # +--echo # Bug#19904003 INNODB_LIMIT_OPTIMISTIC_INSERT_DEBUG=1 +--echo # CAUSES INFINITE PAGE SPLIT +--echo # + +SET GLOBAL innodb_change_buffering_debug=1; +SET GLOBAL innodb_limit_optimistic_insert_debug=1; +CREATE TABLE t1(c1 INT PRIMARY KEY) ENGINE=InnoDB +PARTITION BY HASH (c1) PARTITIONS 15; +DROP TABLE t1; + +SET GLOBAL innodb_change_buffering_debug=0; +SET GLOBAL innodb_limit_optimistic_insert_debug=0; diff --git a/storage/innobase/include/btr0cur.ic b/storage/innobase/include/btr0cur.ic index 5fc4651ca13..5d122101fab 100644 --- a/storage/innobase/include/btr0cur.ic +++ b/storage/innobase/include/btr0cur.ic @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2012, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2014, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -28,7 +28,7 @@ Created 10/16/1994 Heikki Tuuri #ifdef UNIV_DEBUG # define LIMIT_OPTIMISTIC_INSERT_DEBUG(NREC, CODE)\ -if (btr_cur_limit_optimistic_insert_debug\ +if (btr_cur_limit_optimistic_insert_debug > 1\ && (NREC) >= (ulint)btr_cur_limit_optimistic_insert_debug) {\ CODE;\ } From 73b99f055ea6604f6a58580e8831b70a542a0443 Mon Sep 17 00:00:00 2001 From: mithun <mithun.c.y@oracle.com> Date: Mon, 3 Nov 2014 18:10:28 +0530 Subject: [PATCH 34/99] Bug #19372926 : 5.5.38 FAILS FUNC_MATH MTR TEST. Issue : ------- This seems for some platform -(LONGLONG_MIN) is not flagged as out of range. Fix: ---- Fix is backported from mysql-5.6 bug 14314156. Fixed by adding an explicit test for this value in Item_func_neg::int_op(). sql/item_func.cc: For some platforms we need special handling of LONGLONG_MIN to guarantee overflow. --- sql/item_func.cc | 8 +++++++- sql/item_func.h | 5 +++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/sql/item_func.cc b/sql/item_func.cc index 96cf07550d8..bef48b1bfed 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -1760,7 +1760,13 @@ longlong Item_func_neg::int_op() if ((null_value= args[0]->null_value)) return 0; if (args[0]->unsigned_flag && - (ulonglong) value > (ulonglong) LONGLONG_MAX + 1) + (ulonglong) value > (ulonglong) LONGLONG_MAX + 1ULL) + return raise_integer_overflow(); + // For some platforms we need special handling of LONGLONG_MIN to + // guarantee overflow. + if (value == LONGLONG_MIN && + !args[0]->unsigned_flag && + !unsigned_flag) return raise_integer_overflow(); return check_integer_overflow(-value, !args[0]->unsigned_flag && value < 0); } diff --git a/sql/item_func.h b/sql/item_func.h index 47a467f3580..fc9fa4a65fb 100644 --- a/sql/item_func.h +++ b/sql/item_func.h @@ -1,7 +1,7 @@ #ifndef ITEM_FUNC_INCLUDED #define ITEM_FUNC_INCLUDED -/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -251,7 +251,8 @@ public: inline longlong check_integer_overflow(longlong value, bool val_unsigned) { if ((unsigned_flag && !val_unsigned && value < 0) || - (!unsigned_flag && val_unsigned && (ulonglong) value > LONGLONG_MAX)) + (!unsigned_flag && val_unsigned && + (ulonglong) value > (ulonglong) LONGLONG_MAX)) return raise_integer_overflow(); return value; } From 0773c7f422c426e5693fc901df9999092e56aef3 Mon Sep 17 00:00:00 2001 From: Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> Date: Tue, 4 Nov 2014 08:30:23 +0100 Subject: [PATCH 35/99] Added sles11 repo packages --- CMakeLists.txt | 1 + packaging/rpm-sles/CMakeLists.txt | 28 + packaging/rpm-sles/filter-provides.sh | 6 + packaging/rpm-sles/filter-requires.sh | 6 + packaging/rpm-sles/my.cnf | 31 + packaging/rpm-sles/my_config.h | 30 + packaging/rpm-sles/mysql-systemd-start | 66 + packaging/rpm-sles/mysql.conf | 1 + packaging/rpm-sles/mysql.init | 236 ++++ packaging/rpm-sles/mysql.spec.in | 1646 ++++++++++++++++++++++++ packaging/rpm-sles/mysqld.service | 48 + 11 files changed, 2099 insertions(+) create mode 100644 packaging/rpm-sles/CMakeLists.txt create mode 100644 packaging/rpm-sles/filter-provides.sh create mode 100644 packaging/rpm-sles/filter-requires.sh create mode 100644 packaging/rpm-sles/my.cnf create mode 100644 packaging/rpm-sles/my_config.h create mode 100644 packaging/rpm-sles/mysql-systemd-start create mode 100644 packaging/rpm-sles/mysql.conf create mode 100644 packaging/rpm-sles/mysql.init create mode 100644 packaging/rpm-sles/mysql.spec.in create mode 100644 packaging/rpm-sles/mysqld.service diff --git a/CMakeLists.txt b/CMakeLists.txt index 8ce5f4734c9..d770dad3ab0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -411,6 +411,7 @@ IF(NOT WITHOUT_SERVER) ADD_SUBDIRECTORY(internal) ENDIF() ADD_SUBDIRECTORY(packaging/rpm-oel) + ADD_SUBDIRECTORY(packaging/rpm-sles) ENDIF() INCLUDE(cmake/abi_check.cmake) diff --git a/packaging/rpm-sles/CMakeLists.txt b/packaging/rpm-sles/CMakeLists.txt new file mode 100644 index 00000000000..b5ffaa15565 --- /dev/null +++ b/packaging/rpm-sles/CMakeLists.txt @@ -0,0 +1,28 @@ +# Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +IF(UNIX) + SET(prefix ${CMAKE_INSTALL_PREFIX}) + SET(SPECFILENAME "mysql.spec") + # Left in current directory, to be taken during build + CONFIGURE_FILE(mysql.spec.in ${CMAKE_CURRENT_BINARY_DIR}/${SPECFILENAME} @ONLY) + FOREACH(fedfile my.cnf my_config.h mysql.init + mysqld.service mysql-systemd-start mysql.conf + filter-requires.sh filter-provides.sh) + CONFIGURE_FILE(${fedfile} ${CMAKE_CURRENT_BINARY_DIR}/${fedfile} COPYONLY) + ENDFOREACH() +ENDIF() + diff --git a/packaging/rpm-sles/filter-provides.sh b/packaging/rpm-sles/filter-provides.sh new file mode 100644 index 00000000000..bc166bd82d0 --- /dev/null +++ b/packaging/rpm-sles/filter-provides.sh @@ -0,0 +1,6 @@ +#! /bin/bash +# + +/usr/lib/rpm/perl.prov $* | +sed -e '/perl(hostnames)/d' -e '/perl(lib::mtr.*/d' -e '/perl(lib::v1.*/d' -e '/perl(mtr_.*/d' -e '/perl(My::.*/d' + diff --git a/packaging/rpm-sles/filter-requires.sh b/packaging/rpm-sles/filter-requires.sh new file mode 100644 index 00000000000..3fdf43870fa --- /dev/null +++ b/packaging/rpm-sles/filter-requires.sh @@ -0,0 +1,6 @@ +#! /bin/bash +# + +/usr/lib/rpm/perl.req $* | +sed -e '/perl(GD)/d' -e '/perl(hostnames)/d' -e '/perl(lib::mtr.*/d' -e '/perl(lib::v1.*/d' -e '/perl(mtr_.*/d' -e '/perl(My::.*/d' + diff --git a/packaging/rpm-sles/my.cnf b/packaging/rpm-sles/my.cnf new file mode 100644 index 00000000000..3415115655e --- /dev/null +++ b/packaging/rpm-sles/my.cnf @@ -0,0 +1,31 @@ +# For advice on how to change settings please see +# http://dev.mysql.com/doc/refman/5.5/en/server-configuration-defaults.html + +[mysqld] +# +# Remove leading # and set to the amount of RAM for the most important data +# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. +# innodb_buffer_pool_size = 128M +# +# Remove leading # to turn on a very important data integrity option: logging +# changes to the binary log between backups. +# log_bin +# +# Remove leading # to set options mainly useful for reporting servers. +# The server defaults are faster for transactions and fast SELECTs. +# Adjust sizes as needed, experiment to find the optimal values. +# join_buffer_size = 128M +# sort_buffer_size = 2M +# read_rnd_buffer_size = 2M +datadir=/var/lib/mysql +socket=/var/lib/mysql/mysql.sock + +# Disabling symbolic-links is recommended to prevent assorted security risks +symbolic-links=0 + +# Recommended in standard MySQL setup +#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES + +[mysqld_safe] +log-error=/var/log/mysql/mysqld.log +pid-file=/var/run/mysql/mysqld.pid diff --git a/packaging/rpm-sles/my_config.h b/packaging/rpm-sles/my_config.h new file mode 100644 index 00000000000..75dc5e1d754 --- /dev/null +++ b/packaging/rpm-sles/my_config.h @@ -0,0 +1,30 @@ +/* + * Fedora supports multi arch: having 32 and 64 versions of MySQL + * installed at the same time. my_config.h will differ due arch + * dependent defs creating a file conflict. We move arch specific + * headers to arch specific file names and include the correct arch + * specific file by installing this generic file. + * + */ + +#if defined(__i386__) +#include "my_config_i386.h" +#elif defined(__ia64__) +#include "my_config_ia64.h" +#elif defined(__powerpc__) +#include "my_config_ppc.h" +#elif defined(__powerpc64__) +#include "my_config_ppc64.h" +#elif defined(__s390x__) +#include "my_config_s390x.h" +#elif defined(__s390__) +#include "my_config_s390.h" +#elif defined(__sparc__) && defined(__arch64__) +#include "my_config_sparc64.h" +#elif defined(__sparc__) +#include "my_config_sparc.h" +#elif defined(__x86_64__) +#include "my_config_x86_64.h" +#else +#error "This MySQL devel package does not work your architecture?" +#endif diff --git a/packaging/rpm-sles/mysql-systemd-start b/packaging/rpm-sles/mysql-systemd-start new file mode 100644 index 00000000000..dc151e0322c --- /dev/null +++ b/packaging/rpm-sles/mysql-systemd-start @@ -0,0 +1,66 @@ +#! /bin/bash +# +# Scripts to run by MySQL systemd service +# +# Needed argument: pre | post +# +# pre mode : try to run mysql_install_db and fix perms and SELinux contexts +# post mode : ping server until answer is received +# + +install_db () { + # Note: something different than datadir=/var/lib/mysql requires SELinux policy changes (in enforcing mode) + datadir=$(/usr/bin/my_print_defaults server mysqld | grep '^--datadir=' | sed -n 's/--datadir=//p') + + # Restore log, dir, perms and SELinux contexts + [ -d "$datadir" ] || install -d -m 0755 -omysql -gmysql "$datadir" || exit 1 + log=/var/log/mysqld.log + [ -e $log ] || touch $log + chmod 0640 $log + chown mysql:mysql $log || exit 1 + if [ -x /usr/sbin/restorecon ]; then + /usr/sbin/restorecon "$datadir" + /usr/sbin/restorecon $log + fi + + # If special mysql dir is in place, skip db install + [ -d "$datadir/mysql" ] && exit 0 + + # Create initial db + /usr/bin/mysql_install_db --rpm --datadir="$datadir" --user=mysql + + # Create a file to trigger execution of mysql_secure_installation + # after server has started + touch "$datadir"/.phase_two_required + + exit 0 +} + +pinger () { + # Wait for ping to answer to signal startup completed, + # might take a while in case of e.g. crash recovery + # MySQL systemd service will timeout script if no answer + ret=1 + while /bin/true ; do + sleep 1 + mysqladmin ping >/dev/null 2>&1 && ret=0 && break + done + + # If server has been started successfully and file created in + # install_db step is present we run mysql_secure_installation + if [ $ret -eq 0 -a -e "$datadir"/.phase_two_required -a -x /usr/bin/mysql_secure_installation ] ; then + /usr/bin/mysql_secure_installation --use-default --defaults-file=/etc/my.cnf + rm -f "$datadir"/.phase_two_required + fi + + exit 0 +} + +# main +case $1 in + "pre") install_db ;; + "post") pinger ;; +esac + +exit 0 + diff --git a/packaging/rpm-sles/mysql.conf b/packaging/rpm-sles/mysql.conf new file mode 100644 index 00000000000..74cd5f836e7 --- /dev/null +++ b/packaging/rpm-sles/mysql.conf @@ -0,0 +1 @@ +d /var/run/mysqld 0755 mysql mysql - diff --git a/packaging/rpm-sles/mysql.init b/packaging/rpm-sles/mysql.init new file mode 100644 index 00000000000..50ca4c9033c --- /dev/null +++ b/packaging/rpm-sles/mysql.init @@ -0,0 +1,236 @@ +#! /bin/bash +# + +# MySQL Database start/stop script + +# chkconfig: - 64 36 +# description: MySQL Database +# processname: mysqld +# config: /etc/my.cnf +# pidfile: /var/run/mysql/mysqld.pid + +# Comments to support LSB init script conventions +### BEGIN INIT INFO +# Provides: mysql +# Required-Start: $network $remote_fs +# Required-Stop: $network $remote_fs +# Default-Start: 3 5 +# Default-Stop: 0 1 6 +# Short-Description: MySQL Database +# Description: MySQL Database +### END INIT INFO + +# +# https://en.opensuse.org/openSUSE:Packaging_init_scripts#Exit_Status_Codes +# + +[ -e /etc/rc.status ] && . /etc/rc.status + +rc_reset + +STARTTIMEOUT=180 +STOPTIMEOUT=60 +PROG=/usr/bin/mysqld_safe + +[ -e /etc/sysconfig/mysql ] && . /etc/sysconfig/mysql + +# Lock directory +lockfile=/var/lock/subsys/mysql + +get_option () { + local section=$1 + local option=$2 + local default=$3 + ret=$(/usr/bin/my_print_defaults $section | grep '^--'${option}'=' | cut -d= -f2-) + [ -z $ret ] && ret=$default + echo $ret +} + +datadir=$(get_option mysqld datadir "/var/lib/mysql") +socket=$(get_option mysqld socket "$datadir/mysql.sock") +pidfile=$(get_option mysqld_safe pid-file "/var/run/mysql/mysqld.pid") +logfile=$(get_option mysqld_safe log-error "/var/log/mysql/mysqld.log") + +install_db () { + # Note: something different than datadir=/var/lib/mysql requires + # SELinux policy changes (in enforcing mode) + datadir=$(get_option mysqld datadir "/var/lib/mysql") + logfile=$(get_option mysqld_safe log-error "/var/log/mysql/mysqld.log") + + # Restore log, dir, perms and SELinux contexts + [ -d "$datadir" ] || install -d -m 0755 -omysql -gmysql "$datadir" || return 1 + + [ -e $logfile ] || touch $logfile || return 1 + chmod 0640 $logfile + chown mysql:mysql $logfile || return 1 + if [ -x /usr/sbin/restorecon ]; then + /usr/sbin/restorecon "$datadir" + /usr/sbin/restorecon $logfile + fi + + # If special mysql dir is in place, skip db install + [ -d "$datadir/mysql" ] && return 0 + + # Create initial db + /usr/bin/mysql_install_db --datadir="$datadir" --rpm --user=mysql + return $? +} + +# Wait for ping to answer to signal startup completed, +# might take a while in case of e.g. crash recovery +pinger () { + mysqld_safe_pid=$1 + timer=$STARTTIMEOUT + ret=0 + while [ $timer -gt 0 ]; do + sleep 1 + mysqladmin --no-defaults --socket="$socket" ping >/dev/null 2>&1 && break + timer=$(expr $timer - 1) + + # Check if mysqld_safe is still alive, if not there is no hope + if ! kill -0 $mysqld_safe_pid >/dev/null 2>&1 ; then + ret=1 + break + fi + done + + # Did we timeout? + if [ $timer = 0 ]; then + echo "MySQL Database start up timeout after ${STARTTIMEOUT}s" + ret=1 + fi + return $ret +} + +# Check if mysqld is running +chk_running () { + ret=0 + if [ -e "$pidfile" ]; then + pid=$(cat "$pidfile") || ret=4 + else + ret=7 + fi + + # Check if $pid is a mysqld pid + if [ $ret -eq 0 ]; then + [ -L "/proc/$pid/exe" ] || ret=7 + fi + + if [ $ret -eq 0 ]; then + exec=$(readlink "/proc/$pid/exe") || ret=7 + fi + + if [ $ret -eq 0 ]; then + [ "x$(basename $exec)" = "xmysqld" ] || ret=7 + fi + return $ret +} + +start () { + if chk_running && mysqladmin --no-defaults --socket="$socket" ping >/dev/null 2>&1 ; then + echo -n "Starting service MySQL:" + rc_reset ; rc_status -v ; rc_exit + fi + + if ! install_db; then + echo -n "MySQL Database could not initialize data directory:" + rc_failed 6 ; rc_status -v ; rc_exit + fi + + $PROG --basedir=/usr --datadir="$datadir" --pid-file="$pidfile" >/dev/null 2>&1 & + if pinger $! ; then + echo -n "Starting service MySQL:" + touch $lockfile + rc_reset + else + echo -n "Failed to start service MySQL:" + rc_failed 3 + fi + rc_status -v +} + +stop () { + chk_running + ret=$? + if [ $ret -ne 0 ]; then + echo -n "Shutting down service MySQL:" + rc_reset ; rc_status -v ; return 0 + fi + + # chk_running has verified this works + pid=$(cat "$pidfile") + + # We use a signal to avoid having to know the root password + # Send single kill command and then wait + if kill $pid >/dev/null 2>&1; then + timer=$STOPTIMEOUT + while [ $timer -gt 0 ]; do + kill -0 $pid >/dev/null 2>&1 || break + sleep 1 + timer=$(expr $timer - 1) + done + else + echo -n "Shutting down service MySQL:" + rc_failed 4 ; rc_status -v ; rc_exit + fi + + if [ $timer -eq 0 ]; then + echo -n "Failed to stop service MySQL:" + rc_failed 1 + else + rm -f $lockfile + rm -f "$socketfile" + echo -n "Shutting down service MySQL:" + rc_reset + fi + rc_status -v +} + +restart () { + stop + start +} + +reload () { + ret=0 + if chk_running && mysqladmin --no-defaults --socket="$socket" ping >/dev/null 2>&1 ; then + pid=$(cat "$pidfile") + kill -HUP $pid >/dev/null 2>&1 + echo -n "Reloading service MySQL:" + rc_reset + else + echo -n "Reloading of service MySQL failed:" + rc_failed 7 + fi + rc_status -v +} + +condrestart () { + if chk_running && mysqladmin --no-defaults --socket="$socket" ping >/dev/null 2>&1 ; then + restart + fi +} + +status () { + echo -n "Checking for service MySQL:" + checkproc mysqld + rc_status -v +} + +case "$1" in + start ) start ;; + stop ) stop ;; + restart) restart ;; + status ) status ;; + condrestart ) condrestart ;; + reload|force-reload) reload ;; + + *) echo $"Usage: $0 {start|stop|restart|condrestart|status|reload|force-reload}"; exit 1 ;; +esac + +rc_exit + + + + + diff --git a/packaging/rpm-sles/mysql.spec.in b/packaging/rpm-sles/mysql.spec.in new file mode 100644 index 00000000000..75ed42a1cae --- /dev/null +++ b/packaging/rpm-sles/mysql.spec.in @@ -0,0 +1,1646 @@ +# Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; see the file COPYING. If not, write to the +# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston +# MA 02110-1301 USA. + + +%global mysql_vendor Oracle and/or its affiliates +%global mysqldatadir /var/lib/mysql + +# By default, a build will include the bundeled "yaSSL" library for SSL. +%{?with_ssl: %global ssl_option -DWITH_SSL=%{with_ssl}} + +# Regression tests may take a long time, override the default to skip them +%{!?runselftest:%global runselftest 0} + +%{!?with_systemd: %global systemd 0} +%{!?with_debuginfo: %global nodebuginfo 1} +%{!?product_suffix: %global product_suffix community} +%{!?feature_set: %global feature_set community} +%{!?compilation_comment_release: %global compilation_comment_release MySQL Community Server - (GPL)} +%{!?compilation_comment_debug: %global compilation_comment_debug MySQL Community Server - Debug (GPL)} +%{!?src_base: %global src_base mysql} + +%global src_dir %{src_base}-%{version} + +# multiarch +%global multiarchs ppc %{power64} %{ix86} x86_64 %{sparc} + +# No debuginfo for now, ships /usr/sbin/mysqld-debug and libmysqlcliet-debug.a +%if 0%{?nodebuginfo} +%global _enable_debug_package 0 +%global debug_package %{nil} +%global __os_install_post /usr/lib/rpm/brp-compress %{nil} +%endif + +%if 0%{?commercial} +%global license_files_server %{src_dir}/LICENSE.mysql +%global license_type Commercial +%else +%global license_files_server %{src_dir}/COPYING %{src_dir}/README +%global license_type GPLv2 +%endif + +%if 0%{?sles_version} == 011 +%global dist .sles11 +%global sles11 1 +%endif + +Name: mysql-%{product_suffix} +Summary: A very fast and reliable SQL database server +Group: Applications/Databases +Version: @VERSION@ +Release: 2%{?commercial:.1}%{?dist} +License: Copyright (c) 2000, @MYSQL_COPYRIGHT_YEAR@, %{mysql_vendor}. All rights reserved. Under %{?license_type} license as shown in the Description field. +Source0: https://cdn.mysql.com/Downloads/MySQL-@MYSQL_BASE_VERSION@/%{src_dir}.tar.gz +URL: http://www.mysql.com/ +Packager: MySQL Release Engineering <mysql-build@oss.oracle.com> +Vendor: %{mysql_vendor} +Source1: mysql-systemd-start +Source2: mysqld.service +Source3: mysql.conf +Source4: my_config.h +Source90: filter-provides.sh +Source91: filter-requires.sh +BuildRequires: cmake +BuildRequires: perl +BuildRequires: libaio-devel +BuildRequires: ncurses-devel +BuildRequires: openssl-devel +BuildRequires: zlib-devel +%if 0%{?systemd} +BuildRequires: systemd +%endif +BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) + +%if 0%{?rhel} > 6 +# For rpm => 4.9 only: https://fedoraproject.org/wiki/Packaging:AutoProvidesAndRequiresFiltering +%global __requires_exclude ^perl\\((GD|hostnames|lib::mtr|lib::v1|mtr_|My::) +%global __provides_exclude_from ^(/usr/share/(mysql|mysql-test)/.*|%{_libdir}/mysql/plugin/.*\\.so)$ +%else +# https://fedoraproject.org/wiki/EPEL:Packaging#Generic_Filtering_on_EPEL6 +%global __perl_provides %{SOURCE90} +%global __perl_requires %{SOURCE91} +%endif + +%description +The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, +and robust SQL (Structured Query Language) database server. MySQL Server +is intended for mission-critical, heavy-load production systems as well +as for embedding into mass-deployed software. MySQL is a trademark of +%{mysql_vendor} + +The MySQL software has Dual Licensing, which means you can use the MySQL +software free of charge under the GNU General Public License +(http://www.gnu.org/licenses/). You can also purchase commercial MySQL +licenses from %{mysql_vendor} if you do not wish to be bound by the terms of +the GPL. See the chapter "Licensing and Support" in the manual for +further info. + +The MySQL web site (http://www.mysql.com/) provides the latest +news and information about the MySQL software. Also please see the +documentation and the manual for more information. + +%package server +Summary: A very fast and reliable SQL database server +Group: Applications/Databases +Requires: coreutils +Requires: grep +Requires: procps +Requires: shadow-utils +Requires: net-tools +Requires: perl-base +%if 0%{?commercial} +Provides: MySQL-server-advanced = %{version}-%{release} +Obsoletes: MySQL-server-advanced < %{version}-%{release} +Obsoletes: mysql-community-server < %{version}-%{release} +Requires: mysql-commercial-client = %{version}-%{release} +Requires: mysql-commercial-common = %{version}-%{release} +%else +Provides: MySQL-server = %{version}-%{release} +Requires: mysql-community-client = %{version}-%{release} +Requires: mysql-community-common = %{version}-%{release} +%endif +Obsoletes: MySQL-server < %{version}-%{release} +Obsoletes: mysql < %{version}-%{release} +Obsoletes: mysql-tools < %{version}-%{release} +Obsoletes: mariadb-server +Obsoletes: mariadb-galera-server +Provides: mysql = %{version}-%{release} +Provides: mysql-tools = %{version}-%{release} +%if 0%{?systemd} +Requires(post): systemd +Requires(preun): systemd +Requires(postun): systemd +%else +PreReq: insserv +PreReq: sed +PreReq: pwdutils +%endif +Conflicts: otherproviders(mysql) +Conflicts: otherproviders(mysql-debug) +Conflicts: otherproviders(mysql-tools) + +%description server +The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, +and robust SQL (Structured Query Language) database server. MySQL Server +is intended for mission-critical, heavy-load production systems as well +as for embedding into mass-deployed software. MySQL is a trademark of +%{mysql_vendor} + +The MySQL software has Dual Licensing, which means you can use the MySQL +software free of charge under the GNU General Public License +(http://www.gnu.org/licenses/). You can also purchase commercial MySQL +licenses from %{mysql_vendor} if you do not wish to be bound by the terms of +the GPL. See the chapter "Licensing and Support" in the manual for +further info. + +The MySQL web site (http://www.mysql.com/) provides the latest news and +information about the MySQL software. Also please see the documentation +and the manual for more information. + +This package includes the MySQL server binary as well as related utilities +to run and administer a MySQL server. + +%package client +Summary: MySQL database client applications and tools +Group: Applications/Databases +%if 0%{?commercial} +Provides: MySQL-client-advanced = %{version}-%{release} +Obsoletes: MySQL-client-advanced < %{version}-%{release} +Obsoletes: mysql-community-client < %{version}-%{release} +Requires: mysql-commercial-libs = %{version}-%{release} +%else +Provides: MySQL-client = %{version}-%{release} +Requires: mysql-community-libs = %{version}-%{release} +%endif +Obsoletes: MySQL-client < %{version}-%{release} +Provides: mysql-client = %{version}-%{release} +Obsoletes: mysql-client < %{version}-%{release} +Obsoletes: mariadb +Conflicts: otherproviders(mysql-client) + +%description client +This package contains the standard MySQL clients and administration +tools. + +%package common +Summary: MySQL database common files for server and client libs +Group: Applications/Databases +%if 0%{?commercial} +Obsoletes: mysql-community-common < %{version}-%{release} +%endif +Provides: mysql-common = %{version}-%{release} + +%description common +This packages contains common files needed by MySQL client library, +MySQL database server, and MySQL embedded server. + + +%package test +Summary: Test suite for the MySQL database server +Group: Applications/Databases +%if 0%{?commercial} +Provides: MySQL-test-advanced = %{version}-%{release} +Obsoletes: MySQL-test-advanced < %{version}-%{release} +Obsoletes: mysql-community-test < %{version}-%{release} +Requires: mysql-commercial-server = %{version}-%{release} +%else +Provides: MySQL-test = %{version}-%{release} +Requires: mysql-community-server = %{version}-%{release} +%endif +Obsoletes: MySQL-test < %{version}-%{release} +Obsoletes: mysql-test < %{version}-%{release} +Obsoletes: mariadb-test +Provides: mysql-test = %{version}-%{release} +Conflicts: otherproviders(mysql-test) + +%description test +This package contains the MySQL regression test suite for MySQL +database server. + + +%package bench +Summary: MySQL benchmark suite +Group: Applications/Databases +%if 0%{?commercial} +Obsoletes: mysql-community-bench < %{version}-%{release} +Requires: mysql-commercial-server = %{version}-%{release} +%else +Requires: mysql-community-server = %{version}-%{release} +%endif +Obsoletes: mariadb-bench +Obsoletes: community-mysql-bench < %{version}-%{release} +Obsoletes: mysql-bench < %{version}-%{release} +Provides: mysql-bench = %{version}-%{release} +Conflicts: otherproviders(mysql-bench) + +%description bench +This package contains the MySQL Benchmark Suite for MySQL database +server. + +%package devel +Summary: Development header files and libraries for MySQL database client applications +Group: Applications/Databases +%if 0%{?commercial} +Provides: MySQL-devel-advanced = %{version}-%{release} +Obsoletes: MySQL-devel-advanced < %{version}-%{release} +Obsoletes: mysql-community-devel < %{version}-%{release} +Requires: mysql-commercial-libs = %{version}-%{release} +%else +Provides: MySQL-devel = %{version}-%{release} +Requires: mysql-community-libs = %{version}-%{release} +%endif +Obsoletes: MySQL-devel < %{version}-%{release} +Obsoletes: mysql-devel < %{version}-%{release} +Obsoletes: mariadb-devel +Obsoletes: libmysqlclient-devel < %{version}-%{release} +Provides: mysql-devel = %{version}-%{release} +Provides: libmysqlclient-devel = %{version}-%{release} + +%description devel +This package contains the development header files and libraries necessary +to develop MySQL client applications. + +%package libs +Summary: Shared libraries for MySQL database client applications +Group: Applications/Databases +%if 0%{?commercial} +Provides: MySQL-shared-advanced = %{version}-%{release} +Obsoletes: MySQL-shared-advanced < %{version}-%{release} +Obsoletes: mysql-community-libs < %{version}-%{release} +Requires: mysql-commercial-common = %{version}-%{release} +%else +Provides: MySQL-shared = %{version}-%{release} +Requires: mysql-community-common = %{version}-%{release} +%endif +Obsoletes: MySQL-shared < %{version}-%{release} +Obsoletes: mysql-libs < %{version}-%{release} +Obsoletes: mariadb-libs +Obsoletes: libmysqlclient18 < %{version}-%{release} +Obsoletes: libmysqlclient_r18 < %{version}-%{release} +Provides: mysql-libs = %{version}-%{release} +Provides: libmysqlclient18 = %{version}-%{release} +Provides: libmysqlclient_r18 = %{version}-%{release} + +%description libs +This package contains the shared libraries for MySQL client +applications. + +%package embedded +Summary: MySQL embedded library +Group: Applications/Databases +%if 0%{?commercial} +Provides: MySQL-embedded-advanced = %{version}-%{release} +Obsoletes: MySQL-embedded-advanced < %{version}-%{release} +Obsoletes: mysql-community-embedded < %{version}-%{release} +Requires: mysql-commercial-common = %{version}-%{release} +%else +Provides: MySQL-embedded = %{version}-%{release} +Requires: mysql-community-common = %{version}-%{release} +%endif +Obsoletes: mariadb-embedded +Obsoletes: MySQL-embedded < %{version}-%{release} +Obsoletes: mysql-embedded < %{version}-%{release} +Provides: mysql-embedded = %{version}-%{release} + +%description embedded +This package contains the MySQL server as an embedded library. + +The embedded MySQL server library makes it possible to run a full-featured +MySQL server inside the client application. The main benefits are increased +speed and more simple management for embedded applications. + +The API is identical for the embedded MySQL version and the +client/server version. + +For a description of MySQL see the base MySQL RPM or http://www.mysql.com/ + +%package embedded-devel +Summary: Development header files and libraries for MySQL as an embeddable library +Group: Applications/Databases +%if 0%{?commercial} +Obsoletes: mysql-community-embedded-devel < %{version}-%{release} +Requires: mysql-commercial-devel = %{version}-%{release} +Requires: mysql-commercial-embedded = %{version}-%{release} +%else +Requires: mysql-community-devel = %{version}-%{release} +Requires: mysql-community-embedded = %{version}-%{release} +%endif +Obsoletes: mariadb-embedded-devel +Obsoletes: mysql-embedded-devel < %{version}-%{release} +Provides: mysql-embedded-devel = %{version}-%{release} + +%description embedded-devel +This package contains files needed for developing applications using +the embedded version of the MySQL server. + +%prep +%setup -q -T -a 0 -c -n %{src_dir} +pushd %{src_dir} + +%build +# Fail quickly and obviously if user tries to build as root +%if 0%{?runselftest} +if [ "x$(id -u)" = "x0" ] ; then + echo "The MySQL regression tests may fail if run as root." + echo "If you really need to build the RPM as root, use" + echo "--define='runselftest 0' to skip the regression tests." + exit 1 +fi +%endif + + +# Build debug versions of mysqld and libmysqld.a +mkdir debug +( + cd debug + # Attempt to remove any optimisation flags from the debug build + optflags=$(echo "%{optflags}" | sed -e 's/-O2 / /' -e 's/-Wp,-D_FORTIFY_SOURCE=2/ /') + cmake ../%{src_dir} \ + -DBUILD_CONFIG=mysql_release \ + -DINSTALL_LAYOUT=RPM \ + -DCMAKE_BUILD_TYPE=Debug \ + -DENABLE_DTRACE=OFF \ + -DCMAKE_C_FLAGS="$optflags" \ + -DCMAKE_CXX_FLAGS="$optflags" \ + -DINSTALL_LIBDIR="%{_lib}/mysql" \ + -DINSTALL_PLUGINDIR="%{_lib}/mysql/plugin" \ + -DINSTALL_SQLBENCHDIR=share \ + -DMYSQL_UNIX_ADDR="%{mysqldatadir}/mysql.sock" \ + -DFEATURE_SET="%{feature_set}" \ + -DWITH_EMBEDDED_SERVER=1 \ + -DWITH_EMBEDDED_SHARED_LIBRARY=1 \ + %{?ssl_option} \ + -DCOMPILATION_COMMENT="%{compilation_comment_debug}" \ + -DMYSQL_SERVER_SUFFIX="%{?server_suffix}" + echo BEGIN_DEBUG_CONFIG ; egrep '^#define' include/config.h ; echo END_DEBUG_CONFIG + make %{?_smp_mflags} VERBOSE=1 +) + +# Build full release +mkdir release +( + cd release + cmake ../%{src_dir} \ + -DBUILD_CONFIG=mysql_release \ + -DINSTALL_LAYOUT=RPM \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DENABLE_DTRACE=OFF \ + -DCMAKE_C_FLAGS="%{optflags}" \ + -DCMAKE_CXX_FLAGS="%{optflags}" \ + -DINSTALL_LIBDIR="%{_lib}/mysql" \ + -DINSTALL_PLUGINDIR="%{_lib}/mysql/plugin" \ + -DINSTALL_SQLBENCHDIR=share \ + -DMYSQL_UNIX_ADDR="%{mysqldatadir}/mysql.sock" \ + -DFEATURE_SET="%{feature_set}" \ + -DWITH_EMBEDDED_SERVER=1 \ + -DWITH_EMBEDDED_SHARED_LIBRARY=1 \ + %{?ssl_option} \ + -DCOMPILATION_COMMENT="%{compilation_comment_release}" \ + -DMYSQL_SERVER_SUFFIX="%{?server_suffix}" + echo BEGIN_NORMAL_CONFIG ; egrep '^#define' include/config.h ; echo END_NORMAL_CONFIG + make %{?_smp_mflags} VERBOSE=1 +) + +%install +MBD=$RPM_BUILD_DIR/%{src_dir} + +# Ensure that needed directories exists +install -d -m 0755 %{buildroot}/var/lib/mysql +install -d -m 0755 %{buildroot}/var/run/mysql +install -d -m 0660 %{buildroot}/var/log/mysql + +# Install all binaries +cd $MBD/release +make DESTDIR=%{buildroot} install + +# Install logrotate and autostart +install -D -m 0644 $MBD/release/support-files/mysql-log-rotate %{buildroot}%{_sysconfdir}/logrotate.d/mysql +install -D -m 0644 $MBD/release/packaging/rpm-sles/my.cnf %{buildroot}%{_sysconfdir}/my.cnf +install -d %{buildroot}%{_sysconfdir}/my.cnf.d +%if 0%{?systemd} +install -D -m 0755 %{SOURCE1} %{buildroot}%{_bindir}/mysql-systemd-start +install -D -m 0644 %{SOURCE2} %{buildroot}%{_unitdir}/mysqld.service +%else +install -D -m 0755 $MBD/release/packaging/rpm-sles/mysql.init %{buildroot}%{_sysconfdir}/init.d/mysql +%endif +install -D -m 0644 %{SOURCE3} %{buildroot}%{_prefix}/lib/tmpfiles.d/mysql.conf + +# Make library links +install -d -m 0755 %{buildroot}%{_sysconfdir}/ld.so.conf.d +echo "%{_libdir}/mysql" > %{buildroot}%{_sysconfdir}/ld.so.conf.d/mysql-%{_arch}.conf + +# multiarch support +%ifarch %{multiarchs} +mv %{buildroot}/%{_includedir}/mysql/my_config.h \ + %{buildroot}/%{_includedir}/mysql/my_config_%{_arch}.h +install -p -m 0644 %{SOURCE4} %{buildroot}/%{_includedir}/mysql/my_config.h +%endif + +# Remove files pages we explicitly do not want to package +rm -rf %{buildroot}%{_infodir}/mysql.info* +rm -rf %{buildroot}%{_datadir}/mysql/binary-configure +rm -rf %{buildroot}%{_datadir}/mysql/mysql.server +rm -rf %{buildroot}%{_datadir}/mysql/mysqld_multi.server +rm -f %{buildroot}%{_datadir}/mysql/{ndb-config-2-node,config*}.ini +rm -f %{buildroot}%{_datadir}/mysql/my-*.cnf +%if 0%{?systemd} +rm -rf %{buildroot}%{_sysconfdir}/init.d/mysql +%endif +rm -rf %{buildroot}%{_bindir}/mysql_embedded +rm -rf %{buildroot}%{_bindir}/mysql_setpermission +rm -rf %{buildroot}%{_mandir}/man1/mysql_setpermission.1* + +# rcmysql symlink +install -d %{buildroot}%{_sbindir} +ln -sf %{_initrddir}/mysql %{buildroot}%{_sbindir}/rcmysql + +%check +%if 0%{?runselftest} +pushd release +make test VERBOSE=1 +export MTR_BUILD_THREAD=auto +pushd mysql-test +./mtr \ + --mem --parallel=auto --force --retry=0 \ + --mysqld=--binlog-format=mixed \ + --suite-timeout=720 --testcase-timeout=30 \ + --clean-vardir +rm -r $(readlink var) var +%endif + +%pre server +/usr/sbin/groupadd -r mysql >/dev/null 2>&1 || : +/usr/sbin/useradd -g mysql -o -r -d /var/lib/mysql -s /bin/false \ + -c "MySQL Server" -u 60 mysql >/dev/null 2>&1 || : + +%post server +datadir=$(/usr/bin/my_print_defaults server mysqld | grep '^--datadir=' | sed -n 's/--datadir=//p') +/bin/chmod 0755 "$datadir" +/bin/touch /var/log/mysql/mysqld.log +%if 0%{?systemd} +%systemd_post mysqld.service +/sbin/service mysqld enable >/dev/null 2>&1 || : +%else +/sbin/insserv /etc/init.d/mysql +%endif + +%preun server +%if 0%{?systemd} +%systemd_preun mysqld.service +%else +if [ "$1" -eq 0 ]; then + /usr/sbin/rcmysql stop >/dev/null 2>&1 || : + /sbin/insserv /etc/init.d +fi +%endif + +%postun server +%if 0%{?systemd} +%systemd_postun_with_restart mysqld.service +%else +if [ $1 -ge 1 ]; then + /usr/sbin/rcmysql condrestart >/dev/null 2>&1 || : +fi +%endif + +%post libs -p /sbin/ldconfig + +%postun libs -p /sbin/ldconfig + +%if 0%{?compatlib} +%post libs-compat -p /sbin/ldconfig + +%postun libs-compat -p /sbin/ldconfig +%endif + +%post embedded -p /sbin/ldconfig + +%postun embedded -p /sbin/ldconfig + +%files server +%defattr(-, root, root, -) +%doc %{?license_files_server} %{src_dir}/Docs/ChangeLog +%doc %{src_dir}/Docs/INFO_SRC* +%doc release/Docs/INFO_BIN* +%attr(644, root, root) %{_mandir}/man1/innochecksum.1* +%attr(644, root, root) %{_mandir}/man1/my_print_defaults.1* +%attr(644, root, root) %{_mandir}/man1/myisam_ftdump.1* +%attr(644, root, root) %{_mandir}/man1/myisamchk.1* +%attr(644, root, root) %{_mandir}/man1/myisamlog.1* +%attr(644, root, root) %{_mandir}/man1/myisampack.1* +%attr(644, root, root) %{_mandir}/man1/mysql_convert_table_format.1* +%attr(644, root, root) %{_mandir}/man1/mysql_fix_extensions.1* +%attr(644, root, root) %{_mandir}/man8/mysqld.8* +%attr(644, root, root) %{_mandir}/man1/mysqld_multi.1* +%attr(644, root, root) %{_mandir}/man1/mysqld_safe.1* +%attr(644, root, root) %{_mandir}/man1/mysqldumpslow.1* +%attr(644, root, root) %{_mandir}/man1/mysql_install_db.1* +%attr(644, root, root) %{_mandir}/man1/mysql_plugin.1* +%attr(644, root, root) %{_mandir}/man1/mysql_secure_installation.1* +%attr(644, root, root) %{_mandir}/man1/mysql_upgrade.1* +%attr(644, root, root) %{_mandir}/man1/mysqlhotcopy.1* +%attr(644, root, root) %{_mandir}/man1/mysqlman.1* +%attr(644, root, root) %{_mandir}/man1/mysql.server.1* +%attr(644, root, root) %{_mandir}/man1/mysqltest.1* +%attr(644, root, root) %{_mandir}/man1/mysql_tzinfo_to_sql.1* +%attr(644, root, root) %{_mandir}/man1/mysql_zap.1* +%attr(644, root, root) %{_mandir}/man1/mysqlbug.1* +%attr(644, root, root) %{_mandir}/man1/perror.1* +%attr(644, root, root) %{_mandir}/man1/replace.1* +%attr(644, root, root) %{_mandir}/man1/resolve_stack_dump.1* +%attr(644, root, root) %{_mandir}/man1/resolveip.1* + +%config(noreplace) %{_sysconfdir}/my.cnf +%dir %{_sysconfdir}/my.cnf.d + +%attr(755, root, root) %{_bindir}/innochecksum +%attr(755, root, root) %{_bindir}/my_print_defaults +%attr(755, root, root) %{_bindir}/myisam_ftdump +%attr(755, root, root) %{_bindir}/myisamchk +%attr(755, root, root) %{_bindir}/myisamlog +%attr(755, root, root) %{_bindir}/myisampack +%attr(755, root, root) %{_bindir}/mysql_convert_table_format +%attr(755, root, root) %{_bindir}/mysql_fix_extensions +%attr(755, root, root) %{_bindir}/mysql_install_db +%attr(755, root, root) %{_bindir}/mysql_plugin +%attr(755, root, root) %{_bindir}/mysql_secure_installation +%attr(755, root, root) %{_bindir}/mysql_tzinfo_to_sql +%attr(755, root, root) %{_bindir}/mysql_upgrade +%attr(755, root, root) %{_bindir}/mysql_zap +%attr(755, root, root) %{_bindir}/mysqlbug +%attr(755, root, root) %{_bindir}/mysqld_multi +%attr(755, root, root) %{_bindir}/mysqld_safe +%attr(755, root, root) %{_bindir}/mysqldumpslow +%attr(755, root, root) %{_bindir}/mysqlhotcopy +%attr(755, root, root) %{_bindir}/mysqltest +%attr(755, root, root) %{_bindir}/perror +%attr(755, root, root) %{_bindir}/replace +%attr(755, root, root) %{_bindir}/resolve_stack_dump +%attr(755, root, root) %{_bindir}/resolveip +%if 0%{?systemd} +%attr(755, root, root) %{_bindir}/mysql-systemd-start +%endif +%attr(755, root, root) %{_sbindir}/mysqld +%attr(755, root, root) %{_sbindir}/mysqld-debug +%attr(755, root, root) %{_sbindir}/rcmysql + +%dir %{_libdir}/mysql/plugin +%attr(755, root, root) %{_libdir}/mysql/plugin/adt_null.so +%attr(755, root, root) %{_libdir}/mysql/plugin/auth_socket.so +%attr(755, root, root) %{_libdir}/mysql/plugin/mypluglib.so +%attr(755, root, root) %{_libdir}/mysql/plugin/semisync_master.so +%attr(755, root, root) %{_libdir}/mysql/plugin/semisync_slave.so +%dir %{_libdir}/mysql/plugin/debug +%attr(755, root, root) %{_libdir}/mysql/plugin/debug/adt_null.so +%attr(755, root, root) %{_libdir}/mysql/plugin/debug/auth_socket.so +%attr(755, root, root) %{_libdir}/mysql/plugin/debug/mypluglib.so +%attr(755, root, root) %{_libdir}/mysql/plugin/debug/semisync_master.so +%attr(755, root, root) %{_libdir}/mysql/plugin/debug/semisync_slave.so +%if 0%{?commercial} +%attr(755, root, root) %{_libdir}/mysql/plugin/audit_log.so +%attr(755, root, root) %{_libdir}/mysql/plugin/authentication_pam.so +%attr(755, root, root) %{_libdir}/mysql/plugin/thread_pool.so +%attr(755, root, root) %{_libdir}/mysql/plugin/debug/audit_log.so +%attr(755, root, root) %{_libdir}/mysql/plugin/debug/authentication_pam.so +%attr(755, root, root) %{_libdir}/mysql/plugin/debug/thread_pool.so +%endif +%attr(644, root, root) %{_datadir}/mysql/fill_help_tables.sql +%attr(644, root, root) %{_datadir}/mysql/mysql_system_tables.sql +%attr(644, root, root) %{_datadir}/mysql/mysql_system_tables_data.sql +%attr(644, root, root) %{_datadir}/mysql/mysql_test_data_timezone.sql +%attr(644, root, root) %{_datadir}/mysql/mysql-log-rotate +%attr(644, root, root) %{_datadir}/mysql/magic +%attr(644, root, root) %{_prefix}/lib/tmpfiles.d/mysql.conf +%if 0%{?systemd} +%attr(644, root, root) %{_unitdir}/mysqld.service +%else +%attr(755, root, root) %{_sysconfdir}/init.d/mysql +%endif +%attr(644, root, root) %config(noreplace,missingok) %{_sysconfdir}/logrotate.d/mysql +%dir %attr(755, mysql, mysql) /var/lib/mysql +%dir %attr(755, mysql, mysql) /var/run/mysql +%dir %attr(660, mysql, mysql) /var/log/mysql + +%files common +%defattr(-, root, root, -) +%doc %{?license_files_server} +%{_datadir}/mysql/charsets/ +%{_datadir}/mysql/errmsg-utf8.txt +%{_datadir}/mysql/czech/ +%{_datadir}/mysql/danish/ +%{_datadir}/mysql/dutch/ +%{_datadir}/mysql/english/ +%{_datadir}/mysql/estonian/ +%{_datadir}/mysql/french/ +%{_datadir}/mysql/german/ +%{_datadir}/mysql/greek/ +%{_datadir}/mysql/hungarian/ +%{_datadir}/mysql/italian/ +%{_datadir}/mysql/japanese/ +%{_datadir}/mysql/korean/ +%{_datadir}/mysql/norwegian-ny/ +%{_datadir}/mysql/norwegian/ +%{_datadir}/mysql/polish/ +%{_datadir}/mysql/portuguese/ +%{_datadir}/mysql/romanian/ +%{_datadir}/mysql/russian/ +%{_datadir}/mysql/serbian/ +%{_datadir}/mysql/slovak/ +%{_datadir}/mysql/spanish/ +%{_datadir}/mysql/swedish/ +%{_datadir}/mysql/ukrainian/ + +%files client +%defattr(-, root, root, -) +%doc %{?license_files_server} +%attr(755, root, root) %{_bindir}/msql2mysql +%attr(755, root, root) %{_bindir}/mysql +%attr(755, root, root) %{_bindir}/mysql_find_rows +%attr(755, root, root) %{_bindir}/mysql_waitpid +%attr(755, root, root) %{_bindir}/mysqlaccess +# XXX: This should be moved to %{_sysconfdir} +%attr(644, root, root) %{_bindir}/mysqlaccess.conf +%attr(755, root, root) %{_bindir}/mysqladmin +%attr(755, root, root) %{_bindir}/mysqlbinlog +%attr(755, root, root) %{_bindir}/mysqlcheck +%attr(755, root, root) %{_bindir}/mysqldump +%attr(755, root, root) %{_bindir}/mysqlimport +%attr(755, root, root) %{_bindir}/mysqlshow +%attr(755, root, root) %{_bindir}/mysqlslap +%attr(755, root, root) %{_bindir}/mysql_config + +%attr(644, root, root) %{_mandir}/man1/msql2mysql.1* +%attr(644, root, root) %{_mandir}/man1/mysql.1* +%attr(644, root, root) %{_mandir}/man1/mysql_find_rows.1* +%attr(644, root, root) %{_mandir}/man1/mysql_waitpid.1* +%attr(644, root, root) %{_mandir}/man1/mysqlaccess.1* +%attr(644, root, root) %{_mandir}/man1/mysqladmin.1* +%attr(644, root, root) %{_mandir}/man1/mysqlbinlog.1* +%attr(644, root, root) %{_mandir}/man1/mysqlcheck.1* +%attr(644, root, root) %{_mandir}/man1/mysqldump.1* +%attr(644, root, root) %{_mandir}/man1/mysqlimport.1* +%attr(644, root, root) %{_mandir}/man1/mysqlshow.1* +%attr(644, root, root) %{_mandir}/man1/mysqlslap.1* + +%files devel +%defattr(-, root, root, -) +%doc %{?license_files_server} +%attr(644, root, root) %{_mandir}/man1/comp_err.1* +%attr(644, root, root) %{_mandir}/man1/mysql_config.1* +%attr(755, root, root) %{_bindir}/mysql_config +%{_includedir}/mysql +%{_datadir}/aclocal/mysql.m4 +%{_libdir}/mysql/libmysqlclient.a +%{_libdir}/mysql/libmysqlclient_r.a +%{_libdir}/mysql/libmysqlservices.a +%{_libdir}/mysql/libmysqlclient_r.so +%{_libdir}/mysql/libmysqlclient.so + +%files libs +%defattr(-, root, root, -) +%doc %{?license_files_server} +%dir %attr(755, root, root) %{_libdir}/mysql +%attr(644, root, root) %{_sysconfdir}/ld.so.conf.d/mysql-%{_arch}.conf +%{_libdir}/mysql/libmysqlclient.so.18* +%{_libdir}/mysql/libmysqlclient_r.so.18* + +%if 0%{?compatlib} +%files libs-compat +%defattr(-, root, root, -) +%doc %{?license_files_server} +%dir %attr(755, root, root) %{_libdir}/mysql +%attr(644, root, root) %{_sysconfdir}/ld.so.conf.d/mysql-%{_arch}.conf +%{_libdir}/mysql/libmysqlclient.so.%{compatlib} +%{_libdir}/mysql/libmysqlclient.so.%{compatlib}.0.0 +%{_libdir}/mysql/libmysqlclient_r.so.%{compatlib} +%{_libdir}/mysql/libmysqlclient_r.so.%{compatlib}.0.0 +%endif + +%files test +%defattr(-, root, root, -) +%doc %{?license_files_server} +%attr(-, root, root) %{_datadir}/mysql-test +%attr(755, root, root) %{_bindir}/mysql_client_test +%attr(755, root, root) %{_bindir}/mysql_client_test_embedded +%attr(755, root, root) %{_bindir}/mysqltest +%attr(755, root, root) %{_bindir}/mysqltest_embedded + +%attr(755, root, root) %{_libdir}/mysql/plugin/auth.so +%attr(755, root, root) %{_libdir}/mysql/plugin/auth_test_plugin.so +%attr(644, root, root) %{_libdir}/mysql/plugin/daemon_example.ini +%attr(755, root, root) %{_libdir}/mysql/plugin/libdaemon_example.so +%attr(755, root, root) %{_libdir}/mysql/plugin/qa_auth_client.so +%attr(755, root, root) %{_libdir}/mysql/plugin/qa_auth_interface.so +%attr(755, root, root) %{_libdir}/mysql/plugin/qa_auth_server.so +%attr(755, root, root) %{_libdir}/mysql/plugin/debug/auth.so +%attr(755, root, root) %{_libdir}/mysql/plugin/debug/auth_test_plugin.so +%attr(755, root, root) %{_libdir}/mysql/plugin/debug/libdaemon_example.so +%attr(755, root, root) %{_libdir}/mysql/plugin/debug/qa_auth_client.so +%attr(755, root, root) %{_libdir}/mysql/plugin/debug/qa_auth_interface.so +%attr(755, root, root) %{_libdir}/mysql/plugin/debug/qa_auth_server.so + +%attr(644, root, root) %{_mandir}/man1/mysql_client_test.1* +%attr(644, root, root) %{_mandir}/man1/mysql-stress-test.pl.1* +%attr(644, root, root) %{_mandir}/man1/mysql-test-run.pl.1* +%attr(644, root, root) %{_mandir}/man1/mysql_client_test_embedded.1* +%attr(644, root, root) %{_mandir}/man1/mysqltest.1* +%attr(644, root, root) %{_mandir}/man1/mysqltest_embedded.1* + +%files bench +%defattr(-, root, root, -) +%doc %{?license_files_server} +%{_datadir}/sql-bench + +%files embedded +%defattr(-, root, root, -) +%doc %{?license_files_server} +%dir %attr(755, root, root) %{_libdir}/mysql +%attr(644, root, root) %{_sysconfdir}/ld.so.conf.d/mysql-%{_arch}.conf +%attr(755, root, root) %{_libdir}/mysql/libmysqld.so.* + +%files embedded-devel +%defattr(-, root, root, -) +%doc %{?license_files_server} +%attr(644, root, root) %{_libdir}/mysql/libmysqld.a +%attr(644, root, root) %{_libdir}/mysql/libmysqld-debug.a +%attr(755, root, root) %{_libdir}/mysql/libmysqld.so + +%changelog +* Mon Oct 06 2014 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.5.41-1 +- Backport to 5.5.41 + +* Mon Oct 06 2014 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.7.6-0.2.m16 +- Include boost sources +- Add license info in each subpackage + +* Tue Sep 02 2014 Bjorn Munch <bjorn.munch@oracle.com> - 5.7.6-0.1.m16 +- Updated for 5.7.6 + +* Mon Sep 01 2014 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.7.5-0.2.m15 +- Added openssl_udf.so plugin to commercial packages + +* Mon Jun 30 2014 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.7.5-0.1.m15 +- Port to SLES + +* Thu Jun 26 2014 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.7.5-0.3.m15 +- Resolve embedded-devel conflict issue + +* Wed Jun 25 2014 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.7.5-0.2.m15 +- Add bench package +- Enable dtrace + +* Thu Apr 24 2014 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.7.5-0.1.m15 +- Updated for 5.7.5 + +* Mon Apr 07 2014 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.7.4-0.5.m14 +- Fix Cflags for el7 + +* Mon Mar 31 2014 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.7.4-0.4.m14 +- Support for enterprise packages +- Upgrade from MySQL-* packages + +* Wed Mar 12 2014 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.7.4-0.3.m14 +- Resolve conflict with mysql-libs-compat + +* Thu Mar 06 2014 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.7.4-0.2.m14 +- Resolve conflict issues during upgrade +- Add ha_example.so plugin which is now included + +* Fri Feb 07 2014 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.7.4-0.1.m14 +- 5.7.4 +- Enable shared libmysqld by cmake option +- Move mysqltest and test plugins to test subpackage + +* Mon Nov 18 2013 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.7.3-0.3.m13 +- Fixed isa_bits error + +* Fri Oct 25 2013 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.7.3-0.1.m13 +- Initial 5.7 port + +* Fri Oct 25 2013 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.6.15-1 +- Fixed uln advanced rpm libyassl.a error +- Updated to 5.6.15 + +* Wed Oct 16 2013 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.6.14-3 +- Fixed mysql_install_db usage +- Improved handling of plugin directory + +* Fri Sep 27 2013 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.6.14-2 +- Refresh mysql-install patch and service renaming + +* Mon Sep 16 2013 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.6.14-1 +- Updated to 5.6.14 + +* Wed Sep 04 2013 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.6.13-5 +- Support upgrade from 5.5 ULN packages to 5.6 + +* Tue Aug 27 2013 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.6.13-4 +- Enhanced perl filtering +- Added openssl-devel to buildreq + +* Wed Aug 21 2013 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.6.13-3 +- Removed mysql_embedded binary to resolve multilib conflict issue + +* Fri Aug 16 2013 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.6.13-2 +- Fixed Provides and Obsoletes issues in server, test packages + +* Wed Aug 14 2013 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.6.13-1 +- Updated to 5.6.13 + +* Mon Aug 05 2013 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.6.12-9 +- Added files list to embedded packages + +* Thu Aug 01 2013 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.6.12-8 +- Updated libmysqld.a with libmysqld.so in embedded package + +* Mon Jul 29 2013 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.6.12-7 +- Updated test package dependency from client to server + +* Wed Jul 24 2013 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.6.12-6 +- Added libs-compat dependency under libs package to resolve server + installation conflicts issue. + +* Wed Jul 17 2013 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.6.12-5 +- Removed libmysqlclient.so.16 from libs package + +* Fri Jul 05 2013 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.6.12-4 +- Adjusted to work on OEL6 + +* Wed Jun 26 2013 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.6.12-3 +- Move libs to mysql/ +- Basic multi arch support +- Fix changelog dates + +* Thu Jun 20 2013 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.6.12-2 +- Major cleanup + +* Tue Jun 04 2013 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.6.12-1 +- Updated to 5.6.12 + +* Mon Nov 05 2012 Joerg Bruehe <joerg.bruehe@oracle.com> + +- Allow to override the default to use the bundled yaSSL by an option like + --define="with_ssl /path/to/ssl" + +* Wed Oct 10 2012 Bjorn Munch <bjorn.munch@oracle.com> + +- Replace old my-*.cnf config file examples with template my-default.cnf + +* Fri Oct 05 2012 Joerg Bruehe <joerg.bruehe@oracle.com> + +- Let the installation use the new option "--random-passwords" of "mysql_install_db". + (Bug# 12794345 Ensure root password) +- Fix an inconsistency: "new install" vs "upgrade" are told from the (non)existence + of "$mysql_datadir/mysql" (holding table "mysql.user" and other system stuff). + +* Tue Jul 24 2012 Joerg Bruehe <joerg.bruehe@oracle.com> + +- Add a macro "runselftest": + if set to 1 (default), the test suite will be run during the RPM build; + this can be oveeridden via the command line by adding + --define "runselftest 0" + Failures of the test suite will NOT make the RPM build fail! + +* Mon Jul 16 2012 Joerg Bruehe <joerg.bruehe@oracle.com> + +- Add the man page for the "mysql_config_editor". + +* Mon Jun 11 2012 Joerg Bruehe <joerg.bruehe@oracle.com> + +- Make sure newly added "SPECIFIC-ULN/" directory does not disturb packaging. + +* Wed Feb 29 2012 Brajmohan Saxena <brajmohan.saxena@oracle.com> + +- Removal all traces of the readline library from mysql (BUG 13738013) + +* Wed Sep 28 2011 Joerg Bruehe <joerg.bruehe@oracle.com> + +- Fix duplicate mentioning of "mysql_plugin" and its manual page, + it is better to keep alphabetic order in the files list (merging!). + +* Wed Sep 14 2011 Joerg Bruehe <joerg.bruehe@oracle.com> + +- Let the RPM capabilities ("obsoletes" etc) ensure that an upgrade may replace + the RPMs of any configuration (of the current or the preceding release series) + by the new ones. This is done by not using the implicitly generated capabilities + (which include the configuration name) and relying on more generic ones which + just list the function ("server", "client", ...). + The implicit generation cannot be prevented, so all these capabilities must be + explicitly listed in "Obsoletes:" + +* Tue Sep 13 2011 Jonathan Perkin <jonathan.perkin@oracle.com> + +- Add support for Oracle Linux 6 and Red Hat Enterprise Linux 6. Due to + changes in RPM behaviour ($RPM_BUILD_ROOT is removed prior to install) + this necessitated a move of the libmygcc.a installation to the install + phase, which is probably where it belonged in the first place. + +* Tue Sep 13 2011 Joerg Bruehe <joerg.bruehe@oracle.com> + +- "make_win_bin_dist" and its manual are dropped, cmake does it different. + +* Thu Sep 08 2011 Daniel Fischer <daniel.fischer@oracle.com> + +- Add mysql_plugin man page. + +* Tue Aug 30 2011 Tor Didriksen <tor.didriksen@oracle.com> + +- Set CXX=g++ by default to add a dependency on libgcc/libstdc++. + Also, remove the use of the -fno-exceptions and -fno-rtti flags. + TODO: update distro_buildreq/distro_requires + +* Tue Aug 30 2011 Joerg Bruehe <joerg.bruehe@oracle.com> + +- Add the manual page for "mysql_plugin" to the server package. + +* Fri Aug 19 2011 Joerg Bruehe <joerg.bruehe@oracle.com> + +- Null-upmerge the fix of bug#37165: This spec file is not affected. +- Replace "/var/lib/mysql" by the spec file variable "%%{mysqldatadir}". + +* Fri Aug 12 2011 Daniel Fischer <daniel.fischer@oracle.com> + +- Source plugin library files list from cmake-generated file. + +* Mon Jul 25 2011 Chuck Bell <chuck.bell@oracle.com> + +- Added the mysql_plugin client - enables or disables plugins. + +* Thu Jul 21 2011 Sunanda Menon <sunanda.menon@oracle.com> + +- Fix bug#12561297: Added the MySQL embedded binary + +* Thu Jul 07 2011 Joerg Bruehe <joerg.bruehe@oracle.com> + +- Fix bug#45415: "rpm upgrade recreates test database" + Let the creation of the "test" database happen only during a new installation, + not in an RPM upgrade. + This affects both the "mkdir" and the call of "mysql_install_db". + +* Wed Feb 09 2011 Joerg Bruehe <joerg.bruehe@oracle.com> + +- Fix bug#56581: If an installation deviates from the default file locations + ("datadir" and "pid-file"), the mechanism to detect a running server (on upgrade) + should still work, and use these locations. + The problem was that the fix for bug#27072 did not check for local settings. + +* Mon Jan 31 2011 Joerg Bruehe <joerg.bruehe@oracle.com> + +- Install the new "manifest" files: "INFO_SRC" and "INFO_BIN". + +* Tue Nov 23 2010 Jonathan Perkin <jonathan.perkin@oracle.com> + +- EXCEPTIONS-CLIENT has been deleted, remove it from here too +- Support MYSQL_BUILD_MAKE_JFLAG environment variable for passing + a '-j' argument to make. + +* Mon Nov 1 2010 Georgi Kodinov <georgi.godinov@oracle.com> + +- Added test authentication (WL#1054) plugin binaries + +* Wed Oct 6 2010 Georgi Kodinov <georgi.godinov@oracle.com> + +- Added example external authentication (WL#1054) plugin binaries + +* Wed Aug 11 2010 Joerg Bruehe <joerg.bruehe@oracle.com> + +- With a recent spec file cleanup, names have changed: A "-community" part was dropped. + Reflect that in the "Obsoletes" specifications. +- Add a "triggerpostun" to handle the uninstall of the "-community" server RPM. +- This fixes bug#55015 "MySQL server is not restarted properly after RPM upgrade". + +* Tue Jun 15 2010 Joerg Bruehe <joerg.bruehe@sun.com> + +- Change the behaviour on installation and upgrade: + On installation, do not autostart the server. + *Iff* the server was stopped before the upgrade is started, this is taken as a + sign the administrator is handling that manually, and so the new server will + not be started automatically at the end of the upgrade. + The start/stop scripts will still be installed, so the server will be started + on the next machine boot. + This is the 5.5 version of fixing bug#27072 (RPM autostarting the server). + +* Tue Jun 1 2010 Jonathan Perkin <jonathan.perkin@oracle.com> + +- Implement SELinux checks from distribution-specific spec file. + +* Wed May 12 2010 Jonathan Perkin <jonathan.perkin@oracle.com> + +- Large number of changes to build using CMake +- Introduce distribution-specific RPMs +- Drop debuginfo, build all binaries with debug/symbols +- Remove __os_install_post, use native macro +- Remove _unpackaged_files_terminate_build, make it an error to have + unpackaged files +- Remove cluster RPMs + +* Wed Mar 24 2010 Joerg Bruehe <joerg.bruehe@sun.com> + +- Add "--with-perfschema" to the configure options. + +* Mon Mar 22 2010 Joerg Bruehe <joerg.bruehe@sun.com> + +- User "usr/lib*" to allow for both "usr/lib" and "usr/lib64", + mask "rmdir" return code 1. +- Remove "ha_example.*" files from the list, they aren't built. + +* Wed Mar 17 2010 Joerg Bruehe <joerg.bruehe@sun.com> + +- Fix a wrong path name in handling the debug plugins. + +* Wed Mar 10 2010 Joerg Bruehe <joerg.bruehe@sun.com> + +- Take the result of the debug plugin build and put it into the optimized tree, + so that it becomes part of the final installation; + include the files in the packlist. Part of the fixes for bug#49022. + +* Mon Mar 01 2010 Joerg Bruehe <joerg.bruehe@sun.com> + +- Set "Oracle and/or its affiliates" as the vendor and copyright owner, + accept upgrading from packages showing MySQL or Sun as vendor. + +* Fri Feb 12 2010 Joerg Bruehe <joerg.bruehe@sun.com> + +- Formatting changes: + Have a consistent structure of separator lines and of indentation + (8 leading blanks => tab). +- Introduce the variable "src_dir". +- Give the environment variables "MYSQL_BUILD_CC(CXX)" precedence + over "CC" ("CXX"). +- Drop the old "with_static" argument analysis, this is not supported + in 5.1 since ages. +- Introduce variables to control the handlers individually, as well + as other options. +- Use the new "--with-plugin" notation for the table handlers. +- Drop handling "/etc/rc.d/init.d/mysql", the switch to "/etc/init.d/mysql" + was done back in 2002 already. +- Make "--with-zlib-dir=bundled" the default, add an option to disable it. +- Add missing manual pages to the file list. +- Improve the runtime check for "libgcc.a", protect it against being tried + with the Intel compiler "icc". + +* Mon Jan 11 2010 Joerg Bruehe <joerg.bruehe@sun.com> + +- Change RPM file naming: + - Suffix like "-m2", "-rc" becomes part of version as "_m2", "_rc". + - Release counts from 1, not 0. + +* Wed Dec 23 2009 Joerg Bruehe <joerg.bruehe@sun.com> + +- The "semisync" plugin file name has lost its introductory "lib", + adapt the file lists for the subpackages. + This is a part missing from the fix for bug#48351. +- Remove the "fix_privilege_tables" manual, it does not exist in 5.5 + (and likely, the whole script will go, too). + +* Mon Nov 16 2009 Joerg Bruehe <joerg.bruehe@sun.com> + +- Fix some problems with the directives around "tcmalloc" (experimental), + remove erroneous traces of the InnoDB plugin (that is 5.1 only). + +* Tue Oct 06 2009 Magnus Blaudd <mvensson@mysql.com> + +- Removed mysql_fix_privilege_tables + +* Fri Oct 02 2009 Alexander Nozdrin <alexander.nozdrin@sun.com> + +- "mysqlmanager" got removed from version 5.4, all references deleted. + +* Fri Aug 28 2009 Joerg Bruehe <joerg.bruehe@sun.com> + +- Merge up from 5.1 to 5.4: Remove handling for the InnoDB plugin. + +* Thu Aug 27 2009 Joerg Bruehe <joerg.bruehe@sun.com> + +- This version does not contain the "Instance manager", "mysqlmanager": + Remove it from the spec file so that packaging succeeds. + +* Mon Aug 24 2009 Jonathan Perkin <jperkin@sun.com> + +- Add conditionals for bundled zlib and innodb plugin + +* Fri Aug 21 2009 Jonathan Perkin <jperkin@sun.com> + +- Install plugin libraries in appropriate packages. +- Disable libdaemon_example and ftexample plugins. + +* Thu Aug 20 2009 Jonathan Perkin <jperkin@sun.com> + +- Update variable used for mysql-test suite location to match source. + +* Fri Nov 07 2008 Joerg Bruehe <joerg@mysql.com> + +- Correct yesterday's fix, so that it also works for the last flag, + and fix a wrong quoting: un-quoted quote marks must not be escaped. + +* Thu Nov 06 2008 Kent Boortz <kent.boortz@sun.com> + +- Removed "mysql_upgrade_shell" +- Removed some copy/paste between debug and normal build + +* Thu Nov 06 2008 Joerg Bruehe <joerg@mysql.com> + +- Modify CFLAGS and CXXFLAGS such that a debug build is not optimized. + This should cover both gcc and icc flags. Fixes bug#40546. + +* Fri Aug 29 2008 Kent Boortz <kent@mysql.com> + +- Removed the "Federated" storage engine option, and enabled in all + +* Tue Aug 26 2008 Joerg Bruehe <joerg@mysql.com> + +- Get rid of the "warning: Installed (but unpackaged) file(s) found:" + Some generated files aren't needed in RPMs: + - the "sql-bench/" subdirectory + Some files were missing: + - /usr/share/aclocal/mysql.m4 ("devel" subpackage) + - Manual "mysqlbug" ("server" subpackage) + - Program "innochecksum" and its manual ("server" subpackage) + - Manual "mysql_find_rows" ("client" subpackage) + - Script "mysql_upgrade_shell" ("client" subpackage) + - Program "ndb_cpcd" and its manual ("ndb-extra" subpackage) + - Manuals "ndb_mgm" + "ndb_restore" ("ndb-tools" subpackage) + +* Mon Mar 31 2008 Kent Boortz <kent@mysql.com> + +- Made the "Federated" storage engine an option +- Made the "Cluster" storage engine and sub packages an option + +* Wed Mar 19 2008 Joerg Bruehe <joerg@mysql.com> + +- Add the man pages for "ndbd" and "ndb_mgmd". + +* Mon Feb 18 2008 Timothy Smith <tim@mysql.com> + +- Require a manual upgrade if the alread-installed mysql-server is + from another vendor, or is of a different major version. + +* Wed May 02 2007 Joerg Bruehe <joerg@mysql.com> + +- "ndb_size.tmpl" is not needed any more, + "man1/mysql_install_db.1" lacked the trailing '*'. + +* Sat Apr 07 2007 Kent Boortz <kent@mysql.com> + +- Removed man page for "mysql_create_system_tables" + +* Wed Mar 21 2007 Daniel Fischer <df@mysql.com> + +- Add debug server. + +* Mon Mar 19 2007 Daniel Fischer <df@mysql.com> + +- Remove Max RPMs; the server RPMs contain a mysqld compiled with all + features that previously only were built into Max. + +* Fri Mar 02 2007 Joerg Bruehe <joerg@mysql.com> + +- Add several man pages for NDB which are now created. + +* Fri Jan 05 2007 Kent Boortz <kent@mysql.com> + +- Put back "libmygcc.a", found no real reason it was removed. + +- Add CFLAGS to gcc call with --print-libgcc-file, to make sure the + correct "libgcc.a" path is returned for the 32/64 bit architecture. + +* Mon Dec 18 2006 Joerg Bruehe <joerg@mysql.com> + +- Fix the move of "mysqlmanager" to section 8: Directory name was wrong. + +* Thu Dec 14 2006 Joerg Bruehe <joerg@mysql.com> + +- Include the new man pages for "my_print_defaults" and "mysql_tzinfo_to_sql" + in the server RPM. +- The "mysqlmanager" man page got moved from section 1 to 8. + +* Thu Nov 30 2006 Joerg Bruehe <joerg@mysql.com> + +- Call "make install" using "benchdir_root=%%{_datadir}", + because that is affecting the regression test suite as well. + +* Thu Nov 16 2006 Joerg Bruehe <joerg@mysql.com> + +- Explicitly note that the "MySQL-shared" RPMs (as built by MySQL AB) + replace "mysql-shared" (as distributed by SuSE) to allow easy upgrading + (bug#22081). + +* Mon Nov 13 2006 Joerg Bruehe <joerg@mysql.com> + +- Add "--with-partition" t 2006 Joerg Bruehe <joerg@mysql.com> + +- Use the Perl script to run the tests, because it will automatically check + whether the server is configured with SSL. + +* Tue Jun 27 2006 Joerg Bruehe <joerg@mysql.com> + +- move "mysqldumpslow" from the client RPM to the server RPM (bug#20216) + +- Revert all previous attempts to call "mysql_upgrade" during RPM upgrade, + there are some more aspects which need to be solved before this is possible. + For now, just ensure the binary "mysql_upgrade" is delivered and installysql.com> + +- To run "mysql_upgrade", we need a running server; + start it in isolation and skip password checks. + +* Sat May 20 2006 Kent Boortz <kent@mysql.com> + +- Always compile for PIC, position independent code. + +* Wed May 10 2006 Kent Boortz <kent@mysql.com> + +- Use character set "all" when compiling with Cluster, to make Cluster + nodes independent on the character set directory, and the problem + that two RPM sub packages both wants to install this directory. + +* Mon May 01 2006 Kent Boortz <kent@mysql.com> + +- Use "./libtool --mode=execute" instead of searching for the + executable in current directory and ".libs". + +* Fri Apr 28 2006 Kent Boortz <kent@mysql.com> + +- Install and run "mysql_upgrade" + +* Wed Apr 12 2006 Jim Winstead <jimw@mysql.com> + +- Remove sql-bench, and MySQL-bench RPM (will be built as an independent + project from the mysql-bench repository) + +* Tue Apr 11 2006 Jim Winstead <jimw@mysql.com> + +- Remove old mysqltestmanager and related programs +* Sat Apr 01 2006 Kent Boortz <kent@mysql.com> + +- Set $LDFLAGS from $MYSQL_BUILD_LDFLAGS + +* Tue Mar 07 2006 Kent Boortz <kent@mysql.com> + +- Changed product name from "Community Edition" to "Community Server" + +* Mon Mar 06 2006 Kent Boortz <kent@mysql.com> + +- Fast mutexes is now disabled by default, but should be + used in Linux builds. + +* Mon Feb 20 2006 Kent Boortz <kent@mysql.com> + +- Reintroduced a max build +- Limited testing of 'debug' and 'max' servers +- Berkeley DB only in 'max' + +* Mon Feb 13 2006 Joerg Bruehe <joerg@mysql.com> + +- Use "-i" on "make test-force"; + this is essential for later evaluation of this log file. + +* Thu Feb 09 2006 Kent Boortz <kent@mysql.com> + +- Pass '-static' to libtool, link static with our own libraries, dynamic + with system libraries. Link with the bundled zlib. + +* Wed Feb 08 2006 Kristian Nielsen <knielsen@mysql.com> + +- Modified RPM spec to match new 5.1 debug+max combined community packaging. + +* Sun Dec 18 2005 Kent Boortz <kent@mysql.com> + +- Added "client/mysqlslap" + +* Mon Dec 12 2005 Rodrigo Novo <rodrigo@mysql.com> + +- Added zlib to the list of (static) libraries installed +- Added check against libtool wierdness (WRT: sql/mysqld || sql/.libs/mysqld) +- Compile MySQL with bundled zlib +- Fixed %%packager name to "MySQL Production Engineering Team" + +* Mon Dec 05 2005 Joerg Bruehe <joerg@mysql.com> + +- Avoid using the "bundled" zlib on "shared" builds: + As it is not installed (on the build system), this gives dependency + problems with "libtool" causing the build to fail. + (Change was done on Nov 11, but left uncommented.) + +* Tue Nov 22 2005 Joerg Bruehe <joerg@mysql.com> + +- Extend the file existence check for "init.d/mysql" on un-install + to also guard the call to "insserv"/"chkconfig". + +* Thu Oct 27 2005 Lenz Grimmer <lenz@grimmer.com> + +- added more man pages + +* Wed Oct 19 2005 Kent Boortz <kent@mysql.com> + +- Made yaSSL support an option (off by default) + +* Wed Oct 19 2005 Kent Boortz <kent@mysql.com> + +- Enabled yaSSL support + +* Sat Oct 15 2005 Kent Boortz <kent@mysql.com> + +- Give mode arguments the same way in all places +lenz@mysql.com> + +- fixed the removing of the RPM_BUILD_ROOT in the %%clean section (the + $RBR variable did not get expanded, thus leaving old build roots behind) + +* Thu Aug 04 2005 Lenz Grimmer <lenz@mysql.com> + +- Fixed the creation of the mysql user group account in the postinstall + section (BUG 12348) +- Fixed enabling the Archive storage engine in the Max binary + +* Tue Aug 02 2005 Lenz Grimmer <lenz@mysql.com> + +- Fixed the Requires: tag for the server RPM (BUG 12233) + +* Fri Jul 15 2005 Lenz Grimmer <lenz@mysql.com> + +- create a "mysql" user group and assign the mysql user account to that group + in the server postinstall section. (BUG 10984) + +* Tue Jun 14 2005 Lenz Grimmer <lenz@mysql.com> + +- Do not build statically on i386 by default, only when adding either "--with + static" or "--define '_with_static 1'" to the RPM build options. Static + linking really only makes sense when linking against the specially patched + glibc 2.2.5. + +* Mon Jun 06 2005 Lenz Grimmer <lenz@mysql.com> + +- added mysql_client_test to the "bench" subpackage (BUG 10676) +- added the libndbclient static and shared libraries (BUG 10676) + +* Wed Jun 01 2005 Lenz Grimmer <lenz@mysql.com> + +- use "mysqldatadir" variable instead of hard-coding the path multiple times +- use the "mysqld_user" variable on all occasions a user name is referenced +- removed (incomplete) Brazilian translations +- removed redundant release tags from the subpackage descriptions + +* Wed May 25 2005 Joerg Bruehe <joerg@mysql.com> + +- Added a "make clean" between separate calls to "BuildMySQL". + +* Thu May 12 2005 Guilhem Bichot <guilhem@mysql.com> + +- Removed the mysql_tableinfo script made obsolete by the information schema + +* Wed Apr 20 2005 Lenz Grimmer <lenz@mysql.com> + +- Enabled the "blackhole" storage engine for the Max RPM + +* Wed Apr 13 2005 Lenz Grimmer <lenz@mysql.com> + +- removed the MySQL manual files (html/ps/texi) - they have been removed + from the MySQL sources and are now available seperately. + +* Mon Apr 4 2005 Petr Chardin <petr@mysql.com> + +- old mysqlmanager, mysq* Mon Feb 7 2005 Tomas Ulin <tomas@mysql.com> + +- enabled the "Ndbcluster" storage engine for the max binary +- added extra make install in ndb subdir after Max build to get ndb binaries +- added packages for ndbcluster storage engine + +* Fri Jan 14 2005 Lenz Grimmer <lenz@mysql.com> + +- replaced obsoleted "BuildPrereq" with "BuildRequires" instead + +* Thu Jan 13 2005 Lenz Grimmer <lenz@mysql.com> + +- enabled the "Federated" storage engine for the max binary + +* Tue Jan 04 2005 Petr Chardin <petr@mysql.com> + +- ISAM and merge storage engines were purged. As well as appropriate + tools and manpages (isamchk and isamlog) + +* Fri Dec 31 2004 Lenz Grimmer <lenz@mysql.com> + +- enabled the "Archive" storage engine for the max binary +- enabled the "CSV" storage engine for the max binary +- enabled the "Example" storage engine for the max binary + +* Thu Aug 26 2004 Lenz Grimmer <lenz@mysql.com> + +- MySQL-Max now requires MySQL-server instead of MySQL (BUG 3860) + +* Fri Aug 20 2004 Lenz Grimmer <lenz@mysql.com> + +- do not link statically on IA64/AMD64 as these systems do not have + a patched glibc installed + +* Tue Aug 10 2004 Lenz Grimmer <lenz@mysql.com> + +- Added libmygcc.a to the devel subpackage (required to link applications + against the the embedded server libmysqld.a) (BUG 4921) + +* Mon Aug 09 2004 Lenz Grimmer <lenz@mysql.com> + +- Added EXCEPTIONS-CLIENT to the "devel" package + +* Thu Jul 29 2004 Lenz Grimmer <lenz@mysql.com> + +- disabled OpenSSL in the Max binaries again (the RPM packages were the + only exception to this anyway) (BUG 1043) + +* Wed Jun 30 2004 Lenz Grimmer <lenz@mysql.com> + +- fixed server postinstall (mysql_install_db was called with the wrong + parameter) + +* Thu Jun 24 2004 Lenz Grimmer <lenz@mysql.com> + +- added mysql_tzinfo_to_sql to the server subpackage +- run "make clean" instead of "make distclean" + +* Mon Apr 05 2004 Lenz Grimmer <lenz@mysql.com> + +- added ncurses-devel to the build prerequisites (BUG 3377) + +* Thu Feb 12 2004 Lenz Grimmer <lenz@mysql.com> + +- when using gcc, _always_ use CXX=gcc +- replaced Copyright with License field (Copyright is obsolete) + +* Tue Feb 03 2004 Lenz Grimmer <lenz@mysql.com> + +- added myisam_ftdump to the Server package + +* Tue Jan 13 2004 Lenz Grimmer <lenz@mysql.com> + +- link the mysql client against libreadline instead of libedit (BUG 2289) + +* Mon Dec 22 2003 Lenz Grimmer <lenz@mysql.com> + +- marked /etc/logrotate.d/mysql as a config file (BUG 2156) + +* Sat Dec 13 2003 Lenz Grimmer <lenz@mysql.com> + +- fixed file permissions (BUG 1672) + +* Thu Dec 11 2003 Lenz Grimmer <lenz@mysql.com> + +- made testing for gcc3 a bit more robust + +* Fri Dec 05 2003 Lenz Grimmer <lenz@mysql.com> + +- added missing file mysql_create_system_tables to the server subpackage + +* Fri Nov 21 2003 Lenz Grimmer <lenz@mysql.com> + +- removed dependency on MySQL-client from the MySQL-devel subpackage + as it is not really required. (BUG 1610) + +* Fri Aug 29 2003 Lenz Grimmer <lenz@mysql.com> + +- Fixed BUG 1162 (removed macro names from the changelog) +- Really fixed BUG 998 (disable the checking for installed but + unpackaged files) + +* Tue Aug 05 2003 Lenz Grimmer <lenz@mysql.com> + +- Fixed BUG 959 (libmysqld not being compiled properly) +- Fixed BUG 998 (RPM build errors): added missing files to the + distribution (mysql_fix_extensions, mysql_tableinfo, mysqldumpslow, + mysql_fix_privilege_tables.1), removed "-n" from install section. + +* Wed Jul 09 2003 Lenz Grimmer <lenz@mysql.com> + +- removed the GIF Icon (file was not included in the sources anyway) +- removed unused variable shared_lib_version +- do not run automake before building the standard binary + (should not be necessary) +- add server suffix '-standard' to standard binary (to be in line + with the binary tarball distributions) +- Use more RPM macros (_exec_prefix, _sbindir, _libdir, _sysconfdir, + _datadir, _includedir) throughout the spec file. +- allow overriding CC and CXX (required when building with other compilers) + +* Fri May 16 2003 Lenz Grimmer <lenz@mysql.com> + +- re-enabled RAID again + +* Wed Apr 30 2003 Lenz Grimmer <lenz@mysql.com> + +- disabled MyISAM RAID (--with-raid)- it throws an assertion which + needs to be investigated first. + +* Mon Mar 10 2003 Lenz Grimmer <lenz@mysql.com> + +- added missing file mysql_secure_installation to server subpackage + (BUG 141) + +* Tue Feb 11 2003 Lenz Grimmer <lenz@mysql.com> + +- re-added missing pre- and post(un)install scripts to server subpackage +- added config file /etc/my.cnf to the file list (just for completeness) +- make sure to create the datadir with 755 permissions + +* Mon Jan 27 2003 Lenz Grimmer <lenz@mysql.com> + +- removed unusedql.com> + +- Reworked the build steps a little bit: the Max binary is supposed + to include OpenSSL, which cannot be linked statically, thus trying + to statically link against a special glibc is futile anyway +- because of this, it is not required to make yet another build run + just to compile the shared libs (saves a lot of time) +- updated package description of the Max subpackage +- clean up the BuildRoot directory afterwards + +* Mon Jul 15 2002 Lenz Grimmer <lenz@mysql.com> + +- Updated Packager information +- Fixed the build options: the regular package is supposed to + include InnoDB and linked statically, while the Max package + should include BDB and SSL support + +* Fri May 03 2002 Lenz Grimmer <lenz@mysql.com> + +- Use more RPM macros (e.g. infodir, mandir) to make the spec + file more portable +- reorganized the installation of documentation files: let RPM + take care of this +- reorganized the file list: actually install man pages along + with the binaries of the respective subpackage +- do not include libmysqld.a in the devel subpackage as well, if we + have a special "embedded" subpackage +- reworked the package descriptions + +* Mon Oct 8 2001 Monty + +- Added embedded server as a separate RPM + +* Fri Apr 13 2001 Monty + +- Added mysqld-max to the distribution + +* Tue Jan 2 2001 Monty + +- Added mysql-test to the bench package + +* Fri Aug 18 2000 Tim Smith <tim@mysql.com> + +- Added separate libmysql_r directory; now both a threaded + and non-threaded library is shipped. + +* Tue Sep 28 1999 David Axmark <davida@mysql.com> + +- Added the support-files/my-example.cnf to the docs directory. + +- Removed devel dependency on base since it is about client + development. + +* Wed Sep 8 1999 David Axmark <davida@mysql.com> + +- Cleaned up some for 3.23. + +* Thu Jul 1 1999 David Axmark <davida@mysql.com> + +- Added support for shared libraries in a separate sub + package. Original fix by David Fox (dsfox@cogsci.ucsd.edu) + +- The --enable-assembler switch is now automatically disables on + platforms there assembler code is unavailable. This should allow + building this RPM on non i386 systems. + +* Mon Feb 22 1999 David Axmark <david@detron.se> + +- Removed unportable cc switches from the spec file. The defaults can + now be overridden with environment variables. This feature is used + to compile the official RPM with optimal (but compiler version + specific) switches. + +- Removed the repetitive description parts for the sub rpms. Maybe add + again if RPM gets a multiline macro capability. + +- Added support for a pt_BR translation. Translation contributed by + Jorge Godoy <jorge@bestway.com.br>. + +* Wed Nov 4 1998 David Axmark <david@detron.se> + +- A lot of changes in all the rpm and install scripts. This may even + be a working RPM :-) + +* Sun Aug 16 1998 David Axmark <david@detron.se> + +- A developers changelog for MySQL is available in the source RPM. And + there is a history of major user visible changed in the Reference + Manual. Only RPM specific changes will be documented here. diff --git a/packaging/rpm-sles/mysqld.service b/packaging/rpm-sles/mysqld.service new file mode 100644 index 00000000000..78ef3bffe60 --- /dev/null +++ b/packaging/rpm-sles/mysqld.service @@ -0,0 +1,48 @@ +# +# Simple MySQL systemd service file +# +# systemd supports lots of fancy features, look here (and linked docs) for a full list: +# http://www.freedesktop.org/software/systemd/man/systemd.exec.html +# +# Note: this file ( /usr/lib/systemd/system/mysql.service ) +# will be overwritten on package upgrade, please copy the file to +# +# /etc/systemd/system/mysql.service +# +# to make needed changes. +# +# systemd-delta can be used to check differences between the two mysql.service files. +# + +[Unit] +Description=MySQL Community Server +After=network.target +After=syslog.target + +[Install] +WantedBy=multi-user.target +Alias=mysql.service + +[Service] +User=mysql +Group=mysql + +# Execute pre and post scripts as root +PermissionsStartOnly=true + +# Needed to create system tables etc. +ExecStartPre=/usr/bin/mysql-systemd-start pre + +# Start main service +ExecStart=/usr/bin/mysqld_safe + +# Don't signal startup success before a ping works +ExecStartPost=/usr/bin/mysql-systemd-start post + +# Give up if ping don't get an answer +TimeoutSec=600 + +Restart=always +PrivateTmp=false + + From bafba78809ed898990d063cd67ba809a906dbea5 Mon Sep 17 00:00:00 2001 From: Rich Prohaska <prohaska@tokutek.com> Date: Mon, 17 Nov 2014 13:20:47 -0500 Subject: [PATCH 36/99] DB-766 add reproducer --- mysql-test/suite/tokudb.bugs/r/db766.result | 7 +++++++ mysql-test/suite/tokudb.bugs/t/db766.test | 12 ++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 mysql-test/suite/tokudb.bugs/r/db766.result create mode 100644 mysql-test/suite/tokudb.bugs/t/db766.test diff --git a/mysql-test/suite/tokudb.bugs/r/db766.result b/mysql-test/suite/tokudb.bugs/r/db766.result new file mode 100644 index 00000000000..e109b0a7f15 --- /dev/null +++ b/mysql-test/suite/tokudb.bugs/r/db766.result @@ -0,0 +1,7 @@ +set default_storage_engine=TokuDB; +drop table if exists t1; +CREATE TABLE t1(c1 INT,c2 CHAR)PARTITION BY KEY(c1) PARTITIONS 5; +insert INTO t1 values(1,1),(2,1),(2,2),(2,3); +ALTER TABLE t1 ADD UNIQUE INDEX i1(c1); +ERROR 23000: Can't write; duplicate key in table 't1' +drop table t1; diff --git a/mysql-test/suite/tokudb.bugs/t/db766.test b/mysql-test/suite/tokudb.bugs/t/db766.test new file mode 100644 index 00000000000..e7d082f4638 --- /dev/null +++ b/mysql-test/suite/tokudb.bugs/t/db766.test @@ -0,0 +1,12 @@ +# reproducer for DB-766 +source include/have_tokudb.inc; +source include/have_partition.inc; +set default_storage_engine=TokuDB; +disable_warnings; +drop table if exists t1; +enable_warnings; +CREATE TABLE t1(c1 INT,c2 CHAR)PARTITION BY KEY(c1) PARTITIONS 5; +insert INTO t1 values(1,1),(2,1),(2,2),(2,3); +--error ER_DUP_KEY +ALTER TABLE t1 ADD UNIQUE INDEX i1(c1); +drop table t1; \ No newline at end of file From 7f7d86bb1f9e51ce06df70cab4d5dc17404ca9d3 Mon Sep 17 00:00:00 2001 From: Rich Prohaska <prohaska@tokutek.com> Date: Mon, 17 Nov 2014 13:36:29 -0500 Subject: [PATCH 37/99] DB-768 test case for 5.6 crash --- mysql-test/suite/tokudb.bugs/r/db768.result | 10 ++++++++++ mysql-test/suite/tokudb.bugs/t/db768.test | 12 ++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 mysql-test/suite/tokudb.bugs/r/db768.result create mode 100644 mysql-test/suite/tokudb.bugs/t/db768.test diff --git a/mysql-test/suite/tokudb.bugs/r/db768.result b/mysql-test/suite/tokudb.bugs/r/db768.result new file mode 100644 index 00000000000..f302114b45c --- /dev/null +++ b/mysql-test/suite/tokudb.bugs/r/db768.result @@ -0,0 +1,10 @@ +set default_storage_engine='tokudb'; +drop table if exists t; +create table t (id int primary key); +set autocommit=OFF; +lock tables t write; +optimize table t; +Table Op Msg_type Msg_text +test.t optimize status OK +unlock tables; +drop table t; diff --git a/mysql-test/suite/tokudb.bugs/t/db768.test b/mysql-test/suite/tokudb.bugs/t/db768.test new file mode 100644 index 00000000000..be2155f5c18 --- /dev/null +++ b/mysql-test/suite/tokudb.bugs/t/db768.test @@ -0,0 +1,12 @@ +# test case for DB-768 +source include/have_tokudb.inc; +set default_storage_engine='tokudb'; +disable_warnings; +drop table if exists t; +enable_warnings; +create table t (id int primary key); +set autocommit=OFF; +lock tables t write; +optimize table t; +unlock tables; +drop table t; From ea9bd89327d5fcbf30ca24b0c852e1fce03dd3da Mon Sep 17 00:00:00 2001 From: Rich Prohaska <prohaska@tokutek.com> Date: Mon, 17 Nov 2014 14:57:06 -0500 Subject: [PATCH 38/99] DB-770 tokudb::extra HA_EXTRA_NOT_USED should explicitly do nothing --- storage/tokudb/ha_tokudb.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/storage/tokudb/ha_tokudb.cc b/storage/tokudb/ha_tokudb.cc index a7b81319b5e..e6b63b5e69e 100644 --- a/storage/tokudb/ha_tokudb.cc +++ b/storage/tokudb/ha_tokudb.cc @@ -5980,6 +5980,8 @@ int ha_tokudb::extra(enum ha_extra_function operation) { case HA_EXTRA_NO_IGNORE_NO_KEY: using_ignore_no_key = false; break; + case HA_EXTRA_NOT_USED: + break; // must do nothing and return 0 default: break; } From 412be21f5a7e20e1dbc54f941aebb864e4cbcb41 Mon Sep 17 00:00:00 2001 From: Rich Prohaska <prohaska@tokutek.com> Date: Wed, 19 Nov 2014 12:31:34 -0500 Subject: [PATCH 39/99] DB-762 create tokudb trx when needed in tokudb::start_stmt --- mysql-test/suite/tokudb.bugs/r/db762.result | 7 +++++++ mysql-test/suite/tokudb.bugs/t/db762.test | 13 +++++++++++++ storage/tokudb/ha_tokudb.cc | 6 +++++- 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 mysql-test/suite/tokudb.bugs/r/db762.result create mode 100644 mysql-test/suite/tokudb.bugs/t/db762.test diff --git a/mysql-test/suite/tokudb.bugs/r/db762.result b/mysql-test/suite/tokudb.bugs/r/db762.result new file mode 100644 index 00000000000..159957dba3e --- /dev/null +++ b/mysql-test/suite/tokudb.bugs/r/db762.result @@ -0,0 +1,7 @@ +drop table if exists t1,t2; +create table t1 (x int) engine=innodb; +lock table t1 read; +create temporary table t2 (x int) engine=tokudb; +insert into t2 values (1); +unlock tables; +drop table t1, t2; diff --git a/mysql-test/suite/tokudb.bugs/t/db762.test b/mysql-test/suite/tokudb.bugs/t/db762.test new file mode 100644 index 00000000000..4428e9df8ec --- /dev/null +++ b/mysql-test/suite/tokudb.bugs/t/db762.test @@ -0,0 +1,13 @@ +# test for DB-762 and DB-767 +source include/have_tokudb.inc; +source include/have_innodb.inc; +disable_warnings; +drop table if exists t1,t2; +enable_warnings; +create table t1 (x int) engine=innodb; +lock table t1 read; +create temporary table t2 (x int) engine=tokudb; +insert into t2 values (1); +unlock tables; +drop table t1, t2; + diff --git a/storage/tokudb/ha_tokudb.cc b/storage/tokudb/ha_tokudb.cc index e6b63b5e69e..d5168150298 100644 --- a/storage/tokudb/ha_tokudb.cc +++ b/storage/tokudb/ha_tokudb.cc @@ -6227,7 +6227,11 @@ int ha_tokudb::start_stmt(THD * thd, thr_lock_type lock_type) { int error = 0; tokudb_trx_data *trx = (tokudb_trx_data *) thd_get_ha_data(thd, tokudb_hton); - DBUG_ASSERT(trx); + if (!trx) { + error = create_tokudb_trx_data_instance(&trx); + if (error) { goto cleanup; } + thd_set_ha_data(thd, tokudb_hton, trx); + } /* note that trx->stmt may have been already initialized as start_stmt() From eb13e2b40d6a2fb847cf413fa29cf089e53e64d1 Mon Sep 17 00:00:00 2001 From: Rich Prohaska <prohaska@tokutek.com> Date: Fri, 21 Nov 2014 07:13:07 -0500 Subject: [PATCH 40/99] DB-771 fix incorrect assert in update callback for varchar expansion --- mysql-test/suite/tokudb.bugs/r/db771.result | 11 +++++++++++ mysql-test/suite/tokudb.bugs/t/db771.test | 13 +++++++++++++ .../suite/tokudb/r/change_column_varchar.result | 1 + .../suite/tokudb/t/change_column_varchar.test | 1 + storage/tokudb/tokudb_update_fun.cc | 2 +- 5 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 mysql-test/suite/tokudb.bugs/r/db771.result create mode 100644 mysql-test/suite/tokudb.bugs/t/db771.test diff --git a/mysql-test/suite/tokudb.bugs/r/db771.result b/mysql-test/suite/tokudb.bugs/r/db771.result new file mode 100644 index 00000000000..3fc012a732f --- /dev/null +++ b/mysql-test/suite/tokudb.bugs/r/db771.result @@ -0,0 +1,11 @@ +set default_storage_engine=tokudb; +drop table if exists t1; +CREATE TABLE t1 (a int key, b varchar(32), c varchar(32)); +REPLACE t1 SET a = 4; +ALTER TABLE t1 CHANGE COLUMN c c VARCHAR(500); +update t1 set b='hi'; +update t1 set c='there'; +select * from t1; +a b c +4 hi there +drop table t1; diff --git a/mysql-test/suite/tokudb.bugs/t/db771.test b/mysql-test/suite/tokudb.bugs/t/db771.test new file mode 100644 index 00000000000..039ad7471c1 --- /dev/null +++ b/mysql-test/suite/tokudb.bugs/t/db771.test @@ -0,0 +1,13 @@ +# test case for DB-771 +source include/have_tokudb.inc; +set default_storage_engine=tokudb; +disable_warnings; +drop table if exists t1; +enable_warnings; +CREATE TABLE t1 (a int key, b varchar(32), c varchar(32)); +REPLACE t1 SET a = 4; +ALTER TABLE t1 CHANGE COLUMN c c VARCHAR(500); +update t1 set b='hi'; +update t1 set c='there'; +select * from t1; +drop table t1; diff --git a/mysql-test/suite/tokudb/r/change_column_varchar.result b/mysql-test/suite/tokudb/r/change_column_varchar.result index a9cb5e57a36..2e7da5ed5ef 100644 --- a/mysql-test/suite/tokudb/r/change_column_varchar.result +++ b/mysql-test/suite/tokudb/r/change_column_varchar.result @@ -6,6 +6,7 @@ Table Create Table t CREATE TABLE `t` ( `a` varchar(1) DEFAULT NULL ) ENGINE=TokuDB DEFAULT CHARSET=latin1 +INSERT INTO t VALUES (null); ALTER TABLE t CHANGE COLUMN a a VARCHAR(2); ALTER TABLE t CHANGE COLUMN a a VARCHAR(2); ALTER TABLE t CHANGE COLUMN a a VARCHAR(3); diff --git a/mysql-test/suite/tokudb/t/change_column_varchar.test b/mysql-test/suite/tokudb/t/change_column_varchar.test index f2b4e3cbf78..6543952ad29 100644 --- a/mysql-test/suite/tokudb/t/change_column_varchar.test +++ b/mysql-test/suite/tokudb/t/change_column_varchar.test @@ -9,6 +9,7 @@ SET SESSION TOKUDB_DISABLE_SLOW_ALTER=ON; CREATE TABLE t (a VARCHAR(1)) ENGINE=TokuDB; SHOW CREATE TABLE t; +INSERT INTO t VALUES (null); # 1->1 let $i=1 diff --git a/storage/tokudb/tokudb_update_fun.cc b/storage/tokudb/tokudb_update_fun.cc index 3ab7510121a..9754dc989a2 100644 --- a/storage/tokudb/tokudb_update_fun.cc +++ b/storage/tokudb/tokudb_update_fun.cc @@ -851,7 +851,7 @@ static int tokudb_expand_variable_offsets( DBT new_val; memset(&new_val, 0, sizeof new_val); if (old_val != NULL) { - assert(offset_start + number_of_offsets < old_val->size); + assert(offset_start + number_of_offsets <= old_val->size); // compute the new val from the old val uchar *old_val_ptr = (uchar *)old_val->data; From 1d7f9ec24ce5cd0bb97873d9a996f155c6d17f99 Mon Sep 17 00:00:00 2001 From: Rich Prohaska <prohaska@tokutek.com> Date: Fri, 21 Nov 2014 16:31:53 -0500 Subject: [PATCH 41/99] DB-775 binlog group commit for 5.6 --- storage/tokudb/hatoku_hton.cc | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/storage/tokudb/hatoku_hton.cc b/storage/tokudb/hatoku_hton.cc index 903d15c7969..438643d13d5 100644 --- a/storage/tokudb/hatoku_hton.cc +++ b/storage/tokudb/hatoku_hton.cc @@ -772,16 +772,31 @@ static void tokudb_cleanup_handlers(tokudb_trx_data *trx, DB_TXN *txn) { } } +#if MYSQL_VERSION_ID >= 50600 +extern "C" enum durability_properties thd_get_durability_property(const MYSQL_THD thd); +#endif + +// Determine if an fsync is used when a transaction is committed. The MySQL durability property +// has precedence over the tokudb commit sync setting as it has a better idea of what is going on. +static bool tokudb_fsync_on_commit(THD *thd) { +#if MYSQL_VERSION_ID >= 50600 + if (thd_get_durability_property(thd) == HA_IGNORE_DURABILITY) + return false; + else +#endif + return THDVAR(thd, commit_sync) != 0; +} + static int tokudb_commit(handlerton * hton, THD * thd, bool all) { TOKUDB_DBUG_ENTER(""); DBUG_PRINT("trans", ("ending transaction %s", all ? "all" : "stmt")); - uint32_t syncflag = THDVAR(thd, commit_sync) ? 0 : DB_TXN_NOSYNC; + uint32_t syncflag = tokudb_fsync_on_commit(thd) ? 0 : DB_TXN_NOSYNC; tokudb_trx_data *trx = (tokudb_trx_data *) thd_get_ha_data(thd, hton); DB_TXN **txn = all ? &trx->all : &trx->stmt; DB_TXN *this_txn = *txn; if (this_txn) { if (tokudb_debug & TOKUDB_DEBUG_TXN) { - TOKUDB_TRACE("commit trx %u txn %p", all, this_txn); + TOKUDB_TRACE("commit trx %u txn %p syncflag %u", all, this_txn, syncflag); } // test hook to induce a crash on a debug build DBUG_EXECUTE_IF("tokudb_crash_commit_before", DBUG_SUICIDE();); From e3ded84b83a501185eaa7ecc9acc346d9ec605c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Lindstr=C3=B6m?= <jplindst@mariadb.org> Date: Tue, 25 Nov 2014 08:22:10 +0200 Subject: [PATCH 42/99] Fix typo. --- storage/innobase/btr/btr0cur.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/innobase/btr/btr0cur.c b/storage/innobase/btr/btr0cur.c index a0fddd7212d..d9884b22da4 100644 --- a/storage/innobase/btr/btr0cur.c +++ b/storage/innobase/btr/btr0cur.c @@ -3793,7 +3793,7 @@ btr_estimate_number_of_different_key_vals( } /* Sanity check */ - ut_ad(n_sample_pages > 0 && n_sample_pages < (index->stat_index_size <= 1 ? 1 : index->stat_index_size)); + ut_ad(n_sample_pages > 0 && n_sample_pages <= (index->stat_index_size <= 1 ? 1 : index->stat_index_size)); /* We sample some pages in the index to get an estimate */ From 89a3628b0bbecb7b810e6c9b43b4f6f33b84600d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Lindstr=C3=B6m?= <jplindst@mariadb.org> Date: Tue, 25 Nov 2014 12:04:32 +0200 Subject: [PATCH 43/99] Better comments part 2 with proof and simplified implementation. Thanks to Daniel Black. --- storage/innobase/btr/btr0cur.c | 56 +++++++++++++++++++++++++--------- storage/xtradb/btr/btr0cur.c | 52 +++++++++++++++++++++++-------- 2 files changed, 80 insertions(+), 28 deletions(-) diff --git a/storage/innobase/btr/btr0cur.c b/storage/innobase/btr/btr0cur.c index d9884b22da4..51dcb498327 100644 --- a/storage/innobase/btr/btr0cur.c +++ b/storage/innobase/btr/btr0cur.c @@ -3718,8 +3718,8 @@ btr_estimate_number_of_different_key_vals( ib_int64_t* n_diff; ib_int64_t* n_not_null; ibool stats_null_not_equal; - ullint n_sample_pages; /* number of pages to sample */ - ulint not_empty_flag = 0; + ullint n_sample_pages = 1; /* number of pages to sample */ + ulint not_empty_flag = 0; ulint total_external_size = 0; ulint i; ulint j; @@ -3770,8 +3770,6 @@ btr_estimate_number_of_different_key_vals( if (srv_stats_sample_pages > index->stat_index_size) { if (index->stat_index_size > 0) { n_sample_pages = index->stat_index_size; - } else { - n_sample_pages = 1; } } else { n_sample_pages = srv_stats_sample_pages; @@ -3779,18 +3777,46 @@ btr_estimate_number_of_different_key_vals( } else { /* New logaritmic number of pages that are estimated. Number of pages estimated should be between 1 and - index->stat_index_size. We pick index->stat_index_size - as maximum and log2(index->stat_index_size)*sr_stats_sample_pages - if between range as minimum.*/ - if (index->stat_index_size > 0) { - n_sample_pages = ut_min(index->stat_index_size, - ut_max(ut_min(srv_stats_sample_pages, - index->stat_index_size), - log2(index->stat_index_size)*srv_stats_sample_pages)); - } else { - n_sample_pages = 1; + index->stat_index_size. + + If we have only 0 or 1 index pages then we can only take 1 + sample. We have already initialized n_sample_pages to 1. + + So taking index size as I and sample as S and log(I)*S as L + + requirement 1) we want the out limit of the expression to not exceed I; + requirement 2) we want the ideal pages to be at least S; + so the current expression is min(I, max( min(S,I), L) + + looking for simplifications: + + case 1: assume S < I + min(I, max( min(S,I), L) -> min(I , max( S, L)) + + but since L=LOG2(I)*S and log2(I) >=1 L>S always so max(S,L) = L. + + so we have: min(I , L) + + case 2: assume I < S + min(I, max( min(S,I), L) -> min(I, max( I, L)) + + case 2a: L > I + min(I, max( I, L)) -> min(I, L) -> I + + case 2b: when L < I + min(I, max( I, L)) -> min(I, I ) -> I + + so taking all case2 paths is I, our expression is: + n_pages = S < I? min(I,L) : I + */ + if (index->stat_index_size > 1) { + n_sample_pages = (srv_stats_sample_pages < index->stat_index_size) ? + ut_min(index->stat_index_size, + log2(index->stat_index_size)*srv_stats_sample_pages) + : index->stat_index_size; + } - } + } /* Sanity check */ ut_ad(n_sample_pages > 0 && n_sample_pages <= (index->stat_index_size <= 1 ? 1 : index->stat_index_size)); diff --git a/storage/xtradb/btr/btr0cur.c b/storage/xtradb/btr/btr0cur.c index 703b0cf6043..be12bf62abd 100644 --- a/storage/xtradb/btr/btr0cur.c +++ b/storage/xtradb/btr/btr0cur.c @@ -3898,7 +3898,7 @@ btr_estimate_number_of_different_key_vals( ib_int64_t* n_diff; ib_int64_t* n_not_null; ibool stats_null_not_equal; - ullint n_sample_pages; /* number of pages to sample */ + ullint n_sample_pages = 1; /* number of pages to sample */ ulint not_empty_flag = 0; ulint total_external_size = 0; ulint i; @@ -3950,8 +3950,6 @@ btr_estimate_number_of_different_key_vals( if (srv_stats_sample_pages > index->stat_index_size) { if (index->stat_index_size > 0) { n_sample_pages = index->stat_index_size; - } else { - n_sample_pages = 1; } } else { n_sample_pages = srv_stats_sample_pages; @@ -3959,16 +3957,44 @@ btr_estimate_number_of_different_key_vals( } else { /* New logaritmic number of pages that are estimated. Number of pages estimated should be between 1 and - index->stat_index_size. We pick index->stat_index_size - as maximum and log2(index->stat_index_size)*sr_stats_sample_pages - if between range as minimum.*/ - if (index->stat_index_size > 0) { - n_sample_pages = ut_min(index->stat_index_size, - ut_max(ut_min(srv_stats_sample_pages, - index->stat_index_size), - log2(index->stat_index_size)*srv_stats_sample_pages)); - } else { - n_sample_pages = 1; + index->stat_index_size. + + If we have only 0 or 1 index pages then we can only take 1 + sample. We have already initialized n_sample_pages to 1. + + So taking index size as I and sample as S and log(I)*S as L + + requirement 1) we want the out limit of the expression to not exceed I; + requirement 2) we want the ideal pages to be at least S; + so the current expression is min(I, max( min(S,I), L) + + looking for simplifications: + + case 1: assume S < I + min(I, max( min(S,I), L) -> min(I , max( S, L)) + + but since L=LOG2(I)*S and log2(I) >=1 L>S always so max(S,L) = L. + + so we have: min(I , L) + + case 2: assume I < S + min(I, max( min(S,I), L) -> min(I, max( I, L)) + + case 2a: L > I + min(I, max( I, L)) -> min(I, L) -> I + + case 2b: when L < I + min(I, max( I, L)) -> min(I, I ) -> I + + so taking all case2 paths is I, our expression is: + n_pages = S < I? min(I,L) : I + */ + if (index->stat_index_size > 1) { + n_sample_pages = (srv_stats_sample_pages < index->stat_index_size) ? + ut_min(index->stat_index_size, + log2(index->stat_index_size)*srv_stats_sample_pages) + : index->stat_index_size; + } } From 3985316b714b2262db398b3845fffb0a6008e84b Mon Sep 17 00:00:00 2001 From: Rich Prohaska <prohaska@tokutek.com> Date: Wed, 26 Nov 2014 14:45:40 -0500 Subject: [PATCH 44/99] update the README to include 7.5.3 and percona server --- README.md | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index dc7362a5124..57ce296e0ef 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,10 @@ TokuDB ====== -TokuDB is a high-performance, write optimized, transactional storage engine for MySQL and -MariaDB. For more details, see our [product page][products]. +TokuDB is a high-performance, write optimized, transactional storage engine for MySQL, MariaDB, and Percona Server. +For more details, see our [product page][products]. -This repository contains the MySQL plugin that uses the [TokuFT][tokuft] -core. +This repository contains the MySQL plugin that uses the [TokuFT][tokuft] core. There are also patches to the MySQL and MariaDB kernels, available in our forks of [mysql][mysql] and [mariadb][mariadb]. @@ -15,7 +14,6 @@ forks of [mysql][mysql] and [mariadb][mariadb]. [mysql]: http://github.com/Tokutek/mysql [mariadb]: http://github.com/Tokutek/mariadb - Building -------- @@ -24,14 +22,14 @@ working MySQL or MariaDB with Tokutek patches, and with the TokuDB storage engine, called `make.mysql.bash`. This script will download copies of the needed source code from github and build everything. -To build MySQL 5.5.39 with TokuDB 7.5.2: +To build MySQL 5.5.40 with TokuDB 7.5.3: ```sh -scripts/make.mysql.bash --mysqlbuild=mysql-5.5.39-tokudb-7.5.2-linux-x86_64 +scripts/make.mysql.bash --mysqlbuild=mysql-5.5.40-tokudb-7.5.3-linux-x86_64 ``` -To build MariaDB 5.5.39 with TokuDB 7.5.2: +To build MariaDB 5.5.40 with TokuDB 7.5.3: ```sh -scripts/make.mysql.bash --mysqlbuild=mariadb-5.5.39-tokudb-7.5.2-linux-x86_64 +scripts/make.mysql.bash --mysqlbuild=mariadb-5.5.40-tokudb-7.5.3-linux-x86_64 ``` Before you start, make sure you have a C++11-compatible compiler (GCC >= @@ -74,7 +72,7 @@ License TokuDB is available under the GPL version 2. See [COPYING][copying] -The TokuKV component of TokuDB is available under the GPL version 2, with +The TokuFT component of TokuDB is available under the GPL version 2, with slight modifications. See [README-TOKUDB][license]. [copying]: http://github.com/Tokutek/tokudb-engine/blob/master/COPYING From 1152fc8451c19bbf8a3125a18e9a0fbab7ac4a8f Mon Sep 17 00:00:00 2001 From: Rich Prohaska <prohaska@tokutek.com> Date: Wed, 26 Nov 2014 15:01:11 -0500 Subject: [PATCH 45/99] Add download links to README.md --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index 57ce296e0ef..70cda08b336 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,14 @@ forks of [mysql][mysql] and [mariadb][mariadb]. [mysql]: http://github.com/Tokutek/mysql [mariadb]: http://github.com/Tokutek/mariadb +Downloading +----------- + +* [MySQL 5.5.40 + TokuDB](http://www.tokutek.com/tokudb-for-mysql/download-community/) +* [MariaDB 5.5.40 + TokuDB](http://www.tokutek.com/tokudb-for-mysql/download-community/) +* [MariaDB 10.0.15 + TokuDB](https://downloads.mariadb.org/mariadb/10.0.15/) +* [Percona Server 5.6.21 + TokuDB](http://www.percona.com/downloads/) + Building -------- From 76d3acf759575d6db5e899469df8d8f885530ee5 Mon Sep 17 00:00:00 2001 From: Rich Prohaska <prohaska@tokutek.com> Date: Wed, 26 Nov 2014 15:06:55 -0500 Subject: [PATCH 46/99] generalize download links --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 70cda08b336..2454295b1f0 100644 --- a/README.md +++ b/README.md @@ -17,10 +17,10 @@ forks of [mysql][mysql] and [mariadb][mariadb]. Downloading ----------- -* [MySQL 5.5.40 + TokuDB](http://www.tokutek.com/tokudb-for-mysql/download-community/) -* [MariaDB 5.5.40 + TokuDB](http://www.tokutek.com/tokudb-for-mysql/download-community/) -* [MariaDB 10.0.15 + TokuDB](https://downloads.mariadb.org/mariadb/10.0.15/) -* [Percona Server 5.6.21 + TokuDB](http://www.percona.com/downloads/) +* [MySQL 5.5 + TokuDB](http://www.tokutek.com/tokudb-for-mysql/download-community/) +* [MariaDB 5.5 + TokuDB](http://www.tokutek.com/tokudb-for-mysql/download-community/) +* [MariaDB 10.0 + TokuDB](https://downloads.mariadb.org/) +* [Percona Server 5.6 + TokuDB](http://www.percona.com/downloads/) Building -------- From 088a2585a6894329a7f58b4e2059379805c19db9 Mon Sep 17 00:00:00 2001 From: Rich Prohaska <prohaska@tokutek.com> Date: Wed, 26 Nov 2014 16:09:21 -0500 Subject: [PATCH 47/99] point to JIRA for bugs --- README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 2454295b1f0..2ab2e21a5a1 100644 --- a/README.md +++ b/README.md @@ -14,16 +14,16 @@ forks of [mysql][mysql] and [mariadb][mariadb]. [mysql]: http://github.com/Tokutek/mysql [mariadb]: http://github.com/Tokutek/mariadb -Downloading ------------ +Download +-------- * [MySQL 5.5 + TokuDB](http://www.tokutek.com/tokudb-for-mysql/download-community/) * [MariaDB 5.5 + TokuDB](http://www.tokutek.com/tokudb-for-mysql/download-community/) * [MariaDB 10.0 + TokuDB](https://downloads.mariadb.org/) * [Percona Server 5.6 + TokuDB](http://www.percona.com/downloads/) -Building --------- +Build +----- The `scripts/` directory contains a script that can be used to build a working MySQL or MariaDB with Tokutek patches, and with the TokuDB storage @@ -60,10 +60,10 @@ scripts/make.mysql.debug.env.bash ``` -Contributing ------------- +Contribute +---------- -Please report bugs in TokuDB here on github. +Please report TokuDB bugs at https://tokutek.atlassian.net/browse/DB. We have two publicly accessible mailing lists: @@ -72,7 +72,7 @@ We have two publicly accessible mailing lists: - tokudb-dev@googlegroups.com is for discussion of the development of TokuDB. -We are also available on IRC on freenode.net, in the #tokutek channel. +We are on IRC on freenode.net, in the #tokutek channel. License From c88eed4b3ec1f8a2a35040dc01806bcca8c09ff4 Mon Sep 17 00:00:00 2001 From: Rich Prohaska <prohaska@tokutek.com> Date: Fri, 28 Nov 2014 08:53:03 -0500 Subject: [PATCH 48/99] DB-755 speed up 5585.test --- mysql-test/suite/tokudb.bugs/t/5585-master.opt | 1 + 1 file changed, 1 insertion(+) create mode 100644 mysql-test/suite/tokudb.bugs/t/5585-master.opt diff --git a/mysql-test/suite/tokudb.bugs/t/5585-master.opt b/mysql-test/suite/tokudb.bugs/t/5585-master.opt new file mode 100644 index 00000000000..017432e797d --- /dev/null +++ b/mysql-test/suite/tokudb.bugs/t/5585-master.opt @@ -0,0 +1 @@ +--tokudb-cache-size=1000000000 --innodb-buffer-pool-size=1000000000 From e0c71a9ab85bbcf101442663baffbf78df928236 Mon Sep 17 00:00:00 2001 From: Elena Stepanova <elenst@montyprogram.com> Date: Tue, 2 Dec 2014 01:31:49 +0400 Subject: [PATCH 49/99] MDEV-7169: innodb.innodb_bug14147491 fails in buildbot on Windows Applied the fix previously pushed into 10.0. Initial Jan's commit comment: Problem is that test could open Microsoft C++ Client Debugger windows with abort exception. Lets not try to test this on windows. --- mysql-test/suite/innodb/t/innodb_bug14147491.test | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mysql-test/suite/innodb/t/innodb_bug14147491.test b/mysql-test/suite/innodb/t/innodb_bug14147491.test index 050f7fbdd73..6f0bfca8e1d 100644 --- a/mysql-test/suite/innodb/t/innodb_bug14147491.test +++ b/mysql-test/suite/innodb/t/innodb_bug14147491.test @@ -12,6 +12,9 @@ source include/not_embedded.inc; source include/have_innodb.inc; # Require Debug for SET DEBUG source include/have_debug.inc; +# Test could open crash reporter on Windows +# if compiler set up +source include/not_windows.inc; CALL mtr.add_suppression("InnoDB: Error: Unable to read tablespace .* page no .* into the buffer pool after 100 attempts"); CALL mtr.add_suppression("InnoDB: Warning: database page corruption or a failed"); From e544bcd16df5d8126abdac4cf0a26137787f1249 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Lindstr=C3=B6m?= <jplindst@mariadb.org> Date: Tue, 2 Dec 2014 12:19:29 +0200 Subject: [PATCH 50/99] MDEV-7243: innodb-change-buffer-recovery fails on windows Problem is that on Windows command "perl" failed with error: 255 my_errno: 0 errno: 0. Do not run on Windows. --- mysql-test/suite/innodb/t/innodb-change-buffer-recovery.test | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mysql-test/suite/innodb/t/innodb-change-buffer-recovery.test b/mysql-test/suite/innodb/t/innodb-change-buffer-recovery.test index f54189a5cad..83d2b07b725 100644 --- a/mysql-test/suite/innodb/t/innodb-change-buffer-recovery.test +++ b/mysql-test/suite/innodb/t/innodb-change-buffer-recovery.test @@ -9,6 +9,8 @@ --source include/not_embedded.inc # DBUG_SUICIDE() hangs under valgrind --source include/not_valgrind.inc +# No windows, need perl +--source include/not_windows.inc # The flag innodb_change_buffering_debug is only available in debug builds. # It instructs InnoDB to try to evict pages from the buffer pool when From df20184c0385f6fe818689d8b3136a55f17e016c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Lindstr=C3=B6m?= <jplindst@mariadb.org> Date: Wed, 3 Dec 2014 13:38:39 +0200 Subject: [PATCH 51/99] MDEV-7252: Test failure on innodb.innodb_bug12400341 at Windows Problem is that there could be undo slots from previous runs. --- mysql-test/suite/innodb/t/innodb_bug12400341.test | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mysql-test/suite/innodb/t/innodb_bug12400341.test b/mysql-test/suite/innodb/t/innodb_bug12400341.test index ab69e20c495..68daad46145 100644 --- a/mysql-test/suite/innodb/t/innodb_bug12400341.test +++ b/mysql-test/suite/innodb/t/innodb_bug12400341.test @@ -10,6 +10,8 @@ if (`select count(*)=0 from information_schema.global_variables where variable_n # Don't test under valgrind, undo slots of the previous test might exist still # and cause unstable result. --source include/not_valgrind.inc +# undo slots of the previous test might exist still +--source include/not_windows.inc call mtr.add_suppression("InnoDB: Warning: cannot find a free slot for an undo log. Do you have too"); From ed313e8a92a836422b9ae7b9ecf11c44ed4d5d66 Mon Sep 17 00:00:00 2001 From: Sergey Vojtovich <svoj@mariadb.org> Date: Mon, 1 Dec 2014 14:58:29 +0400 Subject: [PATCH 52/99] MDEV-7148 - Recurring: InnoDB: Failing assertion: !lock->recursive On PPC64 high-loaded server may crash due to assertion failure in InnoDB rwlocks code. This happened because load order between "recursive" and "writer_thread" wasn't properly enforced. --- storage/innobase/include/sync0rw.ic | 7 ++++++- storage/innobase/sync/sync0rw.c | 11 +++++++---- storage/xtradb/include/sync0rw.ic | 7 ++++++- storage/xtradb/sync/sync0rw.c | 11 +++++++---- 4 files changed, 26 insertions(+), 10 deletions(-) diff --git a/storage/innobase/include/sync0rw.ic b/storage/innobase/include/sync0rw.ic index a25aa19d3aa..a7d81e4b031 100644 --- a/storage/innobase/include/sync0rw.ic +++ b/storage/innobase/include/sync0rw.ic @@ -438,6 +438,7 @@ rw_lock_x_lock_func_nowait( os_thread_id_t curr_thread = os_thread_get_curr_id(); ibool success; + ibool local_recursive= lock->recursive; #ifdef INNODB_RW_LOCKS_USE_ATOMICS success = os_compare_and_swap_lint(&lock->lock_word, X_LOCK_DECR, 0); @@ -452,10 +453,14 @@ rw_lock_x_lock_func_nowait( mutex_exit(&(lock->mutex)); #endif + /* Note: recursive must be loaded before writer_thread see + comment for rw_lock_set_writer_id_and_recursion_flag(). + To achieve this we load it before os_compare_and_swap_lint(), + which implies full memory barrier in current implementation. */ if (success) { rw_lock_set_writer_id_and_recursion_flag(lock, TRUE); - } else if (lock->recursive + } else if (local_recursive && os_thread_eq(lock->writer_thread, curr_thread)) { /* Relock: this lock_word modification is safe since no other threads can modify (lock, unlock, or reserve) lock_word while diff --git a/storage/innobase/sync/sync0rw.c b/storage/innobase/sync/sync0rw.c index 50531455a4c..5600db855b4 100644 --- a/storage/innobase/sync/sync0rw.c +++ b/storage/innobase/sync/sync0rw.c @@ -566,6 +566,7 @@ rw_lock_x_lock_low( ulint line) /*!< in: line where requested */ { os_thread_id_t curr_thread = os_thread_get_curr_id(); + ibool local_recursive= lock->recursive; if (rw_lock_lock_word_decr(lock, X_LOCK_DECR)) { @@ -586,10 +587,12 @@ rw_lock_x_lock_low( file_name, line); } else { - if (!pass) - os_rmb; - /* Decrement failed: relock or failed lock */ - if (!pass && lock->recursive + /* Decrement failed: relock or failed lock + Note: recursive must be loaded before writer_thread see + comment for rw_lock_set_writer_id_and_recursion_flag(). + To achieve this we load it before rw_lock_lock_word_decr(), + which implies full memory barrier in current implementation. */ + if (!pass && local_recursive && os_thread_eq(lock->writer_thread, curr_thread)) { /* Relock */ lock->lock_word -= X_LOCK_DECR; diff --git a/storage/xtradb/include/sync0rw.ic b/storage/xtradb/include/sync0rw.ic index 08baee30670..031c57aff0d 100644 --- a/storage/xtradb/include/sync0rw.ic +++ b/storage/xtradb/include/sync0rw.ic @@ -438,6 +438,7 @@ rw_lock_x_lock_func_nowait( os_thread_id_t curr_thread = os_thread_get_curr_id(); ibool success; + ibool local_recursive= lock->recursive; #ifdef INNODB_RW_LOCKS_USE_ATOMICS success = os_compare_and_swap_lint(&lock->lock_word, X_LOCK_DECR, 0); @@ -452,10 +453,14 @@ rw_lock_x_lock_func_nowait( mutex_exit(&(lock->mutex)); #endif + /* Note: recursive must be loaded before writer_thread see + comment for rw_lock_set_writer_id_and_recursion_flag(). + To achieve this we load it before os_compare_and_swap_lint(), + which implies full memory barrier in current implementation. */ if (success) { rw_lock_set_writer_id_and_recursion_flag(lock, TRUE); - } else if (lock->recursive + } else if (local_recursive && os_thread_eq(lock->writer_thread, curr_thread)) { /* Relock: this lock_word modification is safe since no other threads can modify (lock, unlock, or reserve) lock_word while diff --git a/storage/xtradb/sync/sync0rw.c b/storage/xtradb/sync/sync0rw.c index a37190e83a6..156c3fd9ad5 100644 --- a/storage/xtradb/sync/sync0rw.c +++ b/storage/xtradb/sync/sync0rw.c @@ -563,6 +563,7 @@ rw_lock_x_lock_low( ulint line) /*!< in: line where requested */ { os_thread_id_t curr_thread = os_thread_get_curr_id(); + ibool local_recursive= lock->recursive; if (rw_lock_lock_word_decr(lock, X_LOCK_DECR)) { @@ -583,10 +584,12 @@ rw_lock_x_lock_low( file_name, line); } else { - if (!pass) - os_rmb; - /* Decrement failed: relock or failed lock */ - if (!pass && lock->recursive + /* Decrement failed: relock or failed lock + Note: recursive must be loaded before writer_thread see + comment for rw_lock_set_writer_id_and_recursion_flag(). + To achieve this we load it before rw_lock_lock_word_decr(), + which implies full memory barrier in current implementation. */ + if (!pass && local_recursive && os_thread_eq(lock->writer_thread, curr_thread)) { /* Relock */ lock->lock_word -= X_LOCK_DECR; From 955cce52f65d119d9295384e5b4b8e657d324cc5 Mon Sep 17 00:00:00 2001 From: Rich Prohaska <prohaska@tokutek.com> Date: Sun, 7 Dec 2014 13:17:45 -0500 Subject: [PATCH 53/99] run on mariadb 10 with its safe malloc --- storage/tokudb/ha_tokudb.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/tokudb/ha_tokudb.cc b/storage/tokudb/ha_tokudb.cc index d5168150298..578b6c01856 100644 --- a/storage/tokudb/ha_tokudb.cc +++ b/storage/tokudb/ha_tokudb.cc @@ -1731,7 +1731,7 @@ int ha_tokudb::initialize_share(const char* name, int mode) { // initialize cardinality info from the status dictionary share->n_rec_per_key = tokudb::compute_total_key_parts(table_share); - share->rec_per_key = (uint64_t *) tokudb_my_realloc(share->rec_per_key, share->n_rec_per_key * sizeof (uint64_t), MYF(MY_FAE)); + share->rec_per_key = (uint64_t *) tokudb_my_realloc(share->rec_per_key, share->n_rec_per_key * sizeof (uint64_t), MYF(MY_FAE + MY_ALLOW_ZERO_PTR)); error = tokudb::get_card_from_status(share->status_block, txn, share->n_rec_per_key, share->rec_per_key); if (error) { for (uint i = 0; i < share->n_rec_per_key; i++) From 6c8963e9eabed623ecad1b385b4f8a0f0e970966 Mon Sep 17 00:00:00 2001 From: Rich Prohaska <prohaska@tokutek.com> Date: Thu, 11 Dec 2014 19:59:48 -0500 Subject: [PATCH 54/99] relax the time constraints on the bulk fetch tests --- mysql-test/suite/tokudb/t/bf_create_select.test | 8 ++++---- .../suite/tokudb/t/bf_create_select_range_part.test | 8 ++++---- mysql-test/suite/tokudb/t/bf_create_temp_select.test | 8 ++++---- mysql-test/suite/tokudb/t/bf_delete.test | 7 +++---- mysql-test/suite/tokudb/t/bf_insert_select.test | 6 +++--- mysql-test/suite/tokudb/t/bf_insert_select_dup_key.test | 8 ++++---- mysql-test/suite/tokudb/t/bf_replace_select.test | 6 +++--- 7 files changed, 25 insertions(+), 26 deletions(-) diff --git a/mysql-test/suite/tokudb/t/bf_create_select.test b/mysql-test/suite/tokudb/t/bf_create_select.test index 20455da874f..c8ff2615c7c 100644 --- a/mysql-test/suite/tokudb/t/bf_create_select.test +++ b/mysql-test/suite/tokudb/t/bf_create_select.test @@ -65,8 +65,8 @@ while ($i < $maxq) { let $time_elapsed_off = `select unix_timestamp() - $s`; -# Check that the time with bulk fetch off is at least twice that whith bulk fetch on -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 2 * $time_elapsed_on`; +# Check that the time with bulk fetch off is at least 1.5 times that with bulk fetch on +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 1.5 * $time_elapsed_on`; echo $verdict; if ($debug) { echo index $verdict $time_elapsed_on $time_elapsed_off; } if (!$verdict) { echo index $time_elapsed_on $time_elapsed_off; } @@ -94,8 +94,8 @@ while ($i < $maxq) { let $time_elapsed_off = `select unix_timestamp() - $s`; -# Check that the time with bulk fetch off is at least twice that whith bulk fetch on -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 2 * $time_elapsed_on`; +# Check that the time with bulk fetch off is at least 1.5 times that with bulk fetch on +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 1.5 * $time_elapsed_on`; echo $verdict; if ($debug) { echo range $verdict $time_elapsed_on $time_elapsed_off; } if (!$verdict) { echo range $time_elapsed_on $time_elapsed_off; } diff --git a/mysql-test/suite/tokudb/t/bf_create_select_range_part.test b/mysql-test/suite/tokudb/t/bf_create_select_range_part.test index b66b2c42808..e2ec066aad1 100644 --- a/mysql-test/suite/tokudb/t/bf_create_select_range_part.test +++ b/mysql-test/suite/tokudb/t/bf_create_select_range_part.test @@ -72,8 +72,8 @@ while ($i < $maxq) { } let $time_elapsed_off = `select unix_timestamp() - $s`; -# check that bulk fetch on is at least 2 times faster than bulk fetch off -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 2 * $time_elapsed_on`; +# check that bulk fetch on is at least 1.5 times faster than bulk fetch off +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 1.5 * $time_elapsed_on`; echo $verdict; if ($debug) { echo index $verdict $time_elapsed_off $time_elapsed_on; } if (!$verdict) { echo index $time_elapsed_off $time_elapsed_on; } @@ -100,8 +100,8 @@ while ($i < $maxq) { } let $time_elapsed_off = `select unix_timestamp() - $s`; -# check that bulk fetch on is at least 2 times faster than bulk fetch off -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 2 * $time_elapsed_on`; +# check that bulk fetch on is at least 1.5 times faster than bulk fetch off +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 1.5 * $time_elapsed_on`; echo $verdict; if ($debug) { echo range $verdict $time_elapsed_off $time_elapsed_on; } if (!$verdict) { echo range $time_elapsed_off $time_elapsed_on; } diff --git a/mysql-test/suite/tokudb/t/bf_create_temp_select.test b/mysql-test/suite/tokudb/t/bf_create_temp_select.test index 52cb886a410..1a373277960 100644 --- a/mysql-test/suite/tokudb/t/bf_create_temp_select.test +++ b/mysql-test/suite/tokudb/t/bf_create_temp_select.test @@ -65,8 +65,8 @@ while ($i < $maxq) { let $time_elapsed_off = `select unix_timestamp() - $s`; -# Check that the time with bulk fetch off is at least twice that whith bulk fetch on -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 2 * $time_elapsed_on`; +# Check that the time with bulk fetch off is at least 1.5 times that with bulk fetch on +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 1.5 * $time_elapsed_on`; echo $verdict; if ($debug) { echo index $verdict $time_elapsed_on $time_elapsed_off; } if (!$verdict) { echo index $time_elapsed_on $time_elapsed_off; } @@ -94,8 +94,8 @@ while ($i < $maxq) { let $time_elapsed_off = `select unix_timestamp() - $s`; -# Check that the time with bulk fetch off is at least twice that whith bulk fetch on -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 2 * $time_elapsed_on`; +# Check that the time with bulk fetch off is at least 1.5 times that with bulk fetch on +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 1.5 * $time_elapsed_on`; echo $verdict; if ($debug) { echo range $verdict $time_elapsed_on $time_elapsed_off; } if (!$verdict) { echo range $time_elapsed_on $time_elapsed_off; } diff --git a/mysql-test/suite/tokudb/t/bf_delete.test b/mysql-test/suite/tokudb/t/bf_delete.test index f98e87f1ec1..cd7cd60f174 100644 --- a/mysql-test/suite/tokudb/t/bf_delete.test +++ b/mysql-test/suite/tokudb/t/bf_delete.test @@ -1,5 +1,4 @@ -# Verify that index scans for delete statements use bulk fetch and are -# at least twice as fast +# Verify that index scans for delete statements use bulk fetch are faster than when not using bulk fetch source include/have_tokudb.inc; source include/big_test.inc; @@ -62,8 +61,8 @@ while ($i < $maxq) { } let $time_elapsed_bf_off = `select unix_timestamp() - $s`; -# verify that a delete scan with bulk fetch ON is at least 2 times faster than with bulk fetch OFF -let $verdict = `select $time_elapsed_bf_on > 0 && $time_elapsed_bf_off >= 2 * $time_elapsed_bf_on`; +# verify that a delete scan with bulk fetch ON is at least 1.5 times faster than with bulk fetch OFF +let $verdict = `select $time_elapsed_bf_on > 0 && $time_elapsed_bf_off >= 1.5 * $time_elapsed_bf_on`; echo $verdict; if ($debug) { echo range $verdict $time_elapsed_bf_on $time_elapsed_bf_off; } if (!$verdict) { echo range $time_elapsed_bf_on $time_elapsed_bf_off; } diff --git a/mysql-test/suite/tokudb/t/bf_insert_select.test b/mysql-test/suite/tokudb/t/bf_insert_select.test index 5fcb8fa58b5..17852b4262a 100644 --- a/mysql-test/suite/tokudb/t/bf_insert_select.test +++ b/mysql-test/suite/tokudb/t/bf_insert_select.test @@ -66,8 +66,8 @@ while ($i < $maxq) { } let $time_elapsed_off = `select unix_timestamp() - $s`; -# check that bulk fetch on is at least 2 times faster than bulk fetch off -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 2 * $time_elapsed_on`; +# check that bulk fetch on is at least 1.5 times faster than bulk fetch off +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 1.5 * $time_elapsed_on`; echo $verdict; if ($debug) { echo index $verdict $time_elapsed_off $time_elapsed_on; } if (!$verdict) { echo index $time_elapsed_off $time_elapsed_on; } @@ -92,7 +92,7 @@ while ($i < $maxq) { } let $time_elapsed_off = `select unix_timestamp() - $s`; -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 2 * $time_elapsed_on`; +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 1.5 * $time_elapsed_on`; echo $verdict; if ($debug) { echo range $verdict $time_elapsed_off $time_elapsed_on; } if (!$verdict) { echo range $time_elapsed_off $time_elapsed_on; } diff --git a/mysql-test/suite/tokudb/t/bf_insert_select_dup_key.test b/mysql-test/suite/tokudb/t/bf_insert_select_dup_key.test index 51c6d66d706..876eb636aae 100644 --- a/mysql-test/suite/tokudb/t/bf_insert_select_dup_key.test +++ b/mysql-test/suite/tokudb/t/bf_insert_select_dup_key.test @@ -70,8 +70,8 @@ while ($i < $maxq) { } let $time_elapsed_off = `select unix_timestamp() - $s`; -# check that bulk fetch on is at least 2 times faster than bulk fetch off -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 2 * $time_elapsed_on`; +# check that bulk fetch on is at least 1.5 times faster than bulk fetch off +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 1.5 * $time_elapsed_on`; echo $verdict; if ($debug) { echo index $verdict $time_elapsed_off $time_elapsed_on; } if (!$verdict) { echo index $time_elapsed_off $time_elapsed_on; } @@ -96,8 +96,8 @@ while ($i < $maxq) { } let $time_elapsed_off = `select unix_timestamp() - $s`; -# check that bulk fetch on is at least 2 times faster than bulk fetch off -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 2 * $time_elapsed_on`; +# check that bulk fetch on is at least 1.5 times faster than bulk fetch off +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 1.5 * $time_elapsed_on`; echo $verdict; if ($debug) { echo range $verdict $time_elapsed_off $time_elapsed_on; } if (!$verdict) { echo range $time_elapsed_off $time_elapsed_on; } diff --git a/mysql-test/suite/tokudb/t/bf_replace_select.test b/mysql-test/suite/tokudb/t/bf_replace_select.test index 1ca754454eb..30a03e3ebfe 100644 --- a/mysql-test/suite/tokudb/t/bf_replace_select.test +++ b/mysql-test/suite/tokudb/t/bf_replace_select.test @@ -66,8 +66,8 @@ while ($i < $maxq) { } let $time_elapsed_off = `select unix_timestamp() - $s`; -# check that bulk fetch on is at least 2 times faster than bulk fetch off -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 2 * $time_elapsed_on`; +# check that bulk fetch on is at least 1.5 times faster than bulk fetch off +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 1.5 * $time_elapsed_on`; echo $verdict; if ($debug) { echo index $verdict $time_elapsed_off $time_elapsed_on; } if (!$verdict) { echo index $time_elapsed_off $time_elapsed_on; } @@ -92,7 +92,7 @@ while ($i < $maxq) { } let $time_elapsed_off = `select unix_timestamp() - $s`; -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 2 * $time_elapsed_on`; +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 1.5 * $time_elapsed_on`; echo $verdict; if ($debug) { echo range $verdict $time_elapsed_off $time_elapsed_on; } if (!$verdict) { echo range $time_elapsed_off $time_elapsed_on; } From 71764ccb4eaa3f05a9e739931fb6d915bb75f0ff Mon Sep 17 00:00:00 2001 From: Rich Prohaska <prohaska@tokutek.com> Date: Fri, 12 Dec 2014 09:21:08 -0500 Subject: [PATCH 55/99] relax the time constraints on the bulk fetch tests again --- mysql-test/suite/tokudb/t/bf_create_select.test | 8 ++++---- mysql-test/suite/tokudb/t/bf_create_select_hash_part.test | 8 ++++---- .../suite/tokudb/t/bf_create_select_range_part.test | 8 ++++---- mysql-test/suite/tokudb/t/bf_create_temp_select.test | 8 ++++---- mysql-test/suite/tokudb/t/bf_delete.test | 4 ++-- mysql-test/suite/tokudb/t/bf_insert_select.test | 6 +++--- mysql-test/suite/tokudb/t/bf_insert_select_dup_key.test | 8 ++++---- mysql-test/suite/tokudb/t/bf_replace_select.test | 7 ++++--- mysql-test/suite/tokudb/t/bf_select_hash_part.test | 8 ++++---- mysql-test/suite/tokudb/t/bf_select_range_part.test | 8 ++++---- 10 files changed, 37 insertions(+), 36 deletions(-) diff --git a/mysql-test/suite/tokudb/t/bf_create_select.test b/mysql-test/suite/tokudb/t/bf_create_select.test index c8ff2615c7c..8c457b75f27 100644 --- a/mysql-test/suite/tokudb/t/bf_create_select.test +++ b/mysql-test/suite/tokudb/t/bf_create_select.test @@ -65,8 +65,8 @@ while ($i < $maxq) { let $time_elapsed_off = `select unix_timestamp() - $s`; -# Check that the time with bulk fetch off is at least 1.5 times that with bulk fetch on -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 1.5 * $time_elapsed_on`; +# Check that the time with bulk fetch off is greater that with bulk fetch on +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off > $time_elapsed_on`; echo $verdict; if ($debug) { echo index $verdict $time_elapsed_on $time_elapsed_off; } if (!$verdict) { echo index $time_elapsed_on $time_elapsed_off; } @@ -94,8 +94,8 @@ while ($i < $maxq) { let $time_elapsed_off = `select unix_timestamp() - $s`; -# Check that the time with bulk fetch off is at least 1.5 times that with bulk fetch on -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 1.5 * $time_elapsed_on`; +# Check that the time with bulk fetch off is greater that with bulk fetch on +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off > $time_elapsed_on`; echo $verdict; if ($debug) { echo range $verdict $time_elapsed_on $time_elapsed_off; } if (!$verdict) { echo range $time_elapsed_on $time_elapsed_off; } diff --git a/mysql-test/suite/tokudb/t/bf_create_select_hash_part.test b/mysql-test/suite/tokudb/t/bf_create_select_hash_part.test index 4df0a138be8..34995b4ba2f 100644 --- a/mysql-test/suite/tokudb/t/bf_create_select_hash_part.test +++ b/mysql-test/suite/tokudb/t/bf_create_select_hash_part.test @@ -65,8 +65,8 @@ while ($i < $maxq) { } let $time_elapsed_off = `select unix_timestamp() - $s`; -# check that bulk fetch on is at least 1.5 times faster than bulk fetch off -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 1.5 * $time_elapsed_on`; +# check that bulk fetch on is greater than bulk fetch off +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off > $time_elapsed_on`; echo $verdict; if ($debug) { echo index $verdict $time_elapsed_off $time_elapsed_on; } if (!$verdict) { echo index $time_elapsed_off $time_elapsed_on; } @@ -93,8 +93,8 @@ while ($i < $maxq) { } let $time_elapsed_off = `select unix_timestamp() - $s`; -# check that bulk fetch on is at least 1.5 times faster than bulk fetch off -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 1.5 * $time_elapsed_on`; +# check that bulk fetch on is greater than bulk fetch off +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off > $time_elapsed_on`; echo $verdict; if ($debug) { echo range $verdict $time_elapsed_off $time_elapsed_on; } if (!$verdict) { echo range $time_elapsed_off $time_elapsed_on; } diff --git a/mysql-test/suite/tokudb/t/bf_create_select_range_part.test b/mysql-test/suite/tokudb/t/bf_create_select_range_part.test index e2ec066aad1..a53249893f4 100644 --- a/mysql-test/suite/tokudb/t/bf_create_select_range_part.test +++ b/mysql-test/suite/tokudb/t/bf_create_select_range_part.test @@ -72,8 +72,8 @@ while ($i < $maxq) { } let $time_elapsed_off = `select unix_timestamp() - $s`; -# check that bulk fetch on is at least 1.5 times faster than bulk fetch off -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 1.5 * $time_elapsed_on`; +# check that bulk fetch on is greater than bulk fetch off +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off > $time_elapsed_on`; echo $verdict; if ($debug) { echo index $verdict $time_elapsed_off $time_elapsed_on; } if (!$verdict) { echo index $time_elapsed_off $time_elapsed_on; } @@ -100,8 +100,8 @@ while ($i < $maxq) { } let $time_elapsed_off = `select unix_timestamp() - $s`; -# check that bulk fetch on is at least 1.5 times faster than bulk fetch off -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 1.5 * $time_elapsed_on`; +# check that bulk fetch on is greater than bulk fetch off +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off > $time_elapsed_on`; echo $verdict; if ($debug) { echo range $verdict $time_elapsed_off $time_elapsed_on; } if (!$verdict) { echo range $time_elapsed_off $time_elapsed_on; } diff --git a/mysql-test/suite/tokudb/t/bf_create_temp_select.test b/mysql-test/suite/tokudb/t/bf_create_temp_select.test index 1a373277960..4f8211a51d9 100644 --- a/mysql-test/suite/tokudb/t/bf_create_temp_select.test +++ b/mysql-test/suite/tokudb/t/bf_create_temp_select.test @@ -65,8 +65,8 @@ while ($i < $maxq) { let $time_elapsed_off = `select unix_timestamp() - $s`; -# Check that the time with bulk fetch off is at least 1.5 times that with bulk fetch on -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 1.5 * $time_elapsed_on`; +# Check that the time with bulk fetch off is greater that with bulk fetch on +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off > $time_elapsed_on`; echo $verdict; if ($debug) { echo index $verdict $time_elapsed_on $time_elapsed_off; } if (!$verdict) { echo index $time_elapsed_on $time_elapsed_off; } @@ -94,8 +94,8 @@ while ($i < $maxq) { let $time_elapsed_off = `select unix_timestamp() - $s`; -# Check that the time with bulk fetch off is at least 1.5 times that with bulk fetch on -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 1.5 * $time_elapsed_on`; +# Check that the time with bulk fetch off is greater than with bulk fetch on +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off > $time_elapsed_on`; echo $verdict; if ($debug) { echo range $verdict $time_elapsed_on $time_elapsed_off; } if (!$verdict) { echo range $time_elapsed_on $time_elapsed_off; } diff --git a/mysql-test/suite/tokudb/t/bf_delete.test b/mysql-test/suite/tokudb/t/bf_delete.test index cd7cd60f174..a55d78784cc 100644 --- a/mysql-test/suite/tokudb/t/bf_delete.test +++ b/mysql-test/suite/tokudb/t/bf_delete.test @@ -61,8 +61,8 @@ while ($i < $maxq) { } let $time_elapsed_bf_off = `select unix_timestamp() - $s`; -# verify that a delete scan with bulk fetch ON is at least 1.5 times faster than with bulk fetch OFF -let $verdict = `select $time_elapsed_bf_on > 0 && $time_elapsed_bf_off >= 1.5 * $time_elapsed_bf_on`; +# verify that a delete scan with bulk fetch ON is greater than with bulk fetch OFF +let $verdict = `select $time_elapsed_bf_on > 0 && $time_elapsed_bf_off > $time_elapsed_bf_on`; echo $verdict; if ($debug) { echo range $verdict $time_elapsed_bf_on $time_elapsed_bf_off; } if (!$verdict) { echo range $time_elapsed_bf_on $time_elapsed_bf_off; } diff --git a/mysql-test/suite/tokudb/t/bf_insert_select.test b/mysql-test/suite/tokudb/t/bf_insert_select.test index 17852b4262a..8d96c26bc29 100644 --- a/mysql-test/suite/tokudb/t/bf_insert_select.test +++ b/mysql-test/suite/tokudb/t/bf_insert_select.test @@ -66,8 +66,8 @@ while ($i < $maxq) { } let $time_elapsed_off = `select unix_timestamp() - $s`; -# check that bulk fetch on is at least 1.5 times faster than bulk fetch off -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 1.5 * $time_elapsed_on`; +# check that the time with bulk fetch on is greater than with bulk fetch off +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off > $time_elapsed_on`; echo $verdict; if ($debug) { echo index $verdict $time_elapsed_off $time_elapsed_on; } if (!$verdict) { echo index $time_elapsed_off $time_elapsed_on; } @@ -92,7 +92,7 @@ while ($i < $maxq) { } let $time_elapsed_off = `select unix_timestamp() - $s`; -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 1.5 * $time_elapsed_on`; +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off > $time_elapsed_on`; echo $verdict; if ($debug) { echo range $verdict $time_elapsed_off $time_elapsed_on; } if (!$verdict) { echo range $time_elapsed_off $time_elapsed_on; } diff --git a/mysql-test/suite/tokudb/t/bf_insert_select_dup_key.test b/mysql-test/suite/tokudb/t/bf_insert_select_dup_key.test index 876eb636aae..1b015b2c272 100644 --- a/mysql-test/suite/tokudb/t/bf_insert_select_dup_key.test +++ b/mysql-test/suite/tokudb/t/bf_insert_select_dup_key.test @@ -70,8 +70,8 @@ while ($i < $maxq) { } let $time_elapsed_off = `select unix_timestamp() - $s`; -# check that bulk fetch on is at least 1.5 times faster than bulk fetch off -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 1.5 * $time_elapsed_on`; +# check that bulk fetch on is greater than with bulk fetch off +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off > $time_elapsed_on`; echo $verdict; if ($debug) { echo index $verdict $time_elapsed_off $time_elapsed_on; } if (!$verdict) { echo index $time_elapsed_off $time_elapsed_on; } @@ -96,8 +96,8 @@ while ($i < $maxq) { } let $time_elapsed_off = `select unix_timestamp() - $s`; -# check that bulk fetch on is at least 1.5 times faster than bulk fetch off -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 1.5 * $time_elapsed_on`; +# check that bulk fetch on is greater than bulk fetch off +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off > $time_elapsed_on`; echo $verdict; if ($debug) { echo range $verdict $time_elapsed_off $time_elapsed_on; } if (!$verdict) { echo range $time_elapsed_off $time_elapsed_on; } diff --git a/mysql-test/suite/tokudb/t/bf_replace_select.test b/mysql-test/suite/tokudb/t/bf_replace_select.test index 30a03e3ebfe..72cda349f80 100644 --- a/mysql-test/suite/tokudb/t/bf_replace_select.test +++ b/mysql-test/suite/tokudb/t/bf_replace_select.test @@ -66,8 +66,8 @@ while ($i < $maxq) { } let $time_elapsed_off = `select unix_timestamp() - $s`; -# check that bulk fetch on is at least 1.5 times faster than bulk fetch off -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 1.5 * $time_elapsed_on`; +# check that the time with bulk fetch on is greater than with bulk fetch off +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off > $time_elapsed_on`; echo $verdict; if ($debug) { echo index $verdict $time_elapsed_off $time_elapsed_on; } if (!$verdict) { echo index $time_elapsed_off $time_elapsed_on; } @@ -92,7 +92,8 @@ while ($i < $maxq) { } let $time_elapsed_off = `select unix_timestamp() - $s`; -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 1.5 * $time_elapsed_on`; +# check that the time with bulk fetch on is greater than with bulk fetch off +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off > $time_elapsed_on`; echo $verdict; if ($debug) { echo range $verdict $time_elapsed_off $time_elapsed_on; } if (!$verdict) { echo range $time_elapsed_off $time_elapsed_on; } diff --git a/mysql-test/suite/tokudb/t/bf_select_hash_part.test b/mysql-test/suite/tokudb/t/bf_select_hash_part.test index 2271a2086be..46986278743 100644 --- a/mysql-test/suite/tokudb/t/bf_select_hash_part.test +++ b/mysql-test/suite/tokudb/t/bf_select_hash_part.test @@ -65,8 +65,8 @@ let $time_bf_off = `select unix_timestamp() - $s`; if ($debug) { echo index scans took $time_bf_off.; } -# check that the scan time with bulk fetch off is at least 1.5 times as long as with bulk fetch on -let $verdict = `select $time_bf_on > 0 && $time_bf_off >= 1.5 * $time_bf_on`; +# check that the scan time with bulk fetch off is greater than with bulk fetch on +let $verdict = `select $time_bf_on > 0 && $time_bf_off > $time_bf_on`; echo $verdict; if ($debug) { echo index $verdict $time_bf_on $time_bf_off; } if (!$verdict) { echo index $time_bf_on $time_bf_off; } @@ -93,8 +93,8 @@ let $time_bf_off = `select unix_timestamp() - $s`; if ($debug) { echo range scans took $time_bf_off.; } -# check that the scan time with bulk fetch off is at least 1.5 times as long as with bulk fetch on -let $verdict = `select $time_bf_on > 0 && $time_bf_off >= 1.5 * $time_bf_on`; +# check that the scan time with bulk fetch off is greater than with bulk fetch on +let $verdict = `select $time_bf_on > 0 && $time_bf_off > $time_bf_on`; echo $verdict; if ($debug) { echo range $verdict $time_bf_on $time_bf_off; } if (!$verdict) { echo range $time_bf_on $time_bf_off; } diff --git a/mysql-test/suite/tokudb/t/bf_select_range_part.test b/mysql-test/suite/tokudb/t/bf_select_range_part.test index 9dcb044d4d4..7e608777798 100644 --- a/mysql-test/suite/tokudb/t/bf_select_range_part.test +++ b/mysql-test/suite/tokudb/t/bf_select_range_part.test @@ -70,8 +70,8 @@ while ($i < $maxq) { } let $time_bf_off = `select unix_timestamp() - $s`; -# check that the scan time with bulk fetch off is at least 1.5 times as long as with bulk fetch on -let $verdict = `select $time_bf_on > 0 && $time_bf_off >= 1.5 * $time_bf_on`; +# check that the scan time with bulk fetch off is greater than with bulk fetch on +let $verdict = `select $time_bf_on > 0 && $time_bf_off > $time_bf_on`; echo $verdict; if ($debug) { echo index $verdict $time_bf_on $time_bf_off; } if (!$verdict) { echo index scan $time_bf_on $time_bf_off; } @@ -94,8 +94,8 @@ while ($i < $maxq) { } let $time_bf_off = `select unix_timestamp() - $s`; -# check that the scan time with bulk fetch off is at least 1.5 times as long as with bulk fetch on -let $verdict = `select $time_bf_on > 0 && $time_bf_off >= 1.5 * $time_bf_on`; +# check that the scan time with bulk fetch off is greater than with bulk fetch on +let $verdict = `select $time_bf_on > 0 && $time_bf_off > $time_bf_on`; echo $verdict; if ($debug) { echo range $verdict $time_bf_on $time_bf_off; } if (!$verdict) { echo range $time_bf_on $time_bf_off; } From c2a756dd77364eb08bf5fa7536adb7a0c84ca3fc Mon Sep 17 00:00:00 2001 From: Rich Prohaska <prohaska@tokutek.com> Date: Fri, 12 Dec 2014 09:43:15 -0500 Subject: [PATCH 56/99] FT-633 test case and bug fix for the data race between the lock request start and retry functions that results in a stall in the condition var broadcast --- locktree/lock_request.cc | 32 ++- locktree/lock_request.h | 6 + locktree/locktree.cc | 1 + .../tests/lock_request_start_retry_race.cc | 192 ++++++++++++++++++ src/ydb_row_lock.cc | 1 + 5 files changed, 226 insertions(+), 6 deletions(-) create mode 100644 locktree/tests/lock_request_start_retry_race.cc diff --git a/locktree/lock_request.cc b/locktree/lock_request.cc index 97fa780bb04..18f6051afdf 100644 --- a/locktree/lock_request.cc +++ b/locktree/lock_request.cc @@ -113,12 +113,19 @@ void lock_request::create(void) { m_complete_r = 0; m_state = state::UNINITIALIZED; + m_info = nullptr; toku_cond_init(&m_wait_cond, nullptr); + + m_start_test_callback = nullptr; + m_retry_test_callback = nullptr; } // destroy a lock request. void lock_request::destroy(void) { + invariant(m_state != state::PENDING); + invariant(m_state != state::DESTROYED); + m_state = state::DESTROYED; toku_destroy_dbt(&m_left_key_copy); toku_destroy_dbt(&m_right_key_copy); toku_cond_destroy(&m_wait_cond); @@ -135,7 +142,7 @@ void lock_request::set(locktree *lt, TXNID txnid, const DBT *left_key, const DBT toku_destroy_dbt(&m_right_key_copy); m_type = lock_type; m_state = state::INITIALIZED; - m_info = lt->get_lock_request_info(); + m_info = lt ? lt->get_lock_request_info() : nullptr; m_big_txn = big_txn; } @@ -223,15 +230,18 @@ int lock_request::start(void) { insert_into_lock_requests(); if (deadlock_exists(conflicts)) { remove_from_lock_requests(); - complete(DB_LOCK_DEADLOCK); + r = DB_LOCK_DEADLOCK; } toku_mutex_unlock(&m_info->mutex); - } else { + if (m_start_test_callback) m_start_test_callback(); // test callback + } + + if (r != DB_LOCK_NOTGRANTED) { complete(r); } conflicts.destroy(); - return m_state == state::COMPLETE ? m_complete_r : r; + return r; } // sleep on the lock request until it becomes resolved or the wait time has elapsed. @@ -292,8 +302,8 @@ int lock_request::wait(uint64_t wait_time_ms, uint64_t killed_time_ms, int (*kil // complete this lock request with the given return value void lock_request::complete(int complete_r) { - m_state = state::COMPLETE; m_complete_r = complete_r; + m_state = state::COMPLETE; } const DBT *lock_request::get_left_key(void) const { @@ -331,6 +341,7 @@ int lock_request::retry(void) { if (r == 0) { remove_from_lock_requests(); complete(r); + if (m_retry_test_callback) m_retry_test_callback(); // test callback toku_cond_broadcast(&m_wait_cond); } @@ -416,7 +427,8 @@ void lock_request::remove_from_lock_requests(void) { uint32_t idx; lock_request *request; int r = m_info->pending_lock_requests.find_zero<TXNID, find_by_txnid>(m_txnid, &request, &idx); - invariant_zero(r && request == this); + invariant_zero(r); + invariant(request == this); r = m_info->pending_lock_requests.delete_at(idx); invariant_zero(r); } @@ -432,4 +444,12 @@ int lock_request::find_by_txnid(lock_request * const &request, const TXNID &txni } } +void lock_request::set_start_test_callback(void (*f)(void)) { + m_start_test_callback = f; +} + +void lock_request::set_retry_test_callback(void (*f)(void)) { + m_retry_test_callback = f; +} + } /* namespace toku */ diff --git a/locktree/lock_request.h b/locktree/lock_request.h index d1a4c2822e0..c504961fcc0 100644 --- a/locktree/lock_request.h +++ b/locktree/lock_request.h @@ -164,6 +164,8 @@ public: // The rest remain pending. static void retry_all_lock_requests(locktree *lt); + void set_start_test_callback(void (*f)(void)); + void set_retry_test_callback(void (*f)(void)); private: enum state { @@ -171,6 +173,7 @@ private: INITIALIZED, PENDING, COMPLETE, + DESTROYED, }; // The keys for a lock request are stored "unowned" in m_left_key @@ -236,6 +239,9 @@ private: static int find_by_txnid(lock_request * const &request, const TXNID &txnid); + void (*m_start_test_callback)(void); + void (*m_retry_test_callback)(void); + friend class lock_request_unit_test; }; ENSURE_POD(lock_request); diff --git a/locktree/locktree.cc b/locktree/locktree.cc index 27e528db8e8..fc2470e98bd 100644 --- a/locktree/locktree.cc +++ b/locktree/locktree.cc @@ -152,6 +152,7 @@ void locktree::create(locktree_manager *mgr, DICTIONARY_ID dict_id, const compar void locktree::destroy(void) { invariant(m_reference_count == 0); + invariant(m_lock_request_info.pending_lock_requests.size() == 0); m_cmp.destroy(); m_rangetree->destroy(); toku_free(m_rangetree); diff --git a/locktree/tests/lock_request_start_retry_race.cc b/locktree/tests/lock_request_start_retry_race.cc new file mode 100644 index 00000000000..0b16e9c5813 --- /dev/null +++ b/locktree/tests/lock_request_start_retry_race.cc @@ -0,0 +1,192 @@ +/* -*- mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*- */ +// vim: ft=cpp:expandtab:ts=8:sw=4:softtabstop=4: +#ident "$Id$" +/* +COPYING CONDITIONS NOTICE: + + This program is free software; you can redistribute it and/or modify + it under the terms of version 2 of the GNU General Public License as + published by the Free Software Foundation, and provided that the + following conditions are met: + + * Redistributions of source code must retain this COPYING + CONDITIONS NOTICE, the COPYRIGHT NOTICE (below), the + DISCLAIMER (below), the UNIVERSITY PATENT NOTICE (below), the + PATENT MARKING NOTICE (below), and the PATENT RIGHTS + GRANT (below). + + * Redistributions in binary form must reproduce this COPYING + CONDITIONS NOTICE, the COPYRIGHT NOTICE (below), the + DISCLAIMER (below), the UNIVERSITY PATENT NOTICE (below), the + PATENT MARKING NOTICE (below), and the PATENT RIGHTS + GRANT (below) in the documentation and/or other materials + provided with the distribution. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. + +COPYRIGHT NOTICE: + + TokuFT, Tokutek Fractal Tree Indexing Library. + Copyright (C) 2007-2013 Tokutek, Inc. + +DISCLAIMER: + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + +UNIVERSITY PATENT NOTICE: + + The technology is licensed by the Massachusetts Institute of + Technology, Rutgers State University of New Jersey, and the Research + Foundation of State University of New York at Stony Brook under + United States of America Serial No. 11/760379 and to the patents + and/or patent applications resulting from it. + +PATENT MARKING NOTICE: + + This software is covered by US Patent No. 8,185,551. + This software is covered by US Patent No. 8,489,638. + +PATENT RIGHTS GRANT: + + "THIS IMPLEMENTATION" means the copyrightable works distributed by + Tokutek as part of the Fractal Tree project. + + "PATENT CLAIMS" means the claims of patents that are owned or + licensable by Tokutek, both currently or in the future; and that in + the absence of this license would be infringed by THIS + IMPLEMENTATION or by using or running THIS IMPLEMENTATION. + + "PATENT CHALLENGE" shall mean a challenge to the validity, + patentability, enforceability and/or non-infringement of any of the + PATENT CLAIMS or otherwise opposing any of the PATENT CLAIMS. + + Tokutek hereby grants to you, for the term and geographical scope of + the PATENT CLAIMS, a non-exclusive, no-charge, royalty-free, + irrevocable (except as stated in this section) patent license to + make, have made, use, offer to sell, sell, import, transfer, and + otherwise run, modify, and propagate the contents of THIS + IMPLEMENTATION, where such license applies only to the PATENT + CLAIMS. This grant does not include claims that would be infringed + only as a consequence of further modifications of THIS + IMPLEMENTATION. If you or your agent or licensee institute or order + or agree to the institution of patent litigation against any entity + (including a cross-claim or counterclaim in a lawsuit) alleging that + THIS IMPLEMENTATION constitutes direct or contributory patent + infringement, or inducement of patent infringement, then any rights + granted to you under this License shall terminate as of the date + such litigation is filed. If you or your agent or exclusive + licensee institute or order or agree to the institution of a PATENT + CHALLENGE, then Tokutek may terminate any rights granted to you + under this License. +*/ + +#ident "Copyright (c) 2014 Tokutek Inc. All rights reserved." +#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it." + +#include "test.h" +#include "locktree.h" +#include "lock_request.h" + +// Test FT-633, the data race on the lock request between ::start and ::retry +// This test is non-deterministic. It uses sleeps at 2 critical places to +// expose the data race on the lock requests state. + +namespace toku { + +struct locker_arg { + locktree *_lt; + TXNID _id; + const DBT *_key; + + locker_arg(locktree *lt, TXNID id, const DBT *key) : _lt(lt), _id(id), _key(key) { + } +}; + +static void locker_callback(void) { + usleep(10000); +} + +static void run_locker(locktree *lt, TXNID txnid, const DBT *key) { + int i; + for (i = 0; i < 1000; i++) { + + lock_request request; + request.create(); + + request.set(lt, txnid, key, key, lock_request::type::WRITE, false); + + // set the test callbacks + request.set_start_test_callback(locker_callback); + request.set_retry_test_callback(locker_callback); + + // try to acquire the lock + int r = request.start(); + if (r == DB_LOCK_NOTGRANTED) { + // wait for the lock to be granted + r = request.wait(10 * 1000); + } + + if (r == 0) { + // release the lock + range_buffer buffer; + buffer.create(); + buffer.append(key, key); + lt->release_locks(txnid, &buffer); + buffer.destroy(); + + // retry pending lock requests + lock_request::retry_all_lock_requests(lt); + } + + request.destroy(); + memset(&request, 0xab, sizeof request); + + toku_pthread_yield(); + if ((i % 10) == 0) + printf("%lu %d\n", toku_pthread_self(), i); + } +} + +static void *locker(void *v_arg) { + locker_arg *arg = static_cast<locker_arg *>(v_arg); + run_locker(arg->_lt, arg->_id, arg->_key); + return arg; +} + +} /* namespace toku */ + +int main(void) { + int r; + + toku::locktree lt; + DICTIONARY_ID dict_id = { 1 }; + lt.create(nullptr, dict_id, toku::dbt_comparator); + + const DBT *one = toku::get_dbt(1); + + const int n_workers = 2; + toku_pthread_t ids[n_workers]; + for (int i = 0; i < n_workers; i++) { + toku::locker_arg *arg = new toku::locker_arg(<, i, one); + r = toku_pthread_create(&ids[i], nullptr, toku::locker, arg); + assert_zero(r); + } + for (int i = 0; i < n_workers; i++) { + void *ret; + r = toku_pthread_join(ids[i], &ret); + assert_zero(r); + toku::locker_arg *arg = static_cast<toku::locker_arg *>(ret); + delete arg; + } + + lt.release_reference(); + lt.destroy(); + return 0; +} + diff --git a/src/ydb_row_lock.cc b/src/ydb_row_lock.cc index 40cafd0e331..dfd5c8e53a2 100644 --- a/src/ydb_row_lock.cc +++ b/src/ydb_row_lock.cc @@ -305,6 +305,7 @@ void toku_db_grab_write_lock (DB *db, DBT *key, TOKUTXN tokutxn) { int r = request.start(); invariant_zero(r); db_txn_note_row_lock(db, txn_anc, key, key); + request.destroy(); } void toku_db_release_lt_key_ranges(DB_TXN *txn, txn_lt_key_ranges *ranges) { From c2660182bb990aaee02cc775dc76230d70d65ee1 Mon Sep 17 00:00:00 2001 From: Rich Prohaska <prohaska@tokutek.com> Date: Fri, 12 Dec 2014 09:43:31 -0500 Subject: [PATCH 57/99] FT-633 build on osx --- locktree/tests/lock_request_start_retry_race.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/locktree/tests/lock_request_start_retry_race.cc b/locktree/tests/lock_request_start_retry_race.cc index 0b16e9c5813..86ef2dd9cc5 100644 --- a/locktree/tests/lock_request_start_retry_race.cc +++ b/locktree/tests/lock_request_start_retry_race.cc @@ -89,6 +89,7 @@ PATENT RIGHTS GRANT: #ident "Copyright (c) 2014 Tokutek Inc. All rights reserved." #ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it." +#include <iostream> #include "test.h" #include "locktree.h" #include "lock_request.h" @@ -149,7 +150,7 @@ static void run_locker(locktree *lt, TXNID txnid, const DBT *key) { toku_pthread_yield(); if ((i % 10) == 0) - printf("%lu %d\n", toku_pthread_self(), i); + std::cout << toku_pthread_self() << " " << i << std::endl; } } From 4ba6ee1b31b32555b5168746525f6f5958b62c3b Mon Sep 17 00:00:00 2001 From: Nirbhay Choubey <nirbhay@mariadb.com> Date: Fri, 12 Dec 2014 10:38:19 -0500 Subject: [PATCH 58/99] MDEV-6891: Update company name --- scripts/mysql_install_db.sh | 4 ++-- win/packaging/CMakeLists.txt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/mysql_install_db.sh b/scripts/mysql_install_db.sh index fcf264262fd..8da092289e9 100644 --- a/scripts/mysql_install_db.sh +++ b/scripts/mysql_install_db.sh @@ -512,8 +512,8 @@ then echo "The latest information about MariaDB is available at http://mariadb.org/." echo "You can find additional information about the MySQL part at:" echo "http://dev.mysql.com" - echo "Support MariaDB development by buying support/new features from" - echo "SkySQL Ab. You can contact us about this at sales@skysql.com". + echo "Support MariaDB development by buying support/new features from MariaDB" + echo "Corporation Ab. You can contact us about this at sales@mariadb.com." echo "Alternatively consider joining our community based development effort:" echo "http://mariadb.com/kb/en/contributing-to-the-mariadb-project/" echo diff --git a/win/packaging/CMakeLists.txt b/win/packaging/CMakeLists.txt index 0b5e2f98f16..95547ac9f3a 100644 --- a/win/packaging/CMakeLists.txt +++ b/win/packaging/CMakeLists.txt @@ -17,7 +17,7 @@ IF(NOT WIN32) RETURN() ENDIF() -SET(MANUFACTURER "Monty Program AB") +SET(MANUFACTURER "MariaDB Corporation Ab") FIND_PATH(WIX_DIR heat.exe $ENV{WIX_DIR}/bin $ENV{ProgramFiles}/wix/bin From 743e2ae433ca981bab5b2f74438e05d275245c8a Mon Sep 17 00:00:00 2001 From: Nirbhay Choubey <nirbhay@mariadb.com> Date: Fri, 12 Dec 2014 17:10:51 -0500 Subject: [PATCH 59/99] MDEV-6891: Addendum, update company name in copyright notice --- include/welcome_copyright_notice.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/welcome_copyright_notice.h b/include/welcome_copyright_notice.h index 875770edb89..956a9f1c17a 100644 --- a/include/welcome_copyright_notice.h +++ b/include/welcome_copyright_notice.h @@ -25,6 +25,6 @@ */ #define ORACLE_WELCOME_COPYRIGHT_NOTICE(first_year) \ "Copyright (c) " first_year ", " COPYRIGHT_NOTICE_CURRENT_YEAR \ - ", Oracle, Monty Program Ab and others.\n" + ", Oracle, MariaDB Corporation Ab and others.\n" #endif /* _welcome_copyright_notice_h_ */ From 4a32d9c0580d6362cfcd86c6d8f103748946e580 Mon Sep 17 00:00:00 2001 From: Michael Widenius <monty@mariadb.org> Date: Mon, 15 Dec 2014 11:16:33 +0200 Subject: [PATCH 60/99] MDEV-6871 Multi-value insert on MyISAM table that makes slaves crash (when using --skip-external-locking=0) Problem was that repair() did lock and unlock tables, which leaved already locked tables in wrong state include/my_check_opt.h: Added option T_NO_LOCKS to disable locking during repair() Fixed duplicated bit T_NO_CREATE_RENAME_LSN mysql-test/suite/rpl/r/myisam_external_lock.result: Test case for MDEV-6871 mysql-test/suite/rpl/t/myisam_external_lock-slave.opt: Test case for MDEV-6871 mysql-test/suite/rpl/t/myisam_external_lock.test: Test case for MDEV-6871 storage/maria/ha_maria.cc: Don't lock tables during enable_indexes() Removed some calls to current_thd storage/myisam/ha_myisam.cc: Don't lock tables during enable_indexes() Removed some calls to current_thd --- include/my_check_opt.h | 4 ++- .../suite/rpl/r/myisam_external_lock.result | 12 ++++++++ .../rpl/t/myisam_external_lock-slave.opt | 2 ++ .../suite/rpl/t/myisam_external_lock.test | 24 +++++++++++++++ storage/maria/ha_maria.cc | 28 ++++++++++++----- storage/myisam/ha_myisam.cc | 30 ++++++++++++++----- 6 files changed, 84 insertions(+), 16 deletions(-) create mode 100644 mysql-test/suite/rpl/r/myisam_external_lock.result create mode 100644 mysql-test/suite/rpl/t/myisam_external_lock-slave.opt create mode 100644 mysql-test/suite/rpl/t/myisam_external_lock.test diff --git a/include/my_check_opt.h b/include/my_check_opt.h index abd4f4a96a7..f952792d2c8 100644 --- a/include/my_check_opt.h +++ b/include/my_check_opt.h @@ -63,7 +63,9 @@ extern "C" { #define T_ZEROFILL (1ULL << 32) #define T_ZEROFILL_KEEP_LSN (1ULL << 33) /** If repair should not bump create_rename_lsn */ -#define T_NO_CREATE_RENAME_LSN (1ULL << 33) +#define T_NO_CREATE_RENAME_LSN (1ULL << 34) +/** If repair shouldn't do any locks */ +#define T_NO_LOCKS (1ULL << 35) #define T_REP_ANY (T_REP | T_REP_BY_SORT | T_REP_PARALLEL) diff --git a/mysql-test/suite/rpl/r/myisam_external_lock.result b/mysql-test/suite/rpl/r/myisam_external_lock.result new file mode 100644 index 00000000000..db23e2cd2d9 --- /dev/null +++ b/mysql-test/suite/rpl/r/myisam_external_lock.result @@ -0,0 +1,12 @@ +include/master-slave.inc +[connection master] +drop table if exists t1; +Warnings: +Note 1051 Unknown table 't1' +CREATE TABLE `t1` (`col1` int(11) NOT NULL,`col2` int(11) NOT NULL, +PRIMARY KEY (`col1`,`col2`), +KEY `col2` (`col2`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; +INSERT INTO `t1` VALUES (2775,974),(2775,975),(2775,976),(2778,977),(2778,978),(2782,979),(2790,986),(2790,1139),(2792,840),(2792,984),(2792,989),(2793,982),(2793,992),(2793,993),(2793,994),(2795,323),(2795,332),(2797,980),(2797,997),(2797,998),(2798,1103),(2798,1104),(2799,841),(2799,985),(2799,988),(2833,983),(2833,990),(2833,991),(2834,981),(2834,995),(2834,996),(2835,316),(2835,317),(3007,854),(3007,856),(3008,855),(3008,857),(3009,823),(3009,824),(3014,1),(3015,1),(3016,2),(3017,2),(3018,3),(3019,3),(3024,842),(3024,843),(3024,844),(3025,845),(3025,846),(3025,847),(3040,31),(3041,32),(3042,52),(3042,55),(3043,53),(3043,54),(3044,278),(3044,279),(3044,280),(3044,281),(3044,282),(3044,283),(3044,284),(3044,285),(3045,1),(3046,1),(3049,220),(3050,221),(3050,222),(3051,2),(3052,2),(3053,223),(3054,224),(3055,225),(3056,226),(3057,227),(3058,228),(3059,229),(3060,327),(3066,236),(3067,237),(3068,238),(3069,239),(3070,240),(3080,241),(3081,242),(3082,247),(3083,248),(3084,249),(3085,250),(3086,251),(3087,252),(3088,253),(3089,254),(3090,255),(3091,256),(3092,257),(3093,258),(3094,259),(3096,263),(3097,264),(3100,273),(3100,302),(3101,266),(3102,267),(3103,268),(3104,269),(3105,270),(3111,275),(3112,238),(3113,272),(3115,286),(3116,318),(3116,319),(3117,290),(3117,292),(3118,238),(3119,291),(3119,293),(3120,304),(3121,305),(3122,306),(3123,307),(3124,308),(3125,309),(3126,310),(3127,311),(3128,312),(3128,336),(3129,313),(3129,350),(3130,314),(3131,315),(3131,351),(3132,325),(3132,328),(3134,502),(3138,334),(3139,338),(3139,339),(3140,340),(3140,341),(3141,344),(3141,345),(3142,346),(3142,347),(3149,351),(3149,354),(3150,351),(3150,356),(3152,358),(3152,359),(3153,361),(3153,370),(3154,363),(3154,369),(3156,350),(3156,371),(3159,376),(3160,377),(3160,379),(3160,384),(3161,378),(3161,380),(3161,383),(3162,388),(3162,389),(3162,390),(3169,392),(3169,393),(3169,394),(3170,395),(3170,396),(3170,397),(3171,398),(3171,399),(3171,400),(3172,401),(3172,402),(3172,403),(3173,404),(3173,405),(3173,406),(3178,351),(3178,421),(3190,411),(3190,412),(3191,413),(3191,414),(3192,415),(3192,416),(3193,417),(3193,418),(3194,419),(3194,420),(3195,353),(3195,424),(3196,425),(3196,426),(3197,427),(3197,428),(3198,429),(3198,430),(3199,431),(3199,432),(3200,433),(3200,434),(3201,435),(3201,436),(3202,437),(3202,438),(3203,439),(3203,440),(3204,441),(3204,442),(3205,443),(3205,444),(3206,445),(3206,446),(3207,447),(3207,448),(3208,449),(3208,450),(3209,451),(3209,452),(3210,453),(3210,454),(3211,455),(3211,456),(3212,457),(3212,458),(3213,459),(3213,460),(3214,461),(3214,462),(3215,463),(3215,464),(3218,466),(3218,467),(3218,468),(3219,469),(3219,470),(3219,471),(3220,474),(3220,475),(3220,476),(3221,477),(3221,478),(3221,479),(3222,480),(3222,481),(3223,482),(3223,483),(3224,484),(3224,485),(3225,486),(3225,487),(3227,503),(3227,505),(3228,506),(3228,507),(3230,508),(3230,509),(3231,510),(3231,511),(3232,512),(3232,513),(3233,514),(3233,515),(3234,516),(3234,517),(3235,518),(3235,519),(3237,521),(3237,522),(3239,524),(3239,525),(3240,526),(3240,527),(3241,528),(3241,529),(3242,530),(3242,531),(3243,532),(3243,533),(3244,534),(3244,535),(3245,536),(3245,537),(3246,538),(3246,539),(3252,540),(3252,541),(3254,543),(3254,544),(3254,545),(3255,547),(3255,548),(3255,571),(3256,550),(3256,551),(3256,572),(3257,553),(3257,554),(3257,573),(3258,556),(3258,557),(3258,574),(3259,559),(3259,560),(3259,575),(3260,561),(3260,562),(3260,563),(3261,565),(3261,576),(3262,566),(3262,567),(3263,568),(3263,569),(3263,570),(3264,577),(3264,578),(3265,579),(3265,580),(3266,581),(3266,582),(3266,591),(3267,583),(3267,584),(3267,592),(3268,585),(3268,586),(3268,593),(3269,587),(3269,588),(3269,594),(3270,589),(3270,590),(3271,595),(3271,596),(3271,597),(3272,598),(3272,599),(3273,600),(3273,601),(3273,602),(3274,603),(3274,604),(3274,605),(3275,606),(3275,607),(3275,608),(3276,609),(3276,610),(3276,611),(3277,612),(3277,613),(3277,614),(3278,615),(3278,616),(3279,617),(3279,618),(3279,619),(3279,628),(3279,629),(3280,620),(3280,621),(3280,622),(3281,623),(3281,624),(3281,625),(3282,626),(3282,825),(3283,630),(3283,631),(3284,632),(3284,633),(3284,634),(3285,635),(3285,940),(3286,638),(3286,639),(3286,640),(3287,641),(3287,642),(3287,643),(3288,644),(3288,645),(3288,646),(3289,647),(3289,648),(3289,649),(3290,650),(3290,651),(3290,652),(3291,653),(3291,654),(3291,655),(3292,656),(3292,657),(3292,658),(3293,659),(3293,660),(3293,661),(3294,662),(3294,663),(3294,664),(3295,665),(3295,666),(3295,667),(3296,668),(3296,669),(3296,670),(3297,671),(3297,672),(3297,673),(3298,674),(3298,675),(3298,676),(3299,677),(3299,678),(3299,679),(3300,680),(3300,681),(3300,682),(3301,683),(3301,684),(3301,685),(3302,686),(3302,687),(3302,688),(3303,689),(3303,690),(3303,691),(3304,692),(3304,693),(3304,694),(3305,695),(3305,696),(3305,697),(3306,698),(3306,699),(3306,700),(3307,701),(3307,702),(3307,703),(3308,704),(3308,705),(3308,706),(3309,707),(3309,708),(3310,709),(3310,710),(3311,711),(3311,712),(3311,713),(3312,714),(3312,715),(3312,716),(3313,717),(3313,1167),(3314,720),(3314,721),(3314,722),(3315,723),(3315,724),(3315,725),(3316,726),(3316,727),(3316,728),(3317,729),(3317,730),(3317,731),(3318,732),(3318,733),(3318,734),(3319,735),(3319,736),(3319,737),(3320,738),(3320,739),(3320,740),(3321,741),(3321,742),(3322,743),(3322,744),(3323,745),(3323,746),(3323,747),(3324,748),(3324,749),(3324,750),(3325,751),(3325,752),(3325,753),(3326,754),(3326,755),(3327,756),(3327,757),(3328,758),(3328,789),(3329,761),(3329,790),(3330,762),(3330,763),(3331,768),(3331,785),(3331,786),(3332,769),(3332,783),(3332,784),(3335,766),(3336,767),(3343,770),(3343,771),(3344,772),(3344,773),(3345,774),(3345,775),(3347,776),(3347,777),(3347,987),(3348,778),(3348,779),(3349,780),(3372,781),(3372,782),(3373,787),(3373,788),(3376,791),(3376,792),(3377,793),(3377,794),(3378,799),(3378,800),(3379,801),(3379,802),(3380,795),(3380,796),(3381,797),(3381,798),(3383,805),(3384,806),(3384,807),(3385,808),(3385,809),(3386,810),(3386,811),(3387,812),(3387,814),(3388,815),(3388,816),(3391,817),(3391,818),(3391,819),(3392,820),(3392,821),(3392,822),(3393,826),(3393,827),(3394,828),(3394,829),(3395,830),(3395,831),(3396,834),(3396,835),(3397,832),(3397,833),(3398,836),(3398,837),(3399,838),(3399,839),(3410,850),(3410,851),(3411,852),(3411,853),(3412,848),(3412,849),(3419,860),(3419,951),(3420,859),(3420,861),(3422,862),(3422,863),(3423,864),(3423,865),(3424,866),(3424,867),(3424,872),(3424,873),(3425,868),(3425,869),(3425,874),(3425,875),(3426,878),(3426,879),(3427,876),(3427,877),(3428,880),(3432,884),(3432,885),(3432,886),(3434,887),(3434,888),(3434,889),(3441,894),(3441,895),(3442,896),(3442,897),(3444,904),(3445,905),(3449,906),(3449,907),(3450,908),(3450,909),(3453,910),(3458,915),(3458,916),(3459,917),(3459,918),(3463,919),(3463,920),(3485,929),(3486,930),(3487,931),(3488,932),(3489,933),(3493,2),(3494,2),(3501,934),(3502,936),(3503,938),(3504,939),(3505,941),(3506,942),(3507,943),(3508,944),(3509,945),(3510,946),(3511,947),(3512,948),(3514,949),(3514,950),(3515,953),(3516,954),(3517,955),(3518,956),(3519,957),(3520,958),(3521,959),(3527,960),(3527,965),(3528,961),(3528,962),(3529,963),(3529,964),(3530,966),(3530,967),(3531,968),(3531,969),(3535,970),(3535,971),(3536,972),(3536,973),(3540,999),(3540,1000),(3541,1001),(8888,9999); +drop table t1; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/myisam_external_lock-slave.opt b/mysql-test/suite/rpl/t/myisam_external_lock-slave.opt new file mode 100644 index 00000000000..db53e17d4b3 --- /dev/null +++ b/mysql-test/suite/rpl/t/myisam_external_lock-slave.opt @@ -0,0 +1,2 @@ +--log-slave-updates=0 +--skip_external_locking=0 diff --git a/mysql-test/suite/rpl/t/myisam_external_lock.test b/mysql-test/suite/rpl/t/myisam_external_lock.test new file mode 100644 index 00000000000..14824fd8321 --- /dev/null +++ b/mysql-test/suite/rpl/t/myisam_external_lock.test @@ -0,0 +1,24 @@ +--source include/have_binlog_format_row.inc +--source include/master-slave.inc + +# +# MDEV-6871 Multi-value insert on MyISAM table that makes slaves crash +# This only happens if external_lock is enabled +# + +drop table if exists t1; +CREATE TABLE `t1` (`col1` int(11) NOT NULL,`col2` int(11) NOT NULL, + PRIMARY KEY (`col1`,`col2`), + KEY `col2` (`col2`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; +INSERT INTO `t1` VALUES (2775,974),(2775,975),(2775,976),(2778,977),(2778,978),(2782,979),(2790,986),(2790,1139),(2792,840),(2792,984),(2792,989),(2793,982),(2793,992),(2793,993),(2793,994),(2795,323),(2795,332),(2797,980),(2797,997),(2797,998),(2798,1103),(2798,1104),(2799,841),(2799,985),(2799,988),(2833,983),(2833,990),(2833,991),(2834,981),(2834,995),(2834,996),(2835,316),(2835,317),(3007,854),(3007,856),(3008,855),(3008,857),(3009,823),(3009,824),(3014,1),(3015,1),(3016,2),(3017,2),(3018,3),(3019,3),(3024,842),(3024,843),(3024,844),(3025,845),(3025,846),(3025,847),(3040,31),(3041,32),(3042,52),(3042,55),(3043,53),(3043,54),(3044,278),(3044,279),(3044,280),(3044,281),(3044,282),(3044,283),(3044,284),(3044,285),(3045,1),(3046,1),(3049,220),(3050,221),(3050,222),(3051,2),(3052,2),(3053,223),(3054,224),(3055,225),(3056,226),(3057,227),(3058,228),(3059,229),(3060,327),(3066,236),(3067,237),(3068,238),(3069,239),(3070,240),(3080,241),(3081,242),(3082,247),(3083,248),(3084,249),(3085,250),(3086,251),(3087,252),(3088,253),(3089,254),(3090,255),(3091,256),(3092,257),(3093,258),(3094,259),(3096,263),(3097,264),(3100,273),(3100,302),(3101,266),(3102,267),(3103,268),(3104,269),(3105,270),(3111,275),(3112,238),(3113,272),(3115,286),(3116,318),(3116,319),(3117,290),(3117,292),(3118,238),(3119,291),(3119,293),(3120,304),(3121,305),(3122,306),(3123,307),(3124,308),(3125,309),(3126,310),(3127,311),(3128,312),(3128,336),(3129,313),(3129,350),(3130,314),(3131,315),(3131,351),(3132,325),(3132,328),(3134,502),(3138,334),(3139,338),(3139,339),(3140,340),(3140,341),(3141,344),(3141,345),(3142,346),(3142,347),(3149,351),(3149,354),(3150,351),(3150,356),(3152,358),(3152,359),(3153,361),(3153,370),(3154,363),(3154,369),(3156,350),(3156,371),(3159,376),(3160,377),(3160,379),(3160,384),(3161,378),(3161,380),(3161,383),(3162,388),(3162,389),(3162,390),(3169,392),(3169,393),(3169,394),(3170,395),(3170,396),(3170,397),(3171,398),(3171,399),(3171,400),(3172,401),(3172,402),(3172,403),(3173,404),(3173,405),(3173,406),(3178,351),(3178,421),(3190,411),(3190,412),(3191,413),(3191,414),(3192,415),(3192,416),(3193,417),(3193,418),(3194,419),(3194,420),(3195,353),(3195,424),(3196,425),(3196,426),(3197,427),(3197,428),(3198,429),(3198,430),(3199,431),(3199,432),(3200,433),(3200,434),(3201,435),(3201,436),(3202,437),(3202,438),(3203,439),(3203,440),(3204,441),(3204,442),(3205,443),(3205,444),(3206,445),(3206,446),(3207,447),(3207,448),(3208,449),(3208,450),(3209,451),(3209,452),(3210,453),(3210,454),(3211,455),(3211,456),(3212,457),(3212,458),(3213,459),(3213,460),(3214,461),(3214,462),(3215,463),(3215,464),(3218,466),(3218,467),(3218,468),(3219,469),(3219,470),(3219,471),(3220,474),(3220,475),(3220,476),(3221,477),(3221,478),(3221,479),(3222,480),(3222,481),(3223,482),(3223,483),(3224,484),(3224,485),(3225,486),(3225,487),(3227,503),(3227,505),(3228,506),(3228,507),(3230,508),(3230,509),(3231,510),(3231,511),(3232,512),(3232,513),(3233,514),(3233,515),(3234,516),(3234,517),(3235,518),(3235,519),(3237,521),(3237,522),(3239,524),(3239,525),(3240,526),(3240,527),(3241,528),(3241,529),(3242,530),(3242,531),(3243,532),(3243,533),(3244,534),(3244,535),(3245,536),(3245,537),(3246,538),(3246,539),(3252,540),(3252,541),(3254,543),(3254,544),(3254,545),(3255,547),(3255,548),(3255,571),(3256,550),(3256,551),(3256,572),(3257,553),(3257,554),(3257,573),(3258,556),(3258,557),(3258,574),(3259,559),(3259,560),(3259,575),(3260,561),(3260,562),(3260,563),(3261,565),(3261,576),(3262,566),(3262,567),(3263,568),(3263,569),(3263,570),(3264,577),(3264,578),(3265,579),(3265,580),(3266,581),(3266,582),(3266,591),(3267,583),(3267,584),(3267,592),(3268,585),(3268,586),(3268,593),(3269,587),(3269,588),(3269,594),(3270,589),(3270,590),(3271,595),(3271,596),(3271,597),(3272,598),(3272,599),(3273,600),(3273,601),(3273,602),(3274,603),(3274,604),(3274,605),(3275,606),(3275,607),(3275,608),(3276,609),(3276,610),(3276,611),(3277,612),(3277,613),(3277,614),(3278,615),(3278,616),(3279,617),(3279,618),(3279,619),(3279,628),(3279,629),(3280,620),(3280,621),(3280,622),(3281,623),(3281,624),(3281,625),(3282,626),(3282,825),(3283,630),(3283,631),(3284,632),(3284,633),(3284,634),(3285,635),(3285,940),(3286,638),(3286,639),(3286,640),(3287,641),(3287,642),(3287,643),(3288,644),(3288,645),(3288,646),(3289,647),(3289,648),(3289,649),(3290,650),(3290,651),(3290,652),(3291,653),(3291,654),(3291,655),(3292,656),(3292,657),(3292,658),(3293,659),(3293,660),(3293,661),(3294,662),(3294,663),(3294,664),(3295,665),(3295,666),(3295,667),(3296,668),(3296,669),(3296,670),(3297,671),(3297,672),(3297,673),(3298,674),(3298,675),(3298,676),(3299,677),(3299,678),(3299,679),(3300,680),(3300,681),(3300,682),(3301,683),(3301,684),(3301,685),(3302,686),(3302,687),(3302,688),(3303,689),(3303,690),(3303,691),(3304,692),(3304,693),(3304,694),(3305,695),(3305,696),(3305,697),(3306,698),(3306,699),(3306,700),(3307,701),(3307,702),(3307,703),(3308,704),(3308,705),(3308,706),(3309,707),(3309,708),(3310,709),(3310,710),(3311,711),(3311,712),(3311,713),(3312,714),(3312,715),(3312,716),(3313,717),(3313,1167),(3314,720),(3314,721),(3314,722),(3315,723),(3315,724),(3315,725),(3316,726),(3316,727),(3316,728),(3317,729),(3317,730),(3317,731),(3318,732),(3318,733),(3318,734),(3319,735),(3319,736),(3319,737),(3320,738),(3320,739),(3320,740),(3321,741),(3321,742),(3322,743),(3322,744),(3323,745),(3323,746),(3323,747),(3324,748),(3324,749),(3324,750),(3325,751),(3325,752),(3325,753),(3326,754),(3326,755),(3327,756),(3327,757),(3328,758),(3328,789),(3329,761),(3329,790),(3330,762),(3330,763),(3331,768),(3331,785),(3331,786),(3332,769),(3332,783),(3332,784),(3335,766),(3336,767),(3343,770),(3343,771),(3344,772),(3344,773),(3345,774),(3345,775),(3347,776),(3347,777),(3347,987),(3348,778),(3348,779),(3349,780),(3372,781),(3372,782),(3373,787),(3373,788),(3376,791),(3376,792),(3377,793),(3377,794),(3378,799),(3378,800),(3379,801),(3379,802),(3380,795),(3380,796),(3381,797),(3381,798),(3383,805),(3384,806),(3384,807),(3385,808),(3385,809),(3386,810),(3386,811),(3387,812),(3387,814),(3388,815),(3388,816),(3391,817),(3391,818),(3391,819),(3392,820),(3392,821),(3392,822),(3393,826),(3393,827),(3394,828),(3394,829),(3395,830),(3395,831),(3396,834),(3396,835),(3397,832),(3397,833),(3398,836),(3398,837),(3399,838),(3399,839),(3410,850),(3410,851),(3411,852),(3411,853),(3412,848),(3412,849),(3419,860),(3419,951),(3420,859),(3420,861),(3422,862),(3422,863),(3423,864),(3423,865),(3424,866),(3424,867),(3424,872),(3424,873),(3425,868),(3425,869),(3425,874),(3425,875),(3426,878),(3426,879),(3427,876),(3427,877),(3428,880),(3432,884),(3432,885),(3432,886),(3434,887),(3434,888),(3434,889),(3441,894),(3441,895),(3442,896),(3442,897),(3444,904),(3445,905),(3449,906),(3449,907),(3450,908),(3450,909),(3453,910),(3458,915),(3458,916),(3459,917),(3459,918),(3463,919),(3463,920),(3485,929),(3486,930),(3487,931),(3488,932),(3489,933),(3493,2),(3494,2),(3501,934),(3502,936),(3503,938),(3504,939),(3505,941),(3506,942),(3507,943),(3508,944),(3509,945),(3510,946),(3511,947),(3512,948),(3514,949),(3514,950),(3515,953),(3516,954),(3517,955),(3518,956),(3519,957),(3520,958),(3521,959),(3527,960),(3527,965),(3528,961),(3528,962),(3529,963),(3529,964),(3530,966),(3530,967),(3531,968),(3531,969),(3535,970),(3535,971),(3536,972),(3536,973),(3540,999),(3540,1000),(3541,1001),(8888,9999); + +drop table t1; + +save_master_pos; +connection slave; +sync_with_master; + +connection master; + +--source include/rpl_end.inc diff --git a/storage/maria/ha_maria.cc b/storage/maria/ha_maria.cc index 2cafdecc4b1..38ee0758611 100644 --- a/storage/maria/ha_maria.cc +++ b/storage/maria/ha_maria.cc @@ -1554,6 +1554,7 @@ int ha_maria::repair(THD *thd, HA_CHECK *param, bool do_optimize) MARIA_SHARE *share= file->s; ha_rows rows= file->state->records; TRN *old_trn= file->trn; + my_bool locking= 0; DBUG_ENTER("ha_maria::repair"); /* @@ -1589,12 +1590,18 @@ int ha_maria::repair(THD *thd, HA_CHECK *param, bool do_optimize) param->out_flag= 0; strmov(fixed_name, share->open_file_name.str); - // Don't lock tables if we have used LOCK TABLE - if (!thd->locked_tables_mode && - maria_lock_database(file, table->s->tmp_table ? F_EXTRA_LCK : F_WRLCK)) + /* + Don't lock tables if we have used LOCK TABLE or if we come from + enable_index() + */ + if (!thd->locked_tables_mode && ! (param->testflag & T_NO_LOCKS)) { - _ma_check_print_error(param, ER(ER_CANT_LOCK), my_errno); - DBUG_RETURN(HA_ADMIN_FAILED); + locking= 1; + if (maria_lock_database(file, table->s->tmp_table ? F_EXTRA_LCK : F_WRLCK)) + { + _ma_check_print_error(param, ER(ER_CANT_LOCK), my_errno); + DBUG_RETURN(HA_ADMIN_FAILED); + } } if (!do_optimize || @@ -1726,7 +1733,7 @@ int ha_maria::repair(THD *thd, HA_CHECK *param, bool do_optimize) mysql_mutex_unlock(&share->intern_lock); thd_proc_info(thd, old_proc_info); thd_progress_end(thd); // Mark done - if (!thd->locked_tables_mode) + if (locking) maria_lock_database(file, F_UNLCK); /* Reset trn, that may have been set by repair */ @@ -1960,6 +1967,13 @@ int ha_maria::enable_indexes(uint mode) param.op_name= "recreating_index"; param.testflag= (T_SILENT | T_REP_BY_SORT | T_QUICK | T_CREATE_MISSING_KEYS | T_SAFE_REPAIR); + /* + Don't lock and unlock table if it's locked. + Normally table should be locked. This test is mostly for safety. + */ + if (likely(file->lock_type != F_UNLCK)) + param.testflag|= T_NO_LOCKS; + if (bulk_insert_single_undo == BULK_INSERT_SINGLE_UNDO_AND_NO_REPAIR) { bulk_insert_single_undo= BULK_INSERT_SINGLE_UNDO_AND_REPAIR; @@ -2199,7 +2213,7 @@ bool ha_maria::check_and_repair(THD *thd) { /* Remove error about crashed table */ thd->warning_info->clear_warning_info(thd->query_id); - push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_NOTE, + push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_NOTE, ER_CRASHED_ON_USAGE, "Zerofilling moved table %s", table->s->path.str); sql_print_information("Zerofilling moved table: '%s'", diff --git a/storage/myisam/ha_myisam.cc b/storage/myisam/ha_myisam.cc index 7cb5ae02e6d..a2e62d8ae1e 100644 --- a/storage/myisam/ha_myisam.cc +++ b/storage/myisam/ha_myisam.cc @@ -1068,6 +1068,7 @@ int ha_myisam::repair(THD *thd, HA_CHECK ¶m, bool do_optimize) char fixed_name[FN_REFLEN]; MYISAM_SHARE* share = file->s; ha_rows rows= file->state->records; + my_bool locking= 0; DBUG_ENTER("ha_myisam::repair"); param.db_name= table->s->db.str; @@ -1081,12 +1082,18 @@ int ha_myisam::repair(THD *thd, HA_CHECK ¶m, bool do_optimize) // Release latches since this can take a long time ha_release_temporary_latches(thd); - // Don't lock tables if we have used LOCK TABLE - if (! thd->locked_tables_mode && - mi_lock_database(file, table->s->tmp_table ? F_EXTRA_LCK : F_WRLCK)) + /* + Don't lock tables if we have used LOCK TABLE or if we come from + enable_index() + */ + if (!thd->locked_tables_mode && ! (param.testflag & T_NO_LOCKS)) { - mi_check_print_error(¶m,ER(ER_CANT_LOCK),my_errno); - DBUG_RETURN(HA_ADMIN_FAILED); + locking= 1; + if (mi_lock_database(file, table->s->tmp_table ? F_EXTRA_LCK : F_WRLCK)) + { + mi_check_print_error(¶m,ER(ER_CANT_LOCK),my_errno); + DBUG_RETURN(HA_ADMIN_FAILED); + } } if (!do_optimize || @@ -1205,7 +1212,7 @@ int ha_myisam::repair(THD *thd, HA_CHECK ¶m, bool do_optimize) update_state_info(¶m, file, 0); } thd_proc_info(thd, old_proc_info); - if (! thd->locked_tables_mode) + if (locking) mi_lock_database(file,F_UNLCK); DBUG_RETURN(error ? HA_ADMIN_FAILED : !optimize_done ? HA_ADMIN_ALREADY_DONE : HA_ADMIN_OK); @@ -1437,6 +1444,13 @@ int ha_myisam::enable_indexes(uint mode) param.op_name= "recreating_index"; param.testflag= (T_SILENT | T_REP_BY_SORT | T_QUICK | T_CREATE_MISSING_KEYS); + /* + Don't lock and unlock table if it's locked. + Normally table should be locked. This test is mostly for safety. + */ + if (likely(file->lock_type != F_UNLCK)) + param.testflag|= T_NO_LOCKS; + param.myf_rw&= ~MY_WAIT_IF_FULL; param.sort_buffer_length= THDVAR(thd, sort_buffer_size); param.stats_method= (enum_handler_stats_method)THDVAR(thd, stats_method); @@ -1515,7 +1529,7 @@ int ha_myisam::indexes_are_disabled(void) void ha_myisam::start_bulk_insert(ha_rows rows) { DBUG_ENTER("ha_myisam::start_bulk_insert"); - THD *thd= current_thd; + THD *thd= table->in_use; ulong size= min(thd->variables.read_buff_size, (ulong) (table->s->avg_row_length*rows)); DBUG_PRINT("info",("start_bulk_insert: rows %lu size %lu", @@ -1589,7 +1603,7 @@ int ha_myisam::end_bulk_insert() */ if (((err= enable_indexes(HA_KEY_SWITCH_NONUNIQ_SAVE)) != 0) && - current_thd->killed) + table->in_use->killed) { delete_all_rows(); /* not crashed, despite being killed during repair */ From 80ee57a30ac9f4692c57ba3b02ce364cc9fcbfe9 Mon Sep 17 00:00:00 2001 From: Michael Widenius <monty@mariadb.org> Date: Mon, 15 Dec 2014 13:01:11 +0200 Subject: [PATCH 61/99] MDEV-6896 kill user command cause MariaDB crash mysql-test/r/kill-2.result: test case for MDEV-6896 mysql-test/t/kill-2-master.opt: test case for MDEV-6896 mysql-test/t/kill-2.test: test case for MDEV-6896 sql/sql_parse.cc: Use host_or_ip instead of host as host may be 0 --- mysql-test/r/kill-2.result | 10 ++++++++++ mysql-test/t/kill-2-master.opt | 1 + mysql-test/t/kill-2.test | 29 +++++++++++++++++++++++++++++ sql/sql_parse.cc | 2 +- 4 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 mysql-test/r/kill-2.result create mode 100644 mysql-test/t/kill-2-master.opt create mode 100644 mysql-test/t/kill-2.test diff --git a/mysql-test/r/kill-2.result b/mysql-test/r/kill-2.result new file mode 100644 index 00000000000..c2bcc979441 --- /dev/null +++ b/mysql-test/r/kill-2.result @@ -0,0 +1,10 @@ +# +# MDEV-6896 kill user command cause MariaDB crash! +# +create user foo@'127.0.0.1'; +select user from information_schema.processlist; +user +foo +root +kill user foo@'127.0.0.1'; +drop user foo@'127.0.0.1'; diff --git a/mysql-test/t/kill-2-master.opt b/mysql-test/t/kill-2-master.opt new file mode 100644 index 00000000000..ab6ca1731f5 --- /dev/null +++ b/mysql-test/t/kill-2-master.opt @@ -0,0 +1 @@ +--skip-name-resolve diff --git a/mysql-test/t/kill-2.test b/mysql-test/t/kill-2.test new file mode 100644 index 00000000000..0c1177722b4 --- /dev/null +++ b/mysql-test/t/kill-2.test @@ -0,0 +1,29 @@ +# +# Test KILL and KILL QUERY statements. +# +# Killing a connection in an embedded server does not work like in a normal +# server, if it is waiting for a new statement. In an embedded server, the +# connection does not read() from a socket, but returns control to the +# application. 'mysqltest' does not handle the kill request. +# + +-- source include/not_embedded.inc +-- source include/not_threadpool.inc + +--echo # +--echo # MDEV-6896 kill user command cause MariaDB crash! +--echo # + +create user foo@'127.0.0.1'; + +--connect (con1,127.0.0.1,foo,,) + +--connection default +select user from information_schema.processlist; +kill user foo@'127.0.0.1'; + +let $wait_condition= + select count(*) = 0 from information_schema.processlist + where user = "foo"; +--source include/wait_condition.inc +drop user foo@'127.0.0.1'; diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 0fe3c5b90ea..c21e7fa3e4b 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -6745,7 +6745,7 @@ static uint kill_threads_for_user(THD *thd, LEX_USER *user, host.str[0] == '%' means that host name was not given. See sql_yacc.yy */ if (((user->host.str[0] == '%' && !user->host.str[1]) || - !strcmp(tmp->security_ctx->host, user->host.str)) && + !strcmp(tmp->security_ctx->host_or_ip, user->host.str)) && !strcmp(tmp->security_ctx->user, user->user.str)) { if (!(thd->security_ctx->master_access & SUPER_ACL) && From 10ab3e68876bc7a16a6a2108a445f38778fa3df4 Mon Sep 17 00:00:00 2001 From: Michael Widenius <monty@mariadb.org> Date: Mon, 15 Dec 2014 14:49:23 +0200 Subject: [PATCH 62/99] MDEV-4010 Deadlock on concurrent INSERT .. SELECT into an Aria table with statement binary logging There was a bug in lock handling when mixing INSERT ... SELECT on the same table. mysql-test/suite/maria/insert_select.result: Test case for MDEV_4010 mysql-test/suite/maria/insert_select.test: Test case for MDEV_4010 mysys/thr_lock.c: We wrongly alldoed TL_WRITE_CONCURRENT_INSERT when there was a TL_READ_NO_INSERT lock --- mysql-test/suite/maria/insert_select.result | 6 ++++++ mysql-test/suite/maria/insert_select.test | 21 +++++++++++++++++++++ mysys/thr_lock.c | 16 +++++++++------- 3 files changed, 36 insertions(+), 7 deletions(-) create mode 100644 mysql-test/suite/maria/insert_select.result create mode 100644 mysql-test/suite/maria/insert_select.test diff --git a/mysql-test/suite/maria/insert_select.result b/mysql-test/suite/maria/insert_select.result new file mode 100644 index 00000000000..878914ddabf --- /dev/null +++ b/mysql-test/suite/maria/insert_select.result @@ -0,0 +1,6 @@ +create table t1 (pk int primary key) engine=Aria; +insert into t1 values (1); +insert into t1 select sleep(2)+1 from t1; +insert into t1 select 2 from t1; +ERROR 23000: Duplicate entry '1' for key 'PRIMARY' +drop table t1; diff --git a/mysql-test/suite/maria/insert_select.test b/mysql-test/suite/maria/insert_select.test new file mode 100644 index 00000000000..a86edc7d857 --- /dev/null +++ b/mysql-test/suite/maria/insert_select.test @@ -0,0 +1,21 @@ +# +# MDEV-4010 +# Deadlock on concurrent INSERT .. SELECT into an Aria table with statement +# binary logging +# +--source include/have_binlog_format_statement.inc + +create table t1 (pk int primary key) engine=Aria; +insert into t1 values (1); + +send insert into t1 select sleep(2)+1 from t1; + +--connect (con1,localhost,root,,) + +insert into t1 select 2 from t1; + +--connection default +--error 1062 +--reap +--disconnect con1 +drop table t1; diff --git a/mysys/thr_lock.c b/mysys/thr_lock.c index a7cbfa07db2..890140fc34f 100644 --- a/mysys/thr_lock.c +++ b/mysys/thr_lock.c @@ -325,7 +325,7 @@ static void check_locks(THR_LOCK *lock, const char *where, found_errors++; fprintf(stderr, "Warning at '%s': Write lock %d waiting while no exclusive read locks\n",where,(int) lock->write_wait.data->type); - DBUG_PRINT("warning", ("Warning at '%s': Write lock %d waiting while no exclusive read locks\n",where,(int) lock->write_wait.data->type)); + DBUG_PRINT("warning", ("Warning at '%s': Write lock %d waiting while no exclusive read locks",where,(int) lock->write_wait.data->type)); } } } @@ -345,7 +345,7 @@ static void check_locks(THR_LOCK *lock, const char *where, fprintf(stderr, "Warning at '%s': Found TL_WRITE_CONCURRENT_INSERT lock mixed with other write lock: %d\n", where, data->type); - DBUG_PRINT("warning", ("Warning at '%s': Found TL_WRITE_CONCURRENT_INSERT lock mixed with other write lock: %d\n", + DBUG_PRINT("warning", ("Warning at '%s': Found TL_WRITE_CONCURRENT_INSERT lock mixed with other write lock: %d", where, data->type)); break; } @@ -361,7 +361,7 @@ static void check_locks(THR_LOCK *lock, const char *where, fprintf(stderr, "Warning at '%s': Found WRITE_ALLOW_WRITE lock waiting for WRITE_ALLOW_WRITE lock\n", where); - DBUG_PRINT("warning", ("Warning at '%s': Found WRITE_ALLOW_WRITE lock waiting for WRITE_ALLOW_WRITE lock\n", + DBUG_PRINT("warning", ("Warning at '%s': Found WRITE_ALLOW_WRITE lock waiting for WRITE_ALLOW_WRITE lock", where)); } @@ -384,7 +384,7 @@ static void check_locks(THR_LOCK *lock, const char *where, "Warning at '%s' for lock: %d: Found lock of type %d that is write and read locked. Read_no_write_count: %d\n", where, (int) type, lock->write.data->type, lock->read_no_write_count); - DBUG_PRINT("warning",("At '%s' for lock %d: Found lock of type %d that is write and read locked\n", + DBUG_PRINT("warning",("At '%s' for lock %d: Found lock of type %d that is write and read locked", where, (int) type, lock->write.data->type)); } @@ -794,7 +794,8 @@ thr_lock(THR_LOCK_DATA *data, THR_LOCK_INFO *owner, ulong lock_wait_timeout) The idea is to allow us to get a lock at once if we already have a write lock or if there is no pending write locks and if all write locks are of the same type and are either - TL_WRITE_ALLOW_WRITE or TL_WRITE_CONCURRENT_INSERT + TL_WRITE_ALLOW_WRITE or TL_WRITE_CONCURRENT_INSERT and + there is no TL_READ_NO_INSERT lock. Note that, since lock requests for the same table are sorted in such way that requests with higher thr_lock_type value come first @@ -811,7 +812,7 @@ thr_lock(THR_LOCK_DATA *data, THR_LOCK_INFO *owner, ulong lock_wait_timeout) situation. **) The exceptions are situations when: - when old lock type is TL_WRITE_DELAYED - But these should never happen within MySQL. + But these should never happen within MariaDB. Therefore it is OK to allow acquiring write lock on the table if this thread already holds some write lock on it. @@ -829,7 +830,8 @@ thr_lock(THR_LOCK_DATA *data, THR_LOCK_INFO *owner, ulong lock_wait_timeout) (lock_type == TL_WRITE_CONCURRENT_INSERT && lock->allow_multiple_concurrent_insert)) && ! lock->write_wait.data && - lock->write.data->type == lock_type) || + lock->write.data->type == lock_type && + ! lock->read_no_write_count) || has_old_lock(lock->write.data, data->owner)) { DBUG_PRINT("info", ("write_wait.data: 0x%lx old_type: %d", From 5257d71e0e495216162b790efc6866027aa2b718 Mon Sep 17 00:00:00 2001 From: Michael Widenius <monty@mariadb.org> Date: Mon, 15 Dec 2014 17:13:47 +0200 Subject: [PATCH 63/99] MDEV-6855 Assertion `cond_type == Item::FUNC_ITEM' failed in check_group_min_max_predicates with GROUP BY, aggregate in WHERE SQ, multi-part key mysql-test/r/group_by.result: Test for MDEV-6855 mysql-test/t/group_by.test: Test for MDEV-6855 sql/item.h: Fixed spelling error sql/opt_range.cc: Added handling of cond_type == Item::CACHE_ITEM in WHERE clauses for MIN/MAX optimization. Fixed indentation --- mysql-test/r/group_by.result | 14 ++++++++++++++ mysql-test/t/group_by.test | 15 +++++++++++++++ sql/item.h | 2 +- sql/opt_range.cc | 30 ++++++++++++++++++++---------- 4 files changed, 50 insertions(+), 11 deletions(-) diff --git a/mysql-test/r/group_by.result b/mysql-test/r/group_by.result index 57f21a5e0eb..32f7d61319b 100644 --- a/mysql-test/r/group_by.result +++ b/mysql-test/r/group_by.result @@ -2493,3 +2493,17 @@ SELECT i2 FROM t1 AS t1a STRAIGHT_JOIN ( t2 INNER JOIN t1 AS t1b ON (t1b.c1 = c2 WHERE t1a.c1 = c2 GROUP BY i2; i2 DROP TABLE t1,t2; +# +# MDEV-6855 +# MIN(*) with subqueries with IS NOT NULL in WHERE clause crashed. +# +CREATE TABLE t1 (i INT, c VARCHAR(3), KEY(c,i)) ENGINE=MyISAM; +INSERT INTO t1 VALUES (7,'foo'),(0,'bar'); +CREATE TABLE t2 (j INT) ENGINE=MyISAM; +INSERT INTO t2 VALUES (0),(8),(1),(8),(9); +SELECT MAX(i), c FROM t1 +WHERE c != 'qux' AND ( SELECT SUM(j) FROM t1, t2 ) IS NOT NULL GROUP BY c; +MAX(i) c +0 bar +7 foo +drop table t1,t2; diff --git a/mysql-test/t/group_by.test b/mysql-test/t/group_by.test index 92d1c18ee13..a1f7f693c21 100644 --- a/mysql-test/t/group_by.test +++ b/mysql-test/t/group_by.test @@ -1665,6 +1665,21 @@ WHERE t1a.c1 = c2 GROUP BY i2; DROP TABLE t1,t2; +--echo # +--echo # MDEV-6855 +--echo # MIN(*) with subqueries with IS NOT NULL in WHERE clause crashed. +--echo # + +CREATE TABLE t1 (i INT, c VARCHAR(3), KEY(c,i)) ENGINE=MyISAM; +INSERT INTO t1 VALUES (7,'foo'),(0,'bar'); + +CREATE TABLE t2 (j INT) ENGINE=MyISAM; +INSERT INTO t2 VALUES (0),(8),(1),(8),(9); + +SELECT MAX(i), c FROM t1 +WHERE c != 'qux' AND ( SELECT SUM(j) FROM t1, t2 ) IS NOT NULL GROUP BY c; +drop table t1,t2; + # # End of MariaDB 5.5 tests # diff --git a/sql/item.h b/sql/item.h index 57e91e5b3d8..ed50605ef7b 100644 --- a/sql/item.h +++ b/sql/item.h @@ -4038,7 +4038,7 @@ private: /** @todo Implement the is_null() method for this class. Currently calling is_null() - on any Item_cache object resolves to Item::is_null(), which reutns FALSE + on any Item_cache object resolves to Item::is_null(), which returns FALSE for any value. */ diff --git a/sql/opt_range.cc b/sql/opt_range.cc index 04481b39d2f..17b24aa70fd 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -12539,12 +12539,13 @@ get_best_group_min_max(PARAM *param, SEL_TREE *tree, double read_time) SYNOPSIS check_group_min_max_predicates() - cond [in] the expression tree being analyzed - min_max_arg [in] the field referenced by the MIN/MAX function(s) - image_type [in] - has_min_max_arg [out] true if the subtree being analyzed references min_max_arg - has_other_arg [out] true if the subtree being analyzed references a column - other min_max_arg + cond [in] the expression tree being analyzed + min_max_arg [in] the field referenced by the MIN/MAX function(s) + image_type [in] + has_min_max_arg [out] true if the subtree being analyzed references + min_max_arg + has_other_arg [out] true if the subtree being analyzed references a + column other min_max_arg DESCRIPTION The function walks recursively over the cond tree representing a WHERE @@ -12588,7 +12589,7 @@ check_group_min_max_predicates(Item *cond, Item_field *min_max_arg_item, (2) the subtree passes the test, but it is an OR and it references both the min/max argument and other columns. */ - if (!check_group_min_max_predicates(and_or_arg, min_max_arg_item, //1 + if (!check_group_min_max_predicates(and_or_arg, min_max_arg_item, //1 image_type, &has_min_max, &has_other) || (func_type == Item_func::COND_OR_FUNC && has_min_max && has_other))//2 @@ -12604,7 +12605,7 @@ check_group_min_max_predicates(Item *cond, Item_field *min_max_arg_item, a subquery in the WHERE clause. */ - if (cond_type == Item::SUBSELECT_ITEM) + if (unlikely(cond_type == Item::SUBSELECT_ITEM)) { Item_subselect *subs_cond= (Item_subselect*) cond; if (subs_cond->is_correlated) @@ -12621,7 +12622,14 @@ check_group_min_max_predicates(Item *cond, Item_field *min_max_arg_item, } DBUG_RETURN(TRUE); } - + /* + Subquery with IS [NOT] NULL + TODO: Look into the cache_item and optimize it like we do for + subselect's above + */ + if (unlikely(cond_type == Item::CACHE_ITEM)) + DBUG_RETURN(cond->const_item()); + /* Condition of the form 'field' is equivalent to 'field <> 0' and thus satisfies the SA3 condition. @@ -12638,7 +12646,9 @@ check_group_min_max_predicates(Item *cond, Item_field *min_max_arg_item, /* We presume that at this point there are no other Items than functions. */ DBUG_ASSERT(cond_type == Item::FUNC_ITEM); - + if (unlikely(cond_type != Item::FUNC_ITEM)) /* Safety */ + DBUG_RETURN(FALSE); + /* Test if cond references only group-by or non-group fields. */ Item_func *pred= (Item_func*) cond; Item_func::Functype pred_type= pred->functype(); From 8e193934c0938a34547481ae92556eef72f99df3 Mon Sep 17 00:00:00 2001 From: Rich Prohaska <prohaska@tokutek.com> Date: Mon, 15 Dec 2014 16:02:10 -0500 Subject: [PATCH 64/99] FT-635 count the number of deleted leaf entries that are skipped by a cursor search Conflicts: ft/ft-ops.cc --- ft/ft-internal.h | 1 + ft/ft-ops.cc | 12 ++++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/ft/ft-internal.h b/ft/ft-internal.h index 3cd39705571..88fc5dca686 100644 --- a/ft/ft-internal.h +++ b/ft/ft-internal.h @@ -616,6 +616,7 @@ typedef enum { FT_PRO_RIGHTMOST_LEAF_SHORTCUT_SUCCESS, FT_PRO_RIGHTMOST_LEAF_SHORTCUT_FAIL_POS, FT_PRO_RIGHTMOST_LEAF_SHORTCUT_FAIL_REACTIVE, + FT_CURSOR_SKIP_DELETED_LEAF_ENTRY, // how many deleted leaf entries were skipped by a cursor FT_STATUS_NUM_ROWS } ft_status_entry; diff --git a/ft/ft-ops.cc b/ft/ft-ops.cc index a8efc47629d..4fb37603b6b 100644 --- a/ft/ft-ops.cc +++ b/ft/ft-ops.cc @@ -375,6 +375,8 @@ status_init(void) STATUS_INIT(FT_PRO_RIGHTMOST_LEAF_SHORTCUT_FAIL_POS, nullptr, PARCOUNT, "promotion: tried the rightmost leaf shorcut but failed (out-of-bounds)", TOKU_ENGINE_STATUS); STATUS_INIT(FT_PRO_RIGHTMOST_LEAF_SHORTCUT_FAIL_REACTIVE,nullptr, PARCOUNT, "promotion: tried the rightmost leaf shorcut but failed (child reactive)", TOKU_ENGINE_STATUS); + STATUS_INIT(FT_CURSOR_SKIP_DELETED_LEAF_ENTRY, CURSOR_SKIP_DELETED_LEAF_ENTRY, PARCOUNT, "cursor skipped deleted leaf entries", TOKU_ENGINE_STATUS|TOKU_GLOBAL_STATUS); + ft_status.initialized = true; } static void status_destroy(void) { @@ -3376,13 +3378,13 @@ ok: ; if (le_val_is_del(le, ftcursor->is_snapshot_read, ftcursor->ttxn)) { // Provisionally deleted stuff is gone. // So we need to scan in the direction to see if we can find something. - // Every 100 deleted leaf entries check if the leaf's key is within the search bounds. - for (uint n_deleted = 1; ; n_deleted++) { + // Every 64 deleted leaf entries check if the leaf's key is within the search bounds. + for (uint64_t n_deleted = 1; ; n_deleted++) { switch (search->direction) { case FT_SEARCH_LEFT: idx++; - if (idx >= bn->data_buffer.num_klpairs() || - ((n_deleted % 64) == 0 && !search_continue(search, key, keylen))) { + if (idx >= bn->data_buffer.num_klpairs() || ((n_deleted % 64) == 0 && !search_continue(search, key, keylen))) { + STATUS_INC(FT_CURSOR_SKIP_DELETED_LEAF_ENTRY, n_deleted); if (ftcursor->interrupt_cb && ftcursor->interrupt_cb(ftcursor->interrupt_cb_extra)) { return TOKUDB_INTERRUPTED; } @@ -3391,6 +3393,7 @@ ok: ; break; case FT_SEARCH_RIGHT: if (idx == 0) { + STATUS_INC(FT_CURSOR_SKIP_DELETED_LEAF_ENTRY, n_deleted); if (ftcursor->interrupt_cb && ftcursor->interrupt_cb(ftcursor->interrupt_cb_extra)) { return TOKUDB_INTERRUPTED; } @@ -3404,6 +3407,7 @@ ok: ; r = bn->data_buffer.fetch_klpair(idx, &le, &keylen, &key); assert_zero(r); // we just validated the index if (!le_val_is_del(le, ftcursor->is_snapshot_read, ftcursor->ttxn)) { + STATUS_INC(FT_CURSOR_SKIP_DELETED_LEAF_ENTRY, n_deleted); goto got_a_good_value; } } From 357cb12d87aa9d6abcf345b7221cf58d01203cdf Mon Sep 17 00:00:00 2001 From: Alexander Barkov <bar@mnogosearch.org> Date: Tue, 16 Dec 2014 15:33:13 +0400 Subject: [PATCH 65/99] DEV-7221 from_days fails after null value --- mysql-test/r/func_time.result | 24 ++++++++++++++++++++++++ mysql-test/t/func_time.test | 18 ++++++++++++++++++ sql/item_timefunc.cc | 7 +++---- 3 files changed, 45 insertions(+), 4 deletions(-) diff --git a/mysql-test/r/func_time.result b/mysql-test/r/func_time.result index 8c156efbac1..08d46ab10fa 100644 --- a/mysql-test/r/func_time.result +++ b/mysql-test/r/func_time.result @@ -2561,3 +2561,27 @@ Warning 1292 Truncated incorrect time value: '9336:00:00' Warning 1292 Truncated incorrect time value: '2952:00:00' Warning 1292 Truncated incorrect time value: '2952:00:00' DROP TABLE t1; +# +# MDEV-7221 from_days fails after null value +# +CREATE TABLE t1 ( +id INT(11) NOT NULL PRIMARY KEY, +date1 DATE NULL DEFAULT NULL +); +INSERT INTO t1 VALUES (12, '2011-05-12'); +INSERT INTO t1 VALUES (13, NULL); +INSERT INTO t1 VALUES (14, '2009-10-23'); +INSERT INTO t1 VALUES (15, '2014-10-30'); +INSERT INTO t1 VALUES (16, NULL); +INSERT INTO t1 VALUES (17, NULL); +INSERT INTO t1 VALUES (18, '2010-10-13'); +SELECT a.id,a.date1,FROM_DAYS(TO_DAYS(a.date1)-10) as date2, DATE_ADD(a.date1,INTERVAL -10 DAY),TO_DAYS(a.date1)-10 FROM t1 a ORDER BY a.id; +id date1 date2 DATE_ADD(a.date1,INTERVAL -10 DAY) TO_DAYS(a.date1)-10 +12 2011-05-12 2011-05-02 2011-05-02 734624 +13 NULL NULL NULL NULL +14 2009-10-23 2009-10-13 2009-10-13 734058 +15 2014-10-30 2014-10-20 2014-10-20 735891 +16 NULL NULL NULL NULL +17 NULL NULL NULL NULL +18 2010-10-13 2010-10-03 2010-10-03 734413 +DROP TABLE t1; diff --git a/mysql-test/t/func_time.test b/mysql-test/t/func_time.test index 5bb19fe3587..f6afef99134 100644 --- a/mysql-test/t/func_time.test +++ b/mysql-test/t/func_time.test @@ -1561,3 +1561,21 @@ CREATE TABLE t1 ( d DATE, t TIME ); INSERT INTO t1 VALUES ('2008-12-05','22:34:09'),('2005-03-27','14:26:02'); SELECT EXTRACT(DAY_MINUTE FROM GREATEST(t,d)), GREATEST(t,d) FROM t1; DROP TABLE t1; + + +--echo # +--echo # MDEV-7221 from_days fails after null value +--echo # +CREATE TABLE t1 ( + id INT(11) NOT NULL PRIMARY KEY, + date1 DATE NULL DEFAULT NULL +); +INSERT INTO t1 VALUES (12, '2011-05-12'); +INSERT INTO t1 VALUES (13, NULL); +INSERT INTO t1 VALUES (14, '2009-10-23'); +INSERT INTO t1 VALUES (15, '2014-10-30'); +INSERT INTO t1 VALUES (16, NULL); +INSERT INTO t1 VALUES (17, NULL); +INSERT INTO t1 VALUES (18, '2010-10-13'); +SELECT a.id,a.date1,FROM_DAYS(TO_DAYS(a.date1)-10) as date2, DATE_ADD(a.date1,INTERVAL -10 DAY),TO_DAYS(a.date1)-10 FROM t1 a ORDER BY a.id; +DROP TABLE t1; diff --git a/sql/item_timefunc.cc b/sql/item_timefunc.cc index 59a5f1849f8..522004e965b 100644 --- a/sql/item_timefunc.cc +++ b/sql/item_timefunc.cc @@ -1488,10 +1488,9 @@ String *Item_temporal_func::val_str(String *str) bool Item_func_from_days::get_date(MYSQL_TIME *ltime, ulonglong fuzzy_date) { longlong value=args[0]->val_int(); - if (args[0]->null_value) - return (null_value= 1); - if ((fuzzy_date & TIME_NO_ZERO_DATE) && value == 0) - return (null_value= 1); + if ((null_value= (args[0]->null_value || + ((fuzzy_date & TIME_NO_ZERO_DATE) && value == 0)))) + return true; bzero(ltime, sizeof(MYSQL_TIME)); if (get_date_from_daynr((long) value, <ime->year, <ime->month, <ime->day)) From ff5349bd6c4eb71b26a74290864c58f7b34690b2 Mon Sep 17 00:00:00 2001 From: unknown <sanja@askmonty.org> Date: Wed, 17 Dec 2014 14:35:13 +0100 Subject: [PATCH 66/99] MDEV-6985: MariaDB crashes on stored procedure call Item_ident fixed to allow double cleanup(). --- mysql-test/r/sp-innodb.result | 32 +++++++++++++++++++++++++ mysql-test/t/sp-innodb.test | 45 +++++++++++++++++++++++++++++++++++ sql/item.cc | 10 +++++++- 3 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 mysql-test/r/sp-innodb.result create mode 100644 mysql-test/t/sp-innodb.test diff --git a/mysql-test/r/sp-innodb.result b/mysql-test/r/sp-innodb.result new file mode 100644 index 00000000000..da02957d3c9 --- /dev/null +++ b/mysql-test/r/sp-innodb.result @@ -0,0 +1,32 @@ +drop table if exists t1,t2; +drop procedure if exists p1; +# +#MDEV-6985: MariaDB crashes on stored procedure call +# +CREATE TABLE `t1` ( +`ID` int(11) NOT NULL, +PRIMARY KEY (`ID`) +) ENGINE=InnoDB; +CREATE TABLE `t2` ( +`ID` int(11) NOT NULL, +`DATE` datetime DEFAULT NULL, +PRIMARY KEY (`ID`) +) ENGINE=InnoDB; +CREATE PROCEDURE `p1`() +BEGIN +DECLARE _mySelect CURSOR FOR +SELECT DISTINCT t1.ID +FROM t1 +LEFT JOIN t2 AS t2 ON +t2.ID = t1.ID +AND t2.DATE = ( +SELECT MAX(T3.DATE) FROM t2 AS T3 WHERE T3.ID = t2.ID AND T3.DATE<=NOW() +) +WHERE t1.ID = 1; +OPEN _mySelect; +CLOSE _mySelect; +END ;; +CALL p1(); +CALL p1(); +drop procedure p1; +drop table t1,t2; diff --git a/mysql-test/t/sp-innodb.test b/mysql-test/t/sp-innodb.test new file mode 100644 index 00000000000..228ab42544d --- /dev/null +++ b/mysql-test/t/sp-innodb.test @@ -0,0 +1,45 @@ + +--source include/have_innodb.inc + +--disable_warnings +drop table if exists t1,t2; +drop procedure if exists p1; +--enable_warnings + +--echo # +--echo #MDEV-6985: MariaDB crashes on stored procedure call +--echo # +CREATE TABLE `t1` ( + `ID` int(11) NOT NULL, + PRIMARY KEY (`ID`) +) ENGINE=InnoDB; + +CREATE TABLE `t2` ( + `ID` int(11) NOT NULL, + `DATE` datetime DEFAULT NULL, + PRIMARY KEY (`ID`) +) ENGINE=InnoDB; + +--delimiter ;; + +CREATE PROCEDURE `p1`() +BEGIN + DECLARE _mySelect CURSOR FOR + SELECT DISTINCT t1.ID + FROM t1 + LEFT JOIN t2 AS t2 ON + t2.ID = t1.ID + AND t2.DATE = ( + SELECT MAX(T3.DATE) FROM t2 AS T3 WHERE T3.ID = t2.ID AND T3.DATE<=NOW() + ) + WHERE t1.ID = 1; + OPEN _mySelect; + CLOSE _mySelect; +END ;; +--delimiter ; + +CALL p1(); +CALL p1(); + +drop procedure p1; +drop table t1,t2; diff --git a/sql/item.cc b/sql/item.cc index 78c5fff3d2c..bddf011b60e 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -862,12 +862,20 @@ void Item_ident::cleanup() field_name ? field_name : "(null)", orig_field_name ? orig_field_name : "(null)")); #endif + bool was_fixed= fixed; Item::cleanup(); db_name= orig_db_name; table_name= orig_table_name; field_name= orig_field_name; /* Store if this Item was depended */ - can_be_depended= test(depended_from); + if (was_fixed) + { + /* + We can trust that depended_from set correctly only if this item + was fixed + */ + can_be_depended= test(depended_from); + } DBUG_VOID_RETURN; } From a4ff2afcb4b1e16f1d467add82a7313d3da05a05 Mon Sep 17 00:00:00 2001 From: unknown <sanja@askmonty.org> Date: Wed, 17 Dec 2014 14:38:14 +0100 Subject: [PATCH 67/99] cleanup --- sql/item.cc | 8 -------- 1 file changed, 8 deletions(-) diff --git a/sql/item.cc b/sql/item.cc index bddf011b60e..cfc5f67dc8e 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -854,14 +854,6 @@ Item_ident::Item_ident(THD *thd, Item_ident *item) void Item_ident::cleanup() { DBUG_ENTER("Item_ident::cleanup"); -#ifdef CANT_BE_USED_AS_MEMORY_IS_FREED - db_name ? db_name : "(null)", - orig_db_name ? orig_db_name : "(null)", - table_name ? table_name : "(null)", - orig_table_name ? orig_table_name : "(null)", - field_name ? field_name : "(null)", - orig_field_name ? orig_field_name : "(null)")); -#endif bool was_fixed= fixed; Item::cleanup(); db_name= orig_db_name; From 612d7a87a0df95fa3b5c6d27dea20f2a41830f5b Mon Sep 17 00:00:00 2001 From: Rich Prohaska <prohaska@tokutek.com> Date: Wed, 17 Dec 2014 10:48:34 -0500 Subject: [PATCH 68/99] FT-635 adjust test result with new status variable --- .../suite/tokudb/r/information-schema-global-status.result | 1 + 1 file changed, 1 insertion(+) diff --git a/mysql-test/suite/tokudb/r/information-schema-global-status.result b/mysql-test/suite/tokudb/r/information-schema-global-status.result index 369c14fe4fe..7d0e83260e1 100644 --- a/mysql-test/suite/tokudb/r/information-schema-global-status.result +++ b/mysql-test/suite/tokudb/r/information-schema-global-status.result @@ -65,6 +65,7 @@ TOKUDB_CHECKPOINT_LONG_BEGIN_COUNT TOKUDB_CHECKPOINT_LONG_BEGIN_TIME TOKUDB_CHECKPOINT_PERIOD TOKUDB_CHECKPOINT_TAKEN +TOKUDB_CURSOR_SKIP_DELETED_LEAF_ENTRY TOKUDB_DB_CLOSES TOKUDB_DB_OPENS TOKUDB_DB_OPEN_CURRENT From 59f2e817693c5a9e94f4a10803957a6ceafe1855 Mon Sep 17 00:00:00 2001 From: Rich Prohaska <prohaska@tokutek.com> Date: Wed, 17 Dec 2014 16:44:02 -0500 Subject: [PATCH 69/99] DB-783 append -Wvla to compiler flags to allow variable length arrays to be used in tokudb --- storage/tokudb/CMakeLists.txt | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/storage/tokudb/CMakeLists.txt b/storage/tokudb/CMakeLists.txt index faeb50f924f..2a1d4988a06 100644 --- a/storage/tokudb/CMakeLists.txt +++ b/storage/tokudb/CMakeLists.txt @@ -46,18 +46,34 @@ include(CheckCXXCompilerFlag) macro(set_cflags_if_supported) foreach(flag ${ARGN}) - check_c_compiler_flag(${flag} HAVE_C_${flag}) - if (HAVE_C_${flag}) + string(REGEX REPLACE "-" "_" temp_flag ${flag}) + check_c_compiler_flag(${flag} HAVE_C_${temp_flag}) + if (HAVE_C_${temp_flag}) set(CMAKE_C_FLAGS "${flag} ${CMAKE_C_FLAGS}") endif () - check_cxx_compiler_flag(${flag} HAVE_CXX_${flag}) - if (HAVE_CXX_${flag}) + check_cxx_compiler_flag(${flag} HAVE_CXX_${temp_flag}) + if (HAVE_CXX_${temp_flag}) set(CMAKE_CXX_FLAGS "${flag} ${CMAKE_CXX_FLAGS}") endif () endforeach(flag) endmacro(set_cflags_if_supported) +macro(append_cflags_if_supported) + foreach(flag ${ARGN}) + string(REGEX REPLACE "-" "_" temp_flag ${flag}) + check_c_compiler_flag(${flag} HAVE_C_${temp_flag}) + if (HAVE_C_${temp_flag}) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}") + endif () + check_cxx_compiler_flag(${flag} HAVE_CXX_${temp_flag}) + if (HAVE_CXX_${temp_flag}) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}") + endif () + endforeach(flag) +endmacro(append_cflags_if_supported) + set_cflags_if_supported(-Wno-missing-field-initializers) +append_cflags_if_supported(-Wno-vla) ADD_SUBDIRECTORY(ft-index) From 724dbaabc0d06c4446417eb217d8536f193461f9 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik <sergii@pisem.net> Date: Thu, 18 Dec 2014 00:13:16 +0100 Subject: [PATCH 70/99] MDEV-7150 Wrong auto increment values on INSERT .. ON DUPLICATE KEY UPDATE when the inserted columns include NULL in an auto-increment column when restoring auto-inc value in INSERT ... ON DUPLICATE KEY UPDATE, take into account that 1. it may be changed in the UPDATE clause (old code did that) 2. it may be changed in the INSERT clause and then cause a dup key (old code missed that) --- mysql-test/r/insert_update_autoinc-7150.result | 9 +++++++++ mysql-test/t/insert_update_autoinc-7150.test | 8 ++++++++ sql/sql_insert.cc | 2 +- 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 mysql-test/r/insert_update_autoinc-7150.result create mode 100644 mysql-test/t/insert_update_autoinc-7150.test diff --git a/mysql-test/r/insert_update_autoinc-7150.result b/mysql-test/r/insert_update_autoinc-7150.result new file mode 100644 index 00000000000..96773479310 --- /dev/null +++ b/mysql-test/r/insert_update_autoinc-7150.result @@ -0,0 +1,9 @@ +create table t1 (a int(10) auto_increment primary key, b int(11)); +insert t1 values (null,1); +insert t1 values (null,2), (1,-1), (null,3) on duplicate key update b=values(b); +select * from t1; +a b +1 -1 +2 2 +3 3 +drop table t1; diff --git a/mysql-test/t/insert_update_autoinc-7150.test b/mysql-test/t/insert_update_autoinc-7150.test new file mode 100644 index 00000000000..1229898b4aa --- /dev/null +++ b/mysql-test/t/insert_update_autoinc-7150.test @@ -0,0 +1,8 @@ +# +# MDEV-7150 Wrong auto increment values on INSERT .. ON DUPLICATE KEY UPDATE when the inserted columns include NULL in an auto-increment column +# +create table t1 (a int(10) auto_increment primary key, b int(11)); +insert t1 values (null,1); +insert t1 values (null,2), (1,-1), (null,3) on duplicate key update b=values(b); +select * from t1; +drop table t1; diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index ccfdf352f53..4500c4492c4 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -1754,7 +1754,7 @@ int write_record(THD *thd, TABLE *table,COPY_INFO *info) table->file->adjust_next_insert_id_after_explicit_value(table->next_number_field->val_int()); } - else + else if (prev_insert_id_for_cur_row) { table->file->restore_auto_increment(prev_insert_id_for_cur_row); } From b75090c7dede338236b98ace65362348579ffa01 Mon Sep 17 00:00:00 2001 From: Sergey Petrunya <psergey@askmonty.org> Date: Thu, 18 Dec 2014 20:06:49 +0300 Subject: [PATCH 71/99] MDEV-6830: Server crashes in best_access_path after a sequence of SELECTs ... generate_derived_keys_for_table() did not work correctly in the case where - it had a potential index on derived table - however, TABLE::check_tmp_key() would disallow creation of this index after looking at its future key parts (because of the key parts exceeding max. index length) - the code would leave a KEYUSE structure that refers to a non-existant index. Depending on further optimizer calculations, this could cause a crash. --- mysql-test/r/mdev6830.result | 49 +++++++++++++++++++++++++ mysql-test/t/mdev6830-master.opt | 1 + mysql-test/t/mdev6830.test | 63 ++++++++++++++++++++++++++++++++ sql/sql_select.cc | 2 +- 4 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 mysql-test/r/mdev6830.result create mode 100644 mysql-test/t/mdev6830-master.opt create mode 100644 mysql-test/t/mdev6830.test diff --git a/mysql-test/r/mdev6830.result b/mysql-test/r/mdev6830.result new file mode 100644 index 00000000000..0570659e860 --- /dev/null +++ b/mysql-test/r/mdev6830.result @@ -0,0 +1,49 @@ +drop table if exists t1,t2,t3; +drop view if exists v2,v3; +CREATE TABLE t1 (pk INT PRIMARY KEY) ENGINE=MyISAM; +CREATE TABLE t2 ( +f1 DATE, +f2 VARCHAR(1024), +f3 VARCHAR(10), +f4 DATE, +f5 VARCHAR(10), +f6 VARCHAR(10), +f7 VARCHAR(10), +f8 DATETIME, +f9 INT, +f10 VARCHAR(1024), +f11 VARCHAR(1024), +f12 INT, +f13 VARCHAR(1024) +) ENGINE=MyISAM; +CREATE OR REPLACE VIEW v2 AS SELECT * FROM t2; +CREATE TABLE t3 ( +f1 VARCHAR(1024), +f2 VARCHAR(1024), +f3 DATETIME, +f4 VARCHAR(10), +f5 INT, +f6 VARCHAR(10), +f7 VARCHAR(1024), +f8 VARCHAR(10), +f9 INT, +f10 DATE, +f11 INT, +f12 VARCHAR(1024), +f13 VARCHAR(10), +f14 DATE, +f15 DATETIME +) ENGINE=MyISAM; +CREATE OR REPLACE ALGORITHM=TEMPTABLE VIEW v3 AS SELECT * FROM t3; +INSERT INTO t3 VALUES +('FOO','foo','2000-08-04 00:00:00','one',1,'1','FOO','foo',1,'2004-05-09',1,'one','one','2001-12-07','2001-10-17 08:25:04'), +('BAR','bar','2001-01-01 04:52:37','two',2,'2','BAR','bar',2,'2008-01-01',2,'two','two','2006-06-19','2002-01-01 08:22:49'); +CREATE TABLE t4 (f1 VARCHAR(10), f2 INT) ENGINE=MyISAM; +SELECT * FROM t1; +pk +SELECT non_existing FROM v2; +ERROR 42S22: Unknown column 'non_existing' in 'field list' +SELECT * FROM t1, v3, t4 WHERE v3.f1 = t4.f1 AND t4.f2 = 6 AND t1.pk = v3.f5; +pk f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 f13 f14 f15 f1 f2 +drop table t1,t2,t3,t4; +drop view v2,v3; diff --git a/mysql-test/t/mdev6830-master.opt b/mysql-test/t/mdev6830-master.opt new file mode 100644 index 00000000000..2a8c27d4731 --- /dev/null +++ b/mysql-test/t/mdev6830-master.opt @@ -0,0 +1 @@ +--debug diff --git a/mysql-test/t/mdev6830.test b/mysql-test/t/mdev6830.test new file mode 100644 index 00000000000..24565d04fed --- /dev/null +++ b/mysql-test/t/mdev6830.test @@ -0,0 +1,63 @@ + +--source include/have_debug.inc + +--disable_warnings +drop table if exists t1,t2,t3; +drop view if exists v2,v3; +--enable_warnings +CREATE TABLE t1 (pk INT PRIMARY KEY) ENGINE=MyISAM; + +CREATE TABLE t2 ( + f1 DATE, + f2 VARCHAR(1024), + f3 VARCHAR(10), + f4 DATE, + f5 VARCHAR(10), + f6 VARCHAR(10), + f7 VARCHAR(10), + f8 DATETIME, + f9 INT, + f10 VARCHAR(1024), + f11 VARCHAR(1024), + f12 INT, + f13 VARCHAR(1024) +) ENGINE=MyISAM; + +CREATE OR REPLACE VIEW v2 AS SELECT * FROM t2; + +CREATE TABLE t3 ( + f1 VARCHAR(1024), + f2 VARCHAR(1024), + f3 DATETIME, + f4 VARCHAR(10), + f5 INT, + f6 VARCHAR(10), + f7 VARCHAR(1024), + f8 VARCHAR(10), + f9 INT, + f10 DATE, + f11 INT, + f12 VARCHAR(1024), + f13 VARCHAR(10), + f14 DATE, + f15 DATETIME +) ENGINE=MyISAM; + +CREATE OR REPLACE ALGORITHM=TEMPTABLE VIEW v3 AS SELECT * FROM t3; + +INSERT INTO t3 VALUES + ('FOO','foo','2000-08-04 00:00:00','one',1,'1','FOO','foo',1,'2004-05-09',1,'one','one','2001-12-07','2001-10-17 08:25:04'), + ('BAR','bar','2001-01-01 04:52:37','two',2,'2','BAR','bar',2,'2008-01-01',2,'two','two','2006-06-19','2002-01-01 08:22:49'); + +CREATE TABLE t4 (f1 VARCHAR(10), f2 INT) ENGINE=MyISAM; + +SELECT * FROM t1; + +--error ER_BAD_FIELD_ERROR +SELECT non_existing FROM v2; + +SELECT * FROM t1, v3, t4 WHERE v3.f1 = t4.f1 AND t4.f2 = 6 AND t1.pk = v3.f5; + +drop table t1,t2,t3,t4; +drop view v2,v3; + diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 9f2e7f531bb..eae06393c75 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -9060,7 +9060,7 @@ bool generate_derived_keys_for_table(KEYUSE *keyuse, uint count, uint keys) else { /* Mark keyuses for this key to be excluded */ - for (KEYUSE *curr=save_first_keyuse; curr < first_keyuse; curr++) + for (KEYUSE *curr=save_first_keyuse; curr < keyuse; curr++) { curr->key= MAX_KEY; } From 094640c036a333c0f2b6f909b01a0ca39997f716 Mon Sep 17 00:00:00 2001 From: Sergey Vojtovich <svoj@mariadb.org> Date: Fri, 19 Dec 2014 23:17:59 +0400 Subject: [PATCH 72/99] Fixed a couple of compiler warnings. --- cmake/maintainer.cmake | 4 ++-- mysys/my_context.c | 13 ++++++++----- sql-common/client_plugin.c | 5 ----- storage/innobase/include/dict0dict.h | 2 +- storage/xtradb/include/dict0dict.h | 2 +- 5 files changed, 12 insertions(+), 14 deletions(-) diff --git a/cmake/maintainer.cmake b/cmake/maintainer.cmake index 5d3ce4d1f75..872d61d9aac 100644 --- a/cmake/maintainer.cmake +++ b/cmake/maintainer.cmake @@ -36,8 +36,8 @@ ENDIF() # Turn on Werror (warning => error) when using maintainer mode. IF(MYSQL_MAINTAINER_MODE MATCHES "ON") - SET(MY_C_WARNING_FLAGS "${MY_C_WARNING_FLAGS} -Werror") - SET(MY_CXX_WARNING_FLAGS "${MY_CXX_WARNING_FLAGS} -Werror") + SET(MY_C_WARNING_FLAGS "${MY_C_WARNING_FLAGS} -DFORCE_INIT_OF_VARS -Werror") + SET(MY_CXX_WARNING_FLAGS "${MY_CXX_WARNING_FLAGS} -DFORCE_INIT_OF_VARS -Werror") ENDIF() # Set warning flags for GCC/Clang diff --git a/mysys/my_context.c b/mysys/my_context.c index 9be5ab80468..80156df4495 100644 --- a/mysys/my_context.c +++ b/mysys/my_context.c @@ -729,33 +729,36 @@ my_context_continue(struct my_context *c) #ifdef MY_CONTEXT_DISABLE int -my_context_continue(struct my_context *c) +my_context_continue(struct my_context *c __attribute__((unused))) { return -1; } int -my_context_spawn(struct my_context *c, void (*f)(void *), void *d) +my_context_spawn(struct my_context *c __attribute__((unused)), + void (*f)(void *) __attribute__((unused)), + void *d __attribute__((unused))) { return -1; } int -my_context_yield(struct my_context *c) +my_context_yield(struct my_context *c __attribute__((unused))) { return -1; } int -my_context_init(struct my_context *c, size_t stack_size) +my_context_init(struct my_context *c __attribute__((unused)), + size_t stack_size __attribute__((unused))) { return -1; /* Out of memory */ } void -my_context_destroy(struct my_context *c) +my_context_destroy(struct my_context *c __attribute__((unused))) { } diff --git a/sql-common/client_plugin.c b/sql-common/client_plugin.c index f31ddb22a6a..d96f9648011 100644 --- a/sql-common/client_plugin.c +++ b/sql-common/client_plugin.c @@ -28,11 +28,6 @@ There is no reference counting and no unloading either. */ -#if _MSC_VER -/* Silence warnings about variable 'unused' being used. */ -#define FORCE_INIT_OF_VARS 1 -#endif - #include <my_global.h> #include "mysql.h" #include <my_sys.h> diff --git a/storage/innobase/include/dict0dict.h b/storage/innobase/include/dict0dict.h index 0ad3cb3bcce..bb1119b3c19 100644 --- a/storage/innobase/include/dict0dict.h +++ b/storage/innobase/include/dict0dict.h @@ -1139,7 +1139,7 @@ recalculated */ #define DICT_TABLE_CHANGED_TOO_MUCH(t) \ ((ib_int64_t) (t)->stat_modified_counter > (srv_stats_modified_counter ? \ - ut_min(srv_stats_modified_counter, (16 + (t)->stat_n_rows / 16)) : \ + (ib_int64_t) ut_min(srv_stats_modified_counter, (16 + (t)->stat_n_rows / 16)) : \ 16 + (t)->stat_n_rows / 16)) /*********************************************************************//** diff --git a/storage/xtradb/include/dict0dict.h b/storage/xtradb/include/dict0dict.h index b03d25818c9..2b53a33e103 100644 --- a/storage/xtradb/include/dict0dict.h +++ b/storage/xtradb/include/dict0dict.h @@ -1139,7 +1139,7 @@ recalculated */ #define DICT_TABLE_CHANGED_TOO_MUCH(t) \ ((ib_int64_t) (t)->stat_modified_counter > (srv_stats_modified_counter ? \ - ut_min(srv_stats_modified_counter, (16 + (t)->stat_n_rows / 16)) : \ + (ib_int64_t) ut_min(srv_stats_modified_counter, (16 + (t)->stat_n_rows / 16)) : \ 16 + (t)->stat_n_rows / 16)) /*********************************************************************//** From 260727adc6d1b805e6854315c3a18d3a30138bc6 Mon Sep 17 00:00:00 2001 From: Sergey Vojtovich <svoj@mariadb.org> Date: Fri, 19 Dec 2014 23:42:22 +0400 Subject: [PATCH 73/99] Fixed yet another compiler warning. --- client/mysqltest.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/mysqltest.cc b/client/mysqltest.cc index 6ead479b94e..9b925d6bfb8 100644 --- a/client/mysqltest.cc +++ b/client/mysqltest.cc @@ -5883,7 +5883,7 @@ void do_connect(struct st_command *command) { int con_port= opt_port; char *con_options; - char *ssl_cipher= 0; + char *ssl_cipher __attribute__((unused))= 0; my_bool con_ssl= 0, con_compress= 0; my_bool con_pipe= 0; my_bool con_shm __attribute__ ((unused))= 0; From f7a7e892883ebc175376b15c8e2cf0b06de4fbf2 Mon Sep 17 00:00:00 2001 From: Rich Prohaska <prohaska@tokutek.com> Date: Sun, 21 Dec 2014 07:24:36 -0500 Subject: [PATCH 74/99] add sysbench update perf graph --- doc/sysbench.update.ma55.tokudb754.png | Bin 0 -> 6584 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/sysbench.update.ma55.tokudb754.png diff --git a/doc/sysbench.update.ma55.tokudb754.png b/doc/sysbench.update.ma55.tokudb754.png new file mode 100644 index 0000000000000000000000000000000000000000..b2456d1e839480e6fc5b855b7633529cf00715de GIT binary patch literal 6584 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 literal 0 HcmV?d00001 From 49577736b8d332d73cb7bff450febf9d9c9dea8b Mon Sep 17 00:00:00 2001 From: Rich Prohaska <prohaska@tokutek.com> Date: Sun, 21 Dec 2014 10:39:23 -0500 Subject: [PATCH 75/99] add sysbench update graphs --- doc/sysbench.update.ma55.tokudb753.loglog.png | Bin 0 -> 7367 bytes doc/sysbench.update.ma55.tokudb753.png | Bin 0 -> 7561 bytes doc/sysbench.update.ma55.tokudb754.png | Bin 6584 -> 0 bytes doc/sysbench.update.my55.tokudb753.loglog.png | Bin 0 -> 6899 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/sysbench.update.ma55.tokudb753.loglog.png create mode 100644 doc/sysbench.update.ma55.tokudb753.png delete mode 100644 doc/sysbench.update.ma55.tokudb754.png create mode 100644 doc/sysbench.update.my55.tokudb753.loglog.png diff --git a/doc/sysbench.update.ma55.tokudb753.loglog.png b/doc/sysbench.update.ma55.tokudb753.loglog.png new file mode 100644 index 0000000000000000000000000000000000000000..81fecd376842231acc76611f105bb3ea267a7480 GIT binary patch literal 7367 zcmbVR2{@E*yPq+Pl1V~kM%l_9LUv||LS$@_U5kASS;CkQAz2b4OV*O8G?pwgC=te% zeVMV#GKQ>UnKRRO&UgL4bAA7FopY}1o%fyR_dL(NJn#M7@BO=;803v>5Edv4004mK z>S!4Q01RjV07yInq9F`y5(Bh`3{u}zn@Xk9klfr{`U3|5ps6?j6+j~45P;TJfQHK? z6~_laBXDS{v^_cw06?GtR5Ue=`m<0>j5ZZP?553wLZPy<vIYhQj*gCDVPP*{zO1OI zz~OKm9UZf?vosZC8JR><;`^aFvKg63rIN<Osg;f8BocKHK+^`eOS^{�f~ong40W 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 literal 0 HcmV?d00001 diff --git a/doc/sysbench.update.ma55.tokudb753.png b/doc/sysbench.update.ma55.tokudb753.png new file mode 100644 index 0000000000000000000000000000000000000000..e5ed5f90b6356d0a442a136b83563f976509fb7b GIT binary patch literal 7561 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 bDM+Wl#FHA-dQHlbkDusjUDqtpu#NaXaNIEE literal 0 HcmV?d00001 diff --git a/doc/sysbench.update.ma55.tokudb754.png b/doc/sysbench.update.ma55.tokudb754.png deleted file mode 100644 index b2456d1e839480e6fc5b855b7633529cf00715de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6584 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 diff --git a/doc/sysbench.update.my55.tokudb753.loglog.png b/doc/sysbench.update.my55.tokudb753.loglog.png new file mode 100644 index 0000000000000000000000000000000000000000..1fe55b07b19ce7f015602de568d16cd3177cc3c4 GIT binary patch literal 6899 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 VQthM7Zpud(KwDi;tx^>p@qf163u^!X literal 0 HcmV?d00001 From 1a7a60d1e6599d8643e766dc31e505dec0943b0c Mon Sep 17 00:00:00 2001 From: Rich Prohaska <prohaska@tokutek.com> Date: Sun, 21 Dec 2014 10:51:19 -0500 Subject: [PATCH 76/99] add sysbench update perf graph --- doc/sysbench.update.ma55.tokudb753.binlog.png | Bin 0 -> 6723 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/sysbench.update.ma55.tokudb753.binlog.png diff --git a/doc/sysbench.update.ma55.tokudb753.binlog.png b/doc/sysbench.update.ma55.tokudb753.binlog.png new file mode 100644 index 0000000000000000000000000000000000000000..510f1811e5ae79236b24f4a69f07359cf950e8fc GIT binary patch literal 6723 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 literal 0 HcmV?d00001 From 355fc0f72985006e49ee30bbb51fecb4b7c60f98 Mon Sep 17 00:00:00 2001 From: Rich Prohaska <prohaska@tokutek.com> Date: Sun, 21 Dec 2014 11:10:53 -0500 Subject: [PATCH 77/99] add sysbench update perf graph --- doc/sysbench.update.ps56.tokudb754.loglog.png | Bin 0 -> 7008 bytes doc/sysbench.update.ps56.tokudb754.png | Bin 0 -> 7434 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/sysbench.update.ps56.tokudb754.loglog.png create mode 100644 doc/sysbench.update.ps56.tokudb754.png diff --git a/doc/sysbench.update.ps56.tokudb754.loglog.png b/doc/sysbench.update.ps56.tokudb754.loglog.png new file mode 100644 index 0000000000000000000000000000000000000000..52985276249cbc540825fbc52240ce057e32ded7 GIT binary patch literal 7008 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 literal 0 HcmV?d00001 diff --git a/doc/sysbench.update.ps56.tokudb754.png b/doc/sysbench.update.ps56.tokudb754.png new file mode 100644 index 0000000000000000000000000000000000000000..39b1c5917306dd4fd3b76a1e185239d1a10cc509 GIT binary patch literal 7434 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 literal 0 HcmV?d00001 From 1429a11b56a0ccca832b6eaaa940dece5381c43c Mon Sep 17 00:00:00 2001 From: Rich Prohaska <prohaska@tokutek.com> Date: Sun, 21 Dec 2014 11:24:49 -0500 Subject: [PATCH 78/99] add sysbench update perf graph --- doc/sysbench.update.ma10.tokudb754.loglog.png | Bin 0 -> 6947 bytes doc/sysbench.update.ma10.tokudb754.png | Bin 0 -> 7351 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/sysbench.update.ma10.tokudb754.loglog.png create mode 100644 doc/sysbench.update.ma10.tokudb754.png diff --git a/doc/sysbench.update.ma10.tokudb754.loglog.png b/doc/sysbench.update.ma10.tokudb754.loglog.png new file mode 100644 index 0000000000000000000000000000000000000000..99b15ff642f8a3c7d0b03cc5229310b21c17a868 GIT binary patch literal 6947 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 I1!Tzo0T%U8`~Uy| literal 0 HcmV?d00001 diff --git a/doc/sysbench.update.ma10.tokudb754.png b/doc/sysbench.update.ma10.tokudb754.png new file mode 100644 index 0000000000000000000000000000000000000000..7297013b51fe5a1efd16fad99b1e4a74bf808b58 GIT binary patch literal 7351 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 P=e64EdTJ%tY(xGJ5ZlF_ literal 0 HcmV?d00001 From 3818bbb0cb87eae0cbc6fbd9dcce7060ad08ecca Mon Sep 17 00:00:00 2001 From: unknown <sanja@askmonty.org> Date: Sun, 21 Dec 2014 19:23:28 +0100 Subject: [PATCH 79/99] Adding mariadb-version on the view creation to view frm. (MDEV-6916 followup) --- mysql-test/r/view.result | 2 ++ mysql-test/t/view.test | 10 ++++++++++ sql/sql_view.cc | 6 +++++- sql/table.h | 1 + 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/view.result b/mysql-test/r/view.result index 2978fce3a98..cb40fbbcbca 100644 --- a/mysql-test/r/view.result +++ b/mysql-test/r/view.result @@ -5396,6 +5396,8 @@ SELECT `f1`(1); DROP FUNCTION f1; DROP VIEW v1; DROP TABLE t1, t2; +create view v1 as select 1; +drop view v1; # ----------------------------------------------------------------- # -- End of 5.5 tests. # ----------------------------------------------------------------- diff --git a/mysql-test/t/view.test b/mysql-test/t/view.test index 9cb9deff3f8..8056836fe9a 100644 --- a/mysql-test/t/view.test +++ b/mysql-test/t/view.test @@ -5335,6 +5335,16 @@ DROP FUNCTION f1; DROP VIEW v1; DROP TABLE t1, t2; + +create view v1 as select 1; + +--let $MYSQLD_DATADIR= `select @@datadir` +--let SEARCH_FILE= $MYSQLD_DATADIR/test/v1.frm +--let SEARCH_PATTERN=mariadb-version +--source include/search_pattern_in_file.inc + +drop view v1; + --echo # ----------------------------------------------------------------- --echo # -- End of 5.5 tests. --echo # ----------------------------------------------------------------- diff --git a/sql/sql_view.cc b/sql/sql_view.cc index b711f05be02..09784f7257a 100644 --- a/sql/sql_view.cc +++ b/sql/sql_view.cc @@ -730,7 +730,7 @@ err: /* number of required parameters for making view */ -static const int required_view_parameters= 14; +static const int required_view_parameters= 15; /* table of VIEW .frm field descriptors @@ -781,6 +781,9 @@ static File_option view_parameters[]= {{(char*) STRING_WITH_LEN("view_body_utf8")}, my_offsetof(TABLE_LIST, view_body_utf8), FILE_OPTIONS_ESTRING}, + {{ C_STRING_WITH_LEN("mariadb-version")}, + my_offsetof(TABLE_LIST, mariadb_version), + FILE_OPTIONS_ULONGLONG}, {{NullS, 0}, 0, FILE_OPTIONS_STRING} }; @@ -877,6 +880,7 @@ static int mysql_register_view(THD *thd, TABLE_LIST *view, } view->file_version= 1; + view->mariadb_version= MYSQL_VERSION_ID; view->calc_md5(md5); if (!(view->md5.str= (char*) thd->memdup(md5, 32))) { diff --git a/sql/table.h b/sql/table.h index ac15e389f75..8e8c2811b71 100644 --- a/sql/table.h +++ b/sql/table.h @@ -1807,6 +1807,7 @@ struct TABLE_LIST LEX_STRING timestamp; /* GMT time stamp of last operation */ st_lex_user definer; /* definer of view */ ulonglong file_version; /* version of file's field set */ + ulonglong mariadb_version; /* version of server on creation */ ulonglong updatable_view; /* VIEW can be updated */ /** @brief The declared algorithm, if this is a view. From de9a378646852c5cd4f2e2b7fccc22b4a1a894f2 Mon Sep 17 00:00:00 2001 From: Rich Prohaska <prohaska@tokutek.com> Date: Sun, 21 Dec 2014 19:15:39 -0500 Subject: [PATCH 80/99] DB-766 use an extra flag that is supported on MySQL and does not require a tokutek patch to the wait_while_table_is_used function --- storage/tokudb/ha_tokudb.cc | 1 + storage/tokudb/ha_tokudb_alter_56.cc | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/storage/tokudb/ha_tokudb.cc b/storage/tokudb/ha_tokudb.cc index 578b6c01856..07046fd6340 100644 --- a/storage/tokudb/ha_tokudb.cc +++ b/storage/tokudb/ha_tokudb.cc @@ -5981,6 +5981,7 @@ int ha_tokudb::extra(enum ha_extra_function operation) { using_ignore_no_key = false; break; case HA_EXTRA_NOT_USED: + case HA_EXTRA_PREPARE_FOR_RENAME: break; // must do nothing and return 0 default: break; diff --git a/storage/tokudb/ha_tokudb_alter_56.cc b/storage/tokudb/ha_tokudb_alter_56.cc index 1a03dc815a1..cae50446fa0 100644 --- a/storage/tokudb/ha_tokudb_alter_56.cc +++ b/storage/tokudb/ha_tokudb_alter_56.cc @@ -765,7 +765,9 @@ bool ha_tokudb::commit_inplace_alter_table(TABLE *altered_table, Alter_inplace_i #else THD::killed_state saved_killed_state = thd->killed; thd->killed = THD::NOT_KILLED; - for (volatile uint i = 0; wait_while_table_is_used(thd, table, HA_EXTRA_NOT_USED); i++) { + // MySQL does not handle HA_EXTRA_NOT_USED so we use HA_EXTRA_PREPARE_FOR_RENAME since it is passed through + // the partition storage engine and is treated as a NOP by tokudb + for (volatile uint i = 0; wait_while_table_is_used(thd, table, HA_EXTRA_PREPARE_FOR_RENAME); i++) { if (thd->killed != THD::NOT_KILLED) thd->killed = THD::NOT_KILLED; sleep(1); From 8051205d6f3f1e62d74b8cddc2d3d09dd38660d4 Mon Sep 17 00:00:00 2001 From: Elena Stepanova <elenst@montyprogram.com> Date: Tue, 23 Dec 2014 21:21:23 +0400 Subject: [PATCH 81/99] Increased the version number --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 8d4846bdd50..78c69c9f30d 100644 --- a/VERSION +++ b/VERSION @@ -1,4 +1,4 @@ MYSQL_VERSION_MAJOR=5 MYSQL_VERSION_MINOR=5 -MYSQL_VERSION_PATCH=41 +MYSQL_VERSION_PATCH=42 MYSQL_VERSION_EXTRA= From 5fafc3ce42c097d735416373316967927353a216 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Lindstr=C3=B6m?= <jplindst@mariadb.org> Date: Sun, 28 Dec 2014 13:24:53 +0200 Subject: [PATCH 82/99] MDEV-7369: MariaDB build fails when XTRADB_STORAGE_ENGINE enabled Patch by James Taylor. --- storage/xtradb/include/os0stacktrace.h | 4 ++-- storage/xtradb/srv/srv0start.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/storage/xtradb/include/os0stacktrace.h b/storage/xtradb/include/os0stacktrace.h index 58e9a528593..e79347c6189 100644 --- a/storage/xtradb/include/os0stacktrace.h +++ b/storage/xtradb/include/os0stacktrace.h @@ -20,7 +20,7 @@ this program; if not, write to the Free Software Foundation, Inc., #ifndef os0stacktrace_h #define os0stacktrace_h -#ifdef __linux__ +#if defined (__linux__) && HAVE_BACKTRACE && HAVE_BACKTRACE_SYMBOLS #if HAVE_EXECINFO_H #include <execinfo.h> #endif @@ -40,5 +40,5 @@ os_stacktrace_print( siginfo_t* info, /*!< in: signal information */ void* ucontext);/*!< in: signal context */ -#endif /* __linux__ */ +#endif /* defined (__linux__) && HAVE_BACKTRACE && HAVE_BACKTRACE_SYMBOLS */ #endif /* os0stacktrace.h */ diff --git a/storage/xtradb/srv/srv0start.c b/storage/xtradb/srv/srv0start.c index 7b336c81b10..8b7e73235da 100644 --- a/storage/xtradb/srv/srv0start.c +++ b/storage/xtradb/srv/srv0start.c @@ -1274,7 +1274,7 @@ innobase_start_or_create_for_mysql(void) stacktrace feature. */ if (srv_use_stacktrace) { -#ifdef __linux__ +#if defined (__linux__) && HAVE_BACKTRACE && HAVE_BACKTRACE_SYMBOLS struct sigaction sigact; sigact.sa_sigaction = os_stacktrace_print; @@ -1287,7 +1287,7 @@ innobase_start_or_create_for_mysql(void) srv_use_stacktrace = FALSE; } -#endif /* __linux__ */ +#endif /* defined (__linux__) && HAVE_BACKTRACE && HAVE_BACKTRACE_SYMBOLS */ } From 068416d3028899476dff87ffaafa742a498b3de8 Mon Sep 17 00:00:00 2001 From: Rich Prohaska <prohaska@tokutek.com> Date: Fri, 2 Jan 2015 09:50:51 -0500 Subject: [PATCH 83/99] DB-785 add a txn api to check if a txn is prepared --- buildheader/make_tdb.cc | 1 + src/ydb_txn.cc | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/buildheader/make_tdb.cc b/buildheader/make_tdb.cc index 9890b8ed34b..88f8882df78 100644 --- a/buildheader/make_tdb.cc +++ b/buildheader/make_tdb.cc @@ -585,6 +585,7 @@ static void print_db_txn_struct (void) { "uint64_t (*id64) (DB_TXN*)", "void (*set_client_id)(DB_TXN *, uint64_t client_id)", "uint64_t (*get_client_id)(DB_TXN *)", + "bool (*is_prepared)(DB_TXN *)", NULL}; sort_and_dump_fields("db_txn", false, extra); } diff --git a/src/ydb_txn.cc b/src/ydb_txn.cc index b6b8e154c6f..a4d99459edf 100644 --- a/src/ydb_txn.cc +++ b/src/ydb_txn.cc @@ -421,6 +421,11 @@ static int toku_txn_discard(DB_TXN *txn, uint32_t flags) { return 0; } +static bool toku_txn_is_prepared(DB_TXN *txn) { + TOKUTXN ttxn = db_txn_struct_i(txn)->tokutxn; + return toku_txn_get_state(ttxn) == TOKUTXN_PREPARING; +} + static inline void txn_func_init(DB_TXN *txn) { #define STXN(name) txn->name = locked_txn_ ## name STXN(abort); @@ -437,6 +442,7 @@ static inline void txn_func_init(DB_TXN *txn) { SUTXN(discard); #undef SUTXN txn->id64 = toku_txn_id64; + txn->is_prepared = toku_txn_is_prepared; } // From 7229b9f5f8dc8437b2b0c180066e3a23a2a774ba Mon Sep 17 00:00:00 2001 From: Rich Prohaska <prohaska@tokutek.com> Date: Fri, 2 Jan 2015 09:53:30 -0500 Subject: [PATCH 84/99] DB-785 turn off fsync on mariadb for 2PC transactions --- storage/tokudb/hatoku_hton.cc | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/storage/tokudb/hatoku_hton.cc b/storage/tokudb/hatoku_hton.cc index 438643d13d5..83a1053a2d8 100644 --- a/storage/tokudb/hatoku_hton.cc +++ b/storage/tokudb/hatoku_hton.cc @@ -415,10 +415,10 @@ static int tokudb_init_func(void *p) { tokudb_hton->commit = tokudb_commit; tokudb_hton->rollback = tokudb_rollback; #if TOKU_INCLUDE_XA - tokudb_hton->prepare=tokudb_xa_prepare; - tokudb_hton->recover=tokudb_xa_recover; - tokudb_hton->commit_by_xid=tokudb_commit_by_xid; - tokudb_hton->rollback_by_xid=tokudb_rollback_by_xid; + tokudb_hton->prepare = tokudb_xa_prepare; + tokudb_hton->recover = tokudb_xa_recover; + tokudb_hton->commit_by_xid = tokudb_commit_by_xid; + tokudb_hton->rollback_by_xid = tokudb_rollback_by_xid; #endif tokudb_hton->panic = tokudb_end; @@ -776,25 +776,29 @@ static void tokudb_cleanup_handlers(tokudb_trx_data *trx, DB_TXN *txn) { extern "C" enum durability_properties thd_get_durability_property(const MYSQL_THD thd); #endif -// Determine if an fsync is used when a transaction is committed. The MySQL durability property -// has precedence over the tokudb commit sync setting as it has a better idea of what is going on. -static bool tokudb_fsync_on_commit(THD *thd) { +// Determine if an fsync is used when a transaction is committed. +static bool tokudb_fsync_on_commit(THD *thd, tokudb_trx_data *trx, DB_TXN *txn) { #if MYSQL_VERSION_ID >= 50600 + // Check the client durability property which is set during 2PC if (thd_get_durability_property(thd) == HA_IGNORE_DURABILITY) return false; - else #endif - return THDVAR(thd, commit_sync) != 0; +#if defined(MARIADB_BASE_VERSION) + // Check is the txn is prepared and the binlog is open + if (txn->is_prepared(txn) && mysql_bin_log.is_open()) + return false; +#endif + return THDVAR(thd, commit_sync) != 0; } static int tokudb_commit(handlerton * hton, THD * thd, bool all) { TOKUDB_DBUG_ENTER(""); DBUG_PRINT("trans", ("ending transaction %s", all ? "all" : "stmt")); - uint32_t syncflag = tokudb_fsync_on_commit(thd) ? 0 : DB_TXN_NOSYNC; tokudb_trx_data *trx = (tokudb_trx_data *) thd_get_ha_data(thd, hton); DB_TXN **txn = all ? &trx->all : &trx->stmt; DB_TXN *this_txn = *txn; if (this_txn) { + uint32_t syncflag = tokudb_fsync_on_commit(thd, trx, this_txn) ? 0 : DB_TXN_NOSYNC; if (tokudb_debug & TOKUDB_DEBUG_TXN) { TOKUDB_TRACE("commit trx %u txn %p syncflag %u", all, this_txn, syncflag); } @@ -850,7 +854,7 @@ static int tokudb_xa_prepare(handlerton* hton, THD* thd, bool all) { TOKUDB_DBUG_ENTER(""); int r = 0; - /* if support_xa is disable, just return */ + // if tokudb_support_xa is disable, just return if (!THDVAR(thd, support_xa)) { TOKUDB_DBUG_RETURN(r); } From 9cd31bc559f64cd8e5624d54f56f2d8697dbf667 Mon Sep 17 00:00:00 2001 From: Rich Prohaska <prohaska@tokutek.com> Date: Sun, 4 Jan 2015 12:13:54 -0500 Subject: [PATCH 85/99] DB-787 the tokudb_report_fractal_tree_info_for_db function can leak a db on an error path where db->open fails --- storage/tokudb/hatoku_hton.cc | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/storage/tokudb/hatoku_hton.cc b/storage/tokudb/hatoku_hton.cc index 83a1053a2d8..ff849256f77 100644 --- a/storage/tokudb/hatoku_hton.cc +++ b/storage/tokudb/hatoku_hton.cc @@ -1614,12 +1614,12 @@ static ST_FIELD_INFO tokudb_fractal_tree_info_field_info[] = { static int tokudb_report_fractal_tree_info_for_db(const DBT *dname, const DBT *iname, TABLE *table, THD *thd) { int error; - DB *db; uint64_t bt_num_blocks_allocated; uint64_t bt_num_blocks_in_use; uint64_t bt_size_allocated; uint64_t bt_size_in_use; + DB *db = NULL; error = db_create(&db, db_env, 0); if (error) { goto exit; @@ -1631,12 +1631,6 @@ static int tokudb_report_fractal_tree_info_for_db(const DBT *dname, const DBT *i error = db->get_fractal_tree_info64(db, &bt_num_blocks_allocated, &bt_num_blocks_in_use, &bt_size_allocated, &bt_size_in_use); - { - int close_error = db->close(db, 0); - if (!error) { - error = close_error; - } - } if (error) { goto exit; } @@ -1668,6 +1662,11 @@ static int tokudb_report_fractal_tree_info_for_db(const DBT *dname, const DBT *i error = schema_table_store_record(thd, table); exit: + if (db) { + int close_error = db->close(db, 0); + if (error == 0) + error = close_error; + } return error; } From 00649525ee8a37336221f1918943eca78f5453df Mon Sep 17 00:00:00 2001 From: Kristian Nielsen <knielsen@knielsen-hq.org> Date: Tue, 6 Jan 2015 16:32:41 +0100 Subject: [PATCH 86/99] MDEV-7189: main.processlist fails sporadically in buildbot The test case tried to trigger a DEBUG_SYNC point at the end of a SELECT SLEEP(5) statement. It did this by using EXECUTE 2, intending to trigger first at the end of SET DEBUG_SYNC, and second at the end of the SELECT SLEEP(5). However, in --ps-protocol mode, this does not work, because the SELECT is executed in two steps (Prepare followed by Execute). Thus, the DEBUG_SYNC got triggered too early, during the Prepare stage rather than Execute, and the test case could race and information_schema.processlist see the thread in the wrong state. This patch fixes by changing the way the DEBUG_SYNC point is triggered. Now we add a DBUG injection inside the code for SLEEP(5). This ensures that the DEBUG_SYNC point is not activated until the SLEEP(5) is running, ensuring that the following wait for completion will be effective. --- mysql-test/mysql-test-run.pl | 1 + mysql-test/r/processlist.result | 5 ++--- mysql-test/t/processlist.test | 18 +++++++++--------- sql/item_func.cc | 5 +++++ 4 files changed, 17 insertions(+), 12 deletions(-) diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 60f3475bd17..50fb36d8989 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -2495,6 +2495,7 @@ sub environment_setup { # ---------------------------------------------------- my $exe_replace= mtr_exe_exists(vs_config_dirs('extra', 'replace'), "$basedir/extra/replace", + "$bindir/extra$opt_vs_config/replace", "$path_client_bindir/replace"); $ENV{'REPLACE'}= native_path($exe_replace); diff --git a/mysql-test/r/processlist.result b/mysql-test/r/processlist.result index 0182245c278..eb3af67c5bf 100644 --- a/mysql-test/r/processlist.result +++ b/mysql-test/r/processlist.result @@ -7,9 +7,8 @@ SELECT ID, TIME,TIME_MS FROM INFORMATION_SCHEMA.PROCESSLIST WHERE CONCAT(":", ID SET DEBUG_SYNC = 'now SIGNAL fill_schema_proceed'; ID TIME TIME_MS TID 0 0.000 -SET DEBUG_SYNC = 'dispatch_command_end SIGNAL query_done EXECUTE 2'; -SET DEBUG_SYNC= 'now WAIT_FOR query_done'; -SET DEBUG_SYNC= 'now SIGNAL nosignal'; +set debug_sync='reset'; +SET debug_dbug="+d,sleep_inject_query_done_debug_sync"; select sleep(5); sleep(5) 0 diff --git a/mysql-test/t/processlist.test b/mysql-test/t/processlist.test index 9c555c0f9fb..a8f8a4ed64c 100644 --- a/mysql-test/t/processlist.test +++ b/mysql-test/t/processlist.test @@ -2,6 +2,7 @@ # MDEV-4578 information_schema.processlist reports incorrect value for Time (2147483647) # +source include/have_debug.inc; source include/have_debug_sync.inc; let $tid= `SELECT CONNECTION_ID()`; @@ -21,6 +22,7 @@ SET DEBUG_SYNC = 'now SIGNAL fill_schema_proceed'; connection con1; --replace_result $tid TID reap; +set debug_sync='reset'; connection default; # @@ -28,15 +30,13 @@ connection default; # connection con1; -# Trigger a signal once the thread has gone from "Query" to "Sleep" command -# state. Note we need to execute this twice: Once at the end of SET DEBUG_SYNC, -# and once for the intended time, at the end of SELECT SLEEP(). -SET DEBUG_SYNC = 'dispatch_command_end SIGNAL query_done EXECUTE 2'; -connection default; -# Wait for and clear the first signal set during SET DEBUG_SYNC. -SET DEBUG_SYNC= 'now WAIT_FOR query_done'; -SET DEBUG_SYNC= 'now SIGNAL nosignal'; -connection con1; +# This DBUG insertion triggers a DEBUG_SYNC signal "query_done" once +# the below SELECT SLEEP(5) has gone from "Query" to "Sleep" command +# state. (We cannot just set the DEBUG_SYNC directly here, because +# then it can trigger at the end of the SET DEBUG_SYNC statement (or +# at the end of the Prepare step of the SELECT, if --ps-protocol), +# thus occuring too early). +SET debug_dbug="+d,sleep_inject_query_done_debug_sync"; select sleep(5); #run a query that will take some time connection default; diff --git a/sql/item_func.cc b/sql/item_func.cc index 93eafdfa938..90257406e1e 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -4482,6 +4482,11 @@ longlong Item_func_sleep::val_int() mysql_cond_destroy(&cond); + DBUG_EXECUTE_IF("sleep_inject_query_done_debug_sync", { + debug_sync_set_action + (thd, STRING_WITH_LEN("dispatch_command_end SIGNAL query_done")); + };); + return test(!error); // Return 1 killed } From 2ab49689c689b1c1daeb080ea568c268c5256952 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik <sergii@pisem.net> Date: Sat, 10 Jan 2015 14:07:46 +0100 Subject: [PATCH 87/99] MDEV-7410 Temporary table name conflict between sessions workaround for missing SP auto-reparse. allow the user to disable stored_program_cache_size, if he wants --- .../r/stored_program_cache_basic.result | 6 +-- .../r/stored_program_cache_func.result | 52 +++++++++++++++++++ .../sys_vars/t/stored_program_cache_func.test | 43 +++++++++++++++ sql/sys_vars.cc | 2 +- 4 files changed, 98 insertions(+), 5 deletions(-) create mode 100644 mysql-test/suite/sys_vars/r/stored_program_cache_func.result create mode 100644 mysql-test/suite/sys_vars/t/stored_program_cache_func.test diff --git a/mysql-test/suite/sys_vars/r/stored_program_cache_basic.result b/mysql-test/suite/sys_vars/r/stored_program_cache_basic.result index f1638520f72..7f882255567 100644 --- a/mysql-test/suite/sys_vars/r/stored_program_cache_basic.result +++ b/mysql-test/suite/sys_vars/r/stored_program_cache_basic.result @@ -23,7 +23,7 @@ Warnings: Warning 1292 Truncated incorrect stored_program_cache value: '-1' SELECT @@global.stored_program_cache; @@global.stored_program_cache -256 +0 SET @@global.stored_program_cache =100000000000; Warnings: Warning 1292 Truncated incorrect stored_program_cache value: '100000000000' @@ -31,11 +31,9 @@ SELECT @@global.stored_program_cache; @@global.stored_program_cache 524288 SET @@global.stored_program_cache = 0; -Warnings: -Warning 1292 Truncated incorrect stored_program_cache value: '0' SELECT @@global.stored_program_cache; @@global.stored_program_cache -256 +0 SET @@global.stored_program_cache = 10000.01; ERROR 42000: Incorrect argument type to variable 'stored_program_cache' SET @@global.stored_program_cache = ON; diff --git a/mysql-test/suite/sys_vars/r/stored_program_cache_func.result b/mysql-test/suite/sys_vars/r/stored_program_cache_func.result new file mode 100644 index 00000000000..11151847d6b --- /dev/null +++ b/mysql-test/suite/sys_vars/r/stored_program_cache_func.result @@ -0,0 +1,52 @@ +create procedure p1() select 1; +flush status; +show status like 'handler_read_key'; +Variable_name Value +Handler_read_key 0 +call p1; +1 +1 +show status like 'handler_read_key'; +Variable_name Value +Handler_read_key 1 +call p1; +1 +1 +show status like 'handler_read_key'; +Variable_name Value +Handler_read_key 1 +set global stored_program_cache=0; +call p1; +1 +1 +show status like 'handler_read_key'; +Variable_name Value +Handler_read_key 2 +call p1; +1 +1 +show status like 'handler_read_key'; +Variable_name Value +Handler_read_key 3 +drop procedure p1; +set global stored_program_cache=default; +create procedure pr(i int) begin +create table t1 (a int, b int); +if (i = 1) then alter table t1 drop a; +else alter table t1 drop b; +end if; +select * from t1; +drop table t1; +end | +call pr(1); +b +call pr(2); +ERROR 42S22: Unknown column 'test.t1.b' in 'field list' +drop table t1; +set global stored_program_cache=0; +call pr(1); +b +call pr(2); +a +drop procedure pr; +set global stored_program_cache=default; diff --git a/mysql-test/suite/sys_vars/t/stored_program_cache_func.test b/mysql-test/suite/sys_vars/t/stored_program_cache_func.test new file mode 100644 index 00000000000..f85fc8eb1bf --- /dev/null +++ b/mysql-test/suite/sys_vars/t/stored_program_cache_func.test @@ -0,0 +1,43 @@ +create procedure p1() select 1; + +flush status; +show status like 'handler_read_key'; +call p1; +show status like 'handler_read_key'; +call p1; +show status like 'handler_read_key'; + +set global stored_program_cache=0; + +call p1; +show status like 'handler_read_key'; +call p1; +show status like 'handler_read_key'; + +drop procedure p1; +set global stored_program_cache=default; + +# Test for missing SP automatic reparsing. +# when MDEV-5816 is implemented, it should be removed. + +--delimiter | +create procedure pr(i int) begin + create table t1 (a int, b int); + if (i = 1) then alter table t1 drop a; + else alter table t1 drop b; + end if; + select * from t1; + drop table t1; +end | +--delimiter ; +call pr(1); +--error ER_BAD_FIELD_ERROR +call pr(2); +drop table t1; + +set global stored_program_cache=0; +call pr(1); +call pr(2); +drop procedure pr; +set global stored_program_cache=default; + diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc index 7cad362f6f2..47bf6baa46b 100644 --- a/sql/sys_vars.cc +++ b/sql/sys_vars.cc @@ -3679,7 +3679,7 @@ static Sys_var_ulong Sys_sp_cache_size( "The soft upper limit for number of cached stored routines for " "one connection.", GLOBAL_VAR(stored_program_cache_size), CMD_LINE(REQUIRED_ARG), - VALID_RANGE(256, 512 * 1024), DEFAULT(256), BLOCK_SIZE(1)); + VALID_RANGE(0, 512 * 1024), DEFAULT(256), BLOCK_SIZE(1)); export const char *plugin_maturity_names[]= { "unknown", "experimental", "alpha", "beta", "gamma", "stable", 0 }; From 7f9f3139d79d2b5e0a1c1eb47b02a5976d572670 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik <sergii@pisem.net> Date: Tue, 13 Jan 2015 19:27:28 +0100 Subject: [PATCH 88/99] MDEV-7333 "'show table status like 'table_name'" on tokudb table lead to MariaDB crash adjust enum values when reading them from frm --- mysql-test/r/frm_bad_row_type-7333.result | 14 ++++++++++++ mysql-test/std_data/bad_row_type.MYD | 0 mysql-test/std_data/bad_row_type.MYI | Bin 0 -> 1024 bytes mysql-test/std_data/bad_row_type.frm | Bin 0 -> 1760 bytes mysql-test/t/frm_bad_row_type-7333.test | 14 ++++++++++++ sql/handler.h | 5 ++++- sql/table.cc | 26 +++++++++++++++++++--- 7 files changed, 55 insertions(+), 4 deletions(-) create mode 100644 mysql-test/r/frm_bad_row_type-7333.result create mode 100644 mysql-test/std_data/bad_row_type.MYD create mode 100644 mysql-test/std_data/bad_row_type.MYI create mode 100644 mysql-test/std_data/bad_row_type.frm create mode 100644 mysql-test/t/frm_bad_row_type-7333.test diff --git a/mysql-test/r/frm_bad_row_type-7333.result b/mysql-test/r/frm_bad_row_type-7333.result new file mode 100644 index 00000000000..198b494d3f8 --- /dev/null +++ b/mysql-test/r/frm_bad_row_type-7333.result @@ -0,0 +1,14 @@ +call mtr.add_suppression("bad_row_type.frm: invalid value 11 for the field row_format"); +select * from bad_row_type; +category_id category_name +show create table bad_row_type; +Table Create Table +bad_row_type CREATE TABLE `bad_row_type` ( + `category_id` int(11) NOT NULL AUTO_INCREMENT, + `category_name` varchar(255) DEFAULT NULL, + PRIMARY KEY (`category_id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 +show table status like 'bad_row_type'; +Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment +bad_row_type MyISAM 10 Dynamic 0 0 0 281474976710655 1024 0 1 x x NULL utf8_general_ci NULL +drop table bad_row_type; diff --git a/mysql-test/std_data/bad_row_type.MYD b/mysql-test/std_data/bad_row_type.MYD new file mode 100644 index 00000000000..e69de29bb2d diff --git a/mysql-test/std_data/bad_row_type.MYI b/mysql-test/std_data/bad_row_type.MYI new file mode 100644 index 0000000000000000000000000000000000000000..731a83ed078a355a792863b72bae6f36b06c841b GIT binary patch literal 1024 zcmezOkDZZ$kujQK149bK5e7yEAW{U9K=2<-Vj=!R0Yr)giwayq4tJ4dVCKMRm|RE$ z`)Mc}>=GnCObId#aV-O}?qCKgWM%~#zzjqjKw1RCW?*DvV+4i;1IQ!+WD7uSpo}0; loC^e5?7^}QU@M`vgY<!n1iONR=|4;uta6kX4S_)#0st*vBi{f3 literal 0 HcmV?d00001 diff --git a/mysql-test/std_data/bad_row_type.frm b/mysql-test/std_data/bad_row_type.frm new file mode 100644 index 0000000000000000000000000000000000000000..d993c98d73e9013f6f5f820c24396c57c3572cac GIT binary patch literal 1760 zcmeyz$i->MP|Co_@PLhh;U^;tGXo4TDKc;}FtCESiVWNk(VvVA4C~t%83bU87zBQ5 zN2F9Y3qIM&{zP6lcYjQSEO&B#Zb4CMadBpT9(O}Yes*a}QhZfTW)etK6VO0LpebBH zHVe>NAg_Umfk7I``5zGE>FXF2`5&Zi6b!=<7>(Is7^$OPA~6Km7<?-|gB^V#+Ts}F zK&9Xa2EgK<fdg3YurSNOLm_}c3|u*Y1-Kc&H3UBc12YF$;4c%fvSMfeVtz#ihX2Wl VC8_E8MV0ZHDF}96Vs7ex1^~g}Fn<65 literal 0 HcmV?d00001 diff --git a/mysql-test/t/frm_bad_row_type-7333.test b/mysql-test/t/frm_bad_row_type-7333.test new file mode 100644 index 00000000000..5100a85cb22 --- /dev/null +++ b/mysql-test/t/frm_bad_row_type-7333.test @@ -0,0 +1,14 @@ +# +# MDEV-7333 "'show table status like 'table_name'" on tokudb table lead to MariaDB crash +# +let $datadir= `select @@datadir`; +call mtr.add_suppression("bad_row_type.frm: invalid value 11 for the field row_format"); +copy_file std_data/bad_row_type.MYD $datadir/test/bad_row_type.MYD; +copy_file std_data/bad_row_type.MYI $datadir/test/bad_row_type.MYI; +copy_file std_data/bad_row_type.frm $datadir/test/bad_row_type.frm; + +select * from bad_row_type; +show create table bad_row_type; +replace_column 12 x 13 x; +show table status like 'bad_row_type'; +drop table bad_row_type; diff --git a/sql/handler.h b/sql/handler.h index 5c902e604e9..8f8b4fd93af 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -373,6 +373,9 @@ enum row_type { ROW_TYPE_NOT_USED=-1, ROW_TYPE_DEFAULT, ROW_TYPE_FIXED, /** Unused. Reserved for future versions. */ ROW_TYPE_PAGE }; +/* not part of the enum, so that it shouldn't be in switch(row_type) */ +#define ROW_TYPE_MAX ((uint)ROW_TYPE_PAGE + 1) + enum enum_binlog_func { BFN_RESET_LOGS= 1, BFN_RESET_SLAVE= 2, @@ -1248,7 +1251,7 @@ class partition_info; struct st_partition_iter; #define NOT_A_PARTITION_ID ((uint32)-1) -enum ha_choice { HA_CHOICE_UNDEF, HA_CHOICE_NO, HA_CHOICE_YES }; +enum ha_choice { HA_CHOICE_UNDEF, HA_CHOICE_NO, HA_CHOICE_YES, HA_CHOICE_MAX }; typedef struct st_ha_create_information { diff --git a/sql/table.cc b/sql/table.cc index 4ce70987334..a4cf9939845 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -890,6 +890,23 @@ static bool create_key_infos(uchar *strpos, uint keys, KEY *keyinfo, return 0; } +/** ensures that the enum value (read from frm) is within limits + + if not - issues a warning and resets the value to 0 + (that is, 0 is assumed to be a default value) +*/ +static uint enum_value_with_check(THD *thd, TABLE_SHARE *share, + const char *name, uint value, uint limit) +{ + if (value < limit) + return value; + + sql_print_warning("%s.frm: invalid value %d for the field %s", + share->normalized_path.str, value, name); + return 0; +} + + /* Read data from a binary .frm file from MySQL 3.23 - 5.0 into TABLE_SHARE */ @@ -983,9 +1000,12 @@ static int open_binary_frm(THD *thd, TABLE_SHARE *share, uchar *head, if (!head[32]) // New frm file in 3.23 { share->avg_row_length= uint4korr(head+34); - share->transactional= (ha_choice) (head[39] & 3); - share->page_checksum= (ha_choice) ((head[39] >> 2) & 3); - share->row_type= (row_type) head[40]; + share->transactional= (ha_choice) + enum_value_with_check(thd, share, "transactional", (head[39] & 3), HA_CHOICE_MAX); + share->page_checksum= (ha_choice) + enum_value_with_check(thd, share, "page_checksum", (head[39] >> 2) & 3, HA_CHOICE_MAX); + share->row_type= (row_type) + enum_value_with_check(thd, share, "row_format", head[40], ROW_TYPE_MAX); share->table_charset= get_charset((((uint) head[41]) << 8) + (uint) head[38],MYF(0)); share->null_field_first= 1; From e53b41a9eca3884e23d7eb7463c94020617c55c3 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik <sergii@pisem.net> Date: Tue, 13 Jan 2015 19:28:03 +0100 Subject: [PATCH 89/99] cleanup --- sql/handler.cc | 4 +--- sql/handler.h | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/sql/handler.cc b/sql/handler.cc index 086a6534120..7e756ff7848 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -86,9 +86,7 @@ static const LEX_STRING sys_table_aliases[]= }; const char *ha_row_type[] = { - "", "FIXED", "DYNAMIC", "COMPRESSED", "REDUNDANT", "COMPACT", - "PAGE", - "?","?","?" + "", "FIXED", "DYNAMIC", "COMPRESSED", "REDUNDANT", "COMPACT", "PAGE" }; const char *tx_isolation_names[] = diff --git a/sql/handler.h b/sql/handler.h index 8f8b4fd93af..642a922b544 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -369,9 +369,7 @@ enum legacy_db_type enum row_type { ROW_TYPE_NOT_USED=-1, ROW_TYPE_DEFAULT, ROW_TYPE_FIXED, ROW_TYPE_DYNAMIC, ROW_TYPE_COMPRESSED, - ROW_TYPE_REDUNDANT, ROW_TYPE_COMPACT, - /** Unused. Reserved for future versions. */ - ROW_TYPE_PAGE }; + ROW_TYPE_REDUNDANT, ROW_TYPE_COMPACT, ROW_TYPE_PAGE }; /* not part of the enum, so that it shouldn't be in switch(row_type) */ #define ROW_TYPE_MAX ((uint)ROW_TYPE_PAGE + 1) From 5900333aa5683bf0ef0698ccc911c6c07004ee3a Mon Sep 17 00:00:00 2001 From: Sergei Golubchik <sergii@pisem.net> Date: Wed, 14 Jan 2015 12:10:13 +0100 Subject: [PATCH 90/99] MDEV-7404 REPAIR multiple tables crash in MDL_ticket::has_stronger_or_equal_type mysql_alter_table() that is used in mysql_recreate_table() doesn't expect many tables in the TABLE_LIST. --- .../suite/innodb/r/multi_repair-7404.result | 21 +++++++++++++++++++ .../suite/innodb/t/multi_repair-7404.test | 18 ++++++++++++++++ sql/sql_table.cc | 14 ++++++++----- 3 files changed, 48 insertions(+), 5 deletions(-) create mode 100644 mysql-test/suite/innodb/r/multi_repair-7404.result create mode 100644 mysql-test/suite/innodb/t/multi_repair-7404.test diff --git a/mysql-test/suite/innodb/r/multi_repair-7404.result b/mysql-test/suite/innodb/r/multi_repair-7404.result new file mode 100644 index 00000000000..b3db5755b87 --- /dev/null +++ b/mysql-test/suite/innodb/r/multi_repair-7404.result @@ -0,0 +1,21 @@ +create table `t1`(`a` int) engine=innodb partition by key (`a`); +create table `t2`(`b` int) engine=innodb; +create table `t3`(`c` int) engine=innodb; +insert t1 values (1); +insert t2 values (2); +insert t3 values (3); +repair table `t1`,`t2`,`t3`; +Table Op Msg_type Msg_text +test.t1 repair status OK +test.t2 repair status OK +test.t3 repair status OK +select * from t1; +a +1 +select * from t2; +b +2 +select * from t3; +c +3 +drop table t1, t2, t3; diff --git a/mysql-test/suite/innodb/t/multi_repair-7404.test b/mysql-test/suite/innodb/t/multi_repair-7404.test new file mode 100644 index 00000000000..0775cd8b200 --- /dev/null +++ b/mysql-test/suite/innodb/t/multi_repair-7404.test @@ -0,0 +1,18 @@ +# +# MDEV-7404 REPAIR multiple tables crash in MDL_ticket::has_stronger_or_equal_type +# + +--source include/have_partition.inc +--source include/have_innodb.inc +create table `t1`(`a` int) engine=innodb partition by key (`a`); +create table `t2`(`b` int) engine=innodb; +create table `t3`(`c` int) engine=innodb; +insert t1 values (1); +insert t2 values (2); +insert t3 values (3); +repair table `t1`,`t2`,`t3`; +select * from t1; +select * from t2; +select * from t3; +drop table t1, t2, t3; + diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 77dbc765809..477ecf4a350 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -7644,12 +7644,12 @@ err: /* - Recreates tables by calling mysql_alter_table(). + Recreates one table by calling mysql_alter_table(). SYNOPSIS mysql_recreate_table() thd Thread handler - tables Tables to recreate + table_list Table to recreate RETURN Like mysql_alter_table(). @@ -7658,9 +7658,9 @@ bool mysql_recreate_table(THD *thd, TABLE_LIST *table_list) { HA_CREATE_INFO create_info; Alter_info alter_info; + TABLE_LIST *next_table= table_list->next_global; DBUG_ENTER("mysql_recreate_table"); - DBUG_ASSERT(!table_list->next_global); /* table_list->table has been closed and freed. Do not reference uninitialized data. open_tables() could fail. @@ -7672,15 +7672,19 @@ bool mysql_recreate_table(THD *thd, TABLE_LIST *table_list) table_list->lock_type= TL_READ_NO_INSERT; /* Same applies to MDL request. */ table_list->mdl_request.set_type(MDL_SHARED_NO_WRITE); + /* hide following tables from open_tables() */ + table_list->next_global= NULL; bzero((char*) &create_info, sizeof(create_info)); create_info.row_type=ROW_TYPE_NOT_USED; create_info.default_table_charset=default_charset_info; /* Force alter table to recreate table */ alter_info.flags= (ALTER_CHANGE_COLUMN | ALTER_RECREATE); - DBUG_RETURN(mysql_alter_table(thd, NullS, NullS, &create_info, + bool res= mysql_alter_table(thd, NullS, NullS, &create_info, table_list, &alter_info, 0, - (ORDER *) 0, 0, 0)); + (ORDER *) 0, 0, 0); + table_list->next_global= next_table; + DBUG_RETURN(res); } From d9d994089fc574d1973b476673ccbc8a6481f8c6 Mon Sep 17 00:00:00 2001 From: Nirbhay Choubey <nirbhay@mariadb.com> Date: Wed, 14 Jan 2015 18:24:23 -0500 Subject: [PATCH 91/99] MDEV-7368 : SLES: Failed to start mysql.service: Unit mysql.service failed to load Added 'systemctl daemon-reload' command in postin and postun rpm scripts. --- support-files/rpm/server-postin.sh | 53 ++++++++++++++++-------------- support-files/rpm/server-postun.sh | 7 ++++ 2 files changed, 36 insertions(+), 24 deletions(-) diff --git a/support-files/rpm/server-postin.sh b/support-files/rpm/server-postin.sh index 91885f73466..cd2aec4d84a 100644 --- a/support-files/rpm/server-postin.sh +++ b/support-files/rpm/server-postin.sh @@ -1,6 +1,10 @@ # Make MySQL start/shutdown automatically when the machine does it. if [ $1 = 1 ] ; then + if [ -x /usr/bin/systemctl ] ; then + /usr/bin/systemctl daemon-reload >/dev/null 2>&1 + fi + if [ -x /sbin/chkconfig ] ; then /sbin/chkconfig --add mysql fi @@ -51,30 +55,31 @@ fi SETARGETDIR=/etc/selinux/targeted/src/policy SEDOMPROG=$SETARGETDIR/domains/program SECONPROG=$SETARGETDIR/file_contexts/program -if [ -f /etc/redhat-release ] \ - && grep -q "Red Hat Enterprise Linux .. release 4" /etc/redhat-release \ - || grep -q "CentOS release 4" /etc/redhat-release ; then - echo - echo - echo 'Notes regarding SELinux on this platform:' - echo '=========================================' - echo - echo 'The default policy might cause server startup to fail because it is ' - echo 'not allowed to access critical files. In this case, please update ' - echo 'your installation. ' - echo - echo 'The default policy might also cause inavailability of SSL related ' - echo 'features because the server is not allowed to access /dev/random ' - echo 'and /dev/urandom. If this is a problem, please do the following: ' - echo - echo ' 1) install selinux-policy-targeted-sources from your OS vendor' - echo ' 2) add the following two lines to '$SEDOMPROG/mysqld.te':' - echo ' allow mysqld_t random_device_t:chr_file read;' - echo ' allow mysqld_t urandom_device_t:chr_file read;' - echo ' 3) cd to '$SETARGETDIR' and issue the following command:' - echo ' make load' - echo - echo +if [ -f /etc/redhat-release ] ; then + if grep '\(Red Hat Enterprise Linux ..\|CentOS\) release 4' \ + /etc/redhat-release >/dev/null 2>&1; then + echo + echo + echo 'Notes regarding SELinux on this platform:' + echo '=========================================' + echo + echo 'The default policy might cause server startup to fail because it is ' + echo 'not allowed to access critical files. In this case, please update ' + echo 'your installation. ' + echo + echo 'The default policy might also cause inavailability of SSL related ' + echo 'features because the server is not allowed to access /dev/random ' + echo 'and /dev/urandom. If this is a problem, please do the following: ' + echo + echo ' 1) install selinux-policy-targeted-sources from your OS vendor' + echo ' 2) add the following two lines to '$SEDOMPROG/mysqld.te':' + echo ' allow mysqld_t random_device_t:chr_file read;' + echo ' allow mysqld_t urandom_device_t:chr_file read;' + echo ' 3) cd to '$SETARGETDIR' and issue the following command:' + echo ' make load' + echo + echo + fi fi if [ -x sbin/restorecon ] ; then diff --git a/support-files/rpm/server-postun.sh b/support-files/rpm/server-postun.sh index dcf67173a02..412c6f4c67b 100644 --- a/support-files/rpm/server-postun.sh +++ b/support-files/rpm/server-postun.sh @@ -6,3 +6,10 @@ if [ $1 -ge 1 ]; then fi fi fi + +if [ $1 = 0 ] ; then + if [ -x /usr/bin/systemctl ] ; then + /usr/bin/systemctl daemon-reload > /dev/null 2>&1 + fi +fi + From ca6b86f42043d1eb80e8afd110c66ca79e948ef0 Mon Sep 17 00:00:00 2001 From: Sergey Vojtovich <svoj@mariadb.org> Date: Wed, 14 Jan 2015 17:50:38 +0400 Subject: [PATCH 92/99] MDEV-7448 - mtr may leave stale mysqld Let mtr handle SIGHUP the same way as SIGINT. This solves stale mysqld processes left after broken/closed ssh connection. --- mysql-test/lib/My/SafeProcess/Base.pm | 1 + mysql-test/lib/My/SafeProcess/safe_process.cc | 3 +++ mysql-test/mysql-test-run.pl | 2 ++ 3 files changed, 6 insertions(+) diff --git a/mysql-test/lib/My/SafeProcess/Base.pm b/mysql-test/lib/My/SafeProcess/Base.pm index 0e8c191c440..1ac0120a735 100644 --- a/mysql-test/lib/My/SafeProcess/Base.pm +++ b/mysql-test/lib/My/SafeProcess/Base.pm @@ -180,6 +180,7 @@ sub create_process { } $SIG{INT}= 'DEFAULT'; + $SIG{HUP}= 'DEFAULT'; # Make this process it's own process group to be able to kill # it and any childs(that hasn't changed group themself) diff --git a/mysql-test/lib/My/SafeProcess/safe_process.cc b/mysql-test/lib/My/SafeProcess/safe_process.cc index f19ca622278..d6110f5f8c8 100644 --- a/mysql-test/lib/My/SafeProcess/safe_process.cc +++ b/mysql-test/lib/My/SafeProcess/safe_process.cc @@ -141,6 +141,7 @@ extern "C" void handle_signal(int sig) // Ignore further signals signal(SIGTERM, SIG_IGN); signal(SIGINT, SIG_IGN); + signal(SIGHUP, SIG_IGN); // Continune execution, allow the child to be started and // finally terminated by monitor loop @@ -164,6 +165,7 @@ int main(int argc, char* const argv[] ) /* Install signal handlers */ sigaction(SIGTERM, &sa,NULL); sigaction(SIGINT, &sa,NULL); + sigaction(SIGHUP, &sa, NULL); sigaction(SIGCHLD, &sa,NULL); sigaction(SIGABRT, &sa_abort,NULL); @@ -231,6 +233,7 @@ int main(int argc, char* const argv[] ) // Use default signal handlers in child signal(SIGTERM, SIG_DFL); signal(SIGINT, SIG_DFL); + signal(SIGHUP, SIG_DFL); signal(SIGCHLD, SIG_DFL); // Make this process it's own process group to be able to kill diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 50fb36d8989..daf9c6744da 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -109,6 +109,7 @@ require "lib/mtr_gprof.pl"; require "lib/mtr_misc.pl"; $SIG{INT}= sub { mtr_error("Got ^C signal"); }; +$SIG{HUP}= sub { mtr_error("Hangup detected on controlling terminal"); }; our $mysql_version_id; my $mysql_version_extra; @@ -908,6 +909,7 @@ sub run_worker ($) { my ($server_port, $thread_num)= @_; $SIG{INT}= sub { exit(1); }; + $SIG{HUP}= sub { exit(1); }; # Connect to server my $server = new IO::Socket::INET From 2fc0b22f2abd193b1d7091d5764a1ee254e79da6 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik <sergii@pisem.net> Date: Fri, 16 Jan 2015 17:54:00 +0100 Subject: [PATCH 93/99] restore an incorrectly merged line it's in the dead code (ifdef-ed out) so it doesn't matter what it is. still better to keep it closer to the upstream --- storage/tokudb/ha_tokudb.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/tokudb/ha_tokudb.h b/storage/tokudb/ha_tokudb.h index c17a4628a11..6c4055fc621 100644 --- a/storage/tokudb/ha_tokudb.h +++ b/storage/tokudb/ha_tokudb.h @@ -833,7 +833,7 @@ static inline bool key_is_clustering(const KEY *key) { #else static inline bool key_is_clustering(const KEY *key) { - return key->option_struct && key->option_struct->clustering; + return key->flags & HA_CLUSTERING; } #endif From 3f118a74bea0af77963bd2f2370a065c6fc80d84 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik <sergii@pisem.net> Date: Fri, 16 Jan 2015 18:13:02 +0100 Subject: [PATCH 94/99] MDEV-6347 Build RHEL7 packages add "mysql-compat-server" alias to MariaDB-server package --- cmake/cpack_rpm.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/cmake/cpack_rpm.cmake b/cmake/cpack_rpm.cmake index f5642ff4a00..bd8d96154b2 100644 --- a/cmake/cpack_rpm.cmake +++ b/cmake/cpack_rpm.cmake @@ -188,6 +188,7 @@ ELSEIF(RPM MATCHES "fedora" OR RPM MATCHES "(rhel|centos)7") ALTERNATIVE_NAME("client" "mysql") ALTERNATIVE_NAME("devel" "mariadb-devel") ALTERNATIVE_NAME("server" "mariadb-server") + ALTERNATIVE_NAME("server" "mysql-compat-server") ALTERNATIVE_NAME("shared" "mariadb-libs") ALTERNATIVE_NAME("shared" "mysql-libs") ALTERNATIVE_NAME("test" "mariadb-test") From 5d0d6cb129f64bfaed2128d2bcc366aeee44e5ad Mon Sep 17 00:00:00 2001 From: Sergei Golubchik <sergii@pisem.net> Date: Mon, 19 Jan 2015 16:28:58 +0100 Subject: [PATCH 95/99] MDEV-7294 MTR does not use /dev/shm with a out-of-source build mtr internally does the following: 1. $default_vardir=.... 2. $opt_vardir=$default_vardir unless $opt_vardir; 3. $opt_vardir=realpath $opt_vardir unless IS_WINDOWS 4. if ($opt_vardir eq $default_vardir) { .... use /dev/shm ... } thus we have to realpath $default_datadir too, otherwise the comparison logic might be broken --- mysql-test/mysql-test-run.pl | 1 + 1 file changed, 1 insertion(+) diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index daf9c6744da..ce07866ff9f 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -1494,6 +1494,7 @@ sub command_line_setup { { $default_vardir= "$glob_mysql_test_dir/var"; } + $default_vardir = realpath $default_vardir unless IS_WINDOWS; if ( ! $opt_vardir ) { From 595cf636fd9b07f64dd12d6ca9585a269fc67f45 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik <sergii@pisem.net> Date: Mon, 19 Jan 2015 16:29:18 +0100 Subject: [PATCH 96/99] MDEV-7475 Wrong implementation of checking PLUGIN_VAR_SET condition correct the check for PLUGIN_VAR_STR --- sql/sql_plugin.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/sql_plugin.cc b/sql/sql_plugin.cc index e1784c1f027..d1838bab4c9 100644 --- a/sql/sql_plugin.cc +++ b/sql/sql_plugin.cc @@ -3916,7 +3916,7 @@ static int test_plugin_options(MEM_ROOT *tmp_root, struct st_plugin_int *tmp, we copy string values to a plugin's memroot. */ if (mysqld_server_started && - ((o->flags & (PLUGIN_VAR_STR | PLUGIN_VAR_NOCMDOPT | + ((o->flags & (PLUGIN_VAR_TYPEMASK | PLUGIN_VAR_NOCMDOPT | PLUGIN_VAR_MEMALLOC)) == PLUGIN_VAR_STR)) { sysvar_str_t* str= (sysvar_str_t *)o; From a18eb833cd1947737ef44a4151803d618b5dcd0b Mon Sep 17 00:00:00 2001 From: Sergei Golubchik <sergii@pisem.net> Date: Mon, 19 Jan 2015 16:41:37 +0100 Subject: [PATCH 97/99] MDEV-7226 sql-bench test-table-elimination does not execute --- sql-bench/test-table-elimination.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql-bench/test-table-elimination.sh b/sql-bench/test-table-elimination.sh index 5b494688bec..7772cab42b0 100755 --- a/sql-bench/test-table-elimination.sh +++ b/sql-bench/test-table-elimination.sh @@ -1,4 +1,4 @@ -#!@PERL@ +#!/usr/bin/perl # Test of table elimination feature use Cwd; From 3212aaa995b9a20d4986f563bc7ebd34d5fc1477 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik <sergii@pisem.net> Date: Mon, 19 Jan 2015 17:18:24 +0100 Subject: [PATCH 98/99] MDEV-6220 mysqldump will not backup database with --flush-logs parameter and log_error my.cnf parameter defined some checks were "if [ -n "$err_log" ]", others were "if [ $want_syslog -eq 0 ]", so when both are set, error log file was only partially initialized. To avoid this ambiguity we reset want_syslog when error log file is used. --- scripts/mysqld_safe.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/mysqld_safe.sh b/scripts/mysqld_safe.sh index e5e0b768440..3428fff6a59 100644 --- a/scripts/mysqld_safe.sh +++ b/scripts/mysqld_safe.sh @@ -586,6 +586,7 @@ then then # User explicitly asked for syslog, so warn that it isn't used log_error "Can't log to error log and syslog at the same time. Remove all --log-error configuration options for --syslog to take effect." + want_syslog=0 fi # Log to err_log file From 8bc712e481a18976853fa57a7be77aab6159d431 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik <sergii@pisem.net> Date: Mon, 19 Jan 2015 17:31:59 +0100 Subject: [PATCH 99/99] MDEV-6671 mysql_server_end breaks OpenSSL --- include/mysql.h | 1 + include/mysql.h.pp | 1 + libmysql/CMakeLists.txt | 2 ++ libmysql/libmysql.c | 3 ++- sql-common/client.c | 1 + 5 files changed, 7 insertions(+), 1 deletion(-) diff --git a/include/mysql.h b/include/mysql.h index 090abf46377..d7fe5edef1e 100644 --- a/include/mysql.h +++ b/include/mysql.h @@ -75,6 +75,7 @@ typedef int my_socket; #include "my_list.h" /* for LISTs used in 'MYSQL' and 'MYSQL_STMT' */ +extern unsigned int mariadb_deinitialize_ssl; extern unsigned int mysql_port; extern char *mysql_unix_port; diff --git a/include/mysql.h.pp b/include/mysql.h.pp index c45a8d72c7c..b7b1ea2d96d 100644 --- a/include/mysql.h.pp +++ b/include/mysql.h.pp @@ -168,6 +168,7 @@ extern LIST *list_reverse(LIST *root); extern void list_free(LIST *root,unsigned int free_data); extern unsigned int list_length(LIST *); extern int list_walk(LIST *,list_walk_action action,unsigned char * argument); +extern unsigned int mariadb_deinitialize_ssl; extern unsigned int mysql_port; extern char *mysql_unix_port; typedef struct st_mysql_field { diff --git a/libmysql/CMakeLists.txt b/libmysql/CMakeLists.txt index fc4abb0ddd4..ca5d1ec8947 100644 --- a/libmysql/CMakeLists.txt +++ b/libmysql/CMakeLists.txt @@ -236,6 +236,8 @@ dynamic_column_exists dynamic_column_list dynamic_column_get dynamic_column_prepare_decimal +# +mariadb_deinitialize_ssl ) SET(CLIENT_API_FUNCTIONS diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index 7a4fc9fabd4..df18d6d60da 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -205,7 +205,8 @@ void STDCALL mysql_server_end() mysql_client_plugin_deinit(); finish_client_errs(); - vio_end(); + if (mariadb_deinitialize_ssl) + vio_end(); #ifdef EMBEDDED_LIBRARY end_embedded_server(); #endif diff --git a/sql-common/client.c b/sql-common/client.c index 69387391e6d..193f80f5788 100644 --- a/sql-common/client.c +++ b/sql-common/client.c @@ -118,6 +118,7 @@ my_bool net_flush(NET *net); #define native_password_plugin_name "mysql_native_password" #define old_password_plugin_name "mysql_old_password" +uint mariadb_deinitialize_ssl= 1; uint mysql_port=0; char *mysql_unix_port= 0; const char *unknown_sqlstate= "HY000";