MySQL Lists are EOL. Please join:

List:Commits« Previous MessageNext Message »
From:Sergey Vojtovich Date:November 9 2009 1:10pm
Subject:Re: bzr commit into mysql-5.1-bugteam branch (anurag.shekhar:3173)
Bug#47012
View as plain text  
Hi Anurag,

On Mon, Nov 02, 2009 at 06:46:24AM +0000, Anurag Shekhar wrote:
> #At file:///home/anurag/mysqlsrc/mysql-5.1-bugteam-47012/ based on
> revid:luis.soares@stripped
> 
>  3173 Anurag Shekhar	2009-11-02
>       Bug #47012 archive tables are not upgradeable, and server crashes 
>                on any access
>       
...skip...

> === modified file 'mysql-test/t/archive.test'
> --- a/mysql-test/t/archive.test	2009-09-10 06:58:13 +0000
> +++ b/mysql-test/t/archive.test	2009-11-02 06:46:19 +0000
> @@ -1623,3 +1623,20 @@ INSERT INTO t1 VALUES('aaaaaaaaaaaaaaaaa
>  SELECT COUNT(t1.a) FROM t1, t1 a, t1 b, t1 c, t1 d, t1 e;
>  DROP TABLE t1;
>  SET @@join_buffer_size= @save_join_buffer_size;
> +
> +#
> +# BUG#47012 archive tables are not upgradeable, and server crashes on any access
> +#
> +let $MYSQLD_DATADIR= `SELECT @@datadir`;
> +copy_file std_data/ar1.frm $MYSQLD_DATADIR/test/ar1.frm;
> +copy_file std_data/ar1.ARZ $MYSQLD_DATADIR/test/ar1.ARZ;
> +copy_file std_data/ar1.ARM $MYSQLD_DATADIR/test/ar1.ARM;
I'd suggest to use more informative names for files in std_data, like
`bug47012.*`. For testing purpose we usually use t1.*, I see no reason
to break this convention here.

> +
> +--error ER_TABLE_NEEDS_UPGRADE
> +SHOW CREATE TABLE ar1;
> +
> +--error ER_TABLE_NEEDS_UPGRADE
> +SELECT * FROM ar1;
> +
I'd add a test for a simple INSERT here.

> +REPAIR TABLE ar1;
> +DROP TABLE ar1;
> 
> === modified file 'storage/archive/azio.c'
> --- a/storage/archive/azio.c	2009-02-13 16:41:47 +0000
> +++ b/storage/archive/azio.c	2009-11-02 06:46:19 +0000
...skip...

> @@ -352,11 +352,22 @@ void read_header(azio_stream *s, unsigne
>      s->comment_length= (unsigned int)uint4korr(buffer + AZ_COMMENT_LENGTH_POS);
>      s->dirty= (unsigned int)buffer[AZ_DIRTY_POS];
>    }
> -  else
> +  else if (buffer[0] == gz_magic[0]  && buffer[1] == gz_magic[1])
>    {
> -    DBUG_ASSERT(buffer[0] == az_magic[0]  && buffer[1] == az_magic[1]);
> +    /*
> +      Set version number to privious version (2).
s/privious/previous/

> +    */
> +    s->version= (unsigned char) 2;
>      return;
>    }
> +  else {
Coding style: "} else {"

> +    /*
> +      Unknown version.
> +      Most probably due to a corrupt archive.
> +    */
> +    s->dirty= AZ_STATE_DIRTY;
> +    s->z_err = Z_VERSION_ERROR;
Coding style: no space before "=".

> +  }
>  }
>  
>  /* ===========================================================================
> 
> === modified file 'storage/archive/ha_archive.cc'
> --- a/storage/archive/ha_archive.cc	2009-09-23 13:21:29 +0000
> +++ b/storage/archive/ha_archive.cc	2009-11-02 06:46:19 +0000
> @@ -360,6 +360,12 @@ ARCHIVE_SHARE *ha_archive::get_share(con
>      stats.auto_increment_value= archive_tmp.auto_increment + 1;
>      share->rows_recorded= (ha_rows)archive_tmp.rows;
>      share->crashed= archive_tmp.dirty;
> +    /*
> +     If archive version is less than 3, It should be upgraded before
> +     use.
> +    */
Coding style: comments are indented by two spaces.

> +    if (archive_tmp.version < ARCHIVE_VERSION)
> +      *rc= HA_ERR_TABLE_NEEDS_UPGRADE;
>      azclose(&archive_tmp);
>  
>      VOID(my_hash_insert(&archive_open_tables, (uchar*) share));
> @@ -504,6 +510,17 @@ int ha_archive::open(const char *name, i
>    }
>  
>    DBUG_ASSERT(share);
> +  if (rc == HA_ERR_TABLE_NEEDS_UPGRADE)
> +  {
> +    /*
> +      Table in 5.0 ARCHIVE format. Though we have almost all
> +      routines to access these tables, they were not well tested.
> +      For now we have to refuse to open such table to avoid
> +      potential data loss.
> +    */
> +    free_share();
> +    DBUG_RETURN (HA_ERR_TABLE_NEEDS_UPGRADE);
> +  }
Why not:
  if ((rc == HA_ERR_CRASHED_ON_USAGE && !(open_options & HA_OPEN_FOR_REPAIR))
||
      rc == HA_ERR_TABLE_NEEDS_UPGARDE)

Regards,
Sergey
-- 
Sergey Vojtovich <svoj@stripped>
MySQL AB, Software Engineer
Izhevsk, Russia, www.mysql.com
Thread
bzr commit into mysql-5.1-bugteam branch (anurag.shekhar:3173)Bug#47012Anurag Shekhar2 Nov
  • Re: bzr commit into mysql-5.1-bugteam branch (anurag.shekhar:3173)Bug#47012Sergey Vojtovich9 Nov