Commit 3c86dd40 authored by Sergey Vojtovich's avatar Sergey Vojtovich

Merge fix for BUG48757 to mysql-5.1-bugteam.

parents 217ce3b5 90df558e
...@@ -12728,3 +12728,12 @@ Table Op Msg_type Msg_text ...@@ -12728,3 +12728,12 @@ Table Op Msg_type Msg_text
test.t1 repair Error Table upgrade required. Please do "REPAIR TABLE `t1`" or dump/reload to fix it! test.t1 repair Error Table upgrade required. Please do "REPAIR TABLE `t1`" or dump/reload to fix it!
test.t1 repair error Corrupt test.t1 repair error Corrupt
DROP TABLE t1; DROP TABLE t1;
#
# BUG#48757 - missing .ARZ file causes server crash
#
CREATE TABLE t1(a INT) ENGINE=ARCHIVE;
FLUSH TABLE t1;
SELECT * FROM t1;
ERROR HY000: Can't find file: 't1' (errno: 2)
DROP TABLE t1;
ERROR 42S02: Unknown table 't1'
...@@ -1644,3 +1644,14 @@ INSERT INTO t1 (col1, col2) VALUES (1, "value"); ...@@ -1644,3 +1644,14 @@ INSERT INTO t1 (col1, col2) VALUES (1, "value");
REPAIR TABLE t1; REPAIR TABLE t1;
DROP TABLE t1; DROP TABLE t1;
remove_file $MYSQLD_DATADIR/test/t1.ARM; remove_file $MYSQLD_DATADIR/test/t1.ARM;
--echo #
--echo # BUG#48757 - missing .ARZ file causes server crash
--echo #
CREATE TABLE t1(a INT) ENGINE=ARCHIVE;
FLUSH TABLE t1;
--remove_file $MYSQLD_DATADIR/test/t1.ARZ
--error ER_FILE_NOT_FOUND
SELECT * FROM t1;
--error ER_BAD_TABLE_ERROR
DROP TABLE t1;
...@@ -355,6 +355,9 @@ ARCHIVE_SHARE *ha_archive::get_share(const char *table_name, int *rc) ...@@ -355,6 +355,9 @@ ARCHIVE_SHARE *ha_archive::get_share(const char *table_name, int *rc)
*/ */
if (!(azopen(&archive_tmp, share->data_file_name, O_RDONLY|O_BINARY))) if (!(azopen(&archive_tmp, share->data_file_name, O_RDONLY|O_BINARY)))
{ {
*rc= my_errno ? my_errno : -1;
pthread_mutex_unlock(&archive_mutex);
my_free(share, MYF(0));
DBUG_RETURN(NULL); DBUG_RETURN(NULL);
} }
stats.auto_increment_value= archive_tmp.auto_increment + 1; stats.auto_increment_value= archive_tmp.auto_increment + 1;
...@@ -504,16 +507,18 @@ int ha_archive::open(const char *name, int mode, uint open_options) ...@@ -504,16 +507,18 @@ int ha_archive::open(const char *name, int mode, uint open_options)
For now we have to refuse to open such table to avoid For now we have to refuse to open such table to avoid
potential data loss. potential data loss.
*/ */
if ((rc == HA_ERR_CRASHED_ON_USAGE && !(open_options & HA_OPEN_FOR_REPAIR)) switch (rc)
|| rc == HA_ERR_TABLE_NEEDS_UPGRADE)
{ {
/* purecov: begin inspected */ case 0:
break;
case HA_ERR_CRASHED_ON_USAGE:
if (open_options & HA_OPEN_FOR_REPAIR)
break;
/* fall through */
case HA_ERR_TABLE_NEEDS_UPGRADE:
free_share(); free_share();
DBUG_RETURN(rc); /* fall through */
/* purecov: end */ default:
}
else if (rc == HA_ERR_OUT_OF_MEM)
{
DBUG_RETURN(rc); DBUG_RETURN(rc);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment