From: Bjorn Munch Date: October 4 2010 11:12am Subject: bzr push into mysql-5.1-bugteam branch (bjorn.munch:3515 to 3517) List-Archive: http://lists.mysql.com/commits/119824 Message-Id: <201010041112.o94BCwsX002250@khepri15.norway.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0546373037==" --===============0546373037== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline 3517 Bjorn Munch 2010-10-03 Small test fix after 56753 modified: mysql-test/suite/innodb_plugin/t/innodb_bug53756.test 3516 Bjorn Munch 2010-10-03 [merge] merge from 5.1-mtr modified: client/mysqltest.cc mysql-test/include/setup_fake_relay_log.inc mysql-test/mysql-test-run.pl mysql-test/r/mysqltest.result mysql-test/suite/innodb/t/innodb_bug53756.test mysql-test/suite/rpl/t/rpl_row_tbl_metadata.test mysql-test/suite/sys_vars/t/secure_file_priv.test mysql-test/t/mysqltest.test 3515 Alexey Kopytov 2010-10-01 [merge] Automerge. added: mysql-test/r/partition_binlog_stmt.result mysql-test/suite/innodb_plugin/r/innodb_bug53756.result mysql-test/suite/innodb_plugin/t/innodb_bug53756-master.opt mysql-test/suite/innodb_plugin/t/innodb_bug53756.test mysql-test/t/partition_binlog_stmt.test modified: config/ac-macros/maintainer.m4 mysql-test/r/merge.result mysql-test/r/partition.result mysql-test/r/ps_2myisam.result mysql-test/r/ps_3innodb.result mysql-test/r/ps_4heap.result mysql-test/r/ps_5merge.result mysql-test/t/merge.test mysql-test/t/partition.test mysys/my_getopt.c sql/ha_partition.cc sql/ha_partition.h sql/item_func.cc sql/log.cc sql/sql_cache.cc sql/sql_table.cc sql/table.cc sql/table.h storage/innobase/btr/btr0btr.c storage/innobase/btr/btr0cur.c storage/innobase/btr/btr0pcur.c storage/innobase/btr/btr0sea.c storage/innobase/buf/buf0flu.c storage/innobase/eval/eval0eval.c storage/innobase/handler/ha_innodb.cc storage/innobase/include/ut0rnd.ic storage/innobase/lock/lock0lock.c storage/innobase/log/log0recv.c storage/innobase/os/os0file.c storage/innobase/que/que0que.c storage/innobase/row/row0mysql.c storage/innobase/row/row0purge.c storage/innobase/row/row0umod.c storage/innobase/row/row0upd.c storage/innobase/row/row0vers.c storage/innobase/trx/trx0purge.c storage/innobase/trx/trx0roll.c storage/innobase/trx/trx0sys.c storage/innobase/trx/trx0trx.c storage/innobase/trx/trx0undo.c storage/innodb_plugin/ChangeLog storage/innodb_plugin/btr/btr0btr.c storage/innodb_plugin/btr/btr0cur.c storage/innodb_plugin/btr/btr0pcur.c storage/innodb_plugin/btr/btr0sea.c storage/innodb_plugin/buf/buf0flu.c storage/innodb_plugin/dict/dict0crea.c storage/innodb_plugin/dict/dict0dict.c storage/innodb_plugin/dict/dict0load.c storage/innodb_plugin/eval/eval0eval.c storage/innodb_plugin/handler/ha_innodb.cc storage/innodb_plugin/handler/i_s.cc storage/innodb_plugin/include/os0sync.h storage/innodb_plugin/include/univ.i storage/innodb_plugin/include/ut0rnd.ic storage/innodb_plugin/log/log0recv.c storage/innodb_plugin/os/os0file.c storage/innodb_plugin/que/que0que.c storage/innodb_plugin/row/row0mysql.c storage/innodb_plugin/row/row0purge.c storage/innodb_plugin/row/row0umod.c storage/innodb_plugin/row/row0vers.c storage/innodb_plugin/trx/trx0purge.c storage/innodb_plugin/trx/trx0roll.c storage/innodb_plugin/trx/trx0sys.c storage/innodb_plugin/trx/trx0trx.c storage/innodb_plugin/trx/trx0undo.c storage/myisam/mi_range.c storage/myisam/mi_search.c storage/myisam/rt_index.c storage/myisam/rt_split.c === modified file 'client/mysqltest.cc' --- a/client/mysqltest.cc 2010-09-10 07:58:26 +0000 +++ b/client/mysqltest.cc 2010-10-03 17:37:58 +0000 @@ -103,6 +103,7 @@ static my_bool parsing_disabled= 0; static my_bool display_result_vertically= FALSE, display_result_lower= FALSE, display_metadata= FALSE, display_result_sorted= FALSE; static my_bool disable_query_log= 0, disable_result_log= 0; +static my_bool disable_connect_log= 1; static my_bool disable_warnings= 0; static my_bool disable_info= 1; static my_bool abort_on_error= 1; @@ -242,7 +243,9 @@ struct st_connection int cur_query_len; pthread_mutex_t mutex; pthread_cond_t cond; + pthread_t tid; int query_done; + my_bool has_thread; #endif /*EMBEDDED_LIBRARY*/ }; @@ -273,6 +276,7 @@ enum enum_commands { Q_DISABLE_RPL_PARSE, Q_EVAL_RESULT, Q_ENABLE_QUERY_LOG, Q_DISABLE_QUERY_LOG, Q_ENABLE_RESULT_LOG, Q_DISABLE_RESULT_LOG, + Q_ENABLE_CONNECT_LOG, Q_DISABLE_CONNECT_LOG, Q_WAIT_FOR_SLAVE_TO_STOP, Q_ENABLE_WARNINGS, Q_DISABLE_WARNINGS, Q_ENABLE_INFO, Q_DISABLE_INFO, @@ -340,6 +344,8 @@ const char *command_names[]= /* Enable/disable that the _result_ from a query is logged to result file */ "enable_result_log", "disable_result_log", + "enable_connect_log", + "disable_connect_log", "wait_for_slave_to_stop", "enable_warnings", "disable_warnings", @@ -733,8 +739,6 @@ pthread_handler_t send_one_query(void *a static int do_send_query(struct st_connection *cn, const char *q, int q_len, int flags) { - pthread_t tid; - if (flags & QUERY_REAP_FLAG) return mysql_send_query(&cn->mysql, q, q_len); @@ -745,9 +749,10 @@ static int do_send_query(struct st_conne cn->cur_query= q; cn->cur_query_len= q_len; cn->query_done= 0; - if (pthread_create(&tid, &cn_thd_attrib, send_one_query, (void*)cn)) + if (pthread_create(&cn->tid, &cn_thd_attrib, send_one_query, (void*)cn)) die("Cannot start new thread for query"); + cn->has_thread= TRUE; return 0; } @@ -760,6 +765,14 @@ static void wait_query_thread_end(struct pthread_cond_wait(&con->cond, &con->mutex); pthread_mutex_unlock(&con->mutex); } + if (con->has_thread) + { +#ifndef __WIN__ + /* May hang on Windows, but the problem it solves is not seen there */ + pthread_join(con->tid, NULL); +#endif + con->has_thread= FALSE; + } } #else /*EMBEDDED_LIBRARY*/ @@ -2175,8 +2188,14 @@ void var_query_set(VAR *var, const char DBUG_ENTER("var_query_set"); LINT_INIT(res); + /* Only white space or ) allowed past ending ` */ while (end > query && *end != '`') + { + if (*end && (*end != ' ' && *end != '\t' && *end != '\n' && *end != ')')) + die("Spurious text after `query` expression"); --end; + } + if (query == end) die("Syntax error in query, missing '`'"); ++query; @@ -3834,7 +3853,18 @@ void do_perl(struct st_command *command) if (!error) my_delete(temp_file_path, MYF(0)); - handle_command_error(command, WEXITSTATUS(error)); + /* Check for error code that indicates perl could not be started */ + int exstat= WEXITSTATUS(error); +#ifdef __WIN__ + if (exstat == 1) + /* Text must begin 'perl not found' as mtr looks for it */ + abort_not_supported_test("perl not found in path or did not start"); +#else + if (exstat == 127) + abort_not_supported_test("perl not found in path"); +#endif + else + handle_command_error(command, exstat); } dynstr_free(&ds_delimiter); DBUG_VOID_RETURN; @@ -4778,6 +4808,16 @@ void select_connection_name(const char * set_current_connection(con); + /* Connection logging if enabled */ + if (!disable_connect_log && !disable_query_log) + { + DYNAMIC_STRING *ds= &ds_res; + + dynstr_append_mem(ds, "connection ", 11); + replace_dynstr_append(ds, name); + dynstr_append_mem(ds, ";\n", 2); + } + DBUG_VOID_RETURN; } @@ -4865,6 +4905,16 @@ void do_close_connection(struct st_comma var_set_string("$CURRENT_CONNECTION", con->name); } + /* Connection logging if enabled */ + if (!disable_connect_log && !disable_query_log) + { + DYNAMIC_STRING *ds= &ds_res; + + dynstr_append_mem(ds, "disconnect ", 11); + replace_dynstr_append(ds, ds_connection.str); + dynstr_append_mem(ds, ";\n", 2); + } + DBUG_VOID_RETURN; } @@ -4999,6 +5049,13 @@ int connect_n_handle_errors(struct st_co dynstr_append_mem(ds, delimiter, delimiter_length); dynstr_append_mem(ds, "\n", 1); } + /* Simlified logging if enabled */ + if (!disable_connect_log && !disable_query_log) + { + replace_dynstr_append(ds, command->query); + dynstr_append_mem(ds, ";\n", 2); + } + while (!mysql_real_connect(con, host, user, pass, db, port, sock ? sock: 0, CLIENT_MULTI_STATEMENTS)) { @@ -5187,6 +5244,7 @@ void do_connect(struct st_command *comma #ifdef EMBEDDED_LIBRARY con_slot->query_done= 1; + con_slot->has_thread= FALSE; #endif if (!mysql_init(&con_slot->mysql)) die("Failed on mysql_init()"); @@ -7307,11 +7365,13 @@ void run_query(struct st_connection *cn, (flags & QUERY_REAP_FLAG)); DBUG_ENTER("run_query"); - init_dynamic_string(&ds_warnings, NULL, 0, 256); - if (cn->pending && (flags & QUERY_SEND_FLAG)) die ("Cannot run query on connection between send and reap"); + if (!(flags & QUERY_SEND_FLAG) && !cn->pending) + die ("Cannot reap on a connection without pending send"); + + init_dynamic_string(&ds_warnings, NULL, 0, 256); /* Evaluate query if this is an eval command */ @@ -8052,6 +8112,8 @@ int main(int argc, char **argv) case Q_DISABLE_ABORT_ON_ERROR: abort_on_error=0; break; case Q_ENABLE_RESULT_LOG: disable_result_log=0; break; case Q_DISABLE_RESULT_LOG: disable_result_log=1; break; + case Q_ENABLE_CONNECT_LOG: disable_connect_log=0; break; + case Q_DISABLE_CONNECT_LOG: disable_connect_log=1; break; case Q_ENABLE_WARNINGS: disable_warnings=0; break; case Q_DISABLE_WARNINGS: disable_warnings=1; break; case Q_ENABLE_INFO: disable_info=0; break; === modified file 'mysql-test/include/setup_fake_relay_log.inc' --- a/mysql-test/include/setup_fake_relay_log.inc 2010-02-02 15:16:47 +0000 +++ b/mysql-test/include/setup_fake_relay_log.inc 2010-09-15 12:56:22 +0000 @@ -72,7 +72,7 @@ copy_file $fake_relay_log $_fake_relay_l if (`SELECT LENGTH(@@secure_file_priv) > 0`) { - -- let $_file_priv_dir= `SELECT @@secure_file_priv`; + -- let $_file_priv_dir= `SELECT @@secure_file_priv` -- let $_suffix= `SELECT UUID()` -- let $_tmp_file= $_file_priv_dir/fake-index.$_suffix === modified file 'mysql-test/mysql-test-run.pl' --- a/mysql-test/mysql-test-run.pl 2010-08-31 09:27:57 +0000 +++ b/mysql-test/mysql-test-run.pl 2010-09-30 10:42:37 +0000 @@ -110,12 +110,24 @@ my $path_vardir_trace; # unix f my $opt_tmpdir; # Path to use for tmp/ dir my $opt_tmpdir_pid; +my $opt_start; +my $opt_start_dirty; +my $opt_start_exit; +my $start_only; + END { if ( defined $opt_tmpdir_pid and $opt_tmpdir_pid == $$ ) { - # Remove the tempdir this process has created - mtr_verbose("Removing tmpdir '$opt_tmpdir"); - rmtree($opt_tmpdir); + if (!$opt_start_exit) + { + # Remove the tempdir this process has created + mtr_verbose("Removing tmpdir $opt_tmpdir"); + rmtree($opt_tmpdir); + } + else + { + mtr_warning("tmpdir $opt_tmpdir should be removed after the server has finished"); + } } } @@ -215,10 +227,6 @@ my $opt_start_timeout = $ENV{MTR_START sub suite_timeout { return $opt_suite_timeout * 60; }; sub check_timeout { return $opt_testcase_timeout * 6; }; -my $opt_start; -my $opt_start_dirty; -my $opt_start_exit; -my $start_only; my $opt_wait_all; my $opt_user_args; my $opt_repeat= 1; @@ -2099,6 +2107,11 @@ sub environment_setup { # to detect that valgrind is being used from test cases $ENV{'VALGRIND_TEST'}= $opt_valgrind; + # Add dir of this perl to aid mysqltest in finding perl + my $perldir= dirname($^X); + my $pathsep= ":"; + $pathsep= ";" if IS_WINDOWS && ! IS_CYGWIN; + $ENV{'PATH'}= "$ENV{'PATH'}".$pathsep.$perldir; } @@ -3575,6 +3588,9 @@ sub run_testcase ($) { # Try to get reason from test log file find_testcase_skipped_reason($tinfo); mtr_report_test_skipped($tinfo); + # Restart if skipped due to missing perl, it may have had side effects + stop_all_servers($opt_shutdown_timeout) + if ($tinfo->{'comment'} =~ /^perl not found/); } elsif ( $res == 65 ) { === modified file 'mysql-test/r/mysqltest.result' --- a/mysql-test/r/mysqltest.result 2010-08-10 10:13:58 +0000 +++ b/mysql-test/r/mysqltest.result 2010-09-22 08:57:10 +0000 @@ -177,6 +177,9 @@ mysqltest: At line 1: End of line junk d " mysqltest: At line 1: Extra delimiter ";" found mysqltest: At line 1: Extra delimiter ";" found +mysqltest: At line 1: Spurious text after `query` expression +mysqltest: At line 1: Spurious text after `query` expression +mysqltest: At line 2: Spurious text after `query` expression mysqltest: At line 1: Missing argument(s) to 'error' mysqltest: At line 1: Missing argument(s) to 'error' mysqltest: At line 1: The sqlstate definition must start with an uppercase S @@ -449,12 +452,16 @@ mysqltest: At line 1: Missing required a mysqltest: At line 1: query 'connect con2,localhost,root,,illegal_db' failed: 1049: Unknown database 'illegal_db' mysqltest: At line 1: Illegal argument for port: 'illegal_port' mysqltest: At line 1: Illegal option to connect: SMTP -OK -mysqltest: The test didn't produce any output +200 connects succeeded mysqltest: In included file "MYSQLTEST_VARDIR/tmp/mysqltest.sql": At line 3: connection 'test_con1' not found in connection pool mysqltest: In included file "MYSQLTEST_VARDIR/tmp/mysqltest.sql": At line 2: Connection test_con1 already exists show tables; ERROR 3D000: No database selected +connect con1,localhost,root,,; +connection default; +connection con1; +disconnect con1; +connection default; Output from mysqltest-x.inc Output from mysqltest-x.inc Output from mysqltest-x.inc === modified file 'mysql-test/suite/innodb/t/innodb_bug53756.test' --- a/mysql-test/suite/innodb/t/innodb_bug53756.test 2010-07-06 02:26:38 +0000 +++ b/mysql-test/suite/innodb/t/innodb_bug53756.test 2010-09-30 08:28:22 +0000 @@ -34,8 +34,8 @@ INSERT INTO bug_53756 VALUES(1, 11), (2, --echo --echo # Select a less restrictive isolation level. # Don't use user variables. They won't survive server crash. ---let $global_isolation= `SELECT @@global.tx_isolation`; ---let $session_isolation= `SELECT @@session.tx_isolation`; +--let $global_isolation= `SELECT @@global.tx_isolation` +--let $session_isolation= `SELECT @@session.tx_isolation` SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED; SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; COMMIT; === modified file 'mysql-test/suite/innodb_plugin/t/innodb_bug53756.test' --- a/mysql-test/suite/innodb_plugin/t/innodb_bug53756.test 2010-09-07 05:41:37 +0000 +++ b/mysql-test/suite/innodb_plugin/t/innodb_bug53756.test 2010-10-03 17:39:28 +0000 @@ -34,8 +34,8 @@ INSERT INTO bug_53756 VALUES(1, 11), (2, --echo --echo # Select a less restrictive isolation level. # Don't use user variables. They won't survive server crash. ---let $global_isolation= `SELECT @@global.tx_isolation`; ---let $session_isolation= `SELECT @@session.tx_isolation`; +--let $global_isolation= `SELECT @@global.tx_isolation` +--let $session_isolation= `SELECT @@session.tx_isolation` SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED; SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; COMMIT; === modified file 'mysql-test/suite/rpl/t/rpl_row_tbl_metadata.test' --- a/mysql-test/suite/rpl/t/rpl_row_tbl_metadata.test 2010-01-14 10:49:40 +0000 +++ b/mysql-test/suite/rpl/t/rpl_row_tbl_metadata.test 2010-09-15 12:56:22 +0000 @@ -205,7 +205,7 @@ DROP TABLE `t1`; -- echo === Using mysqlbinlog to detect failure. Before the patch mysqlbinlog would find a corrupted event, thence would fail. --- let $MYSQLD_DATADIR= `SELECT @@datadir`; +-- let $MYSQLD_DATADIR= `SELECT @@datadir` -- exec $MYSQL_BINLOG $MYSQLD_DATADIR/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug42749.binlog -- remove_file $MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug42749.binlog @@ -330,7 +330,7 @@ while($ntables) -- echo ### assertion: check that binlog is not corrupt. Using mysqlbinlog to -- echo ### detect failure. Before the patch mysqlbinlog would find -- echo ### a corrupted event, thence would fail. --- let $MYSQLD_DATADIR= `SELECT @@datadir`; +-- let $MYSQLD_DATADIR= `SELECT @@datadir` -- exec $MYSQL_BINLOG -v --hex $MYSQLD_DATADIR/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug50018.binlog ## clean up === modified file 'mysql-test/suite/sys_vars/t/secure_file_priv.test' --- a/mysql-test/suite/sys_vars/t/secure_file_priv.test 2010-04-16 14:10:47 +0000 +++ b/mysql-test/suite/sys_vars/t/secure_file_priv.test 2010-09-21 09:16:20 +0000 @@ -9,7 +9,7 @@ SHOW VARIABLES LIKE 'secure_file_priv'; # Doing this in a portable manner is difficult but we should be able to # count on the depth of the directory hierarchy used. Three steps up from # the datadir is the 'mysql_test' directory. ---let $PROTECTED_FILE=`SELECT concat(@@datadir,'/../../../bug50373.txt')`; +--let $PROTECTED_FILE=`SELECT concat(@@datadir,'/../../../bug50373.txt')` --eval SELECT * FROM t1 INTO OUTFILE '$PROTECTED_FILE'; DELETE FROM t1; --eval LOAD DATA INFILE '$PROTECTED_FILE' INTO TABLE t1; === modified file 'mysql-test/t/mysqltest.test' --- a/mysql-test/t/mysqltest.test 2010-08-10 10:13:58 +0000 +++ b/mysql-test/t/mysqltest.test 2010-09-22 08:57:10 +0000 @@ -494,6 +494,32 @@ remove_file $MYSQLTEST_VARDIR/tmp/mysqlt --error 1 --exec echo "--disable_query_log;" | $MYSQL_TEST 2>&1 +# +# Extra text after `` +# +# Cannot use exec echo here as ` may or may not need to be escaped +--write_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql +let $x= `select 1` BOO ; +EOF +--error 1 +--exec $MYSQL_TEST < $MYSQLTEST_VARDIR/tmp/mysqltest.sql 2>&1 +remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql; +--write_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql +--let $x= `select 1`; +EOF +--error 1 +--exec $MYSQL_TEST < $MYSQLTEST_VARDIR/tmp/mysqltest.sql 2>&1 +remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql; +--write_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql +# Missing ; in next line should be detected and cause failure +let $x= `select 1` +let $x= 2; +echo $x; +EOF +--error 1 +--exec $MYSQL_TEST < $MYSQLTEST_VARDIR/tmp/mysqltest.sql 2>&1 +remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql; + # Allow trailing # comment --sleep 1 # Wait for insert delayed to be executed. @@ -1441,19 +1467,6 @@ eval select "$long_rep" as x; # Repeat connect/disconnect --write_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql -let $i=100; -while ($i) -{ - connect (test_con1,localhost,root,,); - disconnect test_con1; - dec $i; -} -EOF ---exec echo "source $MYSQLTEST_VARDIR/tmp/mysqltest.sql; echo OK; exit;" | $MYSQL_TEST 2>&1 -remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql; - -# Repeat connect/disconnect ---write_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql let $i=200; while ($i) { @@ -1461,9 +1474,8 @@ while ($i) disconnect test_con1; dec $i; } +echo 200 connects succeeded; EOF ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR ---error 1 --exec echo "source $MYSQLTEST_VARDIR/tmp/mysqltest.sql;" | $MYSQL_TEST 2>&1 remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql; @@ -1504,6 +1516,22 @@ show tables; disconnect con2; connection default; +# Test enable_connect_log +--enable_connect_log +connect (con1,localhost,root,,); +connection default; +connection con1; +--disable_query_log +# These should not be logged +connect (con2,localhost,root,,*NO-ONE*); +connection con2; +disconnect con2; +connection con1; +--enable_query_log +disconnect con1; +connection default; +--disable_connect_log + # ---------------------------------------------------------------------------- # Test mysqltest arguments # ---------------------------------------------------------------------------- --===============0546373037== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/bjorn.munch@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: bjorn.munch@stripped # target_branch: file:///home/bm136801/my/mysql-5.1-bugteam/ # testament_sha1: a763239e28213095ab0afeb309659b78699b6fc9 # timestamp: 2010-10-04 13:12:58 +0200 # source_branch: file:///home/bm136801/my/mtr-51/ # base_revision_id: alexey.kopytov@stripped\ # 2z1rzbvj0tagqazc # # Begin bundle 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 --===============0546373037==--