mirror of
https://github.com/MariaDB/server.git
synced 2025-01-28 01:34:17 +01:00
dfdedd46e4
This patch extends the timestamp from 2038-01-19 03:14:07.999999 to 2106-02-07 06:28:15.999999 for 64 bit hardware and OS where 'long' is 64 bits. This is true for 64 bit Linux but not for Windows. This is done by treating the 32 bit stored int as unsigned instead of signed. This is safe as MariaDB has never accepted dates before the epoch (1970). The benefit of this approach that for normal timestamp the storage is compatible with earlier version. However for tables using system versioning we before stored a timestamp with the year 2038 as the 'max timestamp', which is used to detect current values. This patch stores the new 2106 year max value as the max timestamp. This means that old tables using system versioning needs to be updated with mariadb-upgrade when moving them to 11.4. That will be done in a separate commit.
2108 lines
50 KiB
Text
2108 lines
50 KiB
Text
--source include/have_debug_sync.inc
|
|
--source include/not_embedded.inc
|
|
--source include/binlog_combinations.inc
|
|
--source include/have_innodb.inc
|
|
--source include/have_sequence.inc
|
|
--source include/have_partition.inc
|
|
|
|
let $default_storage_engine= `select @@global.default_storage_engine`;
|
|
set global default_storage_engine= innodb;
|
|
set default_storage_engine= innodb;
|
|
--connect (con2, localhost, root,,)
|
|
--connection default
|
|
|
|
--echo #
|
|
--echo # Test insert
|
|
--echo #
|
|
|
|
--echo # Insert and add column
|
|
create or replace table t1 (a int);
|
|
insert t1 values (5);
|
|
|
|
--connection con2
|
|
--send
|
|
set debug_sync= 'now WAIT_FOR ended';
|
|
|
|
--connection default
|
|
set debug_sync= 'alter_table_copy_end SIGNAL ended WAIT_FOR end';
|
|
|
|
--send
|
|
alter table t1 add b int NULL, algorithm= copy, lock= none;
|
|
|
|
--connection con2
|
|
--reap
|
|
insert into t1 values (123), (456), (789);
|
|
set debug_sync= 'now SIGNAL end';
|
|
|
|
--connection default
|
|
--enable_info
|
|
--reap
|
|
--disable_info
|
|
select * from t1;
|
|
|
|
--echo # Insert, error
|
|
create or replace table t1 (a int);
|
|
insert t1 values (5), (5);
|
|
|
|
--connection con2
|
|
--send
|
|
set debug_sync= 'now WAIT_FOR ended';
|
|
|
|
--connection default
|
|
set debug_sync= 'alter_table_copy_end SIGNAL ended WAIT_FOR end';
|
|
|
|
--send
|
|
alter table t1 nowait add unique (a), algorithm= copy, lock= none;
|
|
|
|
--connection con2
|
|
--reap
|
|
start transaction;
|
|
insert into t1 values (123), (456), (789);
|
|
set debug_sync= 'now SIGNAL end';
|
|
|
|
--connection default
|
|
--error ER_DUP_ENTRY
|
|
--reap
|
|
--connection con2
|
|
commit;
|
|
--connection default
|
|
--disable_view_protocol
|
|
select variable_value into @otd from information_schema.session_status where variable_name='Opened_table_definitions';
|
|
select * from t1;
|
|
select variable_value-@otd from information_schema.session_status where variable_name='Opened_table_definitions';
|
|
--enable_view_protocol
|
|
|
|
--echo # long transaction and add column
|
|
create or replace table t1 (a int);
|
|
insert t1 values (5);
|
|
|
|
--connection con2
|
|
--send
|
|
set debug_sync= 'now WAIT_FOR ended';
|
|
|
|
--connection default
|
|
set debug_sync= 'alter_table_copy_end SIGNAL ended WAIT_FOR end';
|
|
--send
|
|
alter table t1 nowait add b int NULL, algorithm= copy, lock= none;
|
|
|
|
--connection con2
|
|
--reap
|
|
start transaction;
|
|
insert into t1 values (123), (456), (789);
|
|
set debug_sync= 'now SIGNAL end';
|
|
|
|
--connection default
|
|
--error ER_LOCK_WAIT_TIMEOUT
|
|
--reap
|
|
select * from t1;
|
|
--connection con2
|
|
rollback;
|
|
--connection default
|
|
|
|
--echo # Insert and add NOT NULL column without default value
|
|
create or replace table t1 (a int);
|
|
insert t1 values (5);
|
|
|
|
--connection con2
|
|
--send
|
|
set debug_sync= 'now WAIT_FOR ended';
|
|
|
|
--connection default
|
|
set debug_sync= 'alter_table_copy_end SIGNAL ended WAIT_FOR end';
|
|
|
|
--send
|
|
alter table t1 add b int NOT NULL, algorithm= copy, lock= none;
|
|
|
|
--connection con2
|
|
--reap
|
|
insert into t1 values (123), (456), (789);
|
|
set debug_sync= 'now SIGNAL end';
|
|
|
|
--connection default
|
|
--reap
|
|
select * from t1;
|
|
|
|
--echo # Insert and add a column with a default value
|
|
create or replace table t1 (a int);
|
|
insert t1 values (5);
|
|
|
|
--connection con2
|
|
--send
|
|
set debug_sync= 'now WAIT_FOR ended';
|
|
|
|
--connection default
|
|
set debug_sync= 'alter_table_copy_end SIGNAL ended WAIT_FOR end';
|
|
|
|
--send
|
|
alter table t1 add b int NOT NULL default (222), algorithm= copy, lock= none;
|
|
|
|
--connection con2
|
|
--reap
|
|
insert into t1 values (123), (456), (789);
|
|
set debug_sync= 'now SIGNAL end';
|
|
|
|
--connection default
|
|
--reap
|
|
select * from t1;
|
|
|
|
--echo #
|
|
--echo # Test update
|
|
--echo #
|
|
|
|
--echo # Update and add a column
|
|
create or replace table t1 (a int primary key, b int);
|
|
insert t1 values (1, 22);
|
|
insert t1 values (3, 44);
|
|
|
|
--connection con2
|
|
--send
|
|
set debug_sync= 'now WAIT_FOR ended';
|
|
|
|
--connection default
|
|
set debug_sync= 'alter_table_copy_end SIGNAL ended WAIT_FOR end';
|
|
|
|
--send
|
|
alter table t1 add c int default(1),
|
|
algorithm= copy, lock= none;
|
|
|
|
--connection con2
|
|
--reap
|
|
update t1 set b= 55 where a = 1;
|
|
set debug_sync= 'now SIGNAL end';
|
|
|
|
--connection default
|
|
--enable_info
|
|
--reap
|
|
--disable_info
|
|
select * from t1;
|
|
|
|
--echo # Update and add a column in the middle
|
|
create or replace table t1 (a int primary key, b int);
|
|
insert t1 values (1, 22);
|
|
insert t1 values (3, 44);
|
|
|
|
--connection con2
|
|
--send
|
|
set debug_sync= 'now WAIT_FOR ended';
|
|
|
|
--connection default
|
|
set debug_sync= 'alter_table_copy_end SIGNAL ended WAIT_FOR end';
|
|
|
|
--send
|
|
alter table t1 add c int default(1) after a,
|
|
algorithm= copy, lock= none;
|
|
|
|
--connection con2
|
|
--reap
|
|
update t1 set b= 55 where a = 1;
|
|
set debug_sync= 'now SIGNAL end';
|
|
|
|
--connection default
|
|
--reap
|
|
select * from t1;
|
|
|
|
--echo #
|
|
--echo # Test primary key change
|
|
--echo #
|
|
|
|
--echo # Drop key, add key
|
|
create or replace table t1 (a int primary key, b int);
|
|
insert t1 values (1, 22);
|
|
insert t1 values (3, 44);
|
|
|
|
--connection con2
|
|
--send
|
|
set debug_sync= 'now WAIT_FOR ended';
|
|
|
|
--connection default
|
|
set debug_sync= 'alter_table_copy_end SIGNAL ended WAIT_FOR end';
|
|
|
|
--send
|
|
alter table t1 drop primary key, add primary key(b),
|
|
algorithm= copy, lock= none;
|
|
|
|
--connection con2
|
|
--reap
|
|
update t1 set b= 55 where a = 1;
|
|
set debug_sync= 'now SIGNAL end';
|
|
|
|
--connection default
|
|
--reap
|
|
select * from t1;
|
|
|
|
--echo # Drop key, add key. Two updates
|
|
create or replace table t1 (a int primary key, b int);
|
|
insert t1 values (1, 11);
|
|
insert t1 values (2, 22);
|
|
|
|
--connection con2
|
|
--send
|
|
set debug_sync= 'now WAIT_FOR ended';
|
|
|
|
--connection default
|
|
set debug_sync= 'alter_table_copy_end SIGNAL ended WAIT_FOR end';
|
|
|
|
--send
|
|
alter table t1 drop primary key, add primary key(b),
|
|
algorithm= copy, lock= none;
|
|
|
|
--connection con2
|
|
--reap
|
|
update t1 set b= 33 where a = 1;
|
|
update t1 set b= 44 where a = 2;
|
|
|
|
set debug_sync= 'now SIGNAL end';
|
|
|
|
--connection default
|
|
--reap
|
|
select * from t1;
|
|
|
|
--echo #
|
|
--echo # Various tests, see below
|
|
--echo #
|
|
|
|
create or replace table t1 (a int primary key, b int);
|
|
insert t1 values (1, 11);
|
|
insert t1 values (2, 22);
|
|
insert t1 values (3, 33);
|
|
insert t1 values (4, 44);
|
|
insert t1 values (5, 55);
|
|
insert t1 values (6, 66);
|
|
insert t1 values (7, 77);
|
|
insert t1 values (8, 88);
|
|
insert t1 values (9, 99);
|
|
|
|
--connection con2
|
|
--send
|
|
set debug_sync= 'now WAIT_FOR ended';
|
|
|
|
--connection default
|
|
set debug_sync= 'alter_table_copy_end SIGNAL ended WAIT_FOR end';
|
|
|
|
--send
|
|
alter table t1 drop primary key, add primary key(b),
|
|
algorithm= copy, lock= none;
|
|
|
|
--connection con2
|
|
--reap
|
|
|
|
--echo # Two updates
|
|
update t1 set b= 1001 where a = 1;
|
|
update t1 set b= 2002 where a = 2;
|
|
|
|
--echo # Two updates in transaction
|
|
set autocommit = 0;
|
|
start transaction;
|
|
update t1 set b= 3003 where a = 3;
|
|
update t1 set b= 4004 where a = 4;
|
|
commit;
|
|
set autocommit = 1;
|
|
|
|
--echo # Second update is rolled back
|
|
update t1 set b= 5005 where a = 5;
|
|
|
|
set autocommit = 0;
|
|
start transaction;
|
|
update t1 set b= 6006 where a = 6;
|
|
rollback;
|
|
set autocommit = 1;
|
|
|
|
--echo # Second execution in transaction fails
|
|
|
|
set autocommit = 0;
|
|
start transaction;
|
|
update t1 set b= 7007 where a = 7;
|
|
--error ER_DUP_ENTRY
|
|
update t1 set a= 8, b= 8008 where a = 8 or a = 9 order by a;
|
|
commit;
|
|
set autocommit = 1;
|
|
|
|
select * from t1;
|
|
|
|
set debug_sync= 'now SIGNAL end';
|
|
|
|
--connection default
|
|
--reap
|
|
--sorted_result
|
|
select * from t1;
|
|
|
|
--echo #
|
|
--echo # MYISAM. Only Inserts can be tested.
|
|
--echo # (everything else is a table lock disallowing concurrent reads)
|
|
--echo #
|
|
|
|
create or replace table t1 (a int) engine=myisam;
|
|
insert t1 values (5);
|
|
|
|
--connection con2
|
|
--send
|
|
set debug_sync= 'now WAIT_FOR ended';
|
|
|
|
--connection default
|
|
set debug_sync= 'alter_table_copy_end SIGNAL ended WAIT_FOR end';
|
|
|
|
--send
|
|
alter table t1 add b int NULL, algorithm= copy, lock= none;
|
|
|
|
--connection con2
|
|
--reap
|
|
insert into t1 values (123), (456), (789);
|
|
set debug_sync= 'now SIGNAL end';
|
|
|
|
--connection default
|
|
--reap
|
|
select * from t1;
|
|
|
|
--echo # MYISAM + error
|
|
|
|
create or replace table t1 (a int primary key) engine=myisam;
|
|
insert t1 values (5);
|
|
|
|
--connection con2
|
|
--send
|
|
set debug_sync= 'now WAIT_FOR ended';
|
|
|
|
--connection default
|
|
set debug_sync= 'alter_table_copy_end SIGNAL ended WAIT_FOR end';
|
|
|
|
--send
|
|
alter table t1 add b int NULL, algorithm= copy, lock= none;
|
|
|
|
--connection con2
|
|
--reap
|
|
--error ER_DUP_ENTRY,ER_DUP_KEY
|
|
insert into t1 values (1),(2),(3),(4),(5),(6);
|
|
select * from t1;
|
|
set debug_sync= 'now SIGNAL end';
|
|
|
|
--connection default
|
|
--reap
|
|
select * from t1;
|
|
|
|
--echo # Aria + error
|
|
|
|
set @@binlog_format=row; # otherwise aria upgrades the lock to TL_READ_NO_INSERT
|
|
create or replace table t1 (a int primary key) engine=aria;
|
|
insert t1 values (5);
|
|
|
|
--connection con2
|
|
--send
|
|
set debug_sync= 'now WAIT_FOR ended';
|
|
|
|
--connection default
|
|
set debug_sync= 'alter_table_copy_end SIGNAL ended WAIT_FOR end';
|
|
|
|
--send
|
|
alter table t1 add b int NULL, algorithm= copy, lock= none;
|
|
|
|
--connection con2
|
|
--reap
|
|
--error ER_DUP_ENTRY
|
|
insert into t1 values (1),(2),(3),(4),(5),(6);
|
|
select * from t1;
|
|
set debug_sync= 'now SIGNAL end';
|
|
|
|
--connection default
|
|
--reap
|
|
select * from t1;
|
|
set @@binlog_format=default;
|
|
|
|
--echo # Test incompatible changes
|
|
create or replace table t1 (a int primary key, b int);
|
|
insert t1 values (1, 22);
|
|
insert t1 values (3, 44);
|
|
|
|
--connection con2
|
|
--send
|
|
set debug_sync= 'now WAIT_FOR ended';
|
|
|
|
--connection default
|
|
set debug_sync= 'alter_table_copy_end SIGNAL ended WAIT_FOR end';
|
|
|
|
--send
|
|
alter table t1 drop primary key, add primary key(b),
|
|
algorithm= copy, lock= none;
|
|
|
|
--connection con2
|
|
--reap
|
|
update t1 set b= 44 where a = 1;
|
|
set debug_sync= 'now SIGNAL end';
|
|
|
|
--connection default
|
|
--error ER_DUP_ENTRY
|
|
--reap
|
|
select * from t1;
|
|
|
|
--echo # Test log read after EXCLUSIVE lock
|
|
--echo # Transaction is started before ALTER, and UPDATE is made.
|
|
--echo # Then more UPDATEs.
|
|
|
|
create or replace table t1 (a int primary key, b int);
|
|
insert t1 values (1, 11);
|
|
insert t1 values (2, 22);
|
|
insert t1 values (3, 33);
|
|
insert t1 values (4, 44);
|
|
insert t1 values (5, 55);
|
|
|
|
set debug_sync= 'alter_table_online_before_lock SIGNAL locking WAIT_FOR end';
|
|
set debug_sync= 'alter_table_online_downgraded SIGNAL downgraded';
|
|
|
|
--send
|
|
alter table t1 drop primary key, add primary key(b),
|
|
algorithm= copy, lock= none;
|
|
|
|
--connection con2
|
|
begin;
|
|
|
|
set debug_sync= 'now WAIT_FOR downgraded';
|
|
update t1 set b= 111 where a = 1;
|
|
|
|
set debug_sync= 'now WAIT_FOR locking';
|
|
set debug_sync= 'now SIGNAL end';
|
|
|
|
update t1 set b= 222 where a = 2;
|
|
update t1 set b= 333 where a = 3;
|
|
update t1 set b= 444 where a = 4;
|
|
|
|
commit;
|
|
|
|
update t1 set b= 555 where a = 5;
|
|
|
|
--connection default
|
|
--reap
|
|
select * from t1;
|
|
|
|
--echo #
|
|
--echo # Test progress report.
|
|
--echo #
|
|
|
|
create or replace table t1 (a int primary key, b int);
|
|
insert t1 values (1, 11);
|
|
insert t1 values (2, 22);
|
|
insert t1 values (3, 33);
|
|
insert t1 values (4, 44);
|
|
|
|
set debug_sync= 'alter_table_online_before_lock SIGNAL locking WAIT_FOR end';
|
|
set debug_sync= 'alter_table_online_downgraded SIGNAL downgraded'
|
|
' WAIT_FOR start_replication';
|
|
set debug_sync= 'alter_table_online_progress SIGNAL applied WAIT_FOR proceed'
|
|
' EXECUTE 9';
|
|
--let $con= `select connection_id()`
|
|
|
|
--send
|
|
alter table t1 drop primary key, add primary key(b),
|
|
algorithm= copy, lock= none;
|
|
|
|
--connection con2
|
|
|
|
set debug_sync= 'now WAIT_FOR downgraded';
|
|
|
|
update t1 set b= 111 where a = 1;
|
|
insert t1 values (5, 55);
|
|
update t1 set b= 555 where a = 5;
|
|
insert t1 values (6, 66);
|
|
update t1 set b= 666 where a = 6;
|
|
set debug_sync= 'now SIGNAL start_replication';
|
|
|
|
--disable_query_log
|
|
eval set @con= $con;
|
|
--enable_query_log
|
|
|
|
--echo # First signal is for log description event.
|
|
set debug_sync= 'now WAIT_FOR applied';
|
|
select stage, progress, examined_rows from INFORMATION_SCHEMA.PROCESSLIST where id = @con;
|
|
set debug_sync= 'now SIGNAL proceed WAIT_FOR applied';
|
|
|
|
select stage, progress, examined_rows from INFORMATION_SCHEMA.PROCESSLIST where id = @con;
|
|
set debug_sync= 'now SIGNAL proceed WAIT_FOR applied';
|
|
|
|
select stage, progress, examined_rows from INFORMATION_SCHEMA.PROCESSLIST where id = @con;
|
|
set debug_sync= 'now SIGNAL proceed WAIT_FOR applied';
|
|
|
|
select stage, progress, examined_rows from INFORMATION_SCHEMA.PROCESSLIST where id = @con;
|
|
set debug_sync= 'now SIGNAL proceed WAIT_FOR applied';
|
|
|
|
select stage, progress, examined_rows from INFORMATION_SCHEMA.PROCESSLIST where id = @con;
|
|
set debug_sync= 'now SIGNAL proceed WAIT_FOR applied';
|
|
|
|
select stage, progress, examined_rows from INFORMATION_SCHEMA.PROCESSLIST where id = @con;
|
|
set debug_sync= 'now SIGNAL proceed WAIT_FOR locking';
|
|
|
|
begin;
|
|
|
|
update t1 set b= 222 where a = 2;
|
|
update t1 set b= 333 where a = 3;
|
|
update t1 set b= 444 where a = 4;
|
|
|
|
commit;
|
|
set debug_sync= 'now SIGNAL end WAIT_FOR applied';
|
|
|
|
select stage, progress, examined_rows from INFORMATION_SCHEMA.PROCESSLIST where id = @con;
|
|
set debug_sync= 'now SIGNAL proceed WAIT_FOR applied';
|
|
|
|
select stage, progress, examined_rows from INFORMATION_SCHEMA.PROCESSLIST where id = @con;
|
|
set debug_sync= 'now SIGNAL proceed WAIT_FOR applied';
|
|
|
|
select stage, progress, examined_rows from INFORMATION_SCHEMA.PROCESSLIST where id = @con;
|
|
set debug_sync= 'now SIGNAL proceed';
|
|
|
|
--connection default
|
|
--reap
|
|
select * from t1;
|
|
|
|
--echo #
|
|
--echo # Test system versioning
|
|
--echo #
|
|
create or replace table t1 (a int primary key, b int);
|
|
insert t1 values (1, 22);
|
|
insert t1 values (3, 44);
|
|
|
|
--connection con2
|
|
--send
|
|
set debug_sync= 'now WAIT_FOR ended';
|
|
|
|
--connection default
|
|
set debug_sync= 'alter_table_copy_end SIGNAL ended WAIT_FOR end';
|
|
|
|
set timestamp = 1;
|
|
|
|
--send
|
|
alter table t1 add system versioning,
|
|
algorithm= copy, lock= none;
|
|
|
|
--connection con2
|
|
--reap
|
|
set timestamp = 2;
|
|
update t1 set b= 55 where a = 1;
|
|
set timestamp = 3;
|
|
insert into t1 values (6, 77);
|
|
|
|
set debug_sync= 'now SIGNAL end';
|
|
|
|
--connection default
|
|
--reap
|
|
show create table t1;
|
|
--replace_result 4294967295 2147483647
|
|
select *, UNIX_TIMESTAMP(row_start), UNIX_TIMESTAMP(row_end) from t1 for system_time all;
|
|
|
|
## at the moment DROP SYSTEM VERSIONING cannot be done online
|
|
## because it not only alters the structure, but also deletes history rows
|
|
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
|
|
alter table t1 drop system versioning, algorithm= copy, lock= none;
|
|
#--connection con2
|
|
#--send
|
|
#set debug_sync= 'now WAIT_FOR ended';
|
|
#
|
|
#--connection default
|
|
#set debug_sync= 'alter_table_copy_end SIGNAL ended WAIT_FOR end';
|
|
#
|
|
#--send
|
|
#alter table t1 drop system versioning,
|
|
# algorithm= copy, lock= none;
|
|
#
|
|
#--connection con2
|
|
#--reap
|
|
#update t1 set b= 88 where a = 1;
|
|
#
|
|
#set debug_sync= 'now SIGNAL end';
|
|
#
|
|
#--connection default
|
|
#--reap
|
|
#show create table t1;
|
|
#select *, UNIX_TIMESTAMP(row_start), UNIX_TIMESTAMP(row_end) from t1 for system_time all;
|
|
#
|
|
#--connection con2
|
|
#--send
|
|
#set debug_sync= 'now WAIT_FOR ended';
|
|
#
|
|
#--connection default
|
|
#set debug_sync= 'alter_table_copy_end SIGNAL ended WAIT_FOR end';
|
|
#
|
|
#--send
|
|
#alter table t1 drop system versioning,
|
|
# algorithm= copy, lock= none;
|
|
#
|
|
#--connection con2
|
|
#--reap
|
|
#insert into t1 values (8, 99);
|
|
#
|
|
#set debug_sync= 'now SIGNAL end';
|
|
#
|
|
#--connection default
|
|
#--reap
|
|
#show create table t1;
|
|
#select * from t1;
|
|
drop table t1;
|
|
|
|
--echo #
|
|
--echo # Test ROLLBACK TO SAVEPOINT
|
|
--echo #
|
|
|
|
create or replace table t1 (a int);
|
|
insert t1 values (1), (2);
|
|
|
|
create or replace table t2 (a int);
|
|
insert t2 values (1), (2);
|
|
|
|
--connection con2
|
|
begin;
|
|
update t2 set a= 222 where a = 2;
|
|
savepoint savie;
|
|
update t2 set a= 111 where a = 1;
|
|
|
|
--send
|
|
set debug_sync= 'now WAIT_FOR ended';
|
|
|
|
--connection default
|
|
set debug_sync= 'alter_table_copy_end SIGNAL ended WAIT_FOR end';
|
|
|
|
--send
|
|
alter table t1 add b int NULL, algorithm= copy, lock= none;
|
|
|
|
--connection con2
|
|
--reap
|
|
update t1 set a= 123 where a = 1;
|
|
|
|
savepoint whoopsie;
|
|
|
|
rollback to savepoint savie;
|
|
commit;
|
|
|
|
set debug_sync= 'now SIGNAL end';
|
|
|
|
--connection default
|
|
--reap
|
|
|
|
select * from t1;
|
|
select * from t2;
|
|
|
|
|
|
create or replace table t1 (a int);
|
|
insert t1 values (1), (2);
|
|
|
|
create or replace table t2 (a int);
|
|
insert t2 values (1), (2);
|
|
|
|
create or replace table t3 (a int) engine=myisam;
|
|
insert t3 values (1);
|
|
|
|
--connection con2
|
|
begin;
|
|
update t2 set a= 222 where a = 2;
|
|
savepoint savie;
|
|
update t2 set a= 111 where a = 1;
|
|
|
|
--send
|
|
set debug_sync= 'now WAIT_FOR ended';
|
|
|
|
--connection default
|
|
set debug_sync= 'alter_table_copy_end SIGNAL ended WAIT_FOR end';
|
|
|
|
--send
|
|
alter table t1 add b int NULL, algorithm= copy, lock= none;
|
|
|
|
--connection con2
|
|
--reap
|
|
update t1 set a= 222 where a = 2;
|
|
--disable_view_protocol
|
|
savepoint whoopsie;
|
|
update t1 set a= 123 where a = 1;
|
|
insert t3 values (2);
|
|
|
|
select * from t1;
|
|
rollback to savepoint whoopsie;
|
|
select * from t1;
|
|
select * from t3;
|
|
commit;
|
|
--enable_view_protocol
|
|
|
|
set debug_sync= 'now SIGNAL end';
|
|
|
|
--connection default
|
|
--reap
|
|
|
|
select * from t1;
|
|
select * from t2;
|
|
select * from t3;
|
|
|
|
--echo # Cleanup
|
|
set debug_sync= 'reset';
|
|
drop table t1;
|
|
drop table t2;
|
|
drop table t3;
|
|
|
|
#
|
|
# Lossy alter, Update_row_log_event cannot find 'abcde2' in the new table
|
|
#
|
|
create table t1 (a char(6), b int);
|
|
insert t1 values ('abcde1',1),('abcde2',2);
|
|
--send set debug_sync= 'now wait_for downgraded'
|
|
--connection con2
|
|
set sql_mode='';
|
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for goforit';
|
|
--send alter table t1 modify a char(4), algorithm=copy, lock=none
|
|
--connection default
|
|
--reap
|
|
update t1 set b=b+10 where a='abcde2';
|
|
select * from t1;
|
|
set debug_sync= 'now signal goforit';
|
|
--connection con2
|
|
--reap
|
|
set sql_mode=default;
|
|
--connection default
|
|
show create table t1;
|
|
select * from t1;
|
|
drop table t1;
|
|
set debug_sync= 'reset';
|
|
|
|
--echo #
|
|
--echo # MDEV-28930 ALTER TABLE Deadlocks with parallel TL_WRITE
|
|
--echo #
|
|
create table t1(a int) engine=myisam select 1;
|
|
|
|
set debug_sync='alter_table_online_before_lock SIGNAL ready WAIT_FOR go_for_locking';
|
|
--send
|
|
alter table t1 force;
|
|
|
|
--connection con2
|
|
set debug_sync='now WAIT_FOR ready';
|
|
set debug_sync='thr_multi_lock_before_thr_lock SIGNAL go_for_locking';
|
|
update t1 set a=2;
|
|
|
|
--connection default
|
|
--reap
|
|
|
|
set debug_sync='alter_table_online_before_lock SIGNAL ready WAIT_FOR go_for_locking';
|
|
--send
|
|
alter table mysql.global_priv force;
|
|
|
|
--connection con2
|
|
set debug_sync='now WAIT_FOR ready';
|
|
set debug_sync='thr_multi_lock_before_thr_lock SIGNAL go_for_locking';
|
|
create user user1@localhost;
|
|
|
|
--connection default
|
|
--reap
|
|
|
|
set debug_sync=reset;
|
|
drop user user1@localhost;
|
|
drop table t1;
|
|
|
|
--echo #
|
|
--echo # MDEV-28959 Online alter ignores strict table mode
|
|
--echo #
|
|
create table t1 (a int);
|
|
insert into t1 values (1),(2),(3);
|
|
--send set debug_sync= 'now wait_for downgraded'
|
|
|
|
--connection con2
|
|
set sql_mode='STRICT_TRANS_TABLES,STRICT_ALL_TABLES';
|
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for goforit';
|
|
--send alter table t1 modify a int not null, algorithm=copy, lock=none
|
|
|
|
--connection default
|
|
--reap
|
|
insert into t1 values (null),(null);
|
|
set debug_sync= 'now signal goforit';
|
|
|
|
--connection con2
|
|
--error WARN_DATA_TRUNCATED
|
|
--reap
|
|
show create table t1;
|
|
select * from t1;
|
|
set sql_mode=default;
|
|
--connection default
|
|
drop table t1;
|
|
set debug_sync= reset;
|
|
|
|
--echo #
|
|
--echo # MDEV-28967 Assertion `marked_for_write_or_computed()' failed in Field_new_decimal::store_value / online_alter_read_from_binlog`
|
|
--echo #
|
|
create table t1 (a decimal(8,2), b varchar(8));
|
|
insert into t1 (b) values ('x');
|
|
|
|
--send set debug_sync= 'now wait_for downgraded'
|
|
|
|
--connection con2
|
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for goforit';
|
|
--send alter table t1 force, algorithm=copy, lock=none
|
|
|
|
--connection default
|
|
--reap
|
|
insert t1 (b) values ('k');
|
|
insert t1 (b) values ('m');
|
|
set debug_sync= 'now signal goforit';
|
|
|
|
--connection con2
|
|
--reap
|
|
--connection default
|
|
drop table t1;
|
|
set debug_sync= reset;
|
|
|
|
--echo #
|
|
--echo # MDEV-29021 ALTER TABLE fails when a stored virtual column is dropped and added
|
|
--echo #
|
|
create table t1 (a char(9), b char(9) as (a) stored);
|
|
insert into t1(a) values ('foobar');
|
|
|
|
--send set debug_sync= 'now wait_for downgraded'
|
|
|
|
--connection con2
|
|
set sql_mode='';
|
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for goforit';
|
|
--send alter table t1 drop b, add b char(3) as (a) stored, algorithm=copy, lock=none
|
|
|
|
--connection default
|
|
--reap
|
|
update t1 set a = 'foobarqux';
|
|
set debug_sync= 'now signal goforit';
|
|
|
|
--connection con2
|
|
--reap
|
|
set sql_mode=default;
|
|
--connection default
|
|
drop table t1;
|
|
set debug_sync= reset;
|
|
|
|
--echo # (duplicate) MDEV-29007 Assertion `marked_for_write_or_computed()'
|
|
--echo # failed upon online ADD COLUMN .. FIRST
|
|
create table t (a int);
|
|
insert into t values (1),(2);
|
|
--send
|
|
set debug_sync= 'now wait_for downgraded';
|
|
|
|
--connection con2
|
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for goforit';
|
|
--send
|
|
alter table t add c int first, algorithm=copy, lock=none;
|
|
|
|
--connection default
|
|
--reap
|
|
insert into t values (3);
|
|
set debug_sync= 'now signal goforit';
|
|
|
|
--connection con2
|
|
--reap
|
|
--connection default
|
|
drop table t;
|
|
set debug_sync= reset;
|
|
|
|
--echo # UNIQUE blob duplicates are not ignored.
|
|
|
|
create table t1 (b blob);
|
|
insert into t1 values ('foo'),('bar');
|
|
--send
|
|
set debug_sync= 'now wait_for downgraded';
|
|
|
|
--connection con2
|
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for goforit';
|
|
--send
|
|
alter table t1 add unique(b), algorithm=copy, lock=none;
|
|
|
|
--connection default
|
|
--reap
|
|
insert into t1 values ('qux'),('foo');
|
|
set debug_sync= 'now signal goforit';
|
|
|
|
--connection con2
|
|
--error ER_DUP_ENTRY
|
|
--reap
|
|
select * from t1;
|
|
show create table t1;
|
|
|
|
# Cleanup
|
|
--connection default
|
|
drop table t1;
|
|
set debug_sync= reset;
|
|
|
|
--echo #
|
|
--echo # DELETE with added virtual column
|
|
--echo #
|
|
CREATE TABLE t1 (a CHAR(3), b CHAR(3) AS (a));
|
|
INSERT INTO t1 (a) VALUES ('foo'),('bar');
|
|
--send
|
|
set debug_sync= 'now wait_for downgraded';
|
|
|
|
--connection con2
|
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for goforit';
|
|
--send
|
|
ALTER TABLE t1 ADD c INT, ALGORITHM=COPY, LOCK=NONE;
|
|
|
|
--connection default
|
|
--reap
|
|
DELETE FROM t1;
|
|
set debug_sync= 'now signal goforit';
|
|
|
|
--connection con2
|
|
--reap
|
|
select * from t1;
|
|
|
|
--connection default
|
|
DROP TABLE t1;
|
|
set debug_sync= reset;
|
|
|
|
--echo #
|
|
--echo # Do not ignore sql_mode when replicating
|
|
--echo #
|
|
create table t1 (a int);
|
|
insert into t1 values (1);
|
|
|
|
--send set debug_sync= 'now wait_for downgraded'
|
|
|
|
--connection con2
|
|
set sql_mode='STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO';
|
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for goforit';
|
|
--send alter table t1 add b int as (1/a) stored, algorithm=copy, lock=none
|
|
|
|
--connection default
|
|
--reap
|
|
update t1 set a= 0 where a=1;
|
|
set debug_sync= 'now signal goforit';
|
|
|
|
--connection con2
|
|
--error ER_DIVISION_BY_ZERO
|
|
--reap
|
|
|
|
set sql_mode= default;
|
|
--connection default
|
|
drop table t1;
|
|
set debug_sync= reset;
|
|
|
|
--echo #
|
|
--echo # MDEV-29067 Online alter ignores check constraint violation
|
|
--echo #
|
|
|
|
--echo ## CHECK, INSERT
|
|
create table t1 (a int);
|
|
insert t1 values (1),(2);
|
|
--send set debug_sync= 'now wait_for downgraded'
|
|
--connection con2
|
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for goforit';
|
|
--send alter table t1 add check (a<10), algorithm=copy, lock=none
|
|
--connection default
|
|
--reap
|
|
insert t1 values (11),(12);
|
|
set debug_sync= 'now signal goforit';
|
|
--connection con2
|
|
--error ER_CONSTRAINT_FAILED
|
|
--reap
|
|
--connection default
|
|
show create table t1;
|
|
select * from t1;
|
|
drop table t1;
|
|
|
|
--echo ## DEFAULT, INSERT
|
|
create table t1 (a int);
|
|
insert t1 values (1),(2);
|
|
--send set debug_sync= 'now wait_for downgraded'
|
|
--connection con2
|
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for goforit';
|
|
--send alter table t1 add b int default(a+10), algorithm=copy, lock=none
|
|
--connection default
|
|
--reap
|
|
insert t1 values (11),(12);
|
|
set debug_sync= 'now signal goforit';
|
|
--connection con2
|
|
--reap
|
|
--connection default
|
|
show create table t1;
|
|
select * from t1;
|
|
drop table t1;
|
|
set debug_sync= 'reset';
|
|
|
|
--echo ## CHECK, UPDATE
|
|
create table t1 (a int);
|
|
insert t1 values (1),(2),(3),(4);
|
|
--send set debug_sync= 'now wait_for downgraded'
|
|
--connection con2
|
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for goforit';
|
|
--send alter table t1 add check (a<10), algorithm=copy, lock=none
|
|
--connection default
|
|
--reap
|
|
update t1 set a=a+10 where a > 2;
|
|
set debug_sync= 'now signal goforit';
|
|
--connection con2
|
|
--error ER_CONSTRAINT_FAILED
|
|
--reap
|
|
--connection default
|
|
show create table t1;
|
|
select * from t1;
|
|
drop table t1;
|
|
|
|
--echo ## DEFAULT, UPDATE
|
|
create table t1 (a int);
|
|
insert t1 values (1),(2),(3),(4);
|
|
--send set debug_sync= 'now wait_for downgraded'
|
|
--connection con2
|
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for goforit';
|
|
--send alter table t1 add b int default(a), algorithm=copy, lock=none
|
|
--connection default
|
|
--reap
|
|
update t1 set a=a+10 where a > 2;
|
|
insert t1 values(5);
|
|
update t1 set a=a+10 where a = 5;
|
|
|
|
set debug_sync= 'now signal goforit';
|
|
--connection con2
|
|
--reap
|
|
--connection default
|
|
show create table t1;
|
|
select * from t1;
|
|
drop table t1;
|
|
set debug_sync= 'reset';
|
|
|
|
--echo ## VCOL + CHECK
|
|
create table t1 (a int);
|
|
insert t1 values (1),(2),(3),(4);
|
|
--send set debug_sync= 'now wait_for downgraded'
|
|
--connection con2
|
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for goforit';
|
|
--send alter table t1 add b int as (a), add check(b=a), algorithm=copy, lock=none
|
|
--connection default
|
|
--reap
|
|
update t1 set a=a+10 where a > 2;
|
|
insert t1 values(5);
|
|
update t1 set a=a+10 where a = 5;
|
|
|
|
set debug_sync= 'now signal goforit';
|
|
--connection con2
|
|
--reap
|
|
--connection default
|
|
show create table t1;
|
|
select * from t1;
|
|
drop table t1;
|
|
set debug_sync= 'reset';
|
|
|
|
--echo #
|
|
--echo # MDEV-29013 ER_KEY_NOT_FOUND/lock timeout upon online alter
|
|
--echo # with long unique indexes
|
|
--echo #
|
|
create table t1 (b text not null, unique(b));
|
|
insert into t1 values ('foo'),('bar');
|
|
--send
|
|
set debug_sync= 'now wait_for downgraded';
|
|
|
|
--connection con2
|
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for goforit';
|
|
--send
|
|
alter table t1 add c int, algorithm=copy, lock=none;
|
|
|
|
--connection default
|
|
--reap
|
|
delete from t1;
|
|
set debug_sync= 'now signal goforit';
|
|
|
|
--connection con2
|
|
--reap
|
|
|
|
--connection default
|
|
drop table t1;
|
|
set debug_sync= reset;
|
|
|
|
--echo ###
|
|
|
|
create table t1 (a text, unique(a));
|
|
create table t2 (b text, unique(b));
|
|
insert into t2 values (null),(null);
|
|
--send
|
|
set debug_sync= 'now wait_for downgraded';
|
|
|
|
--connection con2
|
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for goforit';
|
|
--send
|
|
alter table t2 add column c int, algorithm=copy, lock=none;
|
|
|
|
--connection default
|
|
--reap
|
|
delete from t2;
|
|
set debug_sync= 'now signal goforit';
|
|
|
|
--connection con2
|
|
--reap
|
|
|
|
--connection default
|
|
alter table t2 force;
|
|
alter table t1 force;
|
|
|
|
drop table t1, t2;
|
|
set debug_sync= reset;
|
|
|
|
--echo #
|
|
--echo # MDEV-29038 XA assertions failing in binlog_rollback and binlog_commit
|
|
--echo #
|
|
create table t (a int);
|
|
insert into t values (1);
|
|
xa begin 'xid';
|
|
--send
|
|
set debug_sync= 'now wait_for downgraded';
|
|
|
|
--connect (con1,localhost,root,,test)
|
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for goforit';
|
|
--send
|
|
alter table t force, algorithm=copy, lock=none;
|
|
|
|
--connection default
|
|
--reap
|
|
insert into t values (2);
|
|
set debug_sync= 'now signal goforit';
|
|
xa end 'xid';
|
|
xa rollback 'xid';
|
|
|
|
xa begin 'xid';
|
|
--connection con1
|
|
--reap
|
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for goforit';
|
|
--send
|
|
alter table t force, algorithm=copy, lock=none;
|
|
|
|
--connection default
|
|
set debug_sync= 'now wait_for downgraded';
|
|
insert into t values (3);
|
|
set debug_sync= 'now signal goforit';
|
|
xa end 'xid';
|
|
xa commit 'xid' one phase;
|
|
|
|
# Cleanup
|
|
--connection con1
|
|
--reap
|
|
--connection default
|
|
drop table t;
|
|
set debug_sync= reset;
|
|
|
|
--echo #
|
|
--echo # MDEV-29069 ER_KEY_NOT_FOUND upon online autoinc addition and
|
|
--echo # concurrent DELETE
|
|
--echo #
|
|
set @old_dbug=@@debug_dbug;
|
|
set debug_dbug="+d,rpl_report_chosen_key";
|
|
|
|
# UB
|
|
#
|
|
# create table t (a int);
|
|
# insert into t values (10),(20),(30);
|
|
#
|
|
# set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for goforit';
|
|
# --send
|
|
# alter table t add pk int auto_increment primary key, algorithm=copy, lock=none;
|
|
# --connection con2
|
|
# set debug_sync= 'now wait_for downgraded';
|
|
# delete from t where a = 20;
|
|
# update t set a = a + 1 where a = 10;
|
|
# set debug_sync= 'now signal goforit';
|
|
#
|
|
# --connection default
|
|
# --reap
|
|
# select * from t;
|
|
|
|
--echo #
|
|
--echo # Add clumsy DEFAULT
|
|
--echo #
|
|
create or replace table t (a int);
|
|
insert into t values (10),(20),(30);
|
|
|
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for goforit';
|
|
--send
|
|
alter table t add b int default(RAND() * 20), add key(b),
|
|
algorithm=copy, lock=none;
|
|
--connection con2
|
|
set debug_sync= 'now wait_for downgraded';
|
|
delete from t where a = 20;
|
|
update t set a = a + 1 where a = 10;
|
|
set debug_sync= 'now signal goforit';
|
|
--connection default
|
|
--reap
|
|
select a from t;
|
|
|
|
--echo # CURRENT_TIMESTAMP
|
|
create or replace table t (a int);
|
|
insert into t values (10),(20),(30);
|
|
|
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for goforit';
|
|
--send
|
|
alter table t add b timestamp default CURRENT_TIMESTAMP, add key(b),
|
|
algorithm=copy, lock=none;
|
|
--connection con2
|
|
set debug_sync= 'now wait_for downgraded';
|
|
delete from t where a = 20;
|
|
update t set a = a + 1 where a = 10;
|
|
set debug_sync= 'now signal goforit';
|
|
--connection default
|
|
--reap
|
|
select a from t;
|
|
|
|
--echo # CURRENT_TIMESTAMP, mixed key
|
|
create or replace table t (a int);
|
|
insert into t values (10),(20),(30);
|
|
|
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for goforit';
|
|
--send
|
|
alter table t add b timestamp default CURRENT_TIMESTAMP, add key(a, b),
|
|
algorithm=copy, lock=none;
|
|
--connection con2
|
|
set debug_sync= 'now wait_for downgraded';
|
|
delete from t where a = 20;
|
|
update t set a = a + 1 where a = 10;
|
|
set debug_sync= 'now signal goforit';
|
|
|
|
--connection default
|
|
--reap
|
|
select a from t;
|
|
|
|
--echo # Mixed primary key
|
|
create or replace table t (a int);
|
|
insert into t values (10),(20),(30);
|
|
|
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for goforit';
|
|
--send
|
|
alter table t add b int default (a+1), add primary key(b, a),
|
|
algorithm=copy, lock=none;
|
|
--connection con2
|
|
set debug_sync= 'now wait_for downgraded';
|
|
delete from t where a = 20;
|
|
update t set a = a + 1 where a = 10;
|
|
set debug_sync= 'now signal goforit';
|
|
|
|
--connection default
|
|
--reap
|
|
select a from t;
|
|
|
|
--echo #
|
|
--echo # Normal row, could be used as a key
|
|
--echo #
|
|
create or replace table t (a int);
|
|
insert into t values (10),(20),(30);
|
|
|
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for goforit';
|
|
--send
|
|
alter table t add b int as (a * 10) unique, algorithm=copy, lock=none;
|
|
--connection con2
|
|
set debug_sync= 'now wait_for downgraded';
|
|
delete from t where a = 20;
|
|
update t set a = a + 1 where a = 10;
|
|
set debug_sync= 'now signal goforit';
|
|
|
|
--connection default
|
|
--reap
|
|
|
|
--echo #
|
|
--echo # Add key for old row
|
|
--echo #
|
|
create or replace table t (a int);
|
|
insert into t values (10),(20),(30);
|
|
|
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for goforit';
|
|
--send
|
|
alter table t add unique(a), algorithm=copy, lock=none;
|
|
--connection con2
|
|
set debug_sync= 'now wait_for downgraded';
|
|
delete from t where a = 20;
|
|
update t set a = a + 1 where a = 10;
|
|
set debug_sync= 'now signal goforit';
|
|
|
|
--connection default
|
|
--reap
|
|
|
|
|
|
--echo #
|
|
--echo # Useful UNIQUE, though a virtual column on another extra field
|
|
--echo #
|
|
create or replace table t (a int primary key, b int default (a+1));
|
|
insert into t values (10, 10),(20, 20),(30, 30);
|
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for goforit';
|
|
--send
|
|
alter table t drop primary key, add c int default(a),
|
|
add d int as (c) stored unique, algorithm=copy, lock=none;
|
|
--connection con2
|
|
set debug_sync= 'now wait_for downgraded';
|
|
delete from t where a = 20;
|
|
update t set a = a + 2 where a = 10;
|
|
set debug_sync= 'now signal goforit';
|
|
--connection default
|
|
--reap
|
|
select * from t;
|
|
|
|
--echo #
|
|
--echo # Now this index is not usable (missing DEFAULT on field c)
|
|
--echo #
|
|
create or replace table t (a int primary key, b int);
|
|
insert into t values (10, 10),(20, 20),(30, 30);
|
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for goforit';
|
|
--send
|
|
alter table t drop primary key, add c real default(rand(a)),
|
|
add d real as (c) stored unique, algorithm=copy, lock=none;
|
|
--connection con2
|
|
set debug_sync= 'now wait_for downgraded';
|
|
delete from t where a = 20;
|
|
update t set a = a + 2 where a = 10;
|
|
set debug_sync= 'now signal goforit';
|
|
--connection default
|
|
--reap
|
|
select a, b from t;
|
|
|
|
# Cleanup
|
|
drop table t;
|
|
set debug_sync= reset;
|
|
set debug_dbug= @old_dbug;
|
|
--connection default
|
|
|
|
--echo #
|
|
--echo # MDEV-30902 Server crash in LEX::first_lists_tables_same
|
|
--echo #
|
|
create table t1 engine=myisam select 1 as x ;
|
|
create procedure p() alter table t1 engine=heap;
|
|
|
|
set debug_sync= 'alter_table_copy_end signal ended wait_for end';
|
|
send call p;
|
|
|
|
--connection con1
|
|
set debug_sync= 'now wait_for ended';
|
|
insert into t1 values (2);
|
|
set debug_sync= 'now signal end';
|
|
|
|
--connection default
|
|
--reap
|
|
call p;
|
|
|
|
drop table t1;
|
|
drop procedure p;
|
|
set debug_sync=reset;
|
|
|
|
--echo #
|
|
--echo # MDEV-30902 Server crash in LEX::first_lists_tables_same
|
|
--echo #
|
|
create table t (id int, s date, e date, period for p(s,e),
|
|
unique(id, p without overlaps)) engine=aria;
|
|
insert into t values (1,'1971-01-01','1971-01-02');
|
|
|
|
set debug_sync= 'alter_table_online_before_lock signal lock wait_for goon';
|
|
send alter table t force;
|
|
|
|
--connection con1
|
|
set debug_sync= 'now wait_for lock';
|
|
delete from t;
|
|
set debug_sync= 'now signal goon';
|
|
|
|
--connection default
|
|
--reap
|
|
drop table t;
|
|
|
|
--echo #
|
|
--echo # MDEV-30924 Server crashes in MYSQL_LOG::is_open upon ALTER vs FUNCTION
|
|
--echo #
|
|
create table t (a int);
|
|
insert into t values (1),(2);
|
|
|
|
--delimiter $
|
|
create function f () returns int
|
|
begin
|
|
update t set a = 10;
|
|
return 0;
|
|
end $
|
|
--delimiter ;
|
|
|
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for goon';
|
|
send alter table t force, algorithm=copy;
|
|
|
|
--connection con1
|
|
set debug_sync= 'now wait_for downgraded';
|
|
select f();
|
|
set debug_sync= 'now signal goon';
|
|
|
|
--connection default
|
|
--reap
|
|
drop table t;
|
|
drop function f;
|
|
|
|
--echo # Partitioning
|
|
create or replace table t1 (a serial);
|
|
insert t1 values (5), (6), (7);
|
|
|
|
set debug_sync= 'alter_table_online_downgraded SIGNAL downgraded wait_for goon';
|
|
send alter table t1 ENGINE=InnoDB, ALGORITHM=COPY, LOCK=NONE
|
|
PARTITION BY HASH(a) PARTITIONS 5;
|
|
|
|
--connection con1
|
|
set debug_sync= 'now WAIT_FOR downgraded';
|
|
insert into t1 values (123), (456), (789);
|
|
update t1 set a= a+100;
|
|
set debug_sync= 'now SIGNAL goon';
|
|
|
|
--connection default
|
|
--reap
|
|
select * from t1;
|
|
|
|
drop table t1;
|
|
|
|
--echo #
|
|
--echo # MDEV-31033 ER_KEY_NOT_FOUND upon online COPY ALTER on a partitioned
|
|
--echo # table
|
|
create table t (a int) partition by hash(a) partitions 2;
|
|
insert into t values (1),(3);
|
|
set debug_sync= 'alter_table_online_downgraded SIGNAL downgraded wait_for goon';
|
|
send alter table t force, algorithm=copy, lock=none;
|
|
|
|
--connection con1
|
|
set debug_sync= 'now WAIT_FOR downgraded';
|
|
update t set a = a + 1;
|
|
insert t values (1),(2);
|
|
delete from t where a = 4 limit 1;
|
|
set debug_sync= 'now SIGNAL goon';
|
|
|
|
--connection default
|
|
--reap
|
|
|
|
select * from t;
|
|
|
|
drop table t;
|
|
|
|
--echo #
|
|
--echo # MDEV-31043 ER_KEY_NOT_FOUND upon concurrent ALTER and transaction
|
|
--echo #
|
|
let $i=2;
|
|
let local_engine=myisam;
|
|
while ($i) {
|
|
eval create table t (a int, b int) engine=$local_engine;
|
|
insert into t values (1,10),(2,20);
|
|
set debug_sync= 'alter_table_online_before_lock signal burnit wait_for goforit';
|
|
--send
|
|
alter table t add c int, algorithm=copy, lock=none;
|
|
|
|
--connection con1
|
|
|
|
set debug_sync= 'now wait_for burnit';
|
|
update t set b = 100;
|
|
start transaction;
|
|
update t set b = 200;
|
|
|
|
--connection con2
|
|
delete from t order by a limit 1;
|
|
delete from t order by a limit 1;
|
|
select * from t;
|
|
--connection con1
|
|
commit;
|
|
set debug_sync= 'now signal goforit';
|
|
|
|
--connection default
|
|
--reap
|
|
select * from t;
|
|
drop table t;
|
|
dec $i;
|
|
let local_engine=aria;
|
|
}
|
|
|
|
--echo #
|
|
--echo # MDEV-30949 Direct leak in binlog_online_alter_end_trans
|
|
--echo #
|
|
create table t (f longblob default null) engine=myisam;
|
|
insert into t values (null);
|
|
|
|
set debug_sync= "alter_table_copy_end signal copy wait_for goon";
|
|
set debug_sync= "alter_table_online_before_lock signal lock wait_for end";
|
|
|
|
send alter table t force, algorithm=copy;
|
|
|
|
--connection con1
|
|
set debug_sync= "now wait_for copy";
|
|
insert into t select repeat('a',130000);
|
|
set debug_sync= "now signal goon wait_for lock";
|
|
insert into t select repeat('a',130000);
|
|
set debug_sync= "now signal end";
|
|
|
|
|
|
--connection default
|
|
--reap
|
|
drop table t;
|
|
|
|
--echo #
|
|
--echo # Test that correct fields are marked as explicit:
|
|
--echo # Drop a, reorder b, add new column with default.
|
|
--echo #
|
|
create table t (a int primary key, b int);
|
|
insert into t values (1, 1), (2, 2), (3, 3);
|
|
|
|
set debug_sync= "alter_table_copy_end signal copy wait_for goon";
|
|
send alter table t drop primary key, drop a,
|
|
change b c bigint,
|
|
add x longblob default 123456;
|
|
|
|
--connection con1
|
|
set debug_sync= "now wait_for copy";
|
|
|
|
update t set b = 5 where a = 1;
|
|
update t set b = NULL where a = 1;
|
|
select * from t;
|
|
update t set a = 100 where a = 1;
|
|
update t set b = -10 where a = 100;
|
|
select * from t;
|
|
|
|
set debug_sync= "now signal goon";
|
|
|
|
--connection default
|
|
--reap
|
|
select * from t;
|
|
drop table t;
|
|
|
|
--echo # Test that all the fields are unpacked.
|
|
create table t (a int, b int);
|
|
insert into t values (NULL, 123), (NULL, 456);
|
|
|
|
set debug_sync= "alter_table_copy_end signal copy wait_for goon";
|
|
send alter table t drop a, add primary key(b), algorithm=copy;
|
|
--connection con1
|
|
set debug_sync= "now wait_for copy";
|
|
update t set b = b + 100;
|
|
|
|
set debug_sync= "now signal goon";
|
|
|
|
--connection default
|
|
--reap
|
|
select * from t;
|
|
|
|
drop table t;
|
|
|
|
|
|
set debug_sync= reset;
|
|
let SEARCH_FILE= $MYSQLTEST_VARDIR/log/mysqld.1.err;
|
|
let SEARCH_PATTERN= Slave SQL;
|
|
--source include/search_pattern_in_file.inc
|
|
|
|
|
|
--echo #
|
|
--echo # MDEV-31646 Online alter applies binlog cache limit to cache writes
|
|
--echo #
|
|
create table t (pk int primary key, a varchar(100)) engine=MyISAM;
|
|
insert into t select seq, repeat('x', 100) from seq_1_to_500;
|
|
|
|
set @cache.size= @@max_binlog_cache_size;
|
|
set global max_binlog_cache_size= 4096;
|
|
|
|
send set debug_sync= 'now wait_for do_updates';
|
|
|
|
--connection con1
|
|
set debug_sync= 'alter_table_online_progress signal do_updates wait_for go';
|
|
send alter table t add b int, algorithm=copy, lock=none;
|
|
|
|
--connection default
|
|
--reap
|
|
update t set a = repeat('y', 100);
|
|
show warnings;
|
|
|
|
set debug_sync= 'now signal go';
|
|
|
|
--connection con1
|
|
--reap
|
|
show warnings;
|
|
|
|
--connection default
|
|
drop table t;
|
|
set debug_sync= reset;
|
|
set global max_binlog_cache_size= @cache.size;
|
|
|
|
--echo # Now make sure that smaller limits will be processed fine
|
|
|
|
set @old_dbug=@@debug_dbug;
|
|
create table t (pk int primary key, a text) engine=MyISAM;
|
|
insert into t select seq, repeat('x', 1000) from seq_1_to_50;
|
|
|
|
--connection con1
|
|
set debug_sync= 'alter_table_online_progress signal do_updates wait_for go';
|
|
--send
|
|
alter table t add b int, algorithm=copy, lock=none;
|
|
|
|
--connection default
|
|
set debug_sync= 'now wait_for do_updates';
|
|
set debug_dbug="+d,online_alter_small_cache";
|
|
--error ER_STMT_CACHE_FULL
|
|
update t set a = repeat('y', 1000);
|
|
show warnings;
|
|
|
|
set debug_sync= 'now signal go';
|
|
|
|
--connection con1
|
|
--reap
|
|
show warnings;
|
|
|
|
--connection default
|
|
drop table t;
|
|
set debug_sync= reset;
|
|
set debug_dbug= @old_dbug;
|
|
|
|
|
|
|
|
|
|
create table t (id int, a int, b text, primary key (id));
|
|
insert into t values (1,10,''),(2,20,'');
|
|
|
|
set debug_sync= 'alter_table_online_progress signal do_update wait_for go';
|
|
send alter table t force, algorithm=copy, lock=none;
|
|
|
|
--connection con1
|
|
set @old_binlog_row_image= @@binlog_row_image;
|
|
set binlog_row_image= noblob;
|
|
set debug_sync= 'now wait_for do_update';
|
|
|
|
update t set a = 1;
|
|
delete from t where id = 1;
|
|
|
|
set debug_sync= 'now signal go';
|
|
set binlog_row_image= @old_binlog_row_image;
|
|
|
|
--connection default
|
|
--reap
|
|
select * from t;
|
|
|
|
drop table t;
|
|
set debug_sync= reset;
|
|
|
|
--echo #
|
|
--echo # MDEV-31812 Add switch to old_mode to disable non-locking ALTER
|
|
--echo #
|
|
set @old_old_mode= @@old_mode;
|
|
create or replace table t1 (a int primary key, b int);
|
|
set debug_sync= 'alter_table_copy_end SIGNAL copy_end WAIT_FOR proceed';
|
|
send alter table t1 drop primary key, add primary key(b), algorithm= copy;
|
|
|
|
--connection con2
|
|
set debug_sync= 'now WAIT_FOR copy_end';
|
|
select if(max_stage = 4, "online", "old") as mode
|
|
from information_schema.processlist where id = @con;
|
|
set debug_sync= 'now SIGNAL proceed';
|
|
|
|
--connection default
|
|
--reap
|
|
|
|
set old_mode= LOCK_ALTER_TABLE_COPY;
|
|
set debug_sync= 'alter_table_copy_end SIGNAL copy_end WAIT_FOR proceed';
|
|
send alter table t1 drop primary key, add primary key(b), algorithm= copy;
|
|
--connection con2
|
|
set debug_sync= 'now WAIT_FOR copy_end';
|
|
select if(max_stage = 4, "online", "old") as mode
|
|
from information_schema.processlist where id = @con;
|
|
set debug_sync= 'now SIGNAL proceed';
|
|
|
|
--connection default
|
|
--reap
|
|
|
|
set debug_sync= 'alter_table_copy_end SIGNAL copy_end WAIT_FOR proceed';
|
|
send alter table t1 drop primary key, add primary key(b),
|
|
algorithm= copy, lock=none;
|
|
--connection con2
|
|
set debug_sync= 'now WAIT_FOR copy_end';
|
|
|
|
select if(max_stage = 4, "online", "old") as mode
|
|
from information_schema.processlist where id = @con;
|
|
set debug_sync= 'now SIGNAL proceed';
|
|
|
|
--connection default
|
|
--reap
|
|
set old_mode= @old_old_mode;
|
|
drop table t1;
|
|
set debug_sync= reset;
|
|
|
|
--echo #
|
|
--echo # MDEV-32100 Online ALTER TABLE ends with 1032 under some isolation levels
|
|
--echo #
|
|
|
|
let $tx_iso_id=4;
|
|
|
|
create table iso_levels(id int, level text);
|
|
INSERT iso_levels VALUES (0, "READ UNCOMMITTED"),
|
|
(1, "READ COMMITTED"),
|
|
(2, "REPEATABLE READ"),
|
|
(3, "SERIALIZABLE");
|
|
|
|
while($tx_iso_id) {
|
|
dec $tx_iso_id;
|
|
let tx_iso= `select level from iso_levels where id = $tx_iso_id`;
|
|
|
|
create table t1 (a int, b int, key(b));
|
|
|
|
--connection con2
|
|
insert into t1 values (1,1),(null,null),(3,3),(4,null),(null,5);
|
|
|
|
--connection default
|
|
|
|
eval set session transaction isolation level $tx_iso;
|
|
set debug_sync= "alter_table_online_downgraded signal downgraded wait_for goalters";
|
|
|
|
send alter table t1 force, algorithm=copy;
|
|
|
|
--connection con2
|
|
set debug_sync= "now wait_for downgraded";
|
|
delete from t1 where b is null;
|
|
set debug_sync= "now signal goalters";
|
|
|
|
--connection default
|
|
--reap
|
|
drop table t1;
|
|
}
|
|
set debug_sync= reset;
|
|
drop table iso_levels;
|
|
|
|
|
|
--echo # MDEV-32126 Assertion fails upon online ALTER and binary log enabled
|
|
create temporary table tmp (id int, primary key(id)) engine=innodb;
|
|
create table t1 (a int, b text);
|
|
create table t2 (a int, b int, c char(8), d text, unique(a));
|
|
insert into t2 values (1,1,'f','e'),(1000,1000,'c','b');
|
|
--connection default
|
|
set debug_sync= 'alter_table_online_before_lock signal go_trx wait_for go_alter';
|
|
send alter table t2 force, algorithm=copy, lock=none;
|
|
|
|
--connection con2
|
|
set debug_sync= 'now wait_for go_trx';
|
|
start transaction;
|
|
insert into t1 values (3,'a');
|
|
--error ER_DUP_ENTRY
|
|
insert into t2 values (3,3,'a','x'), (3,3,'a','x');
|
|
insert into t2 values (3,3,'a','x');
|
|
commit;
|
|
set debug_sync= 'now signal go_alter';
|
|
--connection default
|
|
--reap
|
|
truncate t2;
|
|
set @@binlog_format=mixed;
|
|
--connection con2
|
|
start transaction;
|
|
create temporary table tmp (id int, primary key(id));
|
|
insert into t1 values (1, repeat('x',8000)),(2, repeat('x',8000));
|
|
update t2 set b = null order by b limit 2;
|
|
insert into t1 values (3, repeat('x',8000));
|
|
delete from t1;
|
|
insert into t2 values (1,1,'f','e'),(1000,1000,'c','b');
|
|
commit;
|
|
|
|
|
|
--connection default
|
|
set debug_sync= 'alter_table_online_before_lock signal go_trx wait_for go_alter';
|
|
send alter table t2 force, algorithm=copy, lock=none;
|
|
|
|
--connection con2
|
|
set debug_sync= 'now wait_for go_trx';
|
|
start transaction;
|
|
drop temporary table if exists tmp;
|
|
--error ER_DUP_ENTRY
|
|
insert into t2 values (3,3,'a','x'), (3,3,'a','x');
|
|
insert into t2 values (3,3,'a','x');
|
|
commit;
|
|
set debug_sync= 'now signal go_alter';
|
|
|
|
--connection default
|
|
--reap
|
|
|
|
drop table t1, t2;
|
|
set @@binlog_format=default;
|
|
set debug_sync= reset;
|
|
|
|
|
|
--echo # MDEV-32444 Data from orphaned XA transaction is lost after online alter
|
|
|
|
create table t (a int primary key);
|
|
insert into t values (1);
|
|
|
|
--echo # XA commit
|
|
|
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for go';
|
|
send alter table t force, algorithm=copy, lock=none;
|
|
|
|
--connection con1
|
|
set debug_sync= 'now wait_for downgraded';
|
|
xa begin 'x1';
|
|
update t set a = 2 where a = 1;
|
|
xa end 'x1';
|
|
xa prepare 'x1';
|
|
set debug_sync= 'thread_end signal xa_detach wait_for close';
|
|
--disconnect con1
|
|
|
|
--connection con2
|
|
set debug_sync= 'now signal close wait_for xa_detach';
|
|
xa commit 'x1';
|
|
set debug_sync= 'now signal go';
|
|
--connection default
|
|
--reap # alter table
|
|
|
|
select * from t;
|
|
|
|
--echo # XA rollback
|
|
|
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for go';
|
|
send alter table t force, algorithm=copy, lock=none;
|
|
--connect(con1, localhost, root,,)
|
|
set debug_sync= 'now wait_for downgraded';
|
|
xa begin 'x2';
|
|
insert into t values (53);
|
|
xa end 'x2';
|
|
xa prepare 'x2';
|
|
set debug_sync= 'thread_end signal xa_detach wait_for close';
|
|
--disconnect con1
|
|
|
|
--connection con2
|
|
set debug_sync= 'now signal close wait_for xa_detach';
|
|
xa rollback 'x2';
|
|
set debug_sync= 'now signal go';
|
|
--connection default
|
|
--reap # alter table
|
|
|
|
select * from t;
|
|
|
|
--echo # XA transaction is left uncommitted
|
|
--echo # end then is rollbacked after alter fails
|
|
|
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for go';
|
|
send set statement innodb_lock_wait_timeout=0, lock_wait_timeout= 0
|
|
for alter table t force, algorithm=copy, lock=none;
|
|
|
|
--connect(con1, localhost, root,,)
|
|
set debug_sync= 'now wait_for downgraded';
|
|
xa begin 'xuncommitted';
|
|
insert into t values (3);
|
|
xa end 'xuncommitted';
|
|
xa prepare 'xuncommitted';
|
|
set debug_sync= 'now signal go';
|
|
set debug_sync= 'thread_end signal xa_detach wait_for close';
|
|
--disconnect con1
|
|
|
|
--connection default
|
|
--error ER_LOCK_WAIT_TIMEOUT
|
|
--reap # alter table
|
|
set debug_sync= 'now signal close wait_for xa_detach';
|
|
xa rollback 'xuncommitted';
|
|
|
|
select * from t;
|
|
|
|
--echo # Same, but commit
|
|
|
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for go';
|
|
send set statement innodb_lock_wait_timeout=0, lock_wait_timeout= 0
|
|
for alter table t force, algorithm=copy, lock=none;
|
|
|
|
--connect(con1, localhost, root,,)
|
|
set debug_sync= 'now wait_for downgraded';
|
|
xa begin 'committed_later';
|
|
insert into t values (3);
|
|
xa end 'committed_later';
|
|
xa prepare 'committed_later';
|
|
set debug_sync= 'now signal go';
|
|
set debug_sync= 'thread_end signal xa_detach wait_for close';
|
|
--disconnect con1
|
|
|
|
--connection default
|
|
--error ER_LOCK_WAIT_TIMEOUT
|
|
--reap # alter table
|
|
set debug_sync= 'now signal close wait_for xa_detach';
|
|
xa commit 'committed_later';
|
|
|
|
|
|
select * from t;
|
|
|
|
--echo # Commit, but error in statement, and there is some stmt data to rollback
|
|
|
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for go';
|
|
send alter table t force, algorithm=copy, lock=none;
|
|
--connect(con1, localhost, root,,)
|
|
set debug_sync= 'now wait_for downgraded';
|
|
xa begin 'x1';
|
|
--error ER_DUP_ENTRY
|
|
insert into t values (4), (3);
|
|
insert into t values (5);
|
|
xa end 'x1';
|
|
xa prepare 'x1';
|
|
set debug_sync= 'thread_end signal xa_detach wait_for close';
|
|
--disconnect con1
|
|
|
|
--connection con2
|
|
set debug_sync= 'now signal close wait_for xa_detach';
|
|
xa commit 'x1';
|
|
set debug_sync= 'now signal go';
|
|
--connection default
|
|
--reap # alter table
|
|
|
|
select * from t;
|
|
|
|
--connect(con1, localhost, root,,)
|
|
--connection default
|
|
drop table t;
|
|
set debug_sync= reset;
|
|
|
|
--echo # MDEV-32771 Server crash upon online alter with concurrent XA
|
|
|
|
create table t (a int primary key);
|
|
insert t values(1),(2),(3);
|
|
|
|
--echo # First, check that nothing from the rollbacked statement commits
|
|
|
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for go';
|
|
send alter table t add b int default (555), algorithm=copy;
|
|
|
|
--connection con1
|
|
set debug_sync= 'now wait_for downgraded';
|
|
xa start 'xid';
|
|
--error ER_DUP_ENTRY
|
|
update t set a = 0;
|
|
xa end 'xid';
|
|
xa prepare 'xid';
|
|
xa commit 'xid';
|
|
set debug_sync= 'now signal go';
|
|
|
|
--connection default
|
|
--reap
|
|
select * from t;
|
|
|
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for go';
|
|
send alter table t add c int default(777), algorithm=copy;
|
|
|
|
--connection con1
|
|
set debug_sync= 'now wait_for downgraded';
|
|
xa start 'xid';
|
|
--error ER_DUP_ENTRY
|
|
update t set a = 0;
|
|
xa end 'xid';
|
|
xa prepare 'xid';
|
|
xa rollback 'xid';
|
|
set debug_sync= 'now signal go';
|
|
|
|
--connection default
|
|
--reap
|
|
select * from t;
|
|
|
|
--echo # Same, but add one successful statement into transaction
|
|
|
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for go';
|
|
send alter table t drop b, algorithm=copy;
|
|
|
|
--connection con1
|
|
set debug_sync= 'now wait_for downgraded';
|
|
xa start 'xid';
|
|
update t set a = 10 where a = 1;
|
|
--error ER_DUP_ENTRY
|
|
update t set a = 0;
|
|
xa end 'xid';
|
|
xa prepare 'xid';
|
|
xa rollback 'xid';
|
|
set debug_sync= 'now signal go';
|
|
|
|
--connection default
|
|
--reap
|
|
select * from t;
|
|
|
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for go';
|
|
send alter table t drop primary key, algorithm=copy;
|
|
|
|
--connection con1
|
|
set debug_sync= 'now wait_for downgraded';
|
|
xa start 'xid';
|
|
--echo # This statement will take effect.
|
|
update t set a = 10 where a = 1;
|
|
--error ER_DUP_ENTRY
|
|
update t set a = 0;
|
|
xa end 'xid';
|
|
xa prepare 'xid';
|
|
xa commit 'xid';
|
|
set debug_sync= 'now signal go';
|
|
|
|
--connection default
|
|
--reap
|
|
select * from t;
|
|
|
|
|
|
--echo # The only statement succeeds (test both commit and rollback)
|
|
|
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for go';
|
|
send alter table t add d text default ('qwe'), algorithm=copy;
|
|
|
|
--connection con1
|
|
set debug_sync= 'now wait_for downgraded';
|
|
xa start 'xid';
|
|
update t set a = 0;
|
|
xa end 'xid';
|
|
xa prepare 'xid';
|
|
xa rollback 'xid';
|
|
set debug_sync= 'now signal go';
|
|
|
|
--connection default
|
|
--reap
|
|
select * from t;
|
|
|
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for go';
|
|
send alter table t drop c, algorithm=copy;
|
|
|
|
--connection con1
|
|
set debug_sync= 'now wait_for downgraded';
|
|
xa start 'xid';
|
|
update t set a = 0;
|
|
xa end 'xid';
|
|
xa prepare 'xid';
|
|
xa commit 'xid';
|
|
set debug_sync= 'now signal go';
|
|
|
|
--connection default
|
|
--reap
|
|
select * from t;
|
|
|
|
drop table t;
|
|
|
|
|
|
--echo #
|
|
--echo # MDEV-32803 Assertion `total == 0' failed in Event_log::write_cache_raw
|
|
--echo #
|
|
|
|
create or replace table t1 (a int) engine=aria;
|
|
insert t1 values (5);
|
|
set debug_sync= 'alter_table_copy_end SIGNAL ended WAIT_FOR end';
|
|
|
|
send alter table t1 add b int NULL, algorithm= copy, lock= none;
|
|
|
|
--connection con2
|
|
set debug_sync= 'now WAIT_FOR ended';
|
|
begin;
|
|
insert into t1 values (123);
|
|
insert into t1 values (456), (789);
|
|
commit;
|
|
set debug_sync= 'now SIGNAL end';
|
|
|
|
--connection default
|
|
--reap
|
|
select * from t1;
|
|
|
|
drop table t1;
|
|
|
|
|
|
--echo # MDEV-32614 LeakSanitizer errors in copy_data_between_tables
|
|
create table t (a int, b int) engine=aria;
|
|
insert into t select seq, seq from seq_1_to_5;
|
|
backup stage start;
|
|
|
|
--connect (con_lock,localhost,root,,)
|
|
set lock_wait_timeout= 1;
|
|
|
|
set debug_sync='copy_data_between_tables_before_reset_backup_lock signal backup wait_for continue';
|
|
send alter table t add index (b), algorithm=copy, lock=none;
|
|
|
|
--connection default
|
|
|
|
set debug_sync='now wait_for backup';
|
|
|
|
backup stage block_commit;
|
|
|
|
set debug_sync='now signal continue';
|
|
|
|
--connection con_lock
|
|
--error ER_LOCK_WAIT_TIMEOUT
|
|
--reap
|
|
--disconnect con_lock
|
|
|
|
--connection default
|
|
backup stage end;
|
|
alter table t add index (a), algorithm=copy, lock=none;
|
|
|
|
--connection default
|
|
drop table t;
|
|
|
|
|
|
eval set global default_storage_engine= $default_storage_engine;
|
|
|
|
--disconnect con1
|
|
--disconnect con2
|
|
--echo #
|
|
--echo # End of 11.2 tests
|
|
--echo #
|