List:Commits« Previous MessageNext Message »
From:Leonard Zhou Date:February 11 2009 9:00am
Subject:bzr commit into mysql-5.1-bugteam branch (zhou.li:2793) Bug#28777
View as plain text  
#At file:///home/zhl/mysql/rep/5.1/bug28777/

 2793 Leonard Zhou	2009-02-11
      Bug#28777 show binlog events can work on relay log
      
      Show binlog event can't work on relay log.
      
      Check relay log when do mysql 'show binlog event', so this command can work on both bin log and relay log.
added:
  mysql-test/include/master-slave-2.inc
  mysql-test/suite/rpl/r/rpl_bug28777-2.result
  mysql-test/suite/rpl/r/rpl_bug28777.result
  mysql-test/suite/rpl/t/rpl_bug28777-2-slave.opt
  mysql-test/suite/rpl/t/rpl_bug28777-2.test
  mysql-test/suite/rpl/t/rpl_bug28777-slave.opt
  mysql-test/suite/rpl/t/rpl_bug28777.test
modified:
  sql/sql_parse.cc
  sql/sql_repl.cc
  sql/sql_repl.h

per-file messages:
  mysql-test/include/master-slave-2.inc
    Master-slave file but doesn't do 'restet master' in slave
  mysql-test/suite/rpl/r/rpl_bug28777-2.result
    Test result of bug28777-2
  mysql-test/suite/rpl/r/rpl_bug28777.result
    Test result of bug28777
  mysql-test/suite/rpl/t/rpl_bug28777-2-slave.opt
    slave option file for closing bin log in slave
  mysql-test/suite/rpl/t/rpl_bug28777-2.test
    Test case for bug28777 without bin logging in slave
  mysql-test/suite/rpl/t/rpl_bug28777-slave.opt
    slave option file to set relay log in different directory
  mysql-test/suite/rpl/t/rpl_bug28777.test
    Test case for bug28777
  sql/sql_parse.cc
    Pass master_info to mysql_show_binlog_events
  sql/sql_repl.cc
    Check relay log when do mysql 'show binlog event'
  sql/sql_repl.h
    Add master_info variable
=== added file 'mysql-test/include/master-slave-2.inc'
--- a/mysql-test/include/master-slave-2.inc	1970-01-01 00:00:00 +0000
+++ b/mysql-test/include/master-slave-2.inc	2009-02-11 08:57:59 +0000
@@ -0,0 +1,48 @@
+# The different between master-slave-2.inc and mster-slave.inc is not do 'reset master' in slave 
+#   because we stop binlog in slave.
+# Replication tests need binlog
+source include/have_log_bin.inc;
+
+connect (master,127.0.0.1,root,,test,$MASTER_MYPORT,);
+connect (master1,127.0.0.1,root,,test,$MASTER_MYPORT,);
+connect (slave,127.0.0.1,root,,test,$SLAVE_MYPORT,);
+connect (slave1,127.0.0.1,root,,test,$SLAVE_MYPORT,);
+
+# Reset the master and the slave to start fresh.
+#
+# It is necessary to execute RESET MASTER and RESET SLAVE on both
+# master and slave since the replication setup might be circular.
+#
+# Since we expect STOP SLAVE to produce a warning as the slave is
+# stopped (the server was started with skip-slave-start), we disable
+# warnings when doing STOP SLAVE.
+
+connection slave;
+--disable_warnings
+stop slave;
+source include/wait_for_slave_to_stop.inc;
+--enable_warnings
+connection master;
+--disable_warnings
+--disable_query_log
+use test;
+--enable_query_log
+drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
+--enable_warnings
+reset master;
+--disable_query_log
+reset slave;
+--enable_query_log
+connection slave;
+reset slave;
+# Clean up old test tables
+--disable_warnings
+drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
+--enable_warnings
+--disable_query_log
+--enable_query_log
+start slave;
+source include/wait_for_slave_to_start.inc;
+
+# Set the default connection to 'master'
+connection master;

=== added file 'mysql-test/suite/rpl/r/rpl_bug28777-2.result'
--- a/mysql-test/suite/rpl/r/rpl_bug28777-2.result	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/rpl/r/rpl_bug28777-2.result	2009-02-11 08:57:59 +0000
@@ -0,0 +1,37 @@
+stop slave;
+drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
+reset master;
+reset slave;
+drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
+start slave;
+==== Initialize ====
+[on master]
+CREATE TABLE t1 (a INT);
+SHOW CREATE TABLE t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES (1);
+INSERT INTO t1 VALUES (2);
+INSERT INTO t1 VALUES (3);
+INSERT INTO t1 VALUES (4);
+INSERT INTO t1 VALUES (5);
+INSERT INTO t1 VALUES (6);
+SELECT * FROM t1 ORDER BY a;
+a
+1
+2
+3
+4
+5
+6
+[on slave]
+==== Verify results on slave ====
+show binlog events in 'slave-relay-bin.000002';
+Log_name	Pos	Event_type	Server_id	End_log_pos	Info
+slave-relay-bin.000002	#	Format_desc	2	#	Server ver: 5.1.32-debug-log, Binlog ver: 4
+slave-relay-bin.000002	#	Rotate	2	#	slave-relay-bin.000003;pos=4
+==== Clean up ====
+[on master]
+DROP TABLE t1;

=== added file 'mysql-test/suite/rpl/r/rpl_bug28777.result'
--- a/mysql-test/suite/rpl/r/rpl_bug28777.result	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/rpl/r/rpl_bug28777.result	2009-02-11 08:57:59 +0000
@@ -0,0 +1,47 @@
+stop slave;
+drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
+reset master;
+reset slave;
+drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
+start slave;
+==== Initialize ====
+[on master]
+CREATE TABLE t1 (a INT);
+SHOW CREATE TABLE t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES (1);
+INSERT INTO t1 VALUES (2);
+INSERT INTO t1 VALUES (3);
+INSERT INTO t1 VALUES (4);
+INSERT INTO t1 VALUES (5);
+INSERT INTO t1 VALUES (6);
+SELECT * FROM t1 ORDER BY a;
+a
+1
+2
+3
+4
+5
+6
+[on slave]
+==== Verify results on slave ====
+show binlog events in 'slave-bin.000001';
+Log_name	Pos	Event_type	Server_id	End_log_pos	Info
+slave-bin.000001	#	Format_desc	2	#	Server ver: 5.1.32-debug-log, Binlog ver: 4
+slave-bin.000001	#	Query	1	#	use `test`; CREATE TABLE t1 (a INT)
+slave-bin.000001	#	Query	1	#	use `test`; INSERT INTO t1 VALUES (1)
+slave-bin.000001	#	Query	1	#	use `test`; INSERT INTO t1 VALUES (2)
+slave-bin.000001	#	Query	1	#	use `test`; INSERT INTO t1 VALUES (3)
+slave-bin.000001	#	Query	1	#	use `test`; INSERT INTO t1 VALUES (4)
+slave-bin.000001	#	Query	1	#	use `test`; INSERT INTO t1 VALUES (5)
+slave-bin.000001	#	Query	1	#	use `test`; INSERT INTO t1 VALUES (6)
+show binlog events in 'slave-relay-bin.000002';
+Log_name	Pos	Event_type	Server_id	End_log_pos	Info
+slave-relay-bin.000002	#	Format_desc	2	#	Server ver: 5.1.32-debug-log, Binlog ver: 4
+slave-relay-bin.000002	#	Rotate	2	#	slave-relay-bin.000003;pos=4
+==== Clean up ====
+[on master]
+DROP TABLE t1;

