mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 15:50:51 +03:00 
			
		
		
		
	PageConverter::adjust_cluster_record(): Instead of writing
the invalid value DB_ROLL_PTR=0, write a value that indicates
a fresh insert, that is, prevents the DB_ROLL_PTR from being
dereferenced in any circumstances.
It can be argued that IMPORT TABLESPACE should actually
update the dict_index_t::trx_id to prevent older transactions
from accessing the table, similar to what I did on table
rebuild in MySQL 5.6.6 in
03f81a55f2
		
	
		
			
				
	
	
		
			53 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| --source include/have_innodb.inc
 | |
| 
 | |
| SET @save_per_table= @@GLOBAL.innodb_file_per_table;
 | |
| SET GLOBAL innodb_file_per_table= 1;
 | |
| 
 | |
| let MYSQLD_DATADIR =`SELECT @@datadir`;
 | |
| 
 | |
| --echo #
 | |
| --echo # MDEV-15249 Crash in MVCC read after IMPORT TABLESPACE
 | |
| --echo #
 | |
| 
 | |
| CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB;
 | |
| INSERT INTO t1 VALUES(0);
 | |
| FLUSH TABLES t1 WITH READ LOCK;
 | |
| perl;
 | |
| do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl";
 | |
| ib_backup_tablespace("test", "t1");
 | |
| EOF
 | |
| UNLOCK TABLES;
 | |
| 
 | |
| START TRANSACTION WITH CONSISTENT SNAPSHOT;
 | |
| 
 | |
| connect (con1,localhost,root,,);
 | |
| ALTER TABLE t1 FORCE, ALGORITHM=COPY;
 | |
| 
 | |
| connection default;
 | |
| --error ER_TABLE_DEF_CHANGED
 | |
| SELECT * FROM t1;
 | |
| COMMIT;
 | |
| START TRANSACTION WITH CONSISTENT SNAPSHOT;
 | |
| 
 | |
| connection con1;
 | |
| 
 | |
| ALTER TABLE t1 DISCARD TABLESPACE;
 | |
| 
 | |
| perl;
 | |
| do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl";
 | |
| ib_restore_tablespace("test", "t1");
 | |
| EOF
 | |
| 
 | |
| ALTER TABLE t1 IMPORT TABLESPACE;
 | |
| disconnect con1;
 | |
| 
 | |
| connection default;
 | |
| --echo # FIXME: Block this with ER_TABLE_DEF_CHANGED
 | |
| SELECT * FROM t1;
 | |
| COMMIT;
 | |
| SELECT * FROM t1;
 | |
| 
 | |
| DROP TABLE t1;
 | |
| 
 | |
| SET GLOBAL innodb_file_per_table= @save_per_table;
 |