1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
|
########################################################################
# Tests for Implement LOCK FOR BACKUP (MDEV-5336)
########################################################################
# Check a non transactional table per ENGINE = Aria TRANSACTIONAL = 0.
#
--source include/not_embedded.inc
# As non transactional engine we use Aria with TRANSACTIONAL = 0
--source include/have_aria.inc
--disable_service_connection
# Following connections are used in a few of the following tests
connect (con1,localhost,root,,);
SET SESSION lock_wait_timeout = 1;
--echo #-----------------------------------------------------------------------
--echo # Single-threaded tests
--echo #-----------------------------------------------------------------------
--echo # Show the fate and impact of some SELECT /HANDLER ... READ
--echo # sliding through the sequence.
CREATE TABLE t_permanent_aria (col1 INT) ENGINE = Aria TRANSACTIONAL = 0;
INSERT INTO t_permanent_aria SET col1 = 1;
BACKUP STAGE START;
SELECT COUNT(*) FROM t_permanent_aria;
HANDLER t_permanent_aria OPEN;
HANDLER t_permanent_aria READ FIRST;
HANDLER t_permanent_aria CLOSE;
BACKUP STAGE FLUSH;
SELECT COUNT(*) FROM t_permanent_aria;
HANDLER t_permanent_aria OPEN;
HANDLER t_permanent_aria READ FIRST;
HANDLER t_permanent_aria CLOSE;
BACKUP STAGE BLOCK_DDL;
SELECT COUNT(*) FROM t_permanent_aria;
HANDLER t_permanent_aria OPEN;
HANDLER t_permanent_aria READ FIRST;
HANDLER t_permanent_aria CLOSE;
BACKUP STAGE BLOCK_COMMIT;
SELECT COUNT(*) FROM t_permanent_aria;
HANDLER t_permanent_aria OPEN;
HANDLER t_permanent_aria READ FIRST;
HANDLER t_permanent_aria CLOSE;
BACKUP STAGE END;
--echo # In case the backup lock is taken by the current connection than
--echo # - DML modifying some permanent table is not allowed
BACKUP STAGE START;
SET AUTOCOMMIT = 0;
--error ER_BACKUP_LOCK_IS_ACTIVE
INSERT INTO t_permanent_aria SET col1 = 1;
SET AUTOCOMMIT = 1;
--error ER_BACKUP_LOCK_IS_ACTIVE
INSERT INTO t_permanent_aria SET col1 = 1;
--echo # - DDL creating or renaming a permanent table or a procedure is not
--echo # allowed.
--echo # The latter tries to modify a permanent system table.
--error ER_BACKUP_LOCK_IS_ACTIVE
CREATE TABLE throw_away (col1 INT) ENGINE = Aria TRANSACTIONAL = 0;
--error ER_BACKUP_LOCK_IS_ACTIVE
RENAME TABLE t_permanent_aria To throw_away;
--disable_view_protocol
--echo # - DDL creating a temporary table is allowed.
CREATE TEMPORARY TABLE t_temporary_aria (col1 INT) ENGINE = Aria TRANSACTIONAL = 0;
--echo # - DML modifying that temporary table is allowed.
INSERT INTO t_temporary_aria SET col1 = 1;
SELECT COUNT(*) FROM t_temporary_aria;
BACKUP STAGE END;
--echo # Show the fate and impact of some auto committed INSERT into temporary
--echo # table sliding through the sequence.
SET AUTOCOMMIT = 1;
BACKUP STAGE START;
INSERT INTO t_temporary_aria SET col1 = 1;
BACKUP STAGE FLUSH;
INSERT INTO t_temporary_aria SET col1 = 1;
BACKUP STAGE BLOCK_DDL;
INSERT INTO t_temporary_aria SET col1 = 1;
BACKUP STAGE BLOCK_COMMIT;
INSERT INTO t_temporary_aria SET col1 = 1;
BACKUP STAGE END;
SELECT COUNT(*) FROM t_temporary_aria;
--echo # Show the fate and impact of some DROP/CREATE TEMPORARY TABLE sliding
--echo # through the sequence.
SET AUTOCOMMIT = 1;
BACKUP STAGE START;
DROP TEMPORARY TABLE t_temporary_aria;
CREATE TEMPORARY TABLE t_temporary_aria (col1 INT) ENGINE = Aria TRANSACTIONAL = 0;
BACKUP STAGE FLUSH;
DROP TEMPORARY TABLE t_temporary_aria;
CREATE TEMPORARY TABLE t_temporary_aria (col1 INT) ENGINE = Aria TRANSACTIONAL = 0;
BACKUP STAGE BLOCK_DDL;
DROP TEMPORARY TABLE t_temporary_aria;
CREATE TEMPORARY TABLE t_temporary_aria (col1 INT) ENGINE = Aria TRANSACTIONAL = 0;
BACKUP STAGE BLOCK_COMMIT;
DROP TEMPORARY TABLE t_temporary_aria;
CREATE TEMPORARY TABLE t_temporary_aria (col1 INT) ENGINE = Aria TRANSACTIONAL = 0;
BACKUP STAGE END;
--echo # Show that even more DDL on the temporary table is allowed.
BACKUP STAGE START;
TRUNCATE t_temporary_aria;
ALTER TABLE t_temporary_aria ADD COLUMN col2 INT;
ALTER TABLE t_temporary_aria ADD KEY idx(col2);
BACKUP STAGE END;
DROP TABLE t_permanent_aria;
--enable_view_protocol
--echo #-----------------------------------------------------------------------
--echo # Show that non transactional tables locks with BACKUP STAGE FLUSH
--echo #-----------------------------------------------------------------------
set session lock_wait_timeout=default;
create table t1 (a int) engine=aria transactional=0;
insert into t1 values (1), (2);
connection con1;
backup stage start;
backup stage flush;
connection default;
select * from t1;
--error ER_LOCK_WAIT_TIMEOUT
SET STATEMENT lock_wait_timeout=0 FOR INSERT INTO t1 values (3);
--send INSERT INTO t1 values (4)
connection con1;
backup stage end;
connection default;
--reap # send
select * from t1;
drop table t1;
--echo #-----------------------------------------------------------------------
--echo # Show that transactional tables doesn't lock with BACKUP STAGE FLUSH
--echo #-----------------------------------------------------------------------
set session lock_wait_timeout=default;
create table t1 (a int) engine=aria transactional=1 page_checksum=1;
insert into t1 values (1), (2);
connection con1;
backup stage start;
backup stage flush;
connection default;
INSERT INTO t1 values (4);
connection con1;
backup stage end;
connection default;
select * from t1;
drop table t1;
--echo #
--echo # Cleanup
--echo #
disconnect con1;
--enable_service_connection
|