mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 15:50:51 +03:00 
			
		
		
		
	 c1f7f33960
			
		
	
	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.
		
			
				
	
	
		
			100 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|  # 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.
 |