mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
merge into an updated 5.1-bugteam tree
This commit is contained in:
commit
854e230707
8 changed files with 158 additions and 4 deletions
|
@ -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
|
||||
|
|
BIN
mysql-test/std_data/corrupt_t1#P#p1.MYI
Normal file
BIN
mysql-test/std_data/corrupt_t1#P#p1.MYI
Normal file
Binary file not shown.
BIN
mysql-test/std_data/corrupt_t1.MYI
Normal file
BIN
mysql-test/std_data/corrupt_t1.MYI
Normal file
Binary file not shown.
56
mysql-test/suite/parts/r/partition_repair_myisam.result
Normal file
56
mysql-test/suite/parts/r/partition_repair_myisam.result
Normal file
|
@ -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;
|
|
@ -0,0 +1 @@
|
|||
--myisam-recover
|
30
mysql-test/suite/parts/t/partition_repair_myisam.test
Normal file
30
mysql-test/suite/parts/t/partition_repair_myisam.test
Normal file
|
@ -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;
|
|
@ -1129,6 +1129,70 @@ int ha_partition::handle_opt_partitions(THD *thd, HA_CHECK_OPT *check_opt,
|
|||
#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
|
||||
|
||||
|
|
|
@ -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;
|
||||
*/
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in a new issue