mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 21:12:26 +01:00
c1f7f33960
- when we don't have in_addr_t, use uint32. - a forgotten initialization of slave_proxy_id in sql/log_event.cc (was not really "forgot", was "we needn't init it there", but there was one case where we needed...). - made slave_proxy_id always meaningful in THD and Log_event, so we can rely more on it (no need to test if it's meaningful). THD::slave_proxy_id is equal to THD::thread_id except for the slave SQL thread. - clean up the slave's temporary table (i.e. free their memory) when slave server shuts down.
99 lines
3 KiB
Text
99 lines
3 KiB
Text
# This test makes some assumptions about values of thread ids, which should be
|
|
# true if the servers have been restarted for this test. So we want to
|
|
# stop/restart servers. Note that if assumptions are wrong, the test will not
|
|
# fail; it will just fail to test the error-prone scenario.
|
|
# Using the manager is the only way to have more than one slave server.
|
|
# So you must run this test with --manager.
|
|
|
|
require_manager;
|
|
server_stop master;
|
|
server_start master;
|
|
server_stop slave;
|
|
server_start slave;
|
|
# no need for slave_sec (no assumptions on thread ids for this server).
|
|
|
|
source include/master-slave.inc;
|
|
connect (slave_sec,localhost,root,,test,0,slave.sock-1);
|
|
connection master;
|
|
save_master_pos;
|
|
connection slave;
|
|
sync_with_master;
|
|
reset master;
|
|
save_master_pos;
|
|
connection slave_sec;
|
|
eval change master to master_host='127.0.0.1',master_port=$SLAVE_MYPORT, master_user='root';
|
|
start slave;
|
|
sync_with_master;
|
|
|
|
# :P now we have a chain ready-to-test.
|
|
|
|
connection master;
|
|
create temporary table t1 (a int);
|
|
save_master_pos;
|
|
connection slave;
|
|
sync_with_master;
|
|
connection master1;
|
|
create temporary table t1 (a int);
|
|
save_master_pos;
|
|
connection slave;
|
|
sync_with_master;
|
|
save_master_pos;
|
|
|
|
# First test:
|
|
|
|
connection slave_sec;
|
|
# Before BUG#1686 ("If 2 master threads with same-name temp table, slave makes
|
|
# bad binlog") was fixed, sync_with_master failed
|
|
sync_with_master;
|
|
show status like 'slave_open_temp_tables';
|
|
|
|
# 'master' and 'master1' usually have thread id 2-3 or 3-4.
|
|
# 'slave' and 'slave1' usually have thread id 2-3.
|
|
connection slave;
|
|
create temporary table t1 (a int);
|
|
connection slave1;
|
|
create temporary table t1 (a int);
|
|
# So it's likely that in the binlog of slave we get
|
|
# server_id=of_master thread_id=3 create temp...
|
|
# server_id=of_slave thread_id=3 create temp...
|
|
# which would confuse slave-sec unless slave-sec uses server id to distinguish
|
|
# between temp tables (here thread id is obviously not enough to distinguish).
|
|
|
|
save_master_pos;
|
|
|
|
# Second test:
|
|
|
|
connection slave_sec;
|
|
# If we did not use the server id to distinguish between temp tables,
|
|
# sync_with_master would fail
|
|
sync_with_master;
|
|
show status like 'slave_open_temp_tables';
|
|
|
|
# Third test (BUG#1240 "slave of slave breaks when STOP SLAVE was issud on
|
|
# parent slave and temp tables").
|
|
stop slave;
|
|
connection slave;
|
|
insert into t1 values(1);
|
|
create table t2 as select * from t1;
|
|
save_master_pos;
|
|
connection slave_sec;
|
|
start slave;
|
|
sync_with_master;
|
|
show status like 'slave_open_temp_tables';
|
|
select * from t2;
|
|
|
|
# clean up
|
|
connection slave;
|
|
drop table t2;
|
|
save_master_pos;
|
|
connection slave_sec;
|
|
sync_with_master;
|
|
|
|
# On purpose, we don't delete the temporary tables explicitely.
|
|
# So temp tables remain on slave (remember they are not deleted when the slave
|
|
# SQL thread terminates). If you run this test with
|
|
# --valgrind --valgrind-options=--show-reachable=yes
|
|
# you will see if they get cleaned up at slave's shutdown (that is, if the
|
|
# memory they use is freed (it should) by mysqld before it terminates).
|
|
# If they wouldn't be cleaned up, you would see some "still reachable" blocks in
|
|
# Valgrind.
|