Commit e88de4b9 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 d1571e50
......@@ -20,3 +20,13 @@ start slave;
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
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 @@
# --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
# RESET SLAVE).
# See if slave crashes when doing a CREATE TEMPORARY TABLE twice, separated by
# RESET SLAVE.
source include/master-slave.inc;
connection master;
......@@ -24,3 +26,19 @@ start slave;
sync_with_master;
--replace_result $MASTER_MYPORT MASTER_PORT
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()
*/
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