Commit 5ec3a671 authored by unknown's avatar unknown

When we delete the slave's temp tables from memory, we reset

rli->save_temporary_tables and slave_open_temp_tables
(in old 4.0 you could make "SHOW STATUS LIKE 'slave_open_temp_tables'" grow
indefinitely by doing RESET SLAVE and replicating always the same CREATE
TEMPORARY TABLE).
It's critical to reset save_temporary_tables to 0 (otherwise you may later
read memory which has been freed) so this changeset should go into 4.1.


mysql-test/r/rpl_reset_slave.result:
  result update
mysql-test/t/rpl_reset_slave.test:
  test for RESET SLAVE and creating twice the same temp table in the slave.
sql/slave.cc:
  when we delete the slave's temp tables (when slave server shuts down and when
  RESET SLAVE), we reset 2 variables: rli->save_temporary_tables & slave_open_temp_tables.
parent b920ab26
...@@ -20,3 +20,13 @@ start slave; ...@@ -20,3 +20,13 @@ start slave;
show slave status; show slave status;
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
127.0.0.1 root MASTER_PORT 1 master-bin.001 79 slave-relay-bin.002 120 master-bin.001 Yes Yes 0 0 79 120 127.0.0.1 root MASTER_PORT 1 master-bin.001 79 slave-relay-bin.002 120 master-bin.001 Yes Yes 0 0 79 120
stop slave;
reset slave;
start slave;
create temporary table t1 (a int);
stop slave;
reset slave;
start slave;
show status like 'slave_open_temp_tables';
Variable_name Value
Slave_open_temp_tables 1
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
# --master-* options from mysqld, as this is what is going to be used next time # --master-* options from mysqld, as this is what is going to be used next time
# slave threads will be started). In bug 985, it displayed old values (of before # slave threads will be started). In bug 985, it displayed old values (of before
# RESET SLAVE). # RESET SLAVE).
# See if slave crashes when doing a CREATE TEMPORARY TABLE twice, separated by
# RESET SLAVE.
source include/master-slave.inc; source include/master-slave.inc;
connection master; connection master;
...@@ -24,3 +26,19 @@ start slave; ...@@ -24,3 +26,19 @@ start slave;
sync_with_master; sync_with_master;
--replace_result $MASTER_MYPORT MASTER_PORT --replace_result $MASTER_MYPORT MASTER_PORT
show slave status; show slave status;
# test of crash with temp tables & RESET SLAVE
# (test to see if RESET SLAVE clears temp tables in memory and disk)
stop slave;
reset slave;
start slave;
connection master;
create temporary table t1 (a int);
save_master_pos;
connection slave;
sync_with_master;
stop slave;
reset slave;
start slave;
sync_with_master;
show status like 'slave_open_temp_tables';
...@@ -337,6 +337,8 @@ void st_relay_log_info::close_temporary_tables() ...@@ -337,6 +337,8 @@ void st_relay_log_info::close_temporary_tables()
*/ */
close_temporary(table, 0); close_temporary(table, 0);
} }
save_temporary_tables= 0;
slave_open_temp_tables= 0;
} }
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment