mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 10:56:12 +01:00 
			
		
		
		
	 51abae5e46
			
		
	
	
	51abae5e46
	
	
	
		
			
			maria_repair_parallel() clears the MY_THREAD_SPECIFIC flag for allocations since it uses different threads. But it still did one _ma_alloc_buffer() call as thread-specific which would later assert if another thread needed to extend the buffer with realloc. This patch, due to Monty, removes the MY_THREAD_SPECIFIC flag for allocations that need to realloc in different threads, and preserves it for those that are allocated/freed in the user's thread. Also fixes MDEV-33562. Reviewed-by: Monty <monty@mariadb.org> Signed-off-by: Kristian Nielsen <knielsen@knielsen-hq.org>
		
			
				
	
	
		
			233 lines
		
	
	
	
		
			6.7 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			233 lines
		
	
	
	
		
			6.7 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| # Testing of potential problems in Aria and alter table
 | |
| 
 | |
| -- source include/have_maria.inc
 | |
| -- source include/have_innodb.inc
 | |
| -- source include/have_sequence.inc
 | |
| 
 | |
| drop table if exists t1;
 | |
| 
 | |
| #
 | |
| # MDEV-4970 Wrong result with Aria table populated with disabled keys
 | |
| #
 | |
| 
 | |
| CREATE TABLE t1 (pk INT, d DATETIME, PRIMARY KEY(pk), KEY(d)) ENGINE=Aria;
 | |
| ALTER TABLE t1 DISABLE KEYS;
 | |
| INSERT INTO t1 VALUES (1,'2000-01-01 22:22:22'),(2,'2012-12-21 12:12:12');
 | |
| INSERT INTO t1 VALUES (3, '2008-07-24');
 | |
| ALTER TABLE t1 ENABLE KEYS;
 | |
| 
 | |
| SELECT t1a.pk FROM t1 AS t1a LEFT JOIN t1 AS t1b ON t1a.pk = t1b.pk;
 | |
| SELECT * FROM t1 AS t1a LEFT JOIN t1 AS t1b ON t1a.pk = t1b.pk;
 | |
| DROP TABLE t1;
 | |
| 
 | |
| CREATE TABLE t1 (pk INT PRIMARY KEY, i INT, KEY(i)) ENGINE=Aria;
 | |
| ALTER TABLE t1 DISABLE KEYS;
 | |
| INSERT INTO t1 VALUES (1,11);
 | |
| INSERT INTO t1 VALUES (2,0),(3,33),(4,0),(5,55),(6,66),(7,0),(8,88),(9,99);
 | |
| ALTER TABLE t1 ENABLE KEYS;
 | |
| SELECT * FROM t1 WHERE i = 0 OR pk BETWEEN 6 AND 10;
 | |
| DROP TABLE t1;
 | |
| 
 | |
| #
 | |
| # MDEV-14943
 | |
| # Assertion `block->type == PAGECACHE_EMPTY_PAGE || block->type == type ||
 | |
| # type == PAGECACHE_LSN_PAGE || type == PAGECACHE_READ_UNKNOWN_PAGE ||
 | |
| # block->type == PAGECACHE_READ_UNKNOWN_PAGE' failed in pagecache_read upon
 | |
| # CREATE ... SELECT from Aria table
 | |
| #
 | |
| 
 | |
| CREATE TABLE t1 (f INT) ENGINE=Aria transactional=1;
 | |
| SHOW CREATE TABLE t1;
 | |
| INSERT INTO t1 VALUES (1),(2);
 | |
| --error ER_BAD_FIELD_ERROR
 | |
| ALTER TABLE t1 ORDER BY unknown_column;
 | |
| SHOW CREATE TABLE t1;
 | |
| CREATE TABLE t2 SELECT * FROM t1;
 | |
| DROP TABLE t1, t2;
 | |
| 
 | |
| --echo #
 | |
| --echo # MDEV-19055 Assertion `(_my_thread_var())->thr_errno != 0' failed in pagecache_read
 | |
| --echo #
 | |
| 
 | |
| --disable_warnings
 | |
| CREATE OR REPLACE TABLE t1 (x INT) ENGINE=Aria;
 | |
| CREATE TEMPORARY TABLE t2 (a TIME) ENGINE=Aria;
 | |
| ALTER TABLE t2 ADD b DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;
 | |
| ALTER TABLE t2 ADD CHECK (b = 4);
 | |
| INSERT IGNORE INTO t2 () VALUES (),(),(),();
 | |
| ALTER IGNORE TABLE t2 ADD c INT;
 | |
| SELECT count(a),sum(a) FROM t2;
 | |
| DELETE FROM t2 ORDER BY c LIMIT 1;
 | |
| INSERT IGNORE INTO t2 SELECT * FROM t2;
 | |
| OPTIMIZE TABLE t2;
 | |
