summaryrefslogtreecommitdiff
path: root/mysql-test/suite/parts/inc
diff options
context:
space:
mode:
Diffstat (limited to 'mysql-test/suite/parts/inc')
-rw-r--r--mysql-test/suite/parts/inc/define_points_add.inc21
-rw-r--r--mysql-test/suite/parts/inc/define_points_change.inc33
-rw-r--r--mysql-test/suite/parts/inc/define_points_common.inc4
-rw-r--r--mysql-test/suite/parts/inc/define_points_convin.inc22
-rw-r--r--mysql-test/suite/parts/inc/define_points_convout.inc23
-rw-r--r--mysql-test/suite/parts/inc/define_points_drop.inc20
-rw-r--r--mysql-test/suite/parts/inc/iterate_points_crash.inc13
-rw-r--r--mysql-test/suite/parts/inc/iterate_points_fail.inc13
-rw-r--r--mysql-test/suite/parts/inc/partition_crash.inc79
-rw-r--r--mysql-test/suite/parts/inc/partition_crash_add.inc34
-rw-r--r--mysql-test/suite/parts/inc/partition_crash_change.inc41
-rw-r--r--mysql-test/suite/parts/inc/partition_crash_drop.inc31
-rw-r--r--mysql-test/suite/parts/inc/partition_crash_exchange.inc18
-rw-r--r--mysql-test/suite/parts/inc/partition_crash_t2.inc12
-rw-r--r--mysql-test/suite/parts/inc/partition_fail.inc94
-rw-r--r--mysql-test/suite/parts/inc/partition_fail_add.inc34
-rw-r--r--mysql-test/suite/parts/inc/partition_fail_change.inc41
-rw-r--r--mysql-test/suite/parts/inc/partition_fail_drop.inc31
-rw-r--r--mysql-test/suite/parts/inc/partition_fail_exchange.inc18
-rw-r--r--mysql-test/suite/parts/inc/partition_fail_t2.inc41
-rw-r--r--mysql-test/suite/parts/inc/partition_mgm_crash.combinations2
-rw-r--r--mysql-test/suite/parts/inc/partition_mgm_crash.inc127
22 files changed, 448 insertions, 304 deletions
diff --git a/mysql-test/suite/parts/inc/define_points_add.inc b/mysql-test/suite/parts/inc/define_points_add.inc
new file mode 100644
index 00000000000..a3ff4b29e17
--- /dev/null
+++ b/mysql-test/suite/parts/inc/define_points_add.inc
@@ -0,0 +1,21 @@
+# To be used with partition mgm commands like
+# ALTER TABLE t1 ADD PARTITION (LIST/RANGE PARTITIONING).
+
+--source suite/parts/inc/define_points_common.inc
+
+let $points= 'add_partition_1',
+ 'add_partition_2',
+ 'add_partition_3',
+ 'alter_partition_alloc_parts',
+ 'alter_partition_add',
+ 'add_partition_4',
+ 'add_partition_5',
+ 'add_partition_6',
+ 'add_partition_7',
+ 'add_partition_8';
+
+let $fail_points= $points, $fail_points, 'EOF';
+let $crash_points= $points, $crash_points,
+ 'fail_partition_1,fail_add_partition_5,',
+ 'fail_partition_2,fail_add_partition_5,',
+ 'EOF';
diff --git a/mysql-test/suite/parts/inc/define_points_change.inc b/mysql-test/suite/parts/inc/define_points_change.inc
new file mode 100644
index 00000000000..f4de36e63bf
--- /dev/null
+++ b/mysql-test/suite/parts/inc/define_points_change.inc
@@ -0,0 +1,33 @@
+# To be used with partition mgm commands like
+# ALTER TABLE t1 COALESCE/REBUILD/REORGANIZE PARTITION.
+
+--source suite/parts/inc/define_points_common.inc
+
+let $points= 'change_partition_1',
+ 'change_partition_2',
+ 'change_partition_3',
+ 'alter_partition_alloc_parts',
+ 'alter_partition_add',
+ 'change_partition_add_parts_1',
+ 'change_partition_add_parts_2',
+ 'change_partition_add_parts_3',
+ 'change_partition_4',
+ 'change_partition_5',
+ 'alter_partition_rename_table',
+ 'alter_partition_rename_to_backup',
+ 'change_partition_rename_parts_1',
+ 'alter_partition_rename_added_part',
+ 'change_partition_rename_parts_2',
+ 'alter_partition_rename_drop_backup',
+ 'change_partition_6',
+ 'change_partition_7',
+ 'change_partition_8',
+ 'change_partition_9';
+
+let $fail_points= $points, $fail_points, 'EOF';
+let $crash_points= $points, $crash_points,
+ 'fail_partition_1,fail_change_partition_5,',
+ 'fail_partition_2,fail_change_partition_5,',
+ 'fail_partition_1,fail_change_partition_6,',
+ 'fail_partition_2,fail_change_partition_6,',
+ 'EOF';
diff --git a/mysql-test/suite/parts/inc/define_points_common.inc b/mysql-test/suite/parts/inc/define_points_common.inc
new file mode 100644
index 00000000000..1e7e1f885bf
--- /dev/null
+++ b/mysql-test/suite/parts/inc/define_points_common.inc
@@ -0,0 +1,4 @@
+let $fail_points= 'alter_partition_binlog_1', 'alter_partition_binlog_2';
+let $crash_points= $fail_points,
+ 'done_partition_1',
+ 'done_partition_2';
diff --git a/mysql-test/suite/parts/inc/define_points_convin.inc b/mysql-test/suite/parts/inc/define_points_convin.inc
new file mode 100644
index 00000000000..37de20eadcb
--- /dev/null
+++ b/mysql-test/suite/parts/inc/define_points_convin.inc
@@ -0,0 +1,22 @@
+# To be used with partition mgm commands like
+# ALTER TABLE t1 CONVERT TABLE .. TO PARTITION ..
+
+--source suite/parts/inc/define_points_common.inc
+
+let $points= 'convert_partition_1',
+ 'convert_partition_2',
+ 'convert_partition_3',
+ 'convert_partition_4',
+ 'convert_partition_5',
+ 'alter_partition_alloc_parts',
+ 'alter_partition_rename_table',
+ 'convert_partition_6',
+ 'convert_partition_7',
+ 'convert_partition_8',
+ 'convert_partition_9';
+
+let $fail_points= $points, $fail_points, 'EOF';
+let $crash_points= $points, $crash_points,
+ 'fail_partition_1,fail_convert_partition_6,',
+ 'fail_partition_2,fail_convert_partition_6,',
+ 'EOF';
diff --git a/mysql-test/suite/parts/inc/define_points_convout.inc b/mysql-test/suite/parts/inc/define_points_convout.inc
new file mode 100644
index 00000000000..fdda1406715
--- /dev/null
+++ b/mysql-test/suite/parts/inc/define_points_convout.inc
@@ -0,0 +1,23 @@
+# To be used with partition mgm commands like
+# ALTER TABLE t1 CONVERT PARTITION .. TO TABLE ..
+
+--source suite/parts/inc/define_points_common.inc
+
+let $points= 'create_before_create_frm',
+ 'alter_partition_after_write_frm',
+ 'convert_partition_1',
+ 'convert_partition_2',
+ 'convert_partition_3',
+ 'convert_partition_4',
+ 'convert_partition_5',
+ 'alter_partition_rename_table',
+ 'convert_partition_6',
+ 'convert_partition_7',
+ 'convert_partition_8',
+ 'convert_partition_9';
+
+let $fail_points= $points, $fail_points, 'EOF';
+let $crash_points= $points, $crash_points,
+ 'fail_partition_1,fail_convert_partition_6,',
+ 'fail_partition_2,fail_convert_partition_6,',
+ 'EOF';
diff --git a/mysql-test/suite/parts/inc/define_points_drop.inc b/mysql-test/suite/parts/inc/define_points_drop.inc
new file mode 100644
index 00000000000..fb021b6b492
--- /dev/null
+++ b/mysql-test/suite/parts/inc/define_points_drop.inc
@@ -0,0 +1,20 @@
+# To be used with partition mgm commands like
+# ALTER TABLE t1 DROP PARTITION
+
+--source suite/parts/inc/define_points_common.inc
+
+let $points= 'drop_partition_1',
+ 'drop_partition_2',
+ 'drop_partition_3',
+ 'drop_partition_4',
+ 'drop_partition_5',
+ 'alter_partition_rename_table',
+ 'drop_partition_6',
+ 'drop_partition_7',
+ 'drop_partition_8';
+
+let $fail_points= $points, $fail_points, 'EOF';
+let $crash_points= $points, $crash_points,
+ 'fail_partition_1,fail_drop_partition_5,',
+ 'fail_partition_2,fail_drop_partition_5,',
+ 'EOF';
diff --git a/mysql-test/suite/parts/inc/iterate_points_crash.inc b/mysql-test/suite/parts/inc/iterate_points_crash.inc
new file mode 100644
index 00000000000..7495fb19b25
--- /dev/null
+++ b/mysql-test/suite/parts/inc/iterate_points_crash.inc
@@ -0,0 +1,13 @@
+let $point_count=`select field('EOF', $crash_points)`;
+let $p= 1;
+--echo # Iterating $point_count crash-points
+set @save_dbug= @@debug_dbug;
+while ($p < $point_count)
+{
+ let $point= `select concat('crash_', elt($p, $crash_points))`;
+ --echo # Crash-point $p: $point
+ eval set @@debug_dbug= "+d,$point";
+ --source suite/parts/inc/partition_crash.inc
+ set @@debug_dbug= @save_dbug;
+ inc $p;
+}
diff --git a/mysql-test/suite/parts/inc/iterate_points_fail.inc b/mysql-test/suite/parts/inc/iterate_points_fail.inc
new file mode 100644
index 00000000000..51e8d430313
--- /dev/null
+++ b/mysql-test/suite/parts/inc/iterate_points_fail.inc
@@ -0,0 +1,13 @@
+let $point_count=`select field('EOF', $fail_points)`;
+let $p= 1;
+--echo # Iterating $point_count fail-points
+set @save_dbug= @@debug_dbug;
+while ($p < $point_count)
+{
+ let $point= `select concat('fail_', elt($p, $fail_points))`;
+ --echo # Fail-point $p: $point
+ eval set @@debug_dbug= "+d,$point";
+ --source suite/parts/inc/partition_fail.inc
+ set @@debug_dbug= @save_dbug;
+ inc $p;
+}
diff --git a/mysql-test/suite/parts/inc/partition_crash.inc b/mysql-test/suite/parts/inc/partition_crash.inc
index c657ba880c9..0e5e7353812 100644
--- a/mysql-test/suite/parts/inc/partition_crash.inc
+++ b/mysql-test/suite/parts/inc/partition_crash.inc
@@ -1,8 +1,26 @@
# Include file to decrease test code duplication
+let $log_bin= `select @@global.log_bin`;
+if ($log_bin)
+{
+ let $keep_include_silent= 1;
+ let $grep_script= ALTER;
+ let $binlog_file=master-bin.000001;
+ RESET MASTER;
+}
+
+if ($create_statement2)
+{
+ --eval $create_statement2
+}
+if ($insert_statement2)
+{
+ --eval $insert_statement2
+}
--eval $create_statement
--eval $insert_statement
---echo # State before crash
+--let $dbug_flag= `select @@session.debug_dbug`
+--echo # $dbug_flag: BEFORE crash
--list_files_write_file $DATADIR.files.txt $DATADIR/test
--replace_result #p# #P# #sp# #SP#
@@ -11,12 +29,33 @@
SHOW CREATE TABLE t1;
--sorted_result
SELECT * FROM t1;
+if ($show_statement)
+{
+ --error 0,ER_NO_SUCH_TABLE
+ --eval $show_statement
+}
+if ($select_statement)
+{
+ --sorted_result
+ --error 0,ER_NO_SUCH_TABLE
+ --eval $select_statement
+}
+
+--disable_query_log
+connect (con_backup,localhost,root,,);
+BACKUP STAGE START;
+connection default;
+--enable_query_log
+
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
--disable_reconnect
+let $errno= 0;
# CR_SERVER_LOST
---error 2013
+--error 0, 2013
--eval $crash_statement
---echo # State after crash (before recovery)
+let $error= $errno;
+
+--echo # $dbug_flag: AFTER crash
--list_files_write_file $DATADIR.files.txt $DATADIR/test
--replace_result #p# #P# #sp# #SP# #tmp# #TMP#
--replace_regex /sql-exchange.*\./sql-exchange./ /sql-shadow-[0-9a-f]*-/sql-shadow-/
@@ -25,7 +64,8 @@ SELECT * FROM t1;
--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
--enable_reconnect
--source include/wait_until_connected_again.inc
---echo # State after crash recovery
+
+--echo # $dbug_flag: AFTER recovery
--list_files_write_file $DATADIR.files.txt $DATADIR/test
--replace_result #p# #P# #sp# #SP#
--cat_file $DATADIR.files.txt
@@ -33,4 +73,35 @@ SELECT * FROM t1;
SHOW CREATE TABLE t1;
--sorted_result
SELECT * FROM t1;
+if ($show_statement)
+{
+ --error 0,ER_NO_SUCH_TABLE
+ --eval $show_statement
+}
+if ($select_statement)
+{
+ --sorted_result
+ --error 0,ER_NO_SUCH_TABLE
+ --eval $select_statement
+}
+
+--source include/print_ddl_log.inc
+--disable_query_log
+if ($error == 0)
+{
+ --connection con_backup
+ backup stage end;
+ --connection default
+}
+--disconnect con_backup
+--enable_query_log
+
+if ($log_bin)
+{
+ --source include/show_binlog_events.inc
+}
DROP TABLE t1;
+if ($drop_statement)
+{
+ --eval $drop_statement
+}
diff --git a/mysql-test/suite/parts/inc/partition_crash_add.inc b/mysql-test/suite/parts/inc/partition_crash_add.inc
deleted file mode 100644
index 43b0c5c88bd..00000000000
--- a/mysql-test/suite/parts/inc/partition_crash_add.inc
+++ /dev/null
@@ -1,34 +0,0 @@
-# To be used with partition mgm commands like
-# ALTER TABLE t1 ADD PARTITION (LIST/RANGE PARTITIONING).
---echo # Crash testing ADD PARTITION
-SET @save_dbug=@@debug_dbug;
-SET SESSION debug_dbug="+d,crash_add_partition_1";
---source suite/parts/inc/partition_crash.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,crash_add_partition_2";
---source suite/parts/inc/partition_crash.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,crash_add_partition_3";
---source suite/parts/inc/partition_crash.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,crash_add_partition_4";
---source suite/parts/inc/partition_crash.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,crash_add_partition_5";
---source suite/parts/inc/partition_crash.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,crash_add_partition_6";
---source suite/parts/inc/partition_crash.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,crash_add_partition_7";
---source suite/parts/inc/partition_crash.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,crash_add_partition_8";
---source suite/parts/inc/partition_crash.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,crash_add_partition_9";
---source suite/parts/inc/partition_crash.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,crash_add_partition_10";
---source suite/parts/inc/partition_crash.inc
-SET SESSION debug_dbug=@save_dbug;
diff --git a/mysql-test/suite/parts/inc/partition_crash_change.inc b/mysql-test/suite/parts/inc/partition_crash_change.inc
deleted file mode 100644
index 501bc78a22d..00000000000
--- a/mysql-test/suite/parts/inc/partition_crash_change.inc
+++ /dev/null
@@ -1,41 +0,0 @@
-# To be used with partition mgm commands like
-# ALTER TABLE t1 COALESCE/REBUILD/REORGANIZE PARTITION.
---echo # Test change partition (REORGANIZE/REBUILD/COALESCE
---echo # or ADD HASH PARTITION).
-SET @save_dbug=@@debug_dbug;
-SET SESSION debug_dbug="+d,crash_change_partition_1";
---source suite/parts/inc/partition_crash.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,crash_change_partition_2";
---source suite/parts/inc/partition_crash.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,crash_change_partition_3";
---source suite/parts/inc/partition_crash.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,crash_change_partition_4";
---source suite/parts/inc/partition_crash.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,crash_change_partition_5";
---source suite/parts/inc/partition_crash.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,crash_change_partition_6";
---source suite/parts/inc/partition_crash.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,crash_change_partition_7";
---source suite/parts/inc/partition_crash.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,crash_change_partition_8";
---source suite/parts/inc/partition_crash.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,crash_change_partition_9";
---source suite/parts/inc/partition_crash.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,crash_change_partition_10";
---source suite/parts/inc/partition_crash.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,crash_change_partition_11";
---source suite/parts/inc/partition_crash.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,crash_change_partition_12";
---source suite/parts/inc/partition_crash.inc
-SET SESSION debug_dbug=@save_dbug;
diff --git a/mysql-test/suite/parts/inc/partition_crash_drop.inc b/mysql-test/suite/parts/inc/partition_crash_drop.inc
deleted file mode 100644
index 80730bb9008..00000000000
--- a/mysql-test/suite/parts/inc/partition_crash_drop.inc
+++ /dev/null
@@ -1,31 +0,0 @@
-# To be used with partition mgm commands like
-# ALTER TABLE t1 DROP PARTITION.
---echo # Test DROP PARTITION
-SET @save_dbug=@@debug_dbug;
-SET SESSION debug_dbug="+d,crash_drop_partition_1";
---source suite/parts/inc/partition_crash.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,crash_drop_partition_2";
---source suite/parts/inc/partition_crash.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,crash_drop_partition_3";
---source suite/parts/inc/partition_crash.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,crash_drop_partition_4";
---source suite/parts/inc/partition_crash.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,crash_drop_partition_5";
---source suite/parts/inc/partition_crash.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,crash_drop_partition_6";
---source suite/parts/inc/partition_crash.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,crash_drop_partition_7";
---source suite/parts/inc/partition_crash.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,crash_drop_partition_8";
---source suite/parts/inc/partition_crash.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,crash_drop_partition_9";
---source suite/parts/inc/partition_crash.inc
-SET SESSION debug_dbug=@save_dbug;
diff --git a/mysql-test/suite/parts/inc/partition_crash_exchange.inc b/mysql-test/suite/parts/inc/partition_crash_exchange.inc
index 32b888707eb..1878d6dd85b 100644
--- a/mysql-test/suite/parts/inc/partition_crash_exchange.inc
+++ b/mysql-test/suite/parts/inc/partition_crash_exchange.inc
@@ -1,30 +1,30 @@
# To be used with WL#4445: EXCHANGE PARTITION WITH TABLE.
SET @save_dbug=@@debug_dbug;
SET SESSION debug_dbug="+d,exchange_partition_abort_1";
---source suite/parts/inc/partition_crash_t2.inc
+--source suite/parts/inc/partition_crash.inc
SET SESSION debug_dbug=@save_dbug;
SET SESSION debug_dbug="+d,exchange_partition_abort_2";
---source suite/parts/inc/partition_crash_t2.inc
+--source suite/parts/inc/partition_crash.inc
SET SESSION debug_dbug=@save_dbug;
SET SESSION debug_dbug="+d,exchange_partition_abort_3";
---source suite/parts/inc/partition_crash_t2.inc
+--source suite/parts/inc/partition_crash.inc
SET SESSION debug_dbug=@save_dbug;
SET SESSION debug_dbug="+d,exchange_partition_abort_4";
---source suite/parts/inc/partition_crash_t2.inc
+--source suite/parts/inc/partition_crash.inc
SET SESSION debug_dbug=@save_dbug;
SET SESSION debug_dbug="+d,exchange_partition_abort_5";
---source suite/parts/inc/partition_crash_t2.inc
+--source suite/parts/inc/partition_crash.inc
SET SESSION debug_dbug=@save_dbug;
SET SESSION debug_dbug="+d,exchange_partition_abort_6";
---source suite/parts/inc/partition_crash_t2.inc
+--source suite/parts/inc/partition_crash.inc
SET SESSION debug_dbug=@save_dbug;
SET SESSION debug_dbug="+d,exchange_partition_abort_7";
---source suite/parts/inc/partition_crash_t2.inc
+--source suite/parts/inc/partition_crash.inc
SET SESSION debug_dbug=@save_dbug;
SET SESSION debug_dbug="+d,exchange_partition_abort_8";
---source suite/parts/inc/partition_crash_t2.inc
+--source suite/parts/inc/partition_crash.inc
SET SESSION debug_dbug=@save_dbug;
SET SESSION debug_dbug="+d,exchange_partition_abort_9";
---source suite/parts/inc/partition_crash_t2.inc
+--source suite/parts/inc/partition_crash.inc
SET SESSION debug_dbug=@save_dbug;
diff --git a/mysql-test/suite/parts/inc/partition_crash_t2.inc b/mysql-test/suite/parts/inc/partition_crash_t2.inc
deleted file mode 100644
index fd88cc60a8d..00000000000
--- a/mysql-test/suite/parts/inc/partition_crash_t2.inc
+++ /dev/null
@@ -1,12 +0,0 @@
-# Include file to extend partition_crash with a second table.
-# To be used with WL#4445: EXCHANGE PARTITION WITH TABLE.
---eval $create_statement2
---eval $insert_statement2
-SHOW CREATE TABLE t2;
---sorted_result
-SELECT * FROM t2;
---source suite/parts/inc/partition_crash.inc
-SHOW CREATE TABLE t2;
---sorted_result
-SELECT * FROM t2;
-DROP TABLE t2;
diff --git a/mysql-test/suite/parts/inc/partition_fail.inc b/mysql-test/suite/parts/inc/partition_fail.inc
index bbe5924e358..0c6a42a8292 100644
--- a/mysql-test/suite/parts/inc/partition_fail.inc
+++ b/mysql-test/suite/parts/inc/partition_fail.inc
@@ -1,5 +1,22 @@
# Include file to decrease test code duplication
+let $log_bin= `select @@global.log_bin`;
+if ($log_bin)
+{
+ RESET MASTER;
+ let $keep_include_silent= 1;
+ let $grep_script= ALTER;
+ let $binlog_file=master-bin.000001;
+}
+
+if ($create_statement2)
+{
+ --eval $create_statement2
+}
+if ($insert_statement2)
+{
+ --eval $insert_statement2
+}
--eval $create_statement
--eval $insert_statement
--let $dbug_flag= `select @@session.debug_dbug`
@@ -11,16 +28,64 @@ SHOW CREATE TABLE t1;
--sorted_result
SELECT * FROM t1;
--disable_abort_on_error
+
+--disable_query_log
+connect (con_backup,localhost,root,,);
+BACKUP STAGE START;
+connection default;
+--enable_query_log
+
--eval $fail_statement
--enable_abort_on_error
--echo # $dbug_flag: AFTER failure
+show warnings;
--replace_result #p# #P# #sp# #SP#
--list_files $DATADIR/test
SHOW CREATE TABLE t1;
--sorted_result
SELECT * FROM t1;
+if ($show_statement)
+{
+ --error 0,ER_NO_SUCH_TABLE
+ --eval $show_statement
+}
+if ($select_statement)
+{
+ --sorted_result
+ --error 0,ER_NO_SUCH_TABLE
+ --eval $select_statement
+}
+
+--source include/print_ddl_log.inc
+--disable_query_log
+--connection con_backup
+backup stage end;
+--connection default
+--disconnect con_backup
+--enable_query_log
+
+if ($log_bin)
+{
+ --source include/show_binlog_events.inc
+}
DROP TABLE t1;
+if ($drop_statement)
+{
+ --eval $drop_statement
+}
+if ($log_bin)
+{
+ RESET MASTER;
+}
+if ($create_statement2)
+{
+ --eval $create_statement2
+}
+if ($insert_statement2)
+{
+ --eval $insert_statement2
+}
--eval $create_statement
--eval $insert_statement
--echo # $dbug_flag: BEFORE failure (under LOCK TABLE)
@@ -29,15 +94,42 @@ DROP TABLE t1;
SHOW CREATE TABLE t1;
--sorted_result
SELECT * FROM t1;
-LOCK TABLE t1 WRITE;
+if (!$create_statement2)
+{
+ LOCK TABLE t1 WRITE;
+}
+if ($create_statement2)
+{
+ LOCK TABLES t1 WRITE, t2 WRITE;
+}
--disable_abort_on_error
--eval $fail_statement
--enable_abort_on_error
--echo # $dbug_flag: AFTER failure (under LOCK TABLE)
+show warnings;
--replace_result #p# #P# #sp# #SP#
--list_files $DATADIR/test
SHOW CREATE TABLE t1;
--sorted_result
SELECT * FROM t1;
+if ($show_statement)
+{
+ --error 0,ER_TABLE_NOT_LOCKED
+ --eval $show_statement
+}
+if ($select_statement)
+{
+ --sorted_result
+ --error 0,ER_TABLE_NOT_LOCKED
+ --eval $select_statement
+}
+if ($log_bin)
+{
+ --source include/show_binlog_events.inc
+}
UNLOCK TABLES;
DROP TABLE t1;
+if ($drop_statement)
+{
+ --eval $drop_statement
+}
diff --git a/mysql-test/suite/parts/inc/partition_fail_add.inc b/mysql-test/suite/parts/inc/partition_fail_add.inc
deleted file mode 100644
index a7b8dd8aeb4..00000000000
--- a/mysql-test/suite/parts/inc/partition_fail_add.inc
+++ /dev/null
@@ -1,34 +0,0 @@
-# To be used with partition mgm commands like
-# ALTER TABLE t1 ADD PARTITION (LIST/RANGE PARTITIONING).
---echo # Error recovery testing ADD PARTITION
-SET @save_dbug=@@debug_dbug;
-SET SESSION debug_dbug="+d,fail_add_partition_1";
---source suite/parts/inc/partition_fail.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,fail_add_partition_2";
---source suite/parts/inc/partition_fail.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,fail_add_partition_3";
---source suite/parts/inc/partition_fail.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,fail_add_partition_4";
---source suite/parts/inc/partition_fail.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,fail_add_partition_5";
---source suite/parts/inc/partition_fail.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,fail_add_partition_6";
---source suite/parts/inc/partition_fail.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,fail_add_partition_7";
---source suite/parts/inc/partition_fail.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,fail_add_partition_8";
---source suite/parts/inc/partition_fail.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,fail_add_partition_9";
---source suite/parts/inc/partition_fail.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,fail_add_partition_10";
---source suite/parts/inc/partition_fail.inc
-SET SESSION debug_dbug=@save_dbug;
diff --git a/mysql-test/suite/parts/inc/partition_fail_change.inc b/mysql-test/suite/parts/inc/partition_fail_change.inc
deleted file mode 100644
index c10d5fecc2e..00000000000
--- a/mysql-test/suite/parts/inc/partition_fail_change.inc
+++ /dev/null
@@ -1,41 +0,0 @@
-# To be used with partition mgm commands like
-# ALTER TABLE t1 COALESCE/REBUILD/REORGANIZE PARTITION.
---echo # Error recovery change partition (REORGANIZE/REBUILD/COALESCE
---echo # or ADD HASH PARTITION).
-SET @save_dbug=@@debug_dbug;
-SET SESSION debug_dbug="+d,fail_change_partition_1";
---source suite/parts/inc/partition_fail.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,fail_change_partition_2";
---source suite/parts/inc/partition_fail.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,fail_change_partition_3";
---source suite/parts/inc/partition_fail.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,fail_change_partition_4";
---source suite/parts/inc/partition_fail.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,fail_change_partition_5";
---source suite/parts/inc/partition_fail.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,fail_change_partition_6";
---source suite/parts/inc/partition_fail.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,fail_change_partition_7";
---source suite/parts/inc/partition_fail.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,fail_change_partition_8";
---source suite/parts/inc/partition_fail.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,fail_change_partition_9";
---source suite/parts/inc/partition_fail.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,fail_change_partition_10";
---source suite/parts/inc/partition_fail.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,fail_change_partition_11";
---source suite/parts/inc/partition_fail.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,fail_change_partition_12";
---source suite/parts/inc/partition_fail.inc
-SET SESSION debug_dbug=@save_dbug;
diff --git a/mysql-test/suite/parts/inc/partition_fail_drop.inc b/mysql-test/suite/parts/inc/partition_fail_drop.inc
deleted file mode 100644
index df1d28b0bf9..00000000000
--- a/mysql-test/suite/parts/inc/partition_fail_drop.inc
+++ /dev/null
@@ -1,31 +0,0 @@
-# To be used with partition mgm commands like
-# ALTER TABLE t1 DROP PARTITION.
---echo # Error recovery DROP PARTITION
-SET @save_dbug=@@debug_dbug;
-SET SESSION debug_dbug="+d,fail_drop_partition_1";
---source suite/parts/inc/partition_fail.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,fail_drop_partition_2";
---source suite/parts/inc/partition_fail.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,fail_drop_partition_3";
---source suite/parts/inc/partition_fail.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,fail_drop_partition_4";
---source suite/parts/inc/partition_fail.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,fail_drop_partition_5";
---source suite/parts/inc/partition_fail.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,fail_drop_partition_6";
---source suite/parts/inc/partition_fail.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,fail_drop_partition_7";
---source suite/parts/inc/partition_fail.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,fail_drop_partition_8";
---source suite/parts/inc/partition_fail.inc
-SET SESSION debug_dbug=@save_dbug;
-SET SESSION debug_dbug="+d,fail_drop_partition_9";
---source suite/parts/inc/partition_fail.inc
-SET SESSION debug_dbug=@save_dbug;
diff --git a/mysql-test/suite/parts/inc/partition_fail_exchange.inc b/mysql-test/suite/parts/inc/partition_fail_exchange.inc
index 33d7bbd1d75..8eed97fe8dc 100644
--- a/mysql-test/suite/parts/inc/partition_fail_exchange.inc
+++ b/mysql-test/suite/parts/inc/partition_fail_exchange.inc
@@ -1,28 +1,28 @@
SET @save_dbug=@@debug_dbug;
SET SESSION debug_dbug="+d,exchange_partition_fail_1";
---source suite/parts/inc/partition_fail_t2.inc
+--source suite/parts/inc/partition_fail.inc
SET SESSION debug_dbug=@save_dbug;
SET SESSION debug_dbug="+d,exchange_partition_fail_2";
---source suite/parts/inc/partition_fail_t2.inc
+--source suite/parts/inc/partition_fail.inc
SET SESSION debug_dbug=@save_dbug;
SET SESSION debug_dbug="+d,exchange_partition_fail_3";
---source suite/parts/inc/partition_fail_t2.inc
+--source suite/parts/inc/partition_fail.inc
SET SESSION debug_dbug=@save_dbug;
SET SESSION debug_dbug="+d,exchange_partition_fail_4";
---source suite/parts/inc/partition_fail_t2.inc
+--source suite/parts/inc/partition_fail.inc
SET SESSION debug_dbug=@save_dbug;
SET SESSION debug_dbug="+d,exchange_partition_fail_5";
---source suite/parts/inc/partition_fail_t2.inc
+--source suite/parts/inc/partition_fail.inc
SET SESSION debug_dbug=@save_dbug;
SET SESSION debug_dbug="+d,exchange_partition_fail_6";
---source suite/parts/inc/partition_fail_t2.inc
+--source suite/parts/inc/partition_fail.inc
SET SESSION debug_dbug=@save_dbug;
SET SESSION debug_dbug="+d,exchange_partition_fail_7";
---source suite/parts/inc/partition_fail_t2.inc
+--source suite/parts/inc/partition_fail.inc
SET SESSION debug_dbug=@save_dbug;
SET SESSION debug_dbug="+d,exchange_partition_fail_8";
---source suite/parts/inc/partition_fail_t2.inc
+--source suite/parts/inc/partition_fail.inc
SET SESSION debug_dbug=@save_dbug;
SET SESSION debug_dbug="+d,exchange_partition_fail_9";
---source suite/parts/inc/partition_fail_t2.inc
+--source suite/parts/inc/partition_fail.inc
SET SESSION debug_dbug=@save_dbug;
diff --git a/mysql-test/suite/parts/inc/partition_fail_t2.inc b/mysql-test/suite/parts/inc/partition_fail_t2.inc
deleted file mode 100644
index 301fb005255..00000000000
--- a/mysql-test/suite/parts/inc/partition_fail_t2.inc
+++ /dev/null
@@ -1,41 +0,0 @@
-# Include file to test failure with error injection.
-# To be used with WL#4445: EXCHANGE PARTITION WITH TABLE.
---eval $create_statement2
---eval $insert_statement2
---eval $create_statement
---eval $insert_statement
---let $dbug_flag= `select @@session.debug_dbug`
---echo # $dbug_flag: BEFORE failure
---replace_result #p# #P#
-if (!$DATADIR)
-{
- --let $DATADIR= `SELECT @@datadir;`
-}
---list_files $DATADIR/test
-SHOW CREATE TABLE t1;
---sorted_result
-SELECT * FROM t1;
-SHOW CREATE TABLE t2;
---sorted_result
-SELECT * FROM t2;
-# accept all errors
---disable_abort_on_error
---replace_regex /#sql-exchange-[0-9a-f_\-]*/#sql-exchange/i
---eval $fail_statement
---enable_abort_on_error
---echo # $dbug_flag: AFTER failure
---replace_result #p# #P#
---list_files $DATADIR/test
-SHOW CREATE TABLE t1;
---sorted_result
-SELECT * FROM t1;
-DROP TABLE t1;
---error 0, ER_NO_SUCH_TABLE
-SHOW CREATE TABLE t2;
---sorted_result
---error 0, ER_NO_SUCH_TABLE
-SELECT * FROM t2;
-# TODO: everything fails with ER_NO_SUCH_TABLE
-# but DROP TABLE fails with ER_BAD_TABLE_ERROR! Why?
---error 0, ER_BAD_TABLE_ERROR
-DROP TABLE t2;
diff --git a/mysql-test/suite/parts/inc/partition_mgm_crash.combinations b/mysql-test/suite/parts/inc/partition_mgm_crash.combinations
new file mode 100644
index 00000000000..17140d0e54d
--- /dev/null
+++ b/mysql-test/suite/parts/inc/partition_mgm_crash.combinations
@@ -0,0 +1,2 @@
+[partition]
+[subpartition]
diff --git a/mysql-test/suite/parts/inc/partition_mgm_crash.inc b/mysql-test/suite/parts/inc/partition_mgm_crash.inc
index 6607d5cd611..901b77546c8 100644
--- a/mysql-test/suite/parts/inc/partition_mgm_crash.inc
+++ b/mysql-test/suite/parts/inc/partition_mgm_crash.inc
@@ -2,6 +2,8 @@
# also using error injection to test recovery of failures.
# uses $DATADIR and $engine
+--source include/have_binlog_format_statement.inc
+
--echo #
--echo # Bug#53676: Unexpected errors and possible table corruption on
--echo # ADD PARTITION and LOCK TABLE
@@ -9,44 +11,137 @@
--echo # after timed out COALESCE PARTITION
--echo # Extended crash recovery testing of fast_alter_partition_table.
call mtr.add_suppression("Attempting backtrace. You can use the following information to find out");
+call mtr.add_suppression("Crashing at");
+call mtr.add_suppression("Failing at");
flush tables;
+let $subpartitioning= ;
+if ($MTR_COMBINATION_SUBPARTITION)
+{
+ # `select()` is used just to put space in front of string...
+ let $subpartitioning=`select(' SUBPARTITION BY HASH(a) SUBPARTITIONS 2')`;
+}
+
+let $drop_statement= ;
let $create_statement= CREATE TABLE t1 (a INT, b VARCHAR(64))
ENGINE = $engine
-PARTITION BY LIST (a)
+PARTITION BY LIST (a)$subpartitioning
(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9),
- PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19));
-let $insert_statement= INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1");
+ PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19),
+ PARTITION p20 VALUES IN (25,26,27,28,29),
+ PARTITION p30 VALUES IN (31,32,33,34,35,36,37,38,39));
+let $insert_statement= INSERT INTO t1 VALUES
+ (1, "Original from partition p0"),
+ (2, "Original from partition p0"),
+ (3, "Original from partition p0"),
+ (4, "Original from partition p0"),
+ (11, "Original from partition p1"),
+ (12, "Original from partition p1"),
+ (13, "Original from partition p1"),
+ (14, "Original from partition p1");
+--source suite/parts/inc/define_points_add.inc
let $crash_statement= ALTER TABLE t1 ADD PARTITION
-(PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29));
+(PARTITION p15 VALUES IN (20,21,22,23,24));
+
if ($do_crash)
{
---source suite/parts/inc/partition_crash_add.inc
+ --source suite/parts/inc/iterate_points_crash.inc
}
let $fail_statement= $crash_statement;
if ($do_fail)
{
---source suite/parts/inc/partition_fail_add.inc
+ --source suite/parts/inc/iterate_points_fail.inc
}
-let $crash_statement= ALTER TABLE t1 DROP PARTITION p10;
+
+--source suite/parts/inc/define_points_drop.inc
+let $crash_statement= ALTER TABLE t1 DROP PARTITION p10, p20;
if ($do_crash)
{
---source suite/parts/inc/partition_crash_drop.inc
+ --source suite/parts/inc/iterate_points_crash.inc
}
let $fail_statement= $crash_statement;
if ($do_fail)
{
---source suite/parts/inc/partition_fail_drop.inc
+ --source suite/parts/inc/iterate_points_fail.inc
}
-let $crash_statement= ALTER TABLE t1 REORGANIZE PARTITION p10 INTO
-(PARTITION p10 VALUES IN (10,11,12,13,14,15,16,17,18,19),
- PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29));
+
+--source suite/parts/inc/define_points_change.inc
+let $crash_statement= ALTER TABLE t1 REORGANIZE PARTITION p10, p20 INTO
+(PARTITION p10 VALUES IN (10,11,12,13,14,15,16),
+PARTITION p15 VALUES IN (17,18,19,20,21,22,23),
+PARTITION p25 VALUES IN (24,25,26,27,28,29,30));
+let $fail_statement= $crash_statement;
if ($do_crash)
{
---source suite/parts/inc/partition_crash_change.inc
+ --source suite/parts/inc/iterate_points_crash.inc
}
-let $fail_statement= $crash_statement;
if ($do_fail)
{
---source suite/parts/inc/partition_fail_change.inc
-} \ No newline at end of file
+ --source suite/parts/inc/iterate_points_fail.inc
+}
+
+if ($MTR_COMBINATION_PARTITION)
+{
+ let $crash_statement= ALTER TABLE t1 REBUILD PARTITION p0, p10;
+ if ($do_crash)
+ {
+ --source suite/parts/inc/iterate_points_crash.inc
+ }
+ let $fail_statement= $crash_statement;
+ if ($do_fail)
+ {
+ --source suite/parts/inc/iterate_points_fail.inc
+ }
+
+ --source suite/parts/inc/define_points_convout.inc
+ let $crash_statement= ALTER TABLE t1 CONVERT PARTITION p10 TO TABLE tp10;
+ let $drop_statement= DROP TABLE IF EXISTS tp10;
+ if ($do_crash)
+ {
+ --source suite/parts/inc/iterate_points_crash.inc
+ }
+ let $fail_statement= $crash_statement;
+ if ($do_fail)
+ {
+ --source suite/parts/inc/iterate_points_fail.inc
+ }
+ let $drop_statement= ;
+
+ --source suite/parts/inc/define_points_convin.inc
+ let $create_statement2= CREATE TABLE t2 (a INT, b VARCHAR(64)) ENGINE = $engine;
+ let $insert_statement2= INSERT INTO t2 VALUES (40, "40 from t2"), (50, "50 from t2");
+ let $crash_statement= ALTER TABLE t1 CONVERT TABLE t2 TO PARTITION p40 VALUES IN (40, 50);
+ let $drop_statement= DROP TABLE IF EXISTS t2;
+ let $show_statement= SHOW CREATE TABLE t2;
+ let $select_statement= SELECT * FROM t2;
+ if ($do_crash)
+ {
+ --source suite/parts/inc/iterate_points_crash.inc
+ }
+ let $fail_statement= $crash_statement;
+ if ($do_fail)
+ {
+ --source suite/parts/inc/iterate_points_fail.inc
+ }
+ let $drop_statement= ;
+ let $show_statement= ;
+ let $select_statement= ;
+ let $create_statement2= ;
+ let $insert_statement2= ;
+
+ --source suite/parts/inc/define_points_change.inc
+ let $create_statement= CREATE TABLE t1 (a INT, b VARCHAR(64))
+ ENGINE = $engine
+ PARTITION BY HASH (a) PARTITIONS 5;
+
+ let $crash_statement= ALTER TABLE t1 COALESCE PARTITION 2;
+ if ($do_crash)
+ {
+ --source suite/parts/inc/iterate_points_crash.inc
+ }
+ let $fail_statement= $crash_statement;
+ if ($do_fail)
+ {
+ --source suite/parts/inc/iterate_points_fail.inc
+ }
+}