mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-30 18:36:12 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			142 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			142 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| --source include/long_test.inc
 | |
| --source include/have_debug.inc
 | |
| --source include/have_sequence.inc
 | |
| --source include/have_innodb.inc
 | |
| --source include/have_log_bin.inc
 | |
| --source include/not_valgrind.inc
 | |
| 
 | |
| #
 | |
| # Testing of atomic create table with crashes in a lot of different places
 | |
| #
 | |
| # We test both statement based logging and row logging as CREATE ... SELECT
 | |
| # works a bit differently depending on the logging format
 | |
| # First engine will use row logging and second engine will use statement
 | |
| # based logging
 | |
| #
 | |
| 
 | |
| --disable_query_log
 | |
| call mtr.add_suppression("InnoDB: .* does not exist in the InnoDB internal");
 | |
| # Speed up wait_until_connected_again.inc
 | |
| let NO_WSREP=1;
 | |
| RESET MASTER;
 | |
| --enable_query_log
 | |
| let $MYSQLD_DATADIR= `SELECT @@datadir`;
 | |
| 
 | |
| if ($engine_count == "")
 | |
| {
 | |
|   let $engine_count=2;
 | |
|   let $engines='myisam','innodb';
 | |
| }
 | |
| 
 | |
| let $crash_count=9;
 | |
| let $crash_points='ddl_log_create_before_create_frm', 'storage_engine_middle_of_create', 'ddl_log_create_before_create_table', 'ddl_log_create_after_create_table', 'ddl_log_create_after_drop', 'ddl_log_create_before_binlog', 'ddl_log_create_after_prepare_eof', 'ddl_log_create_after_binlog', 'ddl_log_create_log_complete';
 | |
| 
 | |
| let $statement_count=7;
 | |
| let $statements='CREATE TABLE t1 (a int)',
 | |
|                 'CREATE TABLE t1 (a vector(5) not null, VECTOR INDEX(a))',
 | |
|                 'CREATE OR REPLACE TABLE t2 (a int)',
 | |
|                 'CREATE TABLE t1 LIKE const_table',
 | |
|                 'CREATE OR REPLACE TABLE t2 LIKE const_table',
 | |
|                 'CREATE TABLE t1 SELECT * from t2',
 | |
|                 'CREATE OR REPLACE TABLE t2 SELECT * from const_table';
 | |
| 
 | |
| create table const_table (a int, b int) engine=myisam;
 | |
| insert into const_table values (1,1),(2,2);
 | |
| flush tables;
 | |
| 
 | |
| let $old_debug=`select @@debug_dbug`;
 | |
| 
 | |
| let $e=0;
 | |
| let $keep_include_silent=1;
 | |
| let $grep_script=CREATE|DROP;
 | |
| --disable_query_log
 | |
| 
 | |
| while ($e < $engine_count)
 | |
| {
 | |
|   inc $e;
 | |
|   let $engine=`select ELT($e, $engines)`;
 | |
|   let $default_engine=$engine;
 | |
|   let $extra_option=;
 | |
| 
 | |
|   if ($engine == "aria")
 | |
|   {
 | |
|     let $extra_option=transactional=1;
 | |
|   }
 | |
|   if ($engine == "aria_notrans")
 | |
|   {
 | |
|     let $default_engine="aria";
 | |
|     let $extra_option=transactional=0;
 | |
|   }
 | |
|   --echo engine: $engine
 | |
| 
 | |
|   let $r=0;
 | |
|   while ($r < $statement_count)
 | |
|   {
 | |
|     inc $r;
 | |
|     let $statement=`select ELT($r, $statements)`;
 | |
|     --echo query: $statement
 | |
| 
 | |
|     let $c=0;
 | |
|     while ($c < $crash_count)
 | |
|     {
 | |
|       inc $c;
 | |
|       let $crash=`select ELT($c, $crash_points)`;
 | |
| 
 | |
|       --eval set @@default_storage_engine=$default_engine
 | |
|       create or replace table t2 select * from seq_1_to_2;
 | |
|       flush tables;
 | |
| 
 | |
|       if ($e == 1)
 | |
|       {
 | |
|         --source include/set_binlog_format_row.sql
 | |
|       }
 | |
|       if ($e == 2)
 | |
|       {
 | |
|         --source include/set_binlog_format_statement.sql
 | |
|       }
 | |
|       FLUSH BINARY LOGS;
 | |
|       --let $start_binlog_file= query_get_value(SHOW MASTER STATUS, File, 1)
 | |
| 
 | |
|       --echo crash point: $crash
 | |
|       --exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
 | |
|       --disable_reconnect
 | |
|       --eval set @@debug_dbug="+d,$crash",@debug_crash_counter=1
 | |
|       let $errno=0;
 | |
|       --error 0,2013
 | |
|       --eval $statement;
 | |
|       let $error=$errno;
 | |
|       --enable_reconnect
 | |
|       --source include/wait_until_connected_again.inc
 | |
|       --disable_query_log
 | |
|       --eval set @@debug_dbug="$old_debug"
 | |
| 
 | |
|       if ($error == 0)
 | |
|       {
 | |
|         echo "No crash!";
 | |
|       }
 | |
|       # Check which tables still exists
 | |
|       --list_files $MYSQLD_DATADIR/test t*
 | |
|       --list_files $MYSQLD_DATADIR/test *sql*
 | |
| 
 | |
|       --let $binlog_file=$start_binlog_file
 | |
|       --let $binlog_output_name=master-bin.000001
 | |
|       --source include/show_binlog_events.inc
 | |
|       if ($error)
 | |
|       {
 | |
|         --let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1)
 | |
|         --let $binlog_output_name=master-bin.000002
 | |
|         if ($binlog_file != $start_binlog_file)
 | |
|         {
 | |
|           --source include/show_binlog_events.inc
 | |
|         }
 | |
|       }
 | |
|       # Drop the tables. The warnings will show what was dropped
 | |
|       --disable_warnings
 | |
|       drop table if exists t1,t2;
 | |
|       --enable_warnings
 | |
|     }
 | |
|   }
 | |
| }
 | |
| drop table if exists t1,t2,const_table;
 | |
| 
 | |
| --enable_query_log
 | 
