List:Commits« Previous MessageNext Message »
From:Rafal Somla Date:December 15 2007 10:03am
Subject:Re: bk commit into 6.0 tree (cbell:1.2751) BUG#32954
View as plain text  
Chuck,

The patch looks fine and I also verified that it solves the problem in my test 
environment. Hence it is not only good but very desirable to push! :) Great job 
locating and fixing this problem!

Btw., I noticed that on my machine I can now pass all the tests in "--valgrind" 
mode (after disabling the "not_valgrind.inc" options). If you think the valgrind 
failures we observed before were related to this issue, perhaps we could take a 
risk and valgrind-enable all the tests again. If we do so, I suggest that we 
keep this change as a separate patch.

Rafal

cbell@stripped wrote:
> Below is the list of changes that have just been committed into a local
> 6.0 repository of cbell. When cbell does a push these changes will
> be propagated to the main repository and, within 24 hours after the
> push, to the public repository.
> For information on how to access the public repository
> see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
> 
> ChangeSet@stripped, 2007-12-14 19:45:09-05:00, cbell@mysql_cab_desk. +11 -0
>   BUG#32954 : Online Backup: MyISAM default driver misses rows in release build 
>   
>   Patch corrects invalid restore of MyISAM table data on restore.
> 
>   mysql-test/r/backup.result@stripped, 2007-12-14 19:44:56-05:00, cbell@mysql_cab_desk. +2
> -1
>     BUG#32954 : Online Backup: MyISAM default driver misses rows in release build 
>     
>     New result file.
> 
>   mysql-test/r/backup_ddl_blocker.result@stripped, 2007-12-14 19:44:57-05:00,
> cbell@mysql_cab_desk. +5 -5
>     BUG#32954 : Online Backup: MyISAM default driver misses rows in release build 
>     
>     New result file.
> 
>   mysql-test/r/backup_no_data.result@stripped, 2007-12-14 19:44:58-05:00,
> cbell@mysql_cab_desk. +1 -1
>     BUG#32954 : Online Backup: MyISAM default driver misses rows in release build 
>     
>     New result file.
> 
>   mysql-test/r/backup_no_engine.result@stripped, 2007-12-14 19:44:58-05:00,
> cbell@mysql_cab_desk. +2 -2
>     BUG#32954 : Online Backup: MyISAM default driver misses rows in release build 
>     
>     New result file.
> 
>   mysql-test/r/backup_progress.result@stripped, 2007-12-14 19:44:59-05:00,
> cbell@mysql_cab_desk. +1 -1
>     BUG#32954 : Online Backup: MyISAM default driver misses rows in release build 
>     
>     New result file.
> 
>   mysql-test/t/backup.test@stripped, 2007-12-14 19:44:59-05:00, cbell@mysql_cab_desk. +4
> -2
>     BUG#32954 : Online Backup: MyISAM default driver misses rows in release build 
>     
>     Corrections to test to restore the use of MyISAM tables.
> 
>   mysql-test/t/backup_ddl_blocker.test@stripped, 2007-12-14 19:45:00-05:00,
> cbell@mysql_cab_desk. +5 -5
>     BUG#32954 : Online Backup: MyISAM default driver misses rows in release build 
>     
>     Corrections to test to restore the use of MyISAM tables.
> 
>   mysql-test/t/backup_no_data.test@stripped, 2007-12-14 19:45:00-05:00,
> cbell@mysql_cab_desk. +1 -1
>     BUG#32954 : Online Backup: MyISAM default driver misses rows in release build 
>     
>     Corrections to test to restore the use of MyISAM tables.
> 
>   mysql-test/t/backup_no_engine.test@stripped, 2007-12-14 19:45:01-05:00,
> cbell@mysql_cab_desk. +1 -1
>     BUG#32954 : Online Backup: MyISAM default driver misses rows in release build 
>     
>     Corrections to test to restore the use of MyISAM tables.
> 
>   mysql-test/t/backup_progress.test@stripped, 2007-12-14 19:45:02-05:00,
> cbell@mysql_cab_desk. +1 -1
>     BUG#32954 : Online Backup: MyISAM default driver misses rows in release build 
>     
>     Corrections to test to restore the use of MyISAM tables.
> 
>   sql/backup/be_default.cc@stripped, 2007-12-14 19:45:02-05:00, cbell@mysql_cab_desk. +5
> -1
>     BUG#32954 : Online Backup: MyISAM default driver misses rows in release build 
>     
>     Call restore_record() before unpack().
>     Call ha_write_row() instead of write_row().
> 
> diff -Nrup a/mysql-test/r/backup.result b/mysql-test/r/backup.result
> --- a/mysql-test/r/backup.result	2007-12-13 11:30:21 -05:00
> +++ b/mysql-test/r/backup.result	2007-12-14 19:44:56 -05:00
> @@ -48,7 +48,8 @@ DROP DATABASE db1;
>  DROP DATABASE db2;
>  USE mysql;
>  RESTORE FROM 'test.ba';
> -backup_id	#
> +backup_id
> +#
>  SHOW CREATE DATABASE db1;
>  Database	Create Database
>  db1	CREATE DATABASE `db1` /*!40100 DEFAULT CHARACTER SET latin1 */
> diff -Nrup a/mysql-test/r/backup_ddl_blocker.result
> b/mysql-test/r/backup_ddl_blocker.result
> --- a/mysql-test/r/backup_ddl_blocker.result	2007-12-13 09:11:55 -05:00
> +++ b/mysql-test/r/backup_ddl_blocker.result	2007-12-14 19:44:57 -05:00
> @@ -631,7 +631,7 @@ CREATE DATABASE bup_ddl_blocker_2;
>  CREATE DATABASE bup_ddl_blocker_4;
>  con1: Creating tables
>  CREATE TABLE bup_ddl_blocker_2.t1 (col_a CHAR(40)) ENGINE=INNODB;
> -CREATE TABLE bup_ddl_blocker_4.t1 (col_a CHAR(40)) ENGINE=MEMORY;
> +CREATE TABLE bup_ddl_blocker_4.t1 (col_a CHAR(40)) ENGINE=MYISAM;
>  con1: Loading data
>  INSERT INTO bup_ddl_blocker_2.t1 VALUES ("01 Some data to test");
>  INSERT INTO bup_ddl_blocker_2.t1 VALUES ("02 Some data to test");
> @@ -735,7 +735,7 @@ CREATE DATABASE bup_ddl_blocker_2;
>  CREATE DATABASE bup_ddl_blocker_4;
>  con1: Creating tables
>  CREATE TABLE bup_ddl_blocker_2.t1 (col_a CHAR(40)) ENGINE=INNODB;
> -CREATE TABLE bup_ddl_blocker_4.t1 (col_a CHAR(40)) ENGINE=MEMORY;
> +CREATE TABLE bup_ddl_blocker_4.t1 (col_a CHAR(40)) ENGINE=MYISAM;
>  con1: Loading data
>  INSERT INTO bup_ddl_blocker_2.t1 VALUES ("01 Some data to test");
>  INSERT INTO bup_ddl_blocker_2.t1 VALUES ("02 Some data to test");
> @@ -826,7 +826,7 @@ CREATE DATABASE bup_ddl_blocker_2 CHARAC
>  CREATE DATABASE bup_ddl_blocker_4 CHARACTER SET latin1;
>  con1: Creating tables
>  CREATE TABLE bup_ddl_blocker_2.t1 (col_a CHAR(40)) ENGINE=INNODB;
> -CREATE TABLE bup_ddl_blocker_4.t1 (col_a CHAR(40)) ENGINE=MEMORY;
> +CREATE TABLE bup_ddl_blocker_4.t1 (col_a CHAR(40)) ENGINE=MYISAM;
>  con1: Loading data
>  INSERT INTO bup_ddl_blocker_2.t1 VALUES ("01 Some data to test");
>  INSERT INTO bup_ddl_blocker_2.t1 VALUES ("02 Some data to test");
> @@ -959,7 +959,7 @@ CREATE DATABASE bup_ddl_blocker_2 CHARAC
>  CREATE DATABASE bup_ddl_blocker_4 CHARACTER SET latin1;
>  con1: Creating tables
>  CREATE TABLE bup_ddl_blocker_2.t1 (col_a CHAR(40)) ENGINE=INNODB;
> -CREATE TABLE bup_ddl_blocker_4.t1 (col_a CHAR(40)) ENGINE=MEMORY;
> +CREATE TABLE bup_ddl_blocker_4.t1 (col_a CHAR(40)) ENGINE=MYISAM;
>  con1: Loading data
>  INSERT INTO bup_ddl_blocker_2.t1 VALUES ("01 Some data to test");
>  INSERT INTO bup_ddl_blocker_2.t1 VALUES ("02 Some data to test");
> @@ -1062,7 +1062,7 @@ DROP TABLE IF EXISTS test.t2;
>  DROP TABLE IF EXISTS bup_ddl_blocker.t1, bup_ddl_blocker.t3;
>  con1: Creating tables
>  CREATE TABLE bup_ddl_blocker.t1 (col_a CHAR(40)) ENGINE=INNODB;
> -CREATE TABLE test.t2 (col_a CHAR(40)) ENGINE=MEMORY;
> +CREATE TABLE test.t2 (col_a CHAR(40)) ENGINE=MYISAM;
>  CREATE TABLE bup_ddl_blocker.t3 (col_a CHAR(40)) ENGINE=MEMORY;
>  con1: Loading data
>  INSERT INTO bup_ddl_blocker.t1 VALUES ("01 Some data to test");
> diff -Nrup a/mysql-test/r/backup_no_data.result b/mysql-test/r/backup_no_data.result
> --- a/mysql-test/r/backup_no_data.result	2007-12-03 15:28:03 -05:00
> +++ b/mysql-test/r/backup_no_data.result	2007-12-14 19:44:58 -05:00
> @@ -51,7 +51,7 @@ Note	1051	Unknown table 't1'
>  CREATE TABLE t1 (
>  `dir_code` char(4),
>  `building` char(6)
> -) ENGINE=MEMORY DEFAULT CHARSET=latin1;
> +) ENGINE=MYISAM DEFAULT CHARSET=latin1;
>  USE empty_db;
>  DROP VIEW IF EXISTS v1;
>  CREATE VIEW v1 AS SELECT * FROM test.t1;
> diff -Nrup a/mysql-test/r/backup_no_engine.result
> b/mysql-test/r/backup_no_engine.result
> --- a/mysql-test/r/backup_no_engine.result	2007-12-03 15:28:04 -05:00
> +++ b/mysql-test/r/backup_no_engine.result	2007-12-14 19:44:58 -05:00
> @@ -1,7 +1,7 @@
>  DROP DATABASE IF EXISTS db;
>  CREATE DATABASE db;
>  CREATE TABLE db.t1 (a int, b char(32))
> -ENGINE=MEMORY;
> +ENGINE=MYISAM;
>  BACKUP DATABASE db TO "db.backup";
>  backup_id
>  #
> @@ -18,5 +18,5 @@ Table	Create Table
>  t1	CREATE TABLE `t1` (
>    `a` int(11) DEFAULT NULL,
>    `b` char(32) DEFAULT NULL
> -) ENGINE=MEMORY DEFAULT CHARSET=latin1
> +) ENGINE=MyISAM DEFAULT CHARSET=latin1
>  DROP DATABASE db;
> diff -Nrup a/mysql-test/r/backup_progress.result
> b/mysql-test/r/backup_progress.result
> --- a/mysql-test/r/backup_progress.result	2007-12-04 12:38:02 -05:00
> +++ b/mysql-test/r/backup_progress.result	2007-12-14 19:44:59 -05:00
> @@ -3,7 +3,7 @@ DROP TABLE IF EXISTS backup_progress.t1_
>  SET GLOBAL debug="d,backup_debug:d,backup";
>  CREATE DATABASE backup_progress;
>  con1: Create table and new users.
> -CREATE TABLE backup_progress.t1 (a char(30)) ENGINE=MEMORY;
> +CREATE TABLE backup_progress.t1 (a char(30)) ENGINE=MYISAM;
>  CREATE TABLE backup_progress.t2 (a char(30)) ENGINE=INNODB;
>  CREATE TABLE backup_progress.t3 (a char(30)) ENGINE=MEMORY;
>  CREATE TABLE backup_progress.t1_res (id INT);
> diff -Nrup a/mysql-test/t/backup.test b/mysql-test/t/backup.test
> --- a/mysql-test/t/backup.test	2007-12-13 11:30:22 -05:00
> +++ b/mysql-test/t/backup.test	2007-12-14 19:44:59 -05:00
> @@ -103,8 +103,10 @@ DROP DATABASE db2;
>  
>  USE mysql;
>  
> ---replace_column 1 # 2 # 3 # 4 # 10 # 11 # 12 #
> ---query_vertical RESTORE FROM 'test.ba'
> +--replace_column 1 #
> +RESTORE FROM 'test.ba';
> +
> +--remove_file $MYSQLTEST_VARDIR/master-data/test.ba
>  
>  SHOW CREATE DATABASE db1;
>  SHOW CREATE DATABASE db2;
> diff -Nrup a/mysql-test/t/backup_ddl_blocker.test
> b/mysql-test/t/backup_ddl_blocker.test
> --- a/mysql-test/t/backup_ddl_blocker.test	2007-12-13 09:11:55 -05:00
> +++ b/mysql-test/t/backup_ddl_blocker.test	2007-12-14 19:45:00 -05:00
> @@ -1060,7 +1060,7 @@ CREATE DATABASE bup_ddl_blocker_4;
>  # Create transaction tables and load them with data.
>  --echo con1: Creating tables
>  CREATE TABLE bup_ddl_blocker_2.t1 (col_a CHAR(40)) ENGINE=INNODB;
> -CREATE TABLE bup_ddl_blocker_4.t1 (col_a CHAR(40)) ENGINE=MEMORY;
> +CREATE TABLE bup_ddl_blocker_4.t1 (col_a CHAR(40)) ENGINE=MYISAM;
>  
>  --echo con1: Loading data
>  INSERT INTO bup_ddl_blocker_2.t1 VALUES ("01 Some data to test");
> @@ -1245,7 +1245,7 @@ CREATE DATABASE bup_ddl_blocker_4;
>  # Create transaction tables and load them with data.
>  --echo con1: Creating tables
>  CREATE TABLE bup_ddl_blocker_2.t1 (col_a CHAR(40)) ENGINE=INNODB;
> -CREATE TABLE bup_ddl_blocker_4.t1 (col_a CHAR(40)) ENGINE=MEMORY;
> +CREATE TABLE bup_ddl_blocker_4.t1 (col_a CHAR(40)) ENGINE=MYISAM;
>  
>  --echo con1: Loading data
>  INSERT INTO bup_ddl_blocker_2.t1 VALUES ("01 Some data to test");
> @@ -1419,7 +1419,7 @@ CREATE DATABASE bup_ddl_blocker_4 CHARAC
>  # Create transaction tables and load them with data.
>  --echo con1: Creating tables
>  CREATE TABLE bup_ddl_blocker_2.t1 (col_a CHAR(40)) ENGINE=INNODB;
> -CREATE TABLE bup_ddl_blocker_4.t1 (col_a CHAR(40)) ENGINE=MEMORY;
> +CREATE TABLE bup_ddl_blocker_4.t1 (col_a CHAR(40)) ENGINE=MYISAM;
>  
>  --echo con1: Loading data
>  
> @@ -1618,7 +1618,7 @@ CREATE DATABASE bup_ddl_blocker_4 CHARAC
>  # Create transaction tables and load them with data.
>  --echo con1: Creating tables
>  CREATE TABLE bup_ddl_blocker_2.t1 (col_a CHAR(40)) ENGINE=INNODB;
> -CREATE TABLE bup_ddl_blocker_4.t1 (col_a CHAR(40)) ENGINE=MEMORY;
> +CREATE TABLE bup_ddl_blocker_4.t1 (col_a CHAR(40)) ENGINE=MYISAM;
>  
>  --echo con1: Loading data
>  
> @@ -1815,7 +1815,7 @@ DROP TABLE IF EXISTS bup_ddl_blocker.t1,
>  # Create transaction tables and load them with data.
>  --echo con1: Creating tables
>  CREATE TABLE bup_ddl_blocker.t1 (col_a CHAR(40)) ENGINE=INNODB;
> -CREATE TABLE test.t2 (col_a CHAR(40)) ENGINE=MEMORY;
> +CREATE TABLE test.t2 (col_a CHAR(40)) ENGINE=MYISAM;
>  CREATE TABLE bup_ddl_blocker.t3 (col_a CHAR(40)) ENGINE=MEMORY;
>  
>  --echo con1: Loading data
> diff -Nrup a/mysql-test/t/backup_no_data.test b/mysql-test/t/backup_no_data.test
> --- a/mysql-test/t/backup_no_data.test	2007-12-03 15:28:08 -05:00
> +++ b/mysql-test/t/backup_no_data.test	2007-12-14 19:45:00 -05:00
> @@ -52,7 +52,7 @@ DROP TABLE IF EXISTS t1;
>  CREATE TABLE t1 (
>    `dir_code` char(4),
>    `building` char(6)
> -) ENGINE=MEMORY DEFAULT CHARSET=latin1;
> +) ENGINE=MYISAM DEFAULT CHARSET=latin1;
>  
>  USE empty_db;
>  
> diff -Nrup a/mysql-test/t/backup_no_engine.test b/mysql-test/t/backup_no_engine.test
> --- a/mysql-test/t/backup_no_engine.test	2007-12-03 15:28:09 -05:00
> +++ b/mysql-test/t/backup_no_engine.test	2007-12-14 19:45:01 -05:00
> @@ -13,7 +13,7 @@ DROP DATABASE IF EXISTS db;
>  
>  CREATE DATABASE db;
>  CREATE TABLE db.t1 (a int, b char(32))
> -ENGINE=MEMORY;
> +ENGINE=MYISAM;
>  
>  # copy description of a table using non-existent storage engine
>  --copy_file $table_def $MYSQLTEST_VARDIR/master-data/db/t2.frm
> diff -Nrup a/mysql-test/t/backup_progress.test b/mysql-test/t/backup_progress.test
> --- a/mysql-test/t/backup_progress.test	2007-12-06 16:42:58 -05:00
> +++ b/mysql-test/t/backup_progress.test	2007-12-14 19:45:02 -05:00
> @@ -30,7 +30,7 @@ CREATE DATABASE backup_progress;
>  
>  --echo con1: Create table and new users.
>  
> -CREATE TABLE backup_progress.t1 (a char(30)) ENGINE=MEMORY;
> +CREATE TABLE backup_progress.t1 (a char(30)) ENGINE=MYISAM;
>  CREATE TABLE backup_progress.t2 (a char(30)) ENGINE=INNODB;
>  CREATE TABLE backup_progress.t3 (a char(30)) ENGINE=MEMORY;
>  CREATE TABLE backup_progress.t1_res (id INT);
> diff -Nrup a/sql/backup/be_default.cc b/sql/backup/be_default.cc
> --- a/sql/backup/be_default.cc	2007-12-13 09:08:41 -05:00
> +++ b/sql/backup/be_default.cc	2007-12-14 19:45:02 -05:00
> @@ -671,6 +671,8 @@ uint Restore::unpack(byte *packed_row)
>      /* Potential buffer on the stack for the bitmap */
>      uint32 bitbuf[BITMAP_STACKBUF_SIZE/sizeof(uint32)];
>      uint n_fields= cur_table->s->fields;
> +    /* Restore a default record -- MyISAM needs this to work properly. */
> +    restore_record(cur_table, s->default_values);
>      my_bool use_bitbuf= n_fields <= sizeof(bitbuf) * 8;
>      error= bitmap_init(&cols, use_bitbuf ? bitbuf : NULL, (n_fields + 7) &
> ~7UL, FALSE);
>      bitmap_set_all(&cols);
> @@ -887,7 +889,9 @@ result_t Restore::send_data(Buffer &buf)
>      }
>      if (write_row)
>      {
> -      last_write_res = hdl->write_row(cur_table->record[0]);
> +      last_write_res = hdl->ha_write_row(cur_table->record[0]);
> +      DBUG_PRINT("backup_default_write", ("%d", last_write_res));
> +
>        /*
>          Free the blob pointers used.
>        */
> 
> 
Thread
bk commit into 6.0 tree (cbell:1.2751) BUG#32954cbell15 Dec
  • Re: bk commit into 6.0 tree (cbell:1.2751) BUG#32954Rafal Somla15 Dec
    • RE: bk commit into 6.0 tree (cbell:1.2751) BUG#32954Chuck Bell16 Dec