From: Mattias Jonsson Date: September 15 2010 8:22am Subject: bzr commit into mysql-5.5-bugfixing branch (mattias.jonsson:3207) Bug#56601 Bug#56657 Bug#56659 List-Archive: http://lists.mysql.com/commits/118277 X-Bug: 56601,56657,56659 Message-Id: <201009150823.o8F5Ga0C006037@acsinet15.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1139922361969661108==" --===============1139922361969661108== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///Users/mattiasj/mysql-bzr/b56659-55-bf/ based on revid:tor.didriksen@stripped 3207 Mattias Jonsson 2010-09-15 Bug#56659: Mismatch of CAPITAL vs small letters in "unified filelist" partitioning output Bug#56657: Test still uses "--exec rm -f ..." which is non-portable Bug#56601: Test uses Unix path for temporary file, fails, and writes misleading message Several tests that was written in a non portable way (failed on windows) Fixed by 1) backporting the fix for replace_result to also apply to list_files (mysqltest from mysql-trunk) 2) replacing all #p#/#sp#/#tmp# to #P#/#SP#/#TMP#/ (innodb always converts filenames to lower case in windows). 3) replacing '--exec rm -f' with '--remove_files_wildcard' 4) replacing a perl snippet with '--write_file' @ client/mysqltest.cc backport from mysql-trunk to allow replace_result to apply also on list_files @ mysql-test/suite/parts/inc/partition_check_drop.inc Compensate for differences between innodb on windows vs unix. Using mysqltest command, instead of unix command to remove files. @ mysql-test/suite/parts/inc/partition_crash.inc compensate for differences between innodb on windows vs unix @ mysql-test/suite/parts/inc/partition_fail.inc compensate for differences between innodb on windows vs unix @ mysql-test/suite/parts/inc/partition_layout.inc compensate for differences between innodb on windows vs unix @ mysql-test/suite/parts/inc/partition_layout_check1.inc compensate for differences between innodb on windows vs unix @ mysql-test/suite/parts/inc/partition_layout_check2.inc compensate for differences between innodb on windows vs unix @ mysql-test/suite/parts/r/partition_recover_myisam.result updated result @ mysql-test/suite/parts/r/partition_special_myisam.result updated result @ mysql-test/suite/parts/t/part_supported_sql_func_innodb.test Test takes very long time, require --big flag @ mysql-test/suite/parts/t/partition_alter1_1_2_innodb.test Test takes very long time, require --big flag @ mysql-test/suite/parts/t/partition_alter1_2_innodb.test Test takes very long time, require --big flag @ mysql-test/suite/parts/t/partition_alter2_1_1_innodb.test Test takes very long time, require --big flag @ mysql-test/suite/parts/t/partition_alter2_1_2_innodb.test Test takes very long time, require --big flag @ mysql-test/suite/parts/t/partition_alter2_2_2_innodb.test Test takes very long time, require --big flag @ mysql-test/suite/parts/t/partition_alter4_innodb.test Test takes very long time, require --big flag @ mysql-test/suite/parts/t/partition_debug_sync_innodb.test compensate for differences between innodb on windows vs unix @ mysql-test/suite/parts/t/partition_recover_myisam.test more generic suppression (failed in windows) @ mysql-test/suite/parts/t/partition_special_myisam.test Using portable mysqltest command 'write_file' instead of perl snippet. modified: client/mysqltest.cc mysql-test/suite/parts/inc/partition_check_drop.inc mysql-test/suite/parts/inc/partition_crash.inc mysql-test/suite/parts/inc/partition_fail.inc mysql-test/suite/parts/inc/partition_layout.inc mysql-test/suite/parts/inc/partition_layout_check1.inc mysql-test/suite/parts/inc/partition_layout_check2.inc mysql-test/suite/parts/r/partition_recover_myisam.result mysql-test/suite/parts/r/partition_special_myisam.result mysql-test/suite/parts/t/part_supported_sql_func_innodb.test mysql-test/suite/parts/t/partition_alter1_1_2_innodb.test mysql-test/suite/parts/t/partition_alter1_2_innodb.test mysql-test/suite/parts/t/partition_alter2_1_1_innodb.test mysql-test/suite/parts/t/partition_alter2_1_2_innodb.test mysql-test/suite/parts/t/partition_alter2_2_2_innodb.test mysql-test/suite/parts/t/partition_alter4_innodb.test mysql-test/suite/parts/t/partition_debug_sync_innodb.test mysql-test/suite/parts/t/partition_recover_myisam.test mysql-test/suite/parts/t/partition_special_myisam.test === modified file 'client/mysqltest.cc' --- a/client/mysqltest.cc 2010-09-08 08:53:03 +0000 +++ b/client/mysqltest.cc 2010-09-15 08:22:12 +0000 @@ -447,7 +447,7 @@ struct st_command char *query, *query_buf,*first_argument,*last_argument,*end; DYNAMIC_STRING content; int first_word_len, query_len; - my_bool abort_on_error; + my_bool abort_on_error, used_replace; struct st_expected_errors expected_errors; char require_file[FN_REFLEN]; enum enum_commands type; @@ -3414,7 +3414,7 @@ static int get_list_files(DYNAMIC_STRING if (ds_wild && ds_wild->length && wild_compare(file->name, ds_wild->str, 0)) continue; - dynstr_append(ds, file->name); + replace_dynstr_append(ds, file->name); dynstr_append(ds, "\n"); } set_wild_chars(0); @@ -3444,6 +3444,7 @@ static void do_list_files(struct st_comm {"file", ARG_STRING, FALSE, &ds_wild, "Filename (incl. wildcard)"} }; DBUG_ENTER("do_list_files"); + command->used_replace= 1; check_command_args(command, command->first_argument, list_files_args, @@ -3485,6 +3486,7 @@ static void do_list_files_write_file_com {"file", ARG_STRING, FALSE, &ds_wild, "Filename (incl. wildcard)"} }; DBUG_ENTER("do_list_files_write_file"); + command->used_replace= 1; check_command_args(command, command->first_argument, list_files_args, @@ -8473,7 +8475,7 @@ int main(int argc, char **argv) memset(&saved_expected_errors, 0, sizeof(saved_expected_errors)); } - if (command_executed != last_command_executed) + if (command_executed != last_command_executed || command->used_replace) { /* As soon as any command has been executed, === modified file 'mysql-test/suite/parts/inc/partition_check_drop.inc' --- a/mysql-test/suite/parts/inc/partition_check_drop.inc 2008-08-04 05:04:47 +0000 +++ b/mysql-test/suite/parts/inc/partition_check_drop.inc 2010-09-15 08:22:12 +0000 @@ -26,10 +26,12 @@ if ($do_file_tests) { let $ls_file= $MYSQLD_DATADIR/test/tmp2; # List the files belonging to the table t1 + --replace_result $MYSQLTEST_VARDIR \$MYSQLTEST_VARDIR #p# #P# #sp# #SP# --list_files_write_file $ls_file $MYSQLD_DATADIR/test t1* --chmod 0644 $ls_file if ($with_directories) { + --replace_result $MYSQLTEST_VARDIR \$MYSQLTEST_VARDIR #p# #P# #sp# #SP# --list_files_append_file $ls_file $MYSQLTEST_VARDIR/tmp t1* } eval SET @aux = load_file('$ls_file'); @@ -60,16 +62,15 @@ if ($found_garbage) --echo # worked incomplete. --echo # We found: # Print the list of files into the protocol - eval SELECT REPLACE(file_list,'$MYSQLTEST_VARDIR','\$MYSQLTEST_VARDIR') - AS "unified filelist" + eval SELECT file_list AS "unified filelist" FROM t0_definition WHERE state = 'old'; } # Do a manual cleanup, because the following tests should not suffer from # remaining files - --exec rm -f $MYSQLD_DATADIR/test/t1* || true + --remove_files_wildcard $MYSQLD_DATADIR/test t1* if ($with_directories) { - --exec rm -f $MYSQLTEST_VARDIR/tmp/t1* || true + --remove_files_wildcard $MYSQLTEST_VARDIR/tmp t1* } } --enable_query_log === modified file 'mysql-test/suite/parts/inc/partition_crash.inc' --- a/mysql-test/suite/parts/inc/partition_crash.inc 2010-08-13 07:50:25 +0000 +++ b/mysql-test/suite/parts/inc/partition_crash.inc 2010-09-15 08:22:12 +0000 @@ -3,7 +3,7 @@ --eval $create_statement --eval $insert_statement --echo # State before crash ---replace_result #p# #P# +--replace_result #p# #P# #sp# #SP# --list_files $DATADIR/test SHOW CREATE TABLE t1; --sorted_result @@ -14,13 +14,13 @@ SELECT * FROM t1; --error 2013 --eval $crash_statement --echo # State after crash (before recovery) ---replace_regex /sqlx.*\./sqlx-nnnn_nnnn./ /#p#/#P#/ +--replace_regex /sqlx.*\./sqlx-nnnn_nnnn./ /#p#/#P#/ /#sp#/#SP#/ /#tmp#/#TMP#/ --list_files $DATADIR/test --exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect --enable_reconnect --source include/wait_until_connected_again.inc --echo # State after crash recovery ---replace_result #p# #P# +--replace_result #p# #P# #sp# #SP# --list_files $DATADIR/test SHOW CREATE TABLE t1; --sorted_result === modified file 'mysql-test/suite/parts/inc/partition_fail.inc' --- a/mysql-test/suite/parts/inc/partition_fail.inc 2010-08-13 07:50:25 +0000 +++ b/mysql-test/suite/parts/inc/partition_fail.inc 2010-09-15 08:22:12 +0000 @@ -3,6 +3,7 @@ --eval $create_statement --eval $insert_statement --echo # State before failure +--replace_result #p# #P# #sp# #SP# --list_files $DATADIR/test SHOW CREATE TABLE t1; --sorted_result @@ -11,6 +12,7 @@ SELECT * FROM t1; --eval $fail_statement --enable_abort_on_error --echo # State after failure +--replace_result #p# #P# #sp# #SP# --list_files $DATADIR/test SHOW CREATE TABLE t1; --sorted_result === modified file 'mysql-test/suite/parts/inc/partition_layout.inc' --- a/mysql-test/suite/parts/inc/partition_layout.inc 2008-08-04 05:04:47 +0000 +++ b/mysql-test/suite/parts/inc/partition_layout.inc 2010-09-15 08:22:12 +0000 @@ -10,6 +10,6 @@ eval SHOW CREATE TABLE t1; if ($ls) { let $MYSQLD_DATADIR= `select @@datadir`; - --replace_result $MYSQLD_DATADIR MYSQLD_DATADIR + --replace_result $MYSQLD_DATADIR MYSQLD_DATADIR #p# #P# #sp# #SP# --list_files $MYSQLD_DATADIR/test t1* } === modified file 'mysql-test/suite/parts/inc/partition_layout_check1.inc' --- a/mysql-test/suite/parts/inc/partition_layout_check1.inc 2009-02-01 12:00:48 +0000 +++ b/mysql-test/suite/parts/inc/partition_layout_check1.inc 2010-09-15 08:22:12 +0000 @@ -69,7 +69,7 @@ if ($do_file_tests) if ($ls) { # Print the list of files into the protocol - replace_result $MYSQLD_DATADIR MYSQLD_DATADIR $MYSQLTEST_VARDIR MYSQLTEST_VARDIR; + replace_result $MYSQLD_DATADIR MYSQLD_DATADIR $MYSQLTEST_VARDIR MYSQLTEST_VARDIR #p# #P# #sp# #SP# part_n part_N; SELECT file_list AS "unified filelist" FROM t0_definition WHERE state = 'old'; } === modified file 'mysql-test/suite/parts/inc/partition_layout_check2.inc' --- a/mysql-test/suite/parts/inc/partition_layout_check2.inc 2009-02-01 12:00:48 +0000 +++ b/mysql-test/suite/parts/inc/partition_layout_check2.inc 2010-09-15 08:22:12 +0000 @@ -65,7 +65,7 @@ let $run= `SELECT @aux`; if ($run) { --vertical_results - --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR + --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR #p# #P# #sp# #SP# SELECT state, REPLACE(create_command,'\n',' ') AS "Table definition", REPLACE(file_list ,'\n',' ') AS "File list" === modified file 'mysql-test/suite/parts/r/partition_recover_myisam.result' --- a/mysql-test/suite/parts/r/partition_recover_myisam.result 2009-12-13 23:50:33 +0000 +++ b/mysql-test/suite/parts/r/partition_recover_myisam.result 2010-09-15 08:22:12 +0000 @@ -1,4 +1,4 @@ -call mtr.add_suppression("./test/t1_will_crash"); +call mtr.add_suppression("t1_will_crash"); call mtr.add_suppression("Got an error from unknown thread"); CREATE TABLE t1_will_crash (a INT, KEY (a)) ENGINE=MyISAM; INSERT INTO t1_will_crash VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11); === modified file 'mysql-test/suite/parts/r/partition_special_myisam.result' --- a/mysql-test/suite/parts/r/partition_special_myisam.result 2010-08-13 07:50:25 +0000 +++ b/mysql-test/suite/parts/r/partition_special_myisam.result 2010-09-15 08:22:12 +0000 @@ -214,7 +214,7 @@ SET lock_wait_timeout = 2; ALTER TABLE t1 COALESCE PARTITION 2; ERROR HY000: Lock wait timeout exceeded; try restarting transaction # Connection 3 tries to load into the table: -LOAD DATA LOCAL INFILE '/tmp/load.in' INTO TABLE t1 (f); +LOAD DATA INFILE 'load.in' INTO TABLE t1 (f); # Connection 1 commits the transaction COMMIT; # Connection 3... === modified file 'mysql-test/suite/parts/t/part_supported_sql_func_innodb.test' --- a/mysql-test/suite/parts/t/part_supported_sql_func_innodb.test 2007-11-20 15:04:07 +0000 +++ b/mysql-test/suite/parts/t/part_supported_sql_func_innodb.test 2010-09-15 08:22:12 +0000 @@ -28,6 +28,9 @@ let $do_long_tests= 1; # The server must support partitioning. --source include/have_partition.inc +# This test takes long time, so only run it with the --big mtr-flag. +--source include/big_test.inc + #------------------------------------------------------------------------------# # Engine specific settings and requirements === modified file 'mysql-test/suite/parts/t/partition_alter1_1_2_innodb.test' --- a/mysql-test/suite/parts/t/partition_alter1_1_2_innodb.test 2008-05-16 16:03:50 +0000 +++ b/mysql-test/suite/parts/t/partition_alter1_1_2_innodb.test 2010-09-15 08:22:12 +0000 @@ -46,6 +46,9 @@ let $more_pk_ui_tests= 0; # The server must support partitioning. --source include/have_partition.inc +# This test takes long time, so only run it with the --big mtr-flag. +--source include/big_test.inc + #------------------------------------------------------------------------------# # Engine specific settings and requirements === modified file 'mysql-test/suite/parts/t/partition_alter1_2_innodb.test' --- a/mysql-test/suite/parts/t/partition_alter1_2_innodb.test 2008-05-16 16:03:50 +0000 +++ b/mysql-test/suite/parts/t/partition_alter1_2_innodb.test 2010-09-15 08:22:12 +0000 @@ -46,6 +46,9 @@ let $more_pk_ui_tests= 0; # The server must support partitioning. --source include/have_partition.inc +# This test takes long time, so only run it with the --big mtr-flag. +--source include/big_test.inc + #------------------------------------------------------------------------------# # Engine specific settings and requirements === modified file 'mysql-test/suite/parts/t/partition_alter2_1_1_innodb.test' --- a/mysql-test/suite/parts/t/partition_alter2_1_1_innodb.test 2009-11-25 08:19:34 +0000 +++ b/mysql-test/suite/parts/t/partition_alter2_1_1_innodb.test 2010-09-15 08:22:12 +0000 @@ -45,6 +45,9 @@ let $only_part_1= 1; # The server must support partitioning. --source include/have_partition.inc +# This test takes long time, so only run it with the --big mtr-flag. +--source include/big_test.inc + #------------------------------------------------------------------------------# # Engine specific settings and requirements === modified file 'mysql-test/suite/parts/t/partition_alter2_1_2_innodb.test' --- a/mysql-test/suite/parts/t/partition_alter2_1_2_innodb.test 2009-11-25 08:19:34 +0000 +++ b/mysql-test/suite/parts/t/partition_alter2_1_2_innodb.test 2010-09-15 08:22:12 +0000 @@ -45,6 +45,9 @@ let $only_part_2= 1; # The server must support partitioning. --source include/have_partition.inc +# This test takes long time, so only run it with the --big mtr-flag. +--source include/big_test.inc + #------------------------------------------------------------------------------# # Engine specific settings and requirements === modified file 'mysql-test/suite/parts/t/partition_alter2_2_2_innodb.test' --- a/mysql-test/suite/parts/t/partition_alter2_2_2_innodb.test 2009-11-25 08:19:34 +0000 +++ b/mysql-test/suite/parts/t/partition_alter2_2_2_innodb.test 2010-09-15 08:22:12 +0000 @@ -45,6 +45,9 @@ let $only_part_2= 1; # The server must support partitioning. --source include/have_partition.inc +# This test takes long time, so only run it with the --big mtr-flag. +--source include/big_test.inc + #------------------------------------------------------------------------------# # Engine specific settings and requirements === modified file 'mysql-test/suite/parts/t/partition_alter4_innodb.test' --- a/mysql-test/suite/parts/t/partition_alter4_innodb.test 2007-11-20 15:04:07 +0000 +++ b/mysql-test/suite/parts/t/partition_alter4_innodb.test 2010-09-15 08:22:12 +0000 @@ -43,6 +43,9 @@ let $more_pk_ui_tests= 0; # The server must support partitioning. --source include/have_partition.inc +# This test takes long time, so only run it with the --big mtr-flag. +--source include/big_test.inc + #------------------------------------------------------------------------------# # Engine specific settings and requirements === modified file 'mysql-test/suite/parts/t/partition_debug_sync_innodb.test' --- a/mysql-test/suite/parts/t/partition_debug_sync_innodb.test 2010-08-20 07:54:37 +0000 +++ b/mysql-test/suite/parts/t/partition_debug_sync_innodb.test 2010-09-15 08:22:12 +0000 @@ -56,6 +56,7 @@ partition by range (a) insert into t1 values (1), (11), (21), (33); SELECT * FROM t1; SHOW CREATE TABLE t1; +--replace_result #p# #P# #sp# #SP# --list_files $MYSQLD_DATADIR/test SET DEBUG_SYNC='before_open_in_get_all_tables SIGNAL parked WAIT_FOR open'; @@ -78,6 +79,7 @@ ALTER TABLE t1 REORGANIZE PARTITION p0 I disconnect con1; connection default; --reap +--replace_result #p# #P# #sp# #SP# --list_files $MYSQLD_DATADIR/test SHOW CREATE TABLE t1; SELECT * FROM t1; === modified file 'mysql-test/suite/parts/t/partition_recover_myisam.test' --- a/mysql-test/suite/parts/t/partition_recover_myisam.test 2009-12-13 23:50:33 +0000 +++ b/mysql-test/suite/parts/t/partition_recover_myisam.test 2010-09-15 08:22:12 +0000 @@ -1,6 +1,6 @@ # test the auto-recover (--myisam-recover) of partitioned myisam tables -call mtr.add_suppression("./test/t1_will_crash"); +call mtr.add_suppression("t1_will_crash"); call mtr.add_suppression("Got an error from unknown thread"); --source include/have_partition.inc === modified file 'mysql-test/suite/parts/t/partition_special_myisam.test' --- a/mysql-test/suite/parts/t/partition_special_myisam.test 2010-08-13 07:50:25 +0000 +++ b/mysql-test/suite/parts/t/partition_special_myisam.test 2010-09-15 08:22:12 +0000 @@ -62,13 +62,14 @@ ALTER TABLE t1 COALESCE PARTITION 2; --connect (con3,localhost,root,,) -perl; -open( LD, ">" . "/tmp/load.in" ) || die "Could not open file for writing " . $ENV{'MYSQLTEST_DATADIR'} . "/test/load.in"; -print LD "1\n2\n3\n"; -close( LD ); +--let $MYSQLD_DATADIR= `SELECT @@datadir` +--write_file $MYSQLD_DATADIR/test/load.in +1 +2 +3 EOF --echo # Connection 3 tries to load into the table: -send LOAD DATA LOCAL INFILE '/tmp/load.in' INTO TABLE t1 (f); +send LOAD DATA INFILE 'load.in' INTO TABLE t1 (f); --connection default --real_sleep 1 --===============1139922361969661108== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/mattias.jonsson@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: mattias.jonsson@stripped\ # tkmqnfp3r5uyi3q1 # target_branch: file:///Users/mattiasj/mysql-bzr/b56659-55-bf/ # testament_sha1: 7dd0257f685d91e1ffc05086b135bae3a1798bda # timestamp: 2010-09-15 10:22:22 +0200 # base_revision_id: tor.didriksen@stripped\ # eamj03nas42bt2e3 # # Begin bundle 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 --===============1139922361969661108==--