diff options
26 files changed, 112 insertions, 79 deletions
diff --git a/client/mysql.cc b/client/mysql.cc index 08e53df75fe..bfaed00b49f 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -4288,8 +4288,9 @@ extern "C" char *mysql_authentication_dialog_ask(MYSQL *mysql, int type, } else { - fgets(buf, buf_len-1, stdin); - if (buf[0] && (s= strend(buf))[-1] == '\n') + if (!fgets(buf, buf_len-1, stdin)) + buf[0]= 0; + else if (buf[0] && (s= strend(buf))[-1] == '\n') s[-1]= 0; } diff --git a/configure.in b/configure.in index 006960fcd8d..5598692626f 100644 --- a/configure.in +++ b/configure.in @@ -12,7 +12,7 @@ AC_PREREQ(2.59) # MySQL version number. # # Note: the following line must be parseable by win/configure.js:GetVersion() -AC_INIT([MariaDB Server], [5.2.0-MariaDB-alpha], [], [mysql]) +AC_INIT([MariaDB Server], [5.2.0-MariaDB-beta], [], [mysql]) AC_CONFIG_SRCDIR([sql/mysqld.cc]) AC_CANONICAL_SYSTEM # USTAR format gives us the possibility to store longer path names in diff --git a/mysql-test/extra/rpl_tests/rpl_insert_id_pk.test b/mysql-test/extra/rpl_tests/rpl_insert_id_pk.test index 844f93d0906..0be33a46c04 100644 --- a/mysql-test/extra/rpl_tests/rpl_insert_id_pk.test +++ b/mysql-test/extra/rpl_tests/rpl_insert_id_pk.test @@ -82,7 +82,6 @@ SET FOREIGN_KEY_CHECKS=0; # Duplicate Key Errors codes --error 1022, ER_DUP_ENTRY INSERT INTO t1 VALUES (1),(1); -sync_slave_with_master; -connection master; drop table t1; +sync_slave_with_master; # End of 4.1 tests diff --git a/mysql-test/include/maria_empty_logs.inc b/mysql-test/include/maria_empty_logs.inc index bbe6673f10d..cc93e214348 100644 --- a/mysql-test/include/maria_empty_logs.inc +++ b/mysql-test/include/maria_empty_logs.inc @@ -11,9 +11,10 @@ connection default; let $default_db=`select database()`; let $MYSQLD_DATADIR= `SELECT @@datadir`; -# it will used at end of test for wait_for_status_var.inc primitive -let $status_var= Threads_connected; -let $status_var_value= query_get_value(SHOW STATUS LIKE 'Threads_connected', Value, 1); + +#it will used at end of test for wait_for_status_var.inc primitive +#let $status_var= Threads_connected; +#let $status_var_value= query_get_value(SHOW STATUS LIKE 'Threads_connected', Value, 1); connection admin; -- echo * shut down mysqld, removed logs, restarted it @@ -77,12 +78,15 @@ append_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect; restart-maria_empty_logs.inc EOF +connection default; --source include/wait_until_connected_again.inc -connection default; # Make sure that all connections are restored ---source include/wait_for_status_var.inc +# This is disabled as 'Threads_connected' can't be trusted' +# (It may be affected by 'check_testcase()') +# --source include/wait_for_status_var.inc # Restore current database as the effect of "use" was lost after restart + --disable_query_log eval use $default_db; --enable_query_log diff --git a/mysql-test/lib/My/SafeProcess/safe_process.cc b/mysql-test/lib/My/SafeProcess/safe_process.cc index f9da9560693..71942565f8b 100644 --- a/mysql-test/lib/My/SafeProcess/safe_process.cc +++ b/mysql-test/lib/My/SafeProcess/safe_process.cc @@ -85,17 +85,18 @@ static void die(const char* fmt, ...) va_end(args); if (int last_err= errno) fprintf(stderr, "error: %d, %s\n", last_err, strerror(last_err)); - exit(1); + exit(6); } -static void kill_child(void) +static void kill_child(bool was_killed) { int status= 0; message("Killing child: %d", child_pid); // Terminate whole process group - kill(-child_pid, SIGKILL); + if (! was_killed) + kill(-child_pid, SIGKILL); pid_t ret_pid= waitpid(child_pid, &status, 0); if (ret_pid == child_pid) @@ -115,7 +116,7 @@ static void kill_child(void) exit(exit_code); } - exit(1); + exit(5); } @@ -135,7 +136,7 @@ extern "C" void handle_signal(int sig) terminated= 1; if (child_pid > 0) - kill_child(); + kill_child(sig == SIGCHLD); // Ignore further signals signal(SIGTERM, SIG_IGN); @@ -240,8 +241,8 @@ int main(int argc, char* const argv[] ) // Close write end close(pfd[1]); - if (execvp(child_argv[0], child_argv) < 0) - die("Failed to exec child"); + execvp(child_argv[0], child_argv); + die("Failed to exec child"); } close(pfd[1]); // Close unused write end @@ -257,39 +258,19 @@ int main(int argc, char* const argv[] ) /* Monitor loop */ message("Started child %d, terminated: %d", child_pid, terminated); - while(!terminated) + while (!terminated) { // Check if parent is still alive - if (kill(parent_pid, 0) != 0){ + if (kill(parent_pid, 0) != 0) + { message("Parent is not alive anymore"); break; } - - // Check if child has exited, normally this will be - // detected immediately with SIGCHLD handler - int status= 0; - pid_t ret_pid= waitpid(child_pid, &status, WNOHANG); - if (ret_pid == child_pid) - { - int ret_code= 2; - if (WIFEXITED(status)) - { - // Process has exited, collect return status - ret_code= WEXITSTATUS(status); - message("Child exit: %d", ret_code); - // Exit with exit status of the child - exit(ret_code); - } - - if (WIFSIGNALED(status)) - message("Child killed by signal: %d", WTERMSIG(status)); - - exit(ret_code); - } + /* Wait for parent or child to die */ sleep(1); } - kill_child(); + kill_child(0); - return 1; + return 4; } diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index c3f1efecae2..3fab5e05500 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -4012,7 +4012,10 @@ sub extract_warning_lines ($) { qr/Slave I\/O: Get master COLLATION_SERVER failed with error:.*/, qr/Slave I\/O: Get master TIME_ZONE failed with error:.*/, qr/Slave I\/O: error reconnecting to master '.*' - retry-time: [1-3] retries/, + qr/Slave I\/0: Master command COM_BINLOG_DUMP failed/, qr/Error reading packet/, + qr/Lost connection to MySQL server at 'reading initial communication packet'/, + qr/Failed on request_dump/, qr/Slave: Can't drop database.* database doesn't exist/, qr/Slave: Operation DROP USER failed for 'create_rout_db'/, qr|Checking table: '\./mtr/test_suppressions'|, diff --git a/mysql-test/r/func_time.result b/mysql-test/r/func_time.result index 2ac549a5abd..22c8a6e4b6f 100644 --- a/mysql-test/r/func_time.result +++ b/mysql-test/r/func_time.result @@ -1120,7 +1120,7 @@ drop function t_slow_sysdate; drop table t1; SET GLOBAL log_bin_trust_function_creators = 0; create table t1 (a datetime, i int, b datetime); -insert into t1 select sysdate(), sleep(1), sysdate() from dual; +insert into t1 select sysdate(), sleep(2), sysdate() from dual; select a != b from t1; a != b 1 diff --git a/mysql-test/suite/binlog/r/binlog_index.result b/mysql-test/suite/binlog/r/binlog_index.result index 29fc997d67e..e2688a15899 100644 --- a/mysql-test/suite/binlog/r/binlog_index.result +++ b/mysql-test/suite/binlog/r/binlog_index.result @@ -3,6 +3,7 @@ call mtr.add_suppression('MSYQL_BIN_LOG::purge_logs failed to process registered call mtr.add_suppression('MSYQL_BIN_LOG::open failed to sync the index file'); call mtr.add_suppression('Turning logging off for the whole duration of the MySQL server process.'); call mtr.add_suppression('MSYQL_BIN_LOG::purge_logs failed to clean registers before purging logs.'); +flush tables; flush logs; flush logs; flush logs; diff --git a/mysql-test/suite/binlog/t/binlog_index-master.opt b/mysql-test/suite/binlog/t/binlog_index-master.opt new file mode 100644 index 00000000000..26cd87ef8c3 --- /dev/null +++ b/mysql-test/suite/binlog/t/binlog_index-master.opt @@ -0,0 +1 @@ +--skip-stack-trace --test-expect-abort --log-warnings=0 diff --git a/mysql-test/suite/binlog/t/binlog_index.test b/mysql-test/suite/binlog/t/binlog_index.test index 58d285e4a98..3847e40aeb2 100644 --- a/mysql-test/suite/binlog/t/binlog_index.test +++ b/mysql-test/suite/binlog/t/binlog_index.test @@ -11,6 +11,8 @@ call mtr.add_suppression('MSYQL_BIN_LOG::purge_logs failed to process registered call mtr.add_suppression('MSYQL_BIN_LOG::open failed to sync the index file'); call mtr.add_suppression('Turning logging off for the whole duration of the MySQL server process.'); call mtr.add_suppression('MSYQL_BIN_LOG::purge_logs failed to clean registers before purging logs.'); +flush tables; + let $old=`select @@debug`; let $MYSQLD_DATADIR= `select @@datadir`; diff --git a/mysql-test/suite/funcs_1/datadict/processlist_priv.inc b/mysql-test/suite/funcs_1/datadict/processlist_priv.inc index 9bd8eaedd14..1fffdf014e6 100644 --- a/mysql-test/suite/funcs_1/datadict/processlist_priv.inc +++ b/mysql-test/suite/funcs_1/datadict/processlist_priv.inc @@ -89,18 +89,38 @@ USE information_schema; --echo 1 Prepare test. --echo connection default (user=root) --echo #################################################################################### -if (`SELECT COUNT(*) <> 1 FROM processlist`) + +# Check that we have only one connection around. +# If there is more, it may be the check() connection that has not yet ended, +# so we wait for it for up to 10 seconds. + +let $counter=100; +while ($counter) { - --echo This test expects one connection to the server. - --echo Expectation: USER HOST DB COMMAND STATE INFO - --echo Expectation: root localhost information_schema Query executing SELECT USER,HOST,DB,COMMAND,STATE,INFO FROM processlist ORDER BY ID - --echo But we found in the moment: - SELECT USER,HOST,DB,COMMAND,STATE,INFO FROM processlist ORDER BY ID; - --echo Maybe - --echo - the base configuration (no of parallel auxiliary sessions) of the server has changed - --echo - a parallel test intended for another server accidently connected to our current one - --echo We cannot proceed in this situation. Abort - exit; + dec $counter; + let $res= `SELECT COUNT(*) <> 1 FROM processlist`; + if (!$res) + { + # Success; Abort while loop + let $counter=0; + } + if ($res) + { + --sleep 0.1 + if (!$counter) + { + --echo This test expects one connection to the server. + --echo Expectation: USER HOST DB COMMAND STATE INFO + --echo Expectation: root localhost information_schema Query executing SELECT USER,HOST,DB,COMMAND,STATE,INFO FROM processlist ORDER BY ID + --echo But we found in the moment: + SELECT USER,HOST,DB,COMMAND,STATE,INFO FROM processlist ORDER BY ID; + --echo Maybe + --echo - the base configuration (no of parallel auxiliary sessions) of the server has changed + --echo - a parallel test intended for another server accidently connected to our current one + --echo We cannot proceed in this situation. Abort + exit; + } + } } --echo #################################################################################### diff --git a/mysql-test/suite/pbxt/r/multi_statement.result b/mysql-test/suite/pbxt/r/multi_statement.result index 21a62e01bca..44877804727 100644 --- a/mysql-test/suite/pbxt/r/multi_statement.result +++ b/mysql-test/suite/pbxt/r/multi_statement.result @@ -47,5 +47,5 @@ i 3 show status like 'Slow_queries'|||| Variable_name Value -Slow_queries 0 +Slow_queries 3 drop table t1|||| diff --git a/mysql-test/suite/pbxt/t/multi_statement-master.opt b/mysql-test/suite/pbxt/t/multi_statement-master.opt new file mode 100644 index 00000000000..c735cf4c21b --- /dev/null +++ b/mysql-test/suite/pbxt/t/multi_statement-master.opt @@ -0,0 +1,3 @@ +--slow-query-log +--slow-query-log-file=slow.log +--log-queries-not-using-indexes diff --git a/mysql-test/suite/pbxt/t/status.test b/mysql-test/suite/pbxt/t/status.test index 8a3d43ea475..4ecb6acfd6f 100644 --- a/mysql-test/suite/pbxt/t/status.test +++ b/mysql-test/suite/pbxt/t/status.test @@ -30,7 +30,7 @@ connection con1; --send update t1 set n = 3; connection con2; -sleep 0.5; +sleep 5; unlock tables; connection con1; reap; diff --git a/mysql-test/t/func_time.test b/mysql-test/t/func_time.test index b9da946a55f..2f9a48ffd6a 100644 --- a/mysql-test/t/func_time.test +++ b/mysql-test/t/func_time.test @@ -650,7 +650,7 @@ drop table t1; SET GLOBAL log_bin_trust_function_creators = 0; create table t1 (a datetime, i int, b datetime); -insert into t1 select sysdate(), sleep(1), sysdate() from dual; +insert into t1 select sysdate(), sleep(2), sysdate() from dual; select a != b from t1; drop table t1; diff --git a/plugin/auth/dialog.c b/plugin/auth/dialog.c index 95998fcc0d0..4fa1b5e66e5 100644 --- a/plugin/auth/dialog.c +++ b/plugin/auth/dialog.c @@ -224,11 +224,11 @@ static mysql_authentication_dialog_ask_t ask; static char *builtin_ask(MYSQL *mysql __attribute__((unused)), int type __attribute__((unused)), const char *prompt, - char *buf, int buf_len __attribute__((unused))) + char *buf, int buf_len) { fputs(prompt, stdout); fputc(' ', stdout); - if (gets(buf) == 0) + if (fgets(buf, buf_len, stdin) == 0) return 0; return buf; diff --git a/sql/events.cc b/sql/events.cc index d167a3dd4e9..31eddada282 100644 --- a/sql/events.cc +++ b/sql/events.cc @@ -1263,8 +1263,9 @@ Events::load_events_from_db(THD *thd) } } } - sql_print_information("Event Scheduler: Loaded %d event%s", - count, (count == 1) ? "" : "s"); + if (global_system_variables.log_warnings) + sql_print_information("Event Scheduler: Loaded %d event%s", + count, (count == 1) ? "" : "s"); ret= FALSE; end: diff --git a/sql/handler.cc b/sql/handler.cc index 44f9809626d..90884daaae4 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -4455,6 +4455,8 @@ int handler::index_read_idx_map(uchar * buf, uint index, const uchar * key, enum ha_rkey_function find_flag) { int error, error1; + LINT_INIT(error1); + error= index_init(index, 0); if (!error) { diff --git a/sql/log.cc b/sql/log.cc index 044404bf08e..bfe194172ba 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -1238,6 +1238,7 @@ void LOGGER::deactivate_log_handler(THD *thd, uint log_type) { my_bool *tmp_opt= 0; MYSQL_LOG *file_log; + LINT_INIT(file_log); switch (log_type) { case QUERY_LOG_SLOW: diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 66248461ff8..1d6bab76e46 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -1,4 +1,5 @@ /* Copyright (C) 2000-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. + 2009-2010 Monty Program Ab 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 @@ -383,7 +384,7 @@ static bool volatile select_thread_in_use, signal_thread_in_use; static bool volatile ready_to_exit; static my_bool opt_debugging= 0, opt_external_locking= 0, opt_console= 0; static my_bool opt_short_log_format= 0; -static my_bool opt_ignore_wrong_options= 0; +static my_bool opt_ignore_wrong_options= 0, opt_expect_abort= 0; static uint kill_cached_threads, wake_thread; ulong thread_created; static ulong max_used_connections; @@ -2549,13 +2550,19 @@ extern "C" sig_handler handle_segfault(int sig) curr_time= my_time(0); localtime_r(&curr_time, &tm); - fprintf(stderr,"\ -%02d%02d%02d %2d:%02d:%02d - mysqld got " SIGNAL_FMT " ;\n\ + fprintf(stderr, "%02d%02d%02d %2d:%02d:%02d ", + tm.tm_year % 100, tm.tm_mon+1, tm.tm_mday, + tm.tm_hour, tm.tm_min, tm.tm_sec); + if (opt_expect_abort && sig == SIGABRT) + { + fprintf(stderr,"[Note] mysqld did an expected abort\n"); + goto end; + } + + fprintf(stderr,"[ERROR] mysqld got " SIGNAL_FMT " ;\n\ This could be because you hit a bug. It is also possible that this binary\n\ or one of the libraries it was linked against is corrupt, improperly built,\n\ or misconfigured. This error can also be caused by malfunctioning hardware.\n", - tm.tm_year % 100, tm.tm_mon+1, tm.tm_mday, - tm.tm_hour, tm.tm_min, tm.tm_sec, sig); fprintf(stderr, "\ We will try our best to scrape up some info that will hopefully help diagnose\n\ @@ -2674,6 +2681,7 @@ bugs.\n"); } #endif +end: #ifndef __WIN__ /* On Windows, do not terminate, but pass control to exception filter */ exit(1); @@ -5925,7 +5933,7 @@ enum options_mysqld OPT_MIN_EXAMINED_ROW_LIMIT, OPT_LOG_SLOW_SLAVE_STATEMENTS, OPT_DEBUG_CRC, OPT_DEBUG_ON, OPT_OLD_MODE, - OPT_TEST_IGNORE_WRONG_OPTIONS, + OPT_TEST_IGNORE_WRONG_OPTIONS, OPT_TEST_RESTART, #if defined(ENABLED_DEBUG_SYNC) OPT_DEBUG_SYNC_TIMEOUT, #endif /* defined(ENABLED_DEBUG_SYNC) */ @@ -6773,6 +6781,10 @@ log and this option does nothing anymore.", "Ignore wrong enums values in command line arguments. Useful only for test scripts", (uchar**) &opt_ignore_wrong_options, (uchar**) &opt_ignore_wrong_options, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, + {"test-expect-abort", OPT_TEST_RESTART, + "Expect that server aborts with 'abort'; Don't write out server variables on 'abort'. Useful only for test scripts", + (uchar**) &opt_expect_abort, (uchar**) &opt_expect_abort, + 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, {"timed_mutexes", OPT_TIMED_MUTEXES, "Specify whether to time mutexes (only InnoDB mutexes are currently supported)", (uchar**) &timed_mutexes, (uchar**) &timed_mutexes, 0, GET_BOOL, NO_ARG, 0, diff --git a/sql/set_var.cc b/sql/set_var.cc index 29c09554b2e..8a512b8947b 100644 --- a/sql/set_var.cc +++ b/sql/set_var.cc @@ -2604,7 +2604,7 @@ static int sys_check_log_path(THD *thd, set_var *var) char path[FN_REFLEN], buff[FN_REFLEN]; MY_STAT f_stat; String str(buff, sizeof(buff), system_charset_info), *res; - const char *log_file_str; + const char *log_file_str= 0; size_t path_length; if (!(res= var->value->val_str(&str))) @@ -2654,7 +2654,7 @@ static int sys_check_log_path(THD *thd, set_var *var) err: my_error(ER_WRONG_VALUE_FOR_VAR, MYF(0), var->var->name, - res ? log_file_str : "NULL"); + log_file_str ? log_file_str : "NULL"); return 1; } @@ -2663,7 +2663,7 @@ bool update_sys_var_str_path(THD *thd, sys_var_str *var_str, set_var *var, const char *log_ext, bool log_state, uint log_type) { - MYSQL_QUERY_LOG *file_log; + MYSQL_QUERY_LOG *file_log= 0; char buff[FN_REFLEN]; char *res= 0, *old_value=(char *)(var ? var->value->str_value.ptr() : 0); bool result= 0; diff --git a/sql/slave.cc b/sql/slave.cc index 3a62785886d..3639330c8e7 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -2255,6 +2255,7 @@ static int exec_relay_log_event(THD* thd, Relay_log_info* rli) if (slave_trans_retries) { int temp_err; + LINT_INIT(temp_err); if (exec_res && (temp_err= has_temporary_error(thd))) { const char *errmsg; diff --git a/sql/sql_plugin.cc b/sql/sql_plugin.cc index 2fc27eb06aa..a2bb1127839 100644 --- a/sql/sql_plugin.cc +++ b/sql/sql_plugin.cc @@ -593,7 +593,7 @@ static my_bool read_maria_plugin_info(struct st_plugin_dl *plugin_dl, DBUG_RETURN(FALSE); } -#endif HAVE_DLOPEN +#endif /* HAVE_DLOPEN */ static st_plugin_dl *plugin_dl_add(const LEX_STRING *dl, int report) { @@ -1886,9 +1886,10 @@ bool mysql_install_plugin(THD *thd, const LEX_STRING *name, const LEX_STRING *dl if (tmp->state == PLUGIN_IS_DISABLED) { - push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN, - ER_CANT_INITIALIZE_UDF, ER(ER_CANT_INITIALIZE_UDF), - name->str, "Plugin is disabled"); + if (global_system_variables.log_warnings) + push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN, + ER_CANT_INITIALIZE_UDF, ER(ER_CANT_INITIALIZE_UDF), + name->str, "Plugin is disabled"); } else { diff --git a/storage/maria/ma_loghandler.c b/storage/maria/ma_loghandler.c index 8bc086c8e8b..ccb3d294143 100644 --- a/storage/maria/ma_loghandler.c +++ b/storage/maria/ma_loghandler.c @@ -1274,11 +1274,10 @@ static my_bool translog_set_lsn_for_files(uint32 from_file, uint32 to_file, for (file= from_file; file <= to_file; file++) { LOGHANDLER_FILE_INFO info; - File fd= open_logfile_by_number_no_cache(file); - - LINT_INIT_STRUCT(info); + File fd; LINT_INIT(info.max_lsn); + fd= open_logfile_by_number_no_cache(file); if ((fd < 0) || ((translog_read_file_header(&info, fd) || (cmp_translog_addr(lsn, info.max_lsn) > 0 && diff --git a/storage/xtradb/include/ut0lst.h b/storage/xtradb/include/ut0lst.h index fa7a186dfb1..7b15c052978 100644 --- a/storage/xtradb/include/ut0lst.h +++ b/storage/xtradb/include/ut0lst.h @@ -158,7 +158,7 @@ Inserts a NODE2 after NODE1 in a list. /** Invalidate the pointers in a list node. @param NAME list name @param N pointer to the node that was removed */ -# define UT_LIST_REMOVE_CLEAR(NAME, N) {} while (0) +# define UT_LIST_REMOVE_CLEAR(NAME, N) do {} while (0) #endif /*******************************************************************//** diff --git a/support-files/compiler_warnings.supp b/support-files/compiler_warnings.supp index 0195ed071db..36442cb2e36 100644 --- a/support-files/compiler_warnings.supp +++ b/support-files/compiler_warnings.supp @@ -40,6 +40,7 @@ sync/sync0sync\.c: unused parameter sync/sync0sync\.c: unused variable ut/ut0ut\.c: ignoring return value of srv/srv0srv\.c: value computed is not used +buf/buf0buf\.c: .*block_mutex.* might be used uninitialized # # bdb is not critical to keep up to date |