Commit f491db21 authored by unknown's avatar unknown

Bug#17137 Running "truncate table" on temporary table leaves the table open on a slave

 - Decrease "slave_open_temp_tables" during reopen of truncated table.
 - Add test "rpl_trunc_temp" 


sql/sql_delete.cc:
  Decrease "slave_open_temp_tables" after temporary table has been closed, it will be
  increased again when the temp table is reopened after it's been truncated.
mysql-test/r/rpl_trunc_temp.result:
  New BitKeeper file ``mysql-test/r/rpl_trunc_temp.result''
mysql-test/t/rpl_trunc_temp.test:
  New BitKeeper file ``mysql-test/t/rpl_trunc_temp.test''
parent 3cebcd15
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;
create temporary table t1 (n int);
insert into t1 values(1);
show status like 'Slave_open_temp_tables';
Variable_name Value
Slave_open_temp_tables 1
delete from t1;
show status like 'Slave_open_temp_tables';
Variable_name Value
Slave_open_temp_tables 1
truncate t1;
show status like 'Slave_open_temp_tables';
Variable_name Value
Slave_open_temp_tables 1
show status like 'Slave_open_temp_tables';
Variable_name Value
Slave_open_temp_tables 0
source include/master-slave.inc;
#
# Bug#17137 Running "truncate table" on temporary table
# leaves the table open on a slave
#
create temporary table t1 (n int);
insert into t1 values(1);
sync_slave_with_master;
show status like 'Slave_open_temp_tables';
# Perform a delete from temp table
connection master;
delete from t1;
sync_slave_with_master;
show status like 'Slave_open_temp_tables';
# Perform truncate on temp table
connection master;
truncate t1;
sync_slave_with_master;
show status like 'Slave_open_temp_tables';
# Disconnect the master, temp table on slave should dissapear
disconnect master;
--real_sleep 3 # time for DROP to be read by slave
connection slave;
show status like 'Slave_open_temp_tables';
connection master;
# End of 4.1 tests
...@@ -641,6 +641,8 @@ int mysql_truncate(THD *thd, TABLE_LIST *table_list, bool dont_send_ok) ...@@ -641,6 +641,8 @@ int mysql_truncate(THD *thd, TABLE_LIST *table_list, bool dont_send_ok)
strmov(path,table->path); strmov(path,table->path);
*table_ptr= table->next; // Unlink table from list *table_ptr= table->next; // Unlink table from list
close_temporary(table,0); close_temporary(table,0);
if (thd->slave_thread)
--slave_open_temp_tables;
*fn_ext(path)=0; // Remove the .frm extension *fn_ext(path)=0; // Remove the .frm extension
ha_create_table(path, &create_info,1); ha_create_table(path, &create_info,1);
// We don't need to call invalidate() because this table is not in cache // We don't need to call invalidate() because this table is not in cache
......
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