List:Commits« Previous MessageNext Message »
From:Ashish Agarwal Date:February 2 2012 9:05am
Subject:bzr push into mysql-5.1 branch (ashish.y.agarwal:3678 to 3679) Bug#11756869
View as plain text  
 3679 Ashish Agarwal	2012-02-02 [merge]
      BUG#11756869 - 48848: MYISAMCHK DOING SORT RECOVER IN CERTAIN
                            CASES RESETS DATA POINTER TO SMAL
      
      ISSUE: Myisamchk doing sort recover
             on a table reduces data_file_length.
             Maximum size of data file decreases,
             lesser number of rows are stored.
      
      SOLUTION: Size of data_file_length is
                fixed to the original length.

    modified:
      mysql-test/r/myisam.result
      mysql-test/t/myisam.test
      storage/myisam/mi_check.c
 3678 Inaam Rana	2012-01-31
      Bug#13636122 THE ORIGINAL TABLE MISSING WHILE EXECUTE THE DDL 'ALTER TABLE ADD COLUMN
      
      rb://914
      approved by: Marko Makela
      
      Poll in fil_rename_tablespace() after setting ::stop_ios flag can
      result in a hang because the other thread actually dispatching the IO
      won't wake IO helper threads or flush the tablespace before starting
      wait in fil_mutex_enter_and_prepare_for_io().

    modified:
      storage/innobase/fil/fil0fil.c
      storage/innodb_plugin/ChangeLog
      storage/innodb_plugin/fil/fil0fil.c
=== modified file 'mysql-test/r/myisam.result'
--- a/mysql-test/r/myisam.result	2011-10-20 11:03:22 +0000
+++ b/mysql-test/r/myisam.result	2012-02-02 08:49:38 +0000
@@ -2436,4 +2436,17 @@ Table	Op	Msg_type	Msg_text
 test.t1	check	status	OK
 DROP TABLE t1;
 SET GLOBAL myisam_use_mmap=default;
+#
+# BUG 11756869 - 48848: MYISAMCHK DOING SORT RECOVER IN CERTAIN
+#                       CASES RESETS DATA POINTER TO SMAL
+#
+CREATE TABLE t1(a INT, KEY(a));
+ALTER TABLE t1 DISABLE KEYS;
+SET @before:= (SELECT MAX_DATA_LENGTH FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='t1' AND TABLE_SCHEMA='test');
+FLUSH TABLES;
+SET @after:= (SELECT MAX_DATA_LENGTH FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='t1' AND TABLE_SCHEMA='test');
+SELECT @before=@after;
+@before=@after
+1
+DROP TABLE t1;
 End of 5.1 tests

=== modified file 'mysql-test/t/myisam.test'
--- a/mysql-test/t/myisam.test	2011-10-20 11:03:22 +0000
+++ b/mysql-test/t/myisam.test	2012-02-02 08:49:38 +0000
@@ -1663,4 +1663,18 @@ CHECK TABLE t1;
 DROP TABLE t1;
 SET GLOBAL myisam_use_mmap=default;
 
+--echo #
+--echo # BUG 11756869 - 48848: MYISAMCHK DOING SORT RECOVER IN CERTAIN
+--echo #                       CASES RESETS DATA POINTER TO SMAL
+--echo #
+CREATE TABLE t1(a INT, KEY(a));
+ALTER TABLE t1 DISABLE KEYS;
+let $MYSQLD_DATADIR= `select @@datadir`;
+SET @before:= (SELECT MAX_DATA_LENGTH FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='t1' AND TABLE_SCHEMA='test');
+FLUSH TABLES;
+--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR
+--exec $MYISAMCHK -sn $MYSQLD_DATADIR/test/t1
+SET @after:= (SELECT MAX_DATA_LENGTH FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='t1' AND TABLE_SCHEMA='test');
+SELECT @before=@after;
+DROP TABLE t1;
 --echo End of 5.1 tests

=== modified file 'storage/myisam/mi_check.c'
--- a/storage/myisam/mi_check.c	2011-09-16 11:30:31 +0000
+++ b/storage/myisam/mi_check.c	2012-02-02 08:49:38 +0000
@@ -4314,13 +4314,6 @@ int recreate_table(MI_CHECK *param, MI_I
     u_ptr->seg=keyseg;
     keyseg+=u_ptr->keysegs+1;
   }
-  if (share.options & HA_OPTION_COMPRESS_RECORD)
-    share.base.records=max_records=info.state->records;
-  else if (share.base.min_pack_length)
-    max_records=(ha_rows) (my_seek(info.dfile,0L,MY_SEEK_END,MYF(0)) /
-			   (ulong) share.base.min_pack_length);
-  else
-    max_records=0;
   unpack= (share.options & HA_OPTION_COMPRESS_RECORD) &&
     (param->testflag & T_UNPACK);
   share.options&= ~HA_OPTION_TEMP_COMPRESS_RECORD;
@@ -4330,10 +4323,17 @@ int recreate_table(MI_CHECK *param, MI_I
   set_if_bigger(file_length,param->max_data_file_length);
   set_if_bigger(file_length,tmp_length);
   set_if_bigger(file_length,(ulonglong) share.base.max_data_file_length);
+ 
+  if (share.options & HA_OPTION_COMPRESS_RECORD)
+    share.base.records= max_records= info.state->records;
+  else if (!(share.options & HA_OPTION_PACK_RECORD))
+    max_records= (ha_rows) (file_length / share.base.pack_reclength);
+  else
+    max_records= 0;
 
   VOID(mi_close(*org_info));
   bzero((char*) &create_info,sizeof(create_info));
-  create_info.max_rows=max(max_records,share.base.records);
+  create_info.max_rows= max_records;
   create_info.reloc_rows=share.base.reloc;
   create_info.old_options=(share.options |
 			   (unpack ? HA_OPTION_TEMP_COMPRESS_RECORD : 0));

No bundle (reason: useless for push emails).
Thread
bzr push into mysql-5.1 branch (ashish.y.agarwal:3678 to 3679) Bug#11756869Ashish Agarwal2 Feb