connect con1,localhost,root,,; SET SESSION lock_wait_timeout = 1; #----------------------------------------------------------------------- # Single-threaded tests #----------------------------------------------------------------------- # Show the fate and impact of some SELECT /HANDLER ... READ # 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; COUNT(*) 1 HANDLER t_permanent_aria OPEN; HANDLER t_permanent_aria READ FIRST; col1 1 HANDLER t_permanent_aria CLOSE; BACKUP STAGE FLUSH; SELECT COUNT(*) FROM t_permanent_aria; COUNT(*) 1 HANDLER t_permanent_aria OPEN; HANDLER t_permanent_aria READ FIRST; col1 1 HANDLER t_permanent_aria CLOSE; BACKUP STAGE BLOCK_DDL; SELECT COUNT(*) FROM t_permanent_aria; COUNT(*) 1 HANDLER t_permanent_aria OPEN; HANDLER t_permanent_aria READ FIRST; col1 1 HANDLER t_permanent_aria CLOSE; BACKUP STAGE BLOCK_COMMIT; SELECT COUNT(*) FROM t_permanent_aria; COUNT(*) 1 HANDLER t_permanent_aria OPEN; HANDLER t_permanent_aria READ FIRST; col1 1 HANDLER t_permanent_aria CLOSE; BACKUP STAGE END; # In case the backup lock is taken by the current connection than # - DML modifying some permanent table is not allowed BACKUP STAGE START; SET AUTOCOMMIT = 0; INSERT INTO t_permanent_aria SET col1 = 1; ERROR HY000: Can't execute the command as you have a BACKUP STAGE active SET AUTOCOMMIT = 1; INSERT INTO t_permanent_aria SET col1 = 1; ERROR HY000: Can't execute the command as you have a BACKUP STAGE active # - DDL creating or renaming a permanent table or a procedure is not # allowed. # The latter tries to modify a permanent system table. CREATE TABLE throw_away (col1 INT) ENGINE = Aria TRANSACTIONAL = 0; ERROR HY000: Can't execute the command as you have a BACKUP STAGE active RENAME TABLE t_permanent_aria To throw_away; ERROR HY000: Can't execute the command as you have a BACKUP STAGE active # - DDL creating a temporary table is allowed. CREATE TEMPORARY TABLE t_temporary_aria (col1 INT) ENGINE = Aria TRANSACTIONAL = 0; # - DML modifying that temporary table is allowed. INSERT INTO t_temporary_aria SET col1 = 1; SELECT COUNT(*) FROM t_temporary_aria; COUNT(*) 1 BACKUP STAGE END; # Show the fate and impact of some auto committed INSERT into temporary # 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; COUNT(*) 5 # Show the fate and impact of some DROP/CREATE TEMPORARY TABLE sliding # 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; # 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; #----------------------------------------------------------------------- # Show that non transactional tables locks with BACKUP STAGE FLUSH #----------------------------------------------------------------------- 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; a 1 2 SET STATEMENT lock_wait_timeout=0 FOR INSERT INTO t1 values (3); ERROR HY000: Lock wait timeout exceeded; try restarting transaction INSERT INTO t1 values (4); connection con1; backup stage end; connection default; select * from t1; a 1 2 4 drop table t1; #----------------------------------------------------------------------- # Show that transactional tables doesn't lock with BACKUP STAGE FLUSH #----------------------------------------------------------------------- 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; a 1 2 4 drop table t1; # # Cleanup # disconnect con1;