#At file:///Users/mattiasj/clones/bzrroot/topush-51-bugteam/
2690 Mattias Jonsson 2008-08-11 [merge]
merge into an updated 5.1-bugteam tree
added:
mysql-test/std_data/corrupt_t1#P#p1.MYI
mysql-test/std_data/corrupt_t1.MYI
mysql-test/suite/parts/r/partition_repair_myisam.result
mysql-test/suite/parts/t/partition_repair_myisam-master.opt
mysql-test/suite/parts/t/partition_repair_myisam.test
modified:
mysql-test/lib/mtr_report.pl
sql/ha_partition.cc
sql/ha_partition.h
=== modified file 'mysql-test/lib/mtr_report.pl'
--- a/mysql-test/lib/mtr_report.pl 2008-03-28 10:14:27 +0000
+++ b/mysql-test/lib/mtr_report.pl 2008-07-07 15:54:42 +0000
@@ -402,7 +402,10 @@ sub mtr_report_stats ($) {
)) or
# Test case for Bug#31590 produces the following error:
- /Out of sort memory; increase server sort buffer size/
+ /Out of sort memory; increase server sort buffer size/ or
+
+ # Bug#35161, test of auto repair --myisam-recover
+ /able.*_will_crash/
)
{
next; # Skip these lines
=== added file 'mysql-test/std_data/corrupt_t1#P#p1.MYI'
Binary files a/mysql-test/std_data/corrupt_t1#P#p1.MYI 1970-01-01 00:00:00 +0000 and
b/mysql-test/std_data/corrupt_t1#P#p1.MYI 2008-07-07 15:54:42 +0000 differ
=== added file 'mysql-test/std_data/corrupt_t1.MYI'
Binary files a/mysql-test/std_data/corrupt_t1.MYI 1970-01-01 00:00:00 +0000 and
b/mysql-test/std_data/corrupt_t1.MYI 2008-07-07 15:54:42 +0000 differ
=== added file 'mysql-test/suite/parts/r/partition_repair_myisam.result'
--- a/mysql-test/suite/parts/r/partition_repair_myisam.result 1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/parts/r/partition_repair_myisam.result 2008-07-07 15:54:42 +0000
@@ -0,0 +1,56 @@
+CREATE TABLE t1_will_crash (a INT, KEY (a)) ENGINE=MyISAM;
+INSERT INTO t1_will_crash VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11);
+FLUSH TABLES;
+# replacing t1.MYI with a corrupt + unclosed one created by doing:
+# 'create table t1 (a int key(a))' head -c1024 t1.MYI > corrupt_t1.MYI
+SELECT * FROM t1_will_crash;
+a
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+Warnings:
+Error 145 Table './test/t1_will_crash' is marked as crashed and should be repaired
+Error 1194 Table 't1_will_crash' is marked as crashed and should be repaired
+Error 1034 1 client is using or hasn't closed the table properly
+Error 1034 Size of indexfile is: 1024 Should be: 2048
+Error 1034 Size of datafile is: 77 Should be: 7
+Error 1034 Number of rows changed from 1 to 11
+DROP TABLE t1_will_crash;
+CREATE TABLE t1_will_crash (a INT, KEY (a))
+ENGINE=MyISAM
+PARTITION BY HASH(a)
+PARTITIONS 3;
+INSERT INTO t1_will_crash VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11);
+FLUSH TABLES;
+# replacing t1#P#p1.MYI with a corrupt + unclosed one created by doing:
+# 'create table t1 (a int key(a)) partition by hash (a) partitions 3'
+# head -c1024 t1#P#p1.MYI > corrupt_t1#P#p1.MYI
+SELECT * FROM t1_will_crash;
+a
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+Warnings:
+Error 145 Table './test/t1_will_crash#P#p1' is marked as crashed and should be repaired
+Error 1194 Table 't1_will_crash' is marked as crashed and should be repaired
+Error 1034 1 client is using or hasn't closed the table properly
+Error 1034 Size of indexfile is: 1024 Should be: 2048
+Error 1034 Size of datafile is: 28 Should be: 7
+Error 1034 Number of rows changed from 1 to 4
+DROP TABLE t1_will_crash;
=== added file 'mysql-test/suite/parts/t/partition_repair_myisam-master.opt'
--- a/mysql-test/suite/parts/t/partition_repair_myisam-master.opt 1970-01-01 00:00:00
+0000
+++ b/mysql-test/suite/parts/t/partition_repair_myisam-master.opt 2008-07-07 15:54:42
+0000
@@ -0,0 +1 @@
+--myisam-recover
=== added file 'mysql-test/suite/parts/t/partition_repair_myisam.test'
--- a/mysql-test/suite/parts/t/partition_repair_myisam.test 1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/parts/t/partition_repair_myisam.test 2008-07-07 15:54:42 +0000
@@ -0,0 +1,30 @@
+--source include/have_partition.inc
+--disable_warnings
+--disable_query_log
+drop table if exists t1_will_crash;
+--enable_query_log
+--enable_warnings
+
+
+CREATE TABLE t1_will_crash (a INT, KEY (a)) ENGINE=MyISAM;
+INSERT INTO t1_will_crash VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11);
+FLUSH TABLES;
+--echo # replacing t1.MYI with a corrupt + unclosed one created by doing:
+--echo # 'create table t1 (a int key(a))' head -c1024 t1.MYI > corrupt_t1.MYI
+--remove_file $MYSQLTEST_VARDIR/master-data/test/t1_will_crash.MYI
+--copy_file std_data/corrupt_t1.MYI $MYSQLTEST_VARDIR/master-data/test/t1_will_crash.MYI
+SELECT * FROM t1_will_crash;
+DROP TABLE t1_will_crash;
+CREATE TABLE t1_will_crash (a INT, KEY (a))
+ENGINE=MyISAM
+PARTITION BY HASH(a)
+PARTITIONS 3;
+INSERT INTO t1_will_crash VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11);
+FLUSH TABLES;
+--echo # replacing t1#P#p1.MYI with a corrupt + unclosed one created by doing:
+--echo # 'create table t1 (a int key(a)) partition by hash (a) partitions 3'
+--echo # head -c1024 t1#P#p1.MYI > corrupt_t1#P#p1.MYI
+--remove_file $MYSQLTEST_VARDIR/master-data/test/t1_will_crash#P#p1.MYI
+--copy_file std_data/corrupt_t1#P#p1.MYI
$MYSQLTEST_VARDIR/master-data/test/t1_will_crash#P#p1.MYI
+SELECT * FROM t1_will_crash;
+DROP TABLE t1_will_crash;
=== modified file 'sql/ha_partition.cc'
--- a/sql/ha_partition.cc 2008-07-07 20:42:19 +0000
+++ b/sql/ha_partition.cc 2008-08-11 14:15:39 +0000
@@ -1129,6 +1129,70 @@ int ha_partition::handle_opt_partitions(
#endif
}
+
+/**
+ @brief Check and repair the table if neccesary
+
+ @param thd Thread object
+
+ @retval TRUE Error/Not supported
+ @retval FALSE Success
+*/
+
+bool ha_partition::check_and_repair(THD *thd)
+{
+ handler **file= m_file;
+ DBUG_ENTER("ha_partition::check_and_repair");
+
+ do
+ {
+ if ((*file)->ha_check_and_repair(thd))
+ DBUG_RETURN(TRUE);
+ } while (*(++file));
+ DBUG_RETURN(FALSE);
+}
+
+
+/**
+ @breif Check if the table can be automatically repaired
+
+ @retval TRUE Can be auto repaired
+ @retval FALSE Cannot be auto repaired
+*/
+
+bool ha_partition::auto_repair() const
+{
+ DBUG_ENTER("ha_partition::auto_repair");
+
+ /*
+ As long as we only support one storage engine per table,
+ we can use the first partition for this function.
+ */
+ DBUG_RETURN(m_file[0]->auto_repair());
+}
+
+
+/**
+ @breif Check if the table is crashed
+
+ @retval TRUE Crashed
+ @retval FALSE Not crashed
+*/
+
+bool ha_partition::is_crashed() const
+{
+ handler **file= m_file;
+ DBUG_ENTER("ha_partition::is_crashed");
+
+ do
+ {
+ if ((*file)->is_crashed())
+ DBUG_RETURN(TRUE);
+ } while (*(++file));
+ DBUG_RETURN(FALSE);
+}
+
+
/*
Prepare by creating a new partition
=== modified file 'sql/ha_partition.h'
--- a/sql/ha_partition.h 2008-07-07 20:42:19 +0000
+++ b/sql/ha_partition.h 2008-08-11 14:15:39 +0000
@@ -936,6 +936,9 @@ public:
virtual int analyze_partitions(THD *thd);
virtual int check_partitions(THD *thd);
virtual int repair_partitions(THD *thd);
+ virtual bool check_and_repair(THD *thd);
+ virtual bool auto_repair() const;
+ virtual bool is_crashed() const;
private:
int handle_opt_partitions(THD *thd, HA_CHECK_OPT *check_opt,
@@ -951,12 +954,9 @@ public:
virtual int restore(THD* thd, HA_CHECK_OPT *check_opt);
virtual int assign_to_keycache(THD* thd, HA_CHECK_OPT *check_opt);
virtual int preload_keys(THD *thd, HA_CHECK_OPT *check_opt);
- virtual bool check_and_repair(THD *thd);
virtual int dump(THD* thd, int fd = -1);
virtual int net_read_dump(NET* net);
virtual uint checksum() const;
- virtual bool is_crashed() const;
- virtual bool auto_repair() const;
*/
/*
| Thread |
|---|
| • bzr commit into mysql-5.1 branch (mattiasj:2690) | Mattias Jonsson | 11 Aug |