| SELECT count(a),sum(a) FROM t2;
 | |
| INSERT IGNORE INTO t2 SELECT * FROM t2;
 | |
| SET SQL_MODE= 'STRICT_ALL_TABLES';
 | |
| SELECT count(a),sum(a) FROM t2;
 | |
| --error ER_TRUNCATED_WRONG_VALUE
 | |
| ALTER TABLE t2 CHANGE IF EXISTS d c INT;
 | |
| SELECT count(a),sum(a) FROM t2;
 | |
| ALTER IGNORE TABLE t2 ADD IF NOT EXISTS e BIT;
 | |
| ALTER TABLE t1 MODIFY IF EXISTS xx INT;
 | |
| INSERT IGNORE INTO t2 () VALUES (),(),(),();
 | |
| SELECT count(a),sum(a) FROM t2;
 | |
| --enable_warnings
 | |
| check table t1;
 | |
| check table t2;
 | |
| DROP TABLE t1,t2;
 | |
| 
 | |
| --echo #
 | |
| --echo # MDEV-17576
 | |
| --echo # Assertion `share->reopen == 1' failed in maria_extra upon ALTER on
 | |
| --echo # Aria table with triggers and locks
 | |
| --echo #
 | |
| 
 | |
| CREATE TABLE t1 (a INT) ENGINE=Aria;
 | |
| CREATE TRIGGER tr BEFORE INSERT ON t1 FOR EACH ROW INSERT INTO t1 SELECT * FROM t1;
 | |
| LOCK TABLE t1 WRITE;
 | |
| ALTER TABLE t1 FORCE, LOCK=EXCLUSIVE;
 | |
| DROP TRIGGER tr;
 | |
| DROP TABLE t1;
 | |
| 
 | |
| --echo #
 | |
| --echo # End of 10.2 test
 | |
| --echo #
 | |
| 
 | |
| --echo #
 | |
| --echo # MDEV-17665 Assertion `!share || share->page_type == PAGECACHE_LSN_PAGE',
 | |
| --echo # `type != PAGECACHE_READ_UNKNOWN_PAGE' and similar ones upon concurrent
 | |
| --echo # Aria operations
 | |
| --echo #
 | |
| 
 | |
| CREATE TABLE t1 (pk INT PRIMARY KEY, a INT, KEY(a)) ENGINE=Aria;
 | |
| ALTER TABLE t1 DISABLE KEYS;
 | |
| INSERT INTO t1 SELECT seq, seq FROM seq_1_to_100;
 | |
| 
 | |
| --connect (con1,localhost,root,,test)
 | |
| --connect (con2,localhost,root,,test)
 | |
| --send
 | |
|   INSERT INTO t1 SELECT seq, seq FROM seq_1_to_100;
 | |
| 
 | |
| --connection con1
 | |
| --send
 | |
|   FLUSH TABLES;
 | |
| 
 | |
| --connection default
 | |
| --error ER_WRONG_VALUE_COUNT_ON_ROW
 | |
| INSERT INTO t1 SELECT 1;
 | |
| 
 | |
| # Cleanup
 | |
| --connection con2
 | |
| --error ER_DUP_ENTRY
 | |
| --reap
 | |
| --disconnect con2
 | |
| --connection con1
 | |
| --reap
 | |
| --disconnect con1
 | |
| --connection default
 | |
| DROP TABLE t1;
 | |
| 
 | |
| --echo #
 | |
| --echo # MDEV-22674 Server crash in compare_bin, ASAN heap-buffer-overflow in
 | |
| --echo # _ma_dpointer, Assertion `!info->s->have_versioning ||
 | |
| --echo # info->s->lock_key_trees' failed in restore_table_state_after_repair
 | |
| --echo #
 | |
| 
 | |
| CREATE TABLE t1 (id INT, d DATETIME, PRIMARY KEY(d,id),INDEX(d)) ENGINE=Aria;
 | |
| INSERT INTO t1 SELECT seq, NOW() FROM seq_1_to_500;
 | |
| 
 | |
| CREATE TABLE t2 (a INT) ENGINE=InnoDB;
 | |
| INSERT INTO t2 VALUES (1);
 | |
| 
 | |
| --connect (con1,localhost,root,,test)
 | |
| ALTER TABLE t1 DISABLE KEYS;
 | |
| --send
 | |
|   INSERT INTO t1 (id) SELECT b FROM t2;
 | |
| 
 | |
| --connection default
 | |
| --error ER_WRONG_VALUE_COUNT_ON_ROW
 | |
| INSERT INTO t1 SELECT a FROM t2;
 | |
| 
 | |
| # Cleanup
 | |
| --connection con1
 | |
| --error ER_BAD_FIELD_ERROR
 | |
| --reap
 | |
| --disconnect con1
 | |
| 
 | |
| --connection default
 | |
| drop table t1, t2;
 | |