=== added file 'mysql-test/suite/rpl/t/rpl_bug28777-2-slave.opt'
--- a/mysql-test/suite/rpl/t/rpl_bug28777-2-slave.opt	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/rpl/t/rpl_bug28777-2-slave.opt	2009-02-11 08:57:59 +0000
@@ -0,0 +1 @@
+--relay-log=$MYSQLTEST_VARDIR/tmp/slave-relay-bin --skip-log-bin --skip-log-slave-update

=== added file 'mysql-test/suite/rpl/t/rpl_bug28777-2.test'
--- a/mysql-test/suite/rpl/t/rpl_bug28777-2.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/rpl/t/rpl_bug28777-2.test	2009-02-11 08:57:59 +0000
@@ -0,0 +1,46 @@
+# ==== Purpose ====
+# 
+# Test that show bin log event can work with relay log file when binlog is close in slave.
+# 
+# ==== Method ====
+#
+# Do 'show binlog events' for relay log file in slave.
+#
+
+source include/have_binlog_format_statement.inc;
+source include/master-slave-2.inc;
+
+
+--echo ==== Initialize ====
+
+--echo [on master]
+--connection master
+
+CREATE TABLE t1 (a INT);
+SHOW CREATE TABLE t1;
+
+
+INSERT INTO t1 VALUES (1);
+INSERT INTO t1 VALUES (2);
+INSERT INTO t1 VALUES (3);
+INSERT INTO t1 VALUES (4);
+INSERT INTO t1 VALUES (5);
+INSERT INTO t1 VALUES (6);
+SELECT * FROM t1 ORDER BY a;
+
+--echo [on slave]
+sync_slave_with_master;
+
+
+--echo ==== Verify results on slave ====
+--replace_column 2 # 5 #
+show binlog events in 'slave-relay-bin.000002';
+
+--echo ==== Clean up ====
+
+--echo [on master]
+connection master;
+DROP TABLE t1;
+
+#--echo [on slave]
+sync_slave_with_master;

=== added file 'mysql-test/suite/rpl/t/rpl_bug28777-slave.opt'
--- a/mysql-test/suite/rpl/t/rpl_bug28777-slave.opt	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/rpl/t/rpl_bug28777-slave.opt	2009-02-11 08:57:59 +0000
@@ -0,0 +1 @@
+--relay-log=$MYSQLTEST_VARDIR/tmp/slave-relay-bin

=== added file 'mysql-test/suite/rpl/t/rpl_bug28777.test'
--- a/mysql-test/suite/rpl/t/rpl_bug28777.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/rpl/t/rpl_bug28777.test	2009-02-11 08:57:59 +0000
@@ -0,0 +1,48 @@
+# ==== Purpose ====
+#
+# Test that show bin log event can work with relay log file and bin log file.
+#
+# ==== Method ====
+#
+# Do 'show binlog events' for relay log file and bin log file in slave.
+#
+
+source include/have_binlog_format_statement.inc;
+source include/master-slave.inc;
+
+
+--echo ==== Initialize ====
+
+--echo [on master]
+--connection master
+
+CREATE TABLE t1 (a INT);
+SHOW CREATE TABLE t1;
+
+
+INSERT INTO t1 VALUES (1);
+INSERT INTO t1 VALUES (2);
+INSERT INTO t1 VALUES (3);
+INSERT INTO t1 VALUES (4);
+INSERT INTO t1 VALUES (5);
+INSERT INTO t1 VALUES (6);
+SELECT * FROM t1 ORDER BY a;
+
+--echo [on slave]
+sync_slave_with_master;
+
+
+--echo ==== Verify results on slave ====
+--replace_column 2 # 5 #
+show binlog events in 'slave-bin.000001';
+--replace_column 2 # 5 #
+show binlog events in 'slave-relay-bin.000002';
+
+--echo ==== Clean up ====
+
+--echo [on master]
+connection master;
+DROP TABLE t1;
+
+#--echo [on slave]
+sync_slave_with_master;

