mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-03 14:33:32 +03:00 
			
		
		
		
	into mysql.com:/home/hf/work/33334/my51-33334 client/mysqltest.c: Auto merged mysql-test/r/flush.result: SCCS merged mysql-test/t/flush.test: SCCS merged
		
			
				
	
	
		
			201 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			201 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
connect (con1,localhost,root,,);
 | 
						|
connect (con2,localhost,root,,);
 | 
						|
connection con1;
 | 
						|
 | 
						|
--disable_warnings
 | 
						|
drop table if exists t1,t2;
 | 
						|
drop database if exists mysqltest;
 | 
						|
--enable_warnings
 | 
						|
 | 
						|
create temporary table t1(n int not null primary key);
 | 
						|
create table t2(n int);
 | 
						|
insert into t2 values(3);
 | 
						|
let $1=100;
 | 
						|
disable_query_log;
 | 
						|
while ($1)
 | 
						|
{
 | 
						|
 connection con1;
 | 
						|
 send replace into t1 select n from t2;
 | 
						|
 connection con2;
 | 
						|
 send flush tables;
 | 
						|
 connection con1;
 | 
						|
 reap;
 | 
						|
 connection con2;
 | 
						|
 reap;
 | 
						|
 dec $1;
 | 
						|
}
 | 
						|
enable_query_log;
 | 
						|
connection con1;
 | 
						|
select * from t1;
 | 
						|
connection con2;
 | 
						|
flush tables with read lock;
 | 
						|
--error 1223
 | 
						|
drop table t2;
 | 
						|
connection con1;
 | 
						|
send drop table t2;
 | 
						|
connection con2;
 | 
						|
unlock tables;
 | 
						|
connection con1;
 | 
						|
reap;
 | 
						|
 | 
						|
#test if drop database will wait until we release the global read lock
 | 
						|
connection con1;
 | 
						|
create database mysqltest;
 | 
						|
create table mysqltest.t1(n int);
 | 
						|
insert into mysqltest.t1 values (23);
 | 
						|
flush tables with read lock;
 | 
						|
connection con2;
 | 
						|
send drop database mysqltest;
 | 
						|
connection con1;
 | 
						|
select * from mysqltest.t1;
 | 
						|
unlock tables;
 | 
						|
connection con2;
 | 
						|
reap;
 | 
						|
 | 
						|
# test if dirty close releases global read lock
 | 
						|
connection con1;
 | 
						|
create table t1 (n int);
 | 
						|
flush tables with read lock;
 | 
						|
dirty_close con1;
 | 
						|
connection con2;
 | 
						|
insert into t1 values (345);
 | 
						|
select * from t1;
 | 
						|
drop table t1;
 | 
						|
 | 
						|
#
 | 
						|
# Bug#9459 - deadlock with flush with lock, and lock table write
 | 
						|
#
 | 
						|
create table t1 (c1 int);
 | 
						|
lock table t1 write;
 | 
						|
# Cannot get the global read lock with write locked tables.
 | 
						|
--error 1192
 | 
						|
flush tables with read lock;
 | 
						|
lock table t1 read;
 | 
						|
# Can get the global read lock with read locked tables.
 | 
						|
flush tables with read lock;
 | 
						|
--error 1223
 | 
						|
lock table t1 write;
 | 
						|
lock table t1 read;
 | 
						|
--error 1223
 | 
						|
lock table t1 write;
 | 
						|
# Release all table locks and the global read lock.
 | 
						|
unlock tables;
 | 
						|
create table t2 (c1 int);
 | 
						|
create table t3 (c1 int);
 | 
						|
lock table t1 read, t2 read, t3 write;
 | 
						|
# Cannot get the global read lock with write locked tables.
 | 
						|
--error 1192
 | 
						|
flush tables with read lock;
 | 
						|
lock table t1 read, t2 read, t3 read;
 | 
						|
# Can get the global read lock with read locked tables.
 | 
						|
flush tables with read lock;
 | 
						|
# Release all table locks and the global read lock.
 | 
						|