| 
 | |
| --echo # This is also in MDEV-22674
 | |
| 
 | |
| CREATE TABLE t1 (id INT, d DATETIME, PRIMARY KEY(d,id),INDEX(d)) ENGINE=Aria;
 | |
| INSERT INTO t1 SELECT seq, NOW() FROM seq_1_to_500;
 | |
| CREATE TABLE t2 (a INT) ENGINE=InnoDB;
 | |
| INSERT INTO t2 VALUES (1);
 | |
| ALTER TABLE t1 DISABLE KEYS;
 | |
| --error ER_BAD_FIELD_ERROR
 | |
| INSERT INTO t1 (id) SELECT b FROM t2;
 | |
| --error ER_WRONG_VALUE_COUNT_ON_ROW
 | |
| INSERT INTO t1 SELECT a FROM t2;
 | |
| SELECT COUNT(*) FROM t1;
 | |
| DROP TABLE t1,t2;
 | |
| 
 | |
| --echo #
 | |
| --echo # MDEV-23296 Assertion `block->type == PAGECACHE_EMPTY_PAGE ||
 | |
| --echo # block->type == PAGECACHE_READ_UNKNOWN_PAGE || block->type == type ||
 | |
| --echo # (block->type == PAGECACHE_PLAIN_PAGE && type == PAGECACHE_LSN_PAGE)'
 | |
| --echo # with aria_max_sort_file_size
 | |
| --echo #
 | |
| 
 | |
| SET @max_size.save= @@aria_max_sort_file_size;
 | |
| SET GLOBAL aria_max_sort_file_size= 0;
 | |
| CREATE TABLE t1 (pk INT PRIMARY KEY, a CHAR(255), KEY(a)) ENGINE=Aria;
 | |
| ALTER TABLE t1 DISABLE KEYS;
 | |
| INSERT INTO t1 VALUES (1,'foo'),(2,'bar');
 | |
| ALTER TABLE t1 ENABLE KEYS;
 | |
| INSERT INTO t1 VALUES (3,'nice try');
 | |
| SELECT * FROM t1;
 | |
| DROP TABLE t1;
 | |
| SET GLOBAL aria_max_sort_file_size= @max_size.save;
 | |
| 
 | |
| --echo #
 | |
| --echo # End of 10.4 test
 | |
| --echo #
 | |
| 
 | |
| --echo #
 | |
| --echo # MDEV-25505 Assertion `old_flags == ((my_flags & 0x10000U) ? 1 : 0)'
 | |
| --echo # failed in my_realloc
 | |
| --echo #
 | |
| 
 | |
| CREATE TABLE t1 (pk int, c text, primary key (pk), key(c(32))) ENGINE=Aria ROW_FORMAT=DYNAMIC;
 | |
| ALTER TABLE t1 DISABLE KEYS;
 | |
| INSERT INTO t1 VALUES (1, 'Nine chars or more');
 | |
| ALTER TABLE t1 ENABLE KEYS;
 | |
| DROP TABLE t1;
 | |
| 
 | |
| --echo #
 | |
| --echo # MDEV-25923 Memory not freed or Assertion `old_flags == ((my_flags &
 | |
| --echo # 0x10000U) ? 1 : 0)' failed in my_realloc upon ALTER on Aria table
 | |
| --echo # with GIS column
 | |
| --echo #
 | |
| 
 | |
| CREATE TABLE t1 (pk INT PRIMARY KEY, a POINT DEFAULT ST_GEOMFROMTEXT('Point(1 1)')) ENGINE=Aria;
 | |
| INSERT INTO t1 (pk) SELECT seq FROM seq_1_to_100;
 | |
| SET @old_threads= @@SESSION.aria_repair_threads;
 | |
| SET SESSION aria_repair_threads= 2;
 | |
| ALTER TABLE t1 ROW_FORMAT=DYNAMIC;
 | |
| DROP TABLE t1;
 | |
| 
 | |
| --echo #
 | |
| --echo # MDEV-33562: Assertion `(old_flags & 1) == ((my_flags & 0x10000U) ?
 | |
| --echo # 1 : 0)' failed in my_realloc from sort_get_next_record on INSERT
 | |
| --echo #
 | |
| 
 | |
| SET @old_mode= @@SESSION.sql_mode;
 | |
| SET sql_mode='';
 | |
| CREATE TEMPORARY TABLE t (b TEXT, INDEX s(b(300))) ROW_FORMAT=DYNAMIC ENGINE=Aria;
 | |
| INSERT INTO t VALUES (REPEAT ('a',10000000));
 | |
| CREATE TABLE ti LIKE t;
 | |
| INSERT INTO ti SELECT * FROM t;
 | |
| DROP TABLE t, ti;
 | |
| SET SESSION aria_repair_threads= @old_threads;
 | |
| SET SESSION sql_mode= @old_mode;
 |