From b7cdb978d95d8078416d7591b617190d5cfde215 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 5 Nov 2007 17:20:10 +0200 Subject: [PATCH 1/2] Bug #28597 Replication doesn't start after upgrading to 5.1.18 Since bug@20166, which replaced the binlog file name generating to base on pidfile_name instead of the previous glob_hostname, the binlog file name suddenly started to be stored solely in the absolute path format, including a case when --log-bin option meant a relative path. What's more serious, the path for binlog file can lead unrequestedly to pid-file directory so that after any proper fix for this bug there might be similar to the bug report consequences for one who upgrades from post-fix-bug@20166-pre-fix-bug@28597 to post-fix-bug@28597. Fixed with preserving`pidfile_name' (intr.by bug@20166) but stripping off its directory part. This restores the original logics of storing the names in compatible with --log-bin option format and with the requirement for --log-bin ralative path to corresond to the data directory. Side effects for this fix: effective fixing bug@27070, refining its test; ensuring no overrun for buff can happen anymore (Bug#31836 insufficient space reserved for the suffix of relay log file name); bug#31837 --remove_file $MYSQLTEST_VARDIR/tmp/bug14157.sql missed in rpl_temporary.test; fixes Bug@28603 Invalid log-bin default location; mysql-test/t/rpl_dual_pos_advance.test: After correcting the logics of log file name composing workaround for Bug #27070 server logs are created unrequested and in wrong directory is removed. mysql-test/t/rpl_temporary.test: remaining temp file of the test removed sql/log.cc: stripping off the directory part of `pidfile_name' for binlog name generating (which fixes two more bugs on wrong binlog file location); ensuring no overrun for buff can happen anymore (Bug #31836 insufficient space reserved for the suffix of relay log file name); --- mysql-test/t/rpl_dual_pos_advance.test | 6 ------ mysql-test/t/rpl_temporary.test | 2 ++ sql/log.cc | 11 ++++------- 3 files changed, 6 insertions(+), 13 deletions(-) diff --git a/mysql-test/t/rpl_dual_pos_advance.test b/mysql-test/t/rpl_dual_pos_advance.test index 074aeec63b1..518fa9df885 100644 --- a/mysql-test/t/rpl_dual_pos_advance.test +++ b/mysql-test/t/rpl_dual_pos_advance.test @@ -106,9 +106,3 @@ connection slave; sync_with_master; # End of 4.1 tests - -# Cleanup -# The A->B->A replication causes the master to start writing relay logs -# in var/run, remove them -remove_file $MYSQLTEST_VARDIR/run/master-relay-bin.000001; -remove_file $MYSQLTEST_VARDIR/run/master-relay-bin.index; diff --git a/mysql-test/t/rpl_temporary.test b/mysql-test/t/rpl_temporary.test index d09049af217..a7a15aebe7a 100644 --- a/mysql-test/t/rpl_temporary.test +++ b/mysql-test/t/rpl_temporary.test @@ -211,6 +211,8 @@ select * from t1; connection master; drop table t1; +--remove_file $MYSQLTEST_VARDIR/tmp/bug14157.sql + # Delete the anonymous users source include/delete_anonymous_users.inc; diff --git a/sql/log.cc b/sql/log.cc index e9aa273676a..af03cecd462 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -448,13 +448,10 @@ const char *MYSQL_LOG::generate_name(const char *log_name, { if (!log_name || !log_name[0]) { - /* - TODO: The following should be using fn_format(); We just need to - first change fn_format() to cut the file name if it's too long. - */ - strmake(buff, pidfile_name,FN_REFLEN-5); - strmov(fn_ext(buff),suffix); - return (const char *)buff; + strmake(buff, pidfile_name, FN_REFLEN - strlen(suffix) - 1); + return (const char *) + fn_format(buff, buff, "", suffix, MYF(MY_REPLACE_EXT|MY_REPLACE_DIR)); + } // get rid of extension if the log is binary to avoid problems if (strip_ext) From 0c1a085cca92ce1cbb48cd76eedf65a2130617dc Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 6 Nov 2007 20:31:40 +0200 Subject: [PATCH 2/2] bug#27571 refining non-deterministic tests. The new Bug@32148 is in the way. Adjuting the tests to be somehow useful. mysql-test/r/binlog_killed.result: results changed mysql-test/t/binlog_killed.test: refining the tests as killing is inherently non-deterministic; leaving todos. --- mysql-test/r/binlog_killed.result | 4 ++++ mysql-test/t/binlog_killed.test | 15 +++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/mysql-test/r/binlog_killed.result b/mysql-test/r/binlog_killed.result index eaafc9727cd..e04cc192876 100644 --- a/mysql-test/r/binlog_killed.result +++ b/mysql-test/r/binlog_killed.result @@ -17,18 +17,22 @@ delete from t2; insert into t1 values (1,1),(2,2); begin; update t1 set b=11 where a=2; +begin; update t1 set b=b+10; kill query ID; rollback; +rollback; select * from t1 order by a /* must be the same as before (1,1),(2,2) */; a b 1 1 2 2 begin; delete from t1 where a=2; +begin; delete from t1 where a=2; kill query ID; rollback; +rollback; select * from t1 order by a /* must be the same as before (1,1),(2,2) */; a b 1 1 diff --git a/mysql-test/t/binlog_killed.test b/mysql-test/t/binlog_killed.test index f8ba7c00f48..af78adf0abc 100644 --- a/mysql-test/t/binlog_killed.test +++ b/mysql-test/t/binlog_killed.test @@ -79,6 +79,7 @@ begin; update t1 set b=11 where a=2; connection con2; let $ID= `select connection_id()`; +begin; send update t1 set b=b+10; connection con1; @@ -86,9 +87,18 @@ connection con1; eval kill query $ID; rollback; +# Bug #32148 killi query may be ineffective +# forced to comment out the test's outcome +# and mask out ineffective ER_QUERY_INTERRUPTED +# todo1: revert back upon fixing bug#32148 +# todo2: the tests need refining in that +# killing should wait till the victim requested +# its lock (wait_condition available in 5.1 tests) + connection con2; --error 0,ER_QUERY_INTERRUPTED reap; +rollback; select * from t1 order by a /* must be the same as before (1,1),(2,2) */; # @@ -123,6 +133,7 @@ begin; delete from t1 where a=2; connection con2; let $ID= `select connection_id()`; +begin; send delete from t1 where a=2; connection con1; @@ -133,8 +144,11 @@ rollback; connection con2; --error 0,ER_QUERY_INTERRUPTED reap; +rollback; +# todo1,2 above select * from t1 order by a /* must be the same as before (1,1),(2,2) */; + # # multi delete # the same as for multi-update @@ -178,6 +192,7 @@ rollback; connection con2; --error 0,ER_QUERY_INTERRUPTED reap; +# todo 1,2 above rollback; select * from t1 /* must be the same as before (1,1),(2,2) */;