mariadb/mysql-test/suite/innodb/r/alter_copy_stats.result
Thirunarayanan Balathandayuthapani 5b6ad325d2 MDEV-38667 Assertion in diagnostics area on DDL stats timeout
Reason:
======
 During InnoDB DDL, statistics updation fails due to lock wait
timeout and calls push_warning_printf() to generate warnings
but then returns success, causing the SQL layer
to attempt calling set_ok_status() when the diagnostics area
is already set.

Solution:
=========
By temporarily setting abort_on_warning to false around operations
that prevents warning to error escalation and restore the original
setting after calling HA_EXTRA_END_ALTER_COPY for alter operation.
2026-01-27 13:51:32 +05:30

115 lines
4 KiB
Text

CREATE TABLE t1 (
c1 INT PRIMARY KEY,
c2 VARCHAR(50),
c3 VARCHAR(50),
c4 VARCHAR(50))ENGINE=InnoDB;
INSERT INTO t1 VALUES(1, 'AAA_2', 'AAA_3', 'AAA_4'),
(2, 'BBB_2', 'BBB_3', 'BBB_4'),
(3, 'CCC_2', 'CCC_3', 'CCC_4'),
(4, 'DDD_2', 'DDD_3', 'DDD_4'),
(5, 'EEE_2', 'EEE_3', 'EEE_4');
ALTER TABLE t1 CONVERT TO CHARACTER SET 'utf8mb4',ALGORITHM=COPY;
SELECT n_rows, database_name, lower(table_name)
FROM mysql.innodb_table_stats WHERE table_name IN ('t1');
n_rows database_name lower(table_name)
5 test t1
ALTER TABLE t1 ADD COLUMN c5 VARCHAR(15), ALGORITHM = COPY;
SELECT n_rows, database_name, lower(table_name)
FROM mysql.innodb_table_stats WHERE table_name IN ('t1');
n_rows database_name lower(table_name)
5 test t1
ALTER TABLE t1 DROP COLUMN c5, ALGORITHM = COPY;
SELECT n_rows, database_name, lower(table_name)
FROM mysql.innodb_table_stats WHERE table_name IN ('t1');
n_rows database_name lower(table_name)
5 test t1
ALTER TABLE t1 ADD COLUMN c5 VARCHAR(15), ALGORITHM = COPY;
SELECT n_rows, database_name, lower(table_name)
FROM mysql.innodb_table_stats WHERE table_name IN ('t1');
n_rows database_name lower(table_name)
5 test t1
ALTER TABLE t1 DROP COLUMN c5, ALGORITHM = COPY;
SELECT n_rows, database_name, lower(table_name)
FROM mysql.innodb_table_stats WHERE table_name IN ('t1');
n_rows database_name lower(table_name)
5 test t1
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY (c4), ALGORITHM=COPY;
SELECT n_rows, database_name, lower(table_name)
FROM mysql.innodb_table_stats WHERE table_name IN ('t1');
n_rows database_name lower(table_name)
5 test t1
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY (c1), ALGORITHM = COPY;
SELECT n_rows, database_name, lower(table_name)
FROM mysql.innodb_table_stats WHERE table_name IN ('t1');
n_rows database_name lower(table_name)
5 test t1
ALTER TABLE t1 ADD COLUMN c5 VARCHAR(15), ALGORITHM = INPLACE;
SELECT n_rows, database_name, lower(table_name)
FROM mysql.innodb_table_stats WHERE table_name IN ('t1');
n_rows database_name lower(table_name)
5 test t1
ALTER TABLE t1 DROP COLUMN c5, ALGORITHM = INPLACE;
SELECT n_rows, database_name, lower(table_name)
FROM mysql.innodb_table_stats WHERE table_name IN ('t1');
n_rows database_name lower(table_name)
5 test t1
CREATE TABLE t2 (
c1 INT PRIMARY KEY,
c2 VARCHAR(50),
c3 VARCHAR(50),
c4 VARCHAR(50)
) ENGINE=InnoDB PARTITION BY RANGE (c1) (
PARTITION p1 VALUES LESS THAN (6),
PARTITION p2 VALUES LESS THAN (11),
PARTITION p3 VALUES LESS THAN (16),
PARTITION p4 VALUES LESS THAN (21)
);
INSERT INTO t2 VALUES(1, 'AAA_2', 'AAA_3', 'AAA_4'),
(2, 'BBB_2', 'BBB_3', 'BBB_4'),
(3, 'CCC_2', 'CCC_3', 'CCC_4'),
(4, 'DDD_2', 'DDD_3', 'DDD_4'),
(5, 'EEE_2', 'EEE_3', 'EEE_4'),
(6, 'FFF_2', 'DDD_3', 'DDD_4'),
(7, 'GGG_2', 'DDD_3', 'DDD_4'),
(8, 'HHH_2', 'DDD_3', 'DDD_4'),
(9, 'III_2', 'DDD_3', 'DDD_4'),
(10, 'JJJ_2', 'DDD_3', 'DDD_4'),
(13, 'KKK_2', 'DDD_3', 'DDD_4'),
(20, 'LLL_2', 'DDD_3', 'DDD_4');
ALTER TABLE t2 CONVERT TO CHARACTER SET 'utf8mb4',ALGORITHM=COPY;
SELECT n_rows, database_name, lower(table_name)
FROM mysql.innodb_table_stats WHERE table_name LIKE '%t2%';
n_rows database_name lower(table_name)
5 test t2#p#p1
5 test t2#p#p2
1 test t2#p#p3
1 test t2#p#p4
ALTER TABLE t2 ADD COLUMN c5 VARCHAR(15), ALGORITHM = COPY;
SELECT n_rows, database_name, lower(table_name)
FROM mysql.innodb_table_stats WHERE table_name LIKE '%t2%';
n_rows database_name lower(table_name)
5 test t2#p#p1
5 test t2#p#p2
1 test t2#p#p3
1 test t2#p#p4
ALTER TABLE t2 DROP COLUMN c5, ALGORITHM = COPY;
SELECT n_rows, database_name, lower(table_name)
FROM mysql.innodb_table_stats WHERE table_name LIKE '%t2%';
n_rows database_name lower(table_name)
5 test t2#p#p1
5 test t2#p#p2
1 test t2#p#p3
1 test t2#p#p4
# Test Cleanup.
DROP TABLE t1;
DROP TABLE t2;
#
# MDEV-38667 Assertion in diagnostics area on DDL stats timeout
#
set @lock_wait_timeout= @@global.innodb_lock_wait_timeout;
SET innodb_lock_wait_timeout = 1;
CREATE TABLE t ENGINE=InnoDB AS SELECT * FROM mysql.innodb_table_stats;
Warnings:
Warning 1088 Error updating stats for table after table rebuild: Lock wait timeout
SET innodb_lock_wait_timeout = @lock_wait_timeout;
DROP TABLE t;