Commit 571f8be4 authored by aelkin/elkin@koti.dsl.inet.fi's avatar aelkin/elkin@koti.dsl.inet.fi
Browse files

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;
parent 35b20797
Loading
Loading
Loading
Loading
+0 −6
Original line number Diff line number Diff line
@@ -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;
+2 −0
Original line number Diff line number Diff line
@@ -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;

+4 −7
Original line number Diff line number Diff line
@@ -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)