=== modified file 'sql/sql_parse.cc'
--- a/sql/sql_parse.cc	2009-02-05 06:16:00 +0000
+++ b/sql/sql_parse.cc	2009-02-11 08:57:59 +0000
@@ -2321,7 +2321,7 @@ mysql_execute_command(THD *thd)
   {
     if (check_global_access(thd, REPL_SLAVE_ACL))
       goto error;
-    res = mysql_show_binlog_events(thd);
+    res = mysql_show_binlog_events(thd,active_mi);
     break;
   }
 #endif

=== modified file 'sql/sql_repl.cc'
--- a/sql/sql_repl.cc	2009-01-23 12:22:05 +0000
+++ b/sql/sql_repl.cc	2009-02-11 08:57:59 +0000
@@ -1389,7 +1389,7 @@ int cmp_master_pos(const char* log_file_
   @retval FALSE success
   @retval TRUE failure
 */
-bool mysql_show_binlog_events(THD* thd)
+bool mysql_show_binlog_events(THD* thd, Master_info* mi)
 {
   Protocol *protocol= thd->protocol;
   List<Item> field_list;
@@ -1414,7 +1414,7 @@ bool mysql_show_binlog_events(THD* thd)
   */
   ha_binlog_wait(thd);
 
-  if (mysql_bin_log.is_open())
+  if (mysql_bin_log.is_open() || mi->rli.relay_log.is_open())
   {
     LEX_MASTER_INFO *lex_mi= &thd->lex->mi;
     SELECT_LEX_UNIT *unit= &thd->lex->unit;
@@ -1438,10 +1438,18 @@ bool mysql_show_binlog_events(THD* thd)
 
     linfo.index_file_offset = 0;
 
-    if (mysql_bin_log.find_log_pos(&linfo, name, 1))
+    if (!mysql_bin_log.is_open() || mysql_bin_log.find_log_pos(&linfo, name, 1))
     {
-      errmsg = "Could not find target log";
-      goto err;
+      if (log_file_name)
+        mi->rli.relay_log.make_log_name(search_file_name, log_file_name);
+      else
+        name=0;					// Find first log
+
+      if(mi->rli.relay_log.find_log_pos(&linfo, name, 1))
+      {
+        errmsg = "Could not find target log";
+        goto err;
+      }
     }
 
     pthread_mutex_lock(&LOCK_thread_count);

=== modified file 'sql/sql_repl.h'
--- a/sql/sql_repl.h	2008-03-14 17:38:54 +0000
+++ b/sql/sql_repl.h	2009-02-11 08:57:59 +0000
@@ -39,7 +39,7 @@ extern my_bool opt_sporadic_binlog_dump_
 int start_slave(THD* thd, Master_info* mi, bool net_report);
 int stop_slave(THD* thd, Master_info* mi, bool net_report);
 bool change_master(THD* thd, Master_info* mi);
-bool mysql_show_binlog_events(THD* thd);
+bool mysql_show_binlog_events(THD* thd, Master_info* mi);
 int cmp_master_pos(const char* log_file_name1, ulonglong log_pos1,
 		   const char* log_file_name2, ulonglong log_pos2);
 int reset_slave(THD *thd, Master_info* mi);

Thread
bzr commit into mysql-5.1-bugteam branch (zhou.li:2793) Bug#28777Leonard Zhou11 Feb
  • Re: bzr commit into mysql-5.1-bugteam branch (zhou.li:2793) Bug#28777He Zhenxing11 Feb
  • Re: bzr commit into mysql-5.1-bugteam branch (zhou.li:2793) Bug#28777Alfranio Correia12 Feb
    • Re: bzr commit into mysql-5.1-bugteam branch (zhou.li:2793) Bug#28777He Zhenxing13 Feb
      • Re: bzr commit into mysql-5.1-bugteam branch (zhou.li:2793) Bug#28777Leonard zhou13 Feb
Re: bzr commit into mysql-5.1-bugteam branch (zhou.li:2793) Bug#28777Alfranio Correia13 Feb