mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
b87ccfdfbc
Handle the 'set read_only=1' in lighter way, than the FLUSH TABLES READ LOCK; For the transactional engines we don't wait for operations on that tables to finish. per-file comments: mysql-test/r/read_only_innodb.result MDEV-136 Non-blocking "set read_only". test result updated. mysql-test/t/read_only_innodb.test MDEV-136 Non-blocking "set read_only". test case added. sql/mysql_priv.h MDEV-136 Non-blocking "set read_only". The close_cached_tables_set_readonly() declared. sql/set_var.cc MDEV-136 Non-blocking "set read_only". Call close_cached_tables_set_readonly() for the read_only::set_var. sql/sql_base.cc MDEV-136 Non-blocking "set read_only". Parameters added to the close_cached_tables implementation, close_cached_tables_set_readonly declared. Prevent blocking on the transactional tables if the set_readonly_mode is on.
114 lines
2.1 KiB
Text
114 lines
2.1 KiB
Text
# should work with embedded server after mysqltest is fixed
|
|
-- source include/not_embedded.inc
|
|
-- source include/have_innodb.inc
|
|
|
|
#
|
|
# BUG#11733: COMMITs should not happen if read-only is set
|
|
#
|
|
|
|
--disable_warnings
|
|
DROP TABLE IF EXISTS table_11733 ;
|
|
--enable_warnings
|
|
|
|
# READ_ONLY does nothing to SUPER users
|
|
# so we use a non-SUPER one:
|
|
|
|
grant CREATE, SELECT, DROP on *.* to test@localhost;
|
|
|
|
connect (con1,localhost,test,,test);
|
|
|
|
connection default;
|
|
set global read_only=0;
|
|
|
|
# Any transactional engine will do
|
|
create table table_11733 (a int) engine=InnoDb;
|
|
|
|
connection con1;
|
|
BEGIN;
|
|
insert into table_11733 values(11733);
|
|
|
|
connection default;
|
|
set global read_only=1;
|
|
|
|
connection con1;
|
|
select @@global.read_only;
|
|
select * from table_11733 ;
|
|
-- error ER_OPTION_PREVENTS_STATEMENT
|
|
COMMIT;
|
|
|
|
connection default;
|
|
set global read_only=0;
|
|
drop table table_11733 ;
|
|
drop user test@localhost;
|
|
|
|
disconnect con1;
|
|
|
|
#
|
|
# Bug #35732: read-only blocks SELECT statements in InnoDB
|
|
#
|
|
# Test 1: read only mode
|
|
GRANT CREATE, SELECT, DROP ON *.* TO test@localhost;
|
|
connect(con1, localhost, test, , test);
|
|
|
|
connection default;
|
|
CREATE TABLE t1(a INT) ENGINE=INNODB;
|
|
INSERT INTO t1 VALUES (0), (1);
|
|
SET GLOBAL read_only=1;
|
|
|
|
connection con1;
|
|
SELECT * FROM t1;
|
|
BEGIN;
|
|
SELECT * FROM t1;
|
|
COMMIT;
|
|
|
|
connection default;
|
|
SET GLOBAL read_only=0;
|
|
|
|
#
|
|
# Test 2: global read lock
|
|
#
|
|
FLUSH TABLES WITH READ LOCK;
|
|
|
|
connection con1;
|
|
SELECT * FROM t1;
|
|
BEGIN;
|
|
SELECT * FROM t1;
|
|
COMMIT;
|
|
|
|
#
|
|
# Tests that LOCK TABLE doesn't block the SET READ_ONLY=1 for the InnoDB tables
|
|
#
|
|
|
|
connection default;
|
|
UNLOCK TABLES;
|
|
FLUSH STATUS;
|
|
--echo # Expected 0 at the beginning of the test
|
|
show status like 'Opened_tables';
|
|
|
|
--echo connection con1;
|
|
connection con1;
|
|
lock table t1 write;
|
|
|
|
--echo connection default;
|
|
connection default;
|
|
set global read_only=1;
|
|
--echo # Expected 1 as the slow_log was reopened
|
|
show status like 'Opened_tables';
|
|
|
|
--echo connection con1;
|
|
connection con1;
|
|
unlock tables;
|
|
|
|
--echo connection default;
|
|
connection default;
|
|
SET GLOBAL read_only=0;
|
|
--echo # Expected 2 as the slow_log was reopened
|
|
show status like 'Opened_tables';
|
|
|
|
UNLOCK TABLES;
|
|
DROP TABLE t1;
|
|
DROP USER test@localhost;
|
|
|
|
disconnect con1;
|
|
|
|
--echo echo End of 5.1 tests
|