unlock tables;
 | 
						|
drop table t1, t2, t3;
 | 
						|
 | 
						|
# End of 4.1 tests
 | 
						|
 | 
						|
#
 | 
						|
# Test of deadlock problem when doing FLUSH TABLE with read lock
 | 
						|
# (Bug was in NTPL threads in Linux when using different mutex while
 | 
						|
#  waiting for a condtion variable)
 | 
						|
 | 
						|
create table t1 (c1 int);
 | 
						|
create table t2 (c1 int);
 | 
						|
 | 
						|
connect (con1,localhost,root,,);
 | 
						|
connect (con3,localhost,root,,);
 | 
						|
 | 
						|
connection con1;
 | 
						|
lock table t1 write;
 | 
						|
 | 
						|
connection con2;
 | 
						|
send flush tables with read lock;
 | 
						|
--sleep 1
 | 
						|
 | 
						|
connection con3;
 | 
						|
send insert into t2 values(1);
 | 
						|
--sleep 1
 | 
						|
 | 
						|
connection con1;
 | 
						|
unlock tables;
 | 
						|
disconnect con1;
 | 
						|
 | 
						|
connection con2;
 | 
						|
reap;
 | 
						|
disconnect con2;
 | 
						|
 | 
						|
connection con3;
 | 
						|
# It hangs here (insert into t2 does not end).
 | 
						|
reap;
 | 
						|
disconnect con3;
 | 
						|
 | 
						|
connection default;
 | 
						|
drop table t1, t2;
 | 
						|
 | 
						|
#
 | 
						|
# Bug#32528 Global read lock with a low priority write lock causes a server crash
 | 
						|
#
 | 
						|
 | 
						|
--disable_warnings
 | 
						|
drop table if exists t1, t2;
 | 
						|
--enable_warnings
 | 
						|
 | 
						|
set session low_priority_updates=1;
 | 
						|
 | 
						|
create table t1 (a int);
 | 
						|
create table t2 (b int);
 | 
						|
 | 
						|
lock tables t1 write;
 | 
						|
--error ER_LOCK_OR_ACTIVE_TRANSACTION
 | 
						|
flush tables with read lock;
 | 
						|
unlock tables;
 | 
						|
 | 
						|
lock tables t1 read, t2 write;
 | 
						|
--error ER_LOCK_OR_ACTIVE_TRANSACTION
 | 
						|
flush tables with read lock;
 | 
						|
unlock tables;
 | 
						|
 | 
						|
lock tables t1 read;
 | 
						|
flush tables with read lock;
 | 
						|
unlock tables;
 | 
						|
 | 
						|
drop table t1, t2;
 | 
						|
 | 
						|
set session low_priority_updates=default;
 | 
						|
 | 
						|
#
 | 
						|
# Bug #33334 mysqltest_embedded crashes when disconnecting before reap
 | 
						|
#
 | 
						|
 | 
						|
connect (con1,localhost,root,,);
 | 
						|
send select benchmark(200, (select sin(1))) > 1000;
 | 
						|
disconnect con1;
 | 
						|
connection default;
 | 
						|
 | 
						|
--echo End of 5.0 tests
 | 
						|
 | 
						|
#
 | 
						|
# Bug #26380: LOCK TABLES + FLUSH LOGS causes deadlock
 | 
						|
#
 | 
						|
set @old_general_log= @@general_log;
 | 
						|
set @old_read_only= @@read_only;
 | 
						|
set global general_log= on;
 | 
						|
 | 
						|
flush tables with read lock;
 | 
						|
flush logs;
 | 
						|
unlock tables;
 | 
						|
 | 
						|
set global read_only=1;
 | 
						|
flush logs;
 | 
						|
unlock tables;
 | 
						|
 | 
						|
flush tables with read lock;
 | 
						|
flush logs;
 | 
						|
unlock tables;
 | 
						|
 | 
						|
set global general_log= @old_general_log;
 | 
						|
set global read_only= @old_read_only;
 | 
						|
 | 
						|
--echo End of 5.1 tests
 |