List:Maria Storage Engine« Previous MessageNext Message »
From:Guilhem Bichot Date:July 9 2008 9:02am
Subject:bzr commit into MySQL/Maria:mysql-maria branch (guilhem:2656) Bug#37876
View as plain text  
#At bzr+ssh://bk-internal.mysql.com/bzrroot/server/mysql-maria/

 2656 Guilhem Bichot	2008-07-09
      Fix for BUG#37876 "Importing Maria table from other server via binary copy does not work":
      - after auto-zerofill (ha_maria::check_and_repair()) kepts its state's LSNs unchanged, which could
      be the same as the create_rename_lsn of another pre-existing table, which would break versioning as this LSN
      serves as unique identifier in the versioning code (in maria_open()). Even the state pieces which
      maria_zerofill() did change were lost (because they didn't go to disk).
      - after this fix, if two tables were auto-zerofilled at the same time (by _ma_mark_changed())
      they could receive the same create_rename_lsn, which would break versioning again. Fix is to write a log
      record each time a table is imported.
      - Print state's LSNs (create_rename_lsn, is_of_horizon, skip_redo_lsn) and UUID in maria_chk -dvv.
added:
  mysql-test/r/maria-autozerofill.result
  mysql-test/t/maria-autozerofill.test
modified:
  storage/maria/ha_maria.cc
  storage/maria/ma_check.c
  storage/maria/ma_create.c
  storage/maria/ma_key_recover.c
  storage/maria/ma_locking.c
  storage/maria/ma_loghandler.c
  storage/maria/ma_loghandler.h
  storage/maria/ma_loghandler_lsn.h
  storage/maria/ma_open.c
  storage/maria/ma_recovery.c
  storage/maria/maria_chk.c
  storage/maria/maria_pack.c
  storage/maria/unittest/ma_test_recovery.pl

per-file messages:
  mysql-test/r/maria-autozerofill.result
    result
  mysql-test/t/maria-autozerofill.test
    Test for auto-zerofilling
  storage/maria/ha_maria.cc
    The state changes done by auto-zerofilling never reached disk.
  storage/maria/ma_check.c
    When zerofilling a table, including its pages' LSNs, new state LSNs are needed next time the table
    is imported into a Maria instance.
  storage/maria/ma_create.c
    Write LOGREC_IMPORTED_TABLE when importing a table. This is informative and ensures
    that the table gets a unique create_rename_lsn even though multiple tables
    are imported by concurrent threads (it advances the log's end LSN).
  storage/maria/ma_key_recover.c
    comment
  storage/maria/ma_locking.c
    instead of using translog_get_horizon() for state's LSNs of imported table,
    use the LSN of to-be-written LOGREC_IMPORTED_TABLE.
  storage/maria/ma_loghandler.c
    New type of log record
  storage/maria/ma_loghandler.h
    New type of log record
  storage/maria/ma_loghandler_lsn.h
    New name for constant as can be used not only by maria_chk but auto-zerofill now too.
  storage/maria/ma_open.c
    instead of using translog_get_horizon() for state's LSNs of imported table,
    use the LSN of to-be-written LOGREC_IMPORTED_TABLE.
  storage/maria/ma_recovery.c
    print content of LOGREC_IMPORTED_TABLE in maria_read_log.
  storage/maria/maria_chk.c
    print info about LSNs of the table's state, and UUID, when maria_chk -dvv
  storage/maria/maria_pack.c
    new name for constant
  storage/maria/unittest/ma_test_recovery.pl
    Now that maria_chk -dvv shows state LSNs and UUID those need to be filtered out,
    as maria_read_log -a does not use the same as at original run.
=== added file 'mysql-test/r/maria-autozerofill.result'
--- a/mysql-test/r/maria-autozerofill.result	1970-01-01 00:00:00 +0000
+++ b/mysql-test/r/maria-autozerofill.result	2008-07-09 09:02:27 +0000
@@ -0,0 +1,20 @@
+drop database if exists mysqltest;
+create database mysqltest;
+use mysqltest;
+create table t1(a int) engine=maria;
+insert into t1 values(1);
+flush table t1;
+create_rename_lsn has non-magic value
+* shut down mysqld, removed logs, restarted it
+select * from t1;
+a
+1
+Warnings:
+Error	1194	t1' is marked as crashed and should be repaired
+flush table t1;
+Status:              changed,sorted index pages,zerofilled,movable
+create_rename_lsn has magic value
+insert into t1 values(2);
+flush table t1;
+create_rename_lsn has non-magic value
+drop database mysqltest;

=== added file 'mysql-test/t/maria-autozerofill.test'
--- a/mysql-test/t/maria-autozerofill.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/t/maria-autozerofill.test	2008-07-09 09:02:27 +0000
@@ -0,0 +1,80 @@
+# Test to verify that auto-zerofilling happens when a table is
+# imported from a different Maria instance
+
+# can't restart in embedded
+--source include/not_embedded.inc
+--source include/have_maria.inc
+
+let $MARIA_LOG=.;
+
+--disable_warnings
+drop database if exists mysqltest;
+--enable_warnings
+create database mysqltest;
+let $mms_tname=t;
+
+connect (admin, localhost, root,,mysqltest,,);
+--enable_reconnect
+
+connection default;
+use mysqltest;
+--enable_reconnect
+
+create table t1(a int) engine=maria;
+insert into t1 values(1);
+flush table t1;
+# Check that table is not zerofilled, not movable
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/mysqltest/t1 >$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    my @content= <FILE>;
+    print grep(/Status:.*(zerofilled|movable)/, @content);
+    print "create_rename_lsn has non-magic value\n" if grep(/create_rename \([0-9]+/, @content);
+    close FILE;
+EOF
+
+# this will remove control file, so change the uuid of the Maria
+# instance, thus t1 will appear as imported from elsewhere.
+
+-- source include/maria_empty_logs.inc
+
+disable_ps_protocol; # see maria-recover.test
+replace_regex /Table.*t1/t1/ ;
+select * from t1;
+enable_ps_protocol;
+flush table t1;
+
+# Check that table is auto-zerofilled, movable
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/mysqltest/t1 >$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    my @content= <FILE>;
+    print grep(/Status:.*zerofilled/, @content);
+    print "create_rename_lsn has magic value\n" if grep(/create_rename \(0,0x2\)/, @content);
+    close FILE;
+EOF
+
+# this will attach t1 to the current Maria instance
+insert into t1 values(2);
+flush table t1;
+
+# Check that table is not zerofilled, not movable
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/mysqltest/t1 >$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    my @content= <FILE>;
+    print grep(/Status:.*(zerofilled|movable)/, @content);
+    print "create_rename_lsn has non-magic value\n" if grep(/create_rename \([0-9]+/, @content);
+    close FILE;
+EOF
+
+drop database mysqltest;

=== modified file 'storage/maria/ha_maria.cc'
--- a/storage/maria/ha_maria.cc	2008-06-28 15:09:03 +0000
+++ b/storage/maria/ha_maria.cc	2008-07-09 09:02:27 +0000
@@ -1268,6 +1268,7 @@ int ha_maria::zerofill(THD * thd, HA_CHE
 {
   int error;
   HA_CHECK param;
+  MARIA_SHARE *share= file->s;
 
   if (!file)
     return HA_ADMIN_INTERNAL_ERROR;
@@ -1277,8 +1278,14 @@ int ha_maria::zerofill(THD * thd, HA_CHE
   param.op_name= "zerofill";
   param.testflag= check_opt->flags | T_SILENT | T_ZEROFILL;
   param.sort_buffer_length= THDVAR(thd, sort_buffer_size);
-  error=maria_zerofill(&param, file, file->s->open_file_name);
+  error=maria_zerofill(&param, file, share->open_file_name);
 
+  if (!error)
+  {
+    pthread_mutex_lock(&share->intern_lock);
+    maria_update_state_info(&param, file, UPDATE_TIME | UPDATE_OPEN_COUNT);
+    pthread_mutex_unlock(&share->intern_lock);
+  }
   return error;
 }
 

=== modified file 'storage/maria/ma_check.c'
--- a/storage/maria/ma_check.c	2008-07-05 11:03:21 +0000
+++ b/storage/maria/ma_check.c	2008-07-09 09:02:27 +0000
@@ -3368,8 +3368,9 @@ int maria_zerofill(HA_CHECK *param, MARI
 {
   my_bool error, reenable_logging,
     zero_lsn= !(param->testflag & T_ZEROFILL_KEEP_LSN);
+  MARIA_SHARE *share= info->s;
   DBUG_ENTER("maria_zerofill");
-  if ((reenable_logging= info->s->now_transactional))
+  if ((reenable_logging= share->now_transactional))
     _ma_tmp_disable_logging_for_table(info, 0);
   if (!(error= (maria_zerofill_index(param, info, name) ||
                 maria_zerofill_data(param, info, name) ||
@@ -3379,14 +3380,19 @@ int maria_zerofill(HA_CHECK *param, MARI
       Mark that we have done zerofill of data and index. If we zeroed pages'
       LSN, table is movable.
     */
-    info->s->state.changed&= ~STATE_NOT_ZEROFILLED;
+    share->state.changed&= ~STATE_NOT_ZEROFILLED;
     if (zero_lsn)
-      info->s->state.changed&= ~(STATE_NOT_MOVABLE | STATE_MOVED);
-    /* Ensure state are flushed to disk */
+    {
+      share->state.changed&= ~(STATE_NOT_MOVABLE | STATE_MOVED);
+      /* Table should get new LSNs */
+      share->state.create_rename_lsn= share->state.is_of_horizon=
+        share->state.skip_redo_lsn= LSN_NEEDS_NEW_STATE_LSNS;
+    }
+    /* Ensure state is later flushed to disk, if within maria_chk */
     info->update= (HA_STATE_CHANGED | HA_STATE_ROW_CHANGED);
 
     /* Reset create_trid to make file comparable */
-    info->s->state.create_trid= 0;
+    share->state.create_trid= 0;
   }
   if (reenable_logging)
     _ma_reenable_logging_for_table(info, FALSE);

=== modified file 'storage/maria/ma_create.c'
--- a/storage/maria/ma_create.c	2008-06-26 05:18:28 +0000
+++ b/storage/maria/ma_create.c	2008-07-09 09:02:27 +0000
@@ -1317,7 +1317,8 @@ int _ma_update_state_lsns(MARIA_SHARE *s
    needed (when creating a table or opening it for the first time).
 
    @param  share           table's share
-   @param  lsn		   LSN to write to log files
+   @param  lsn             LSN to write to state; if LSN_IMPOSSIBLE, write
+                           a LOGREC_IMPORTED_TABLE and use its LSN as lsn.
    @param  create_trid     Trid to be used as state.create_trid
    @param  do_sync         if the write should be forced to disk
    @param  update_create_rename_lsn if this LSN should be updated or not
@@ -1342,6 +1343,25 @@ int _ma_update_state_lsns_sub(MARIA_SHAR
   uchar trid_buff[8];
   File file= share->kfile.file;
   DBUG_ASSERT(file >= 0);
+
+  if (lsn == LSN_IMPOSSIBLE)
+  {
+    int res;
+    LEX_CUSTRING log_array[TRANSLOG_INTERNAL_PARTS + 1];
+    /* table name is logged only for information */
+    log_array[TRANSLOG_INTERNAL_PARTS + 0].str=    share->open_file_name;
+    log_array[TRANSLOG_INTERNAL_PARTS + 0].length=
+      strlen(log_array[TRANSLOG_INTERNAL_PARTS + 0].str) + 1;
+    if ((res= translog_write_record(&lsn, LOGREC_IMPORTED_TABLE,
+                                    &dummy_transaction_object, NULL,
+                                    (translog_size_t)
+                                    log_array[TRANSLOG_INTERNAL_PARTS +
+                                              0].length,
+                                    sizeof(log_array)/sizeof(log_array[0]),
+                                    log_array, NULL, NULL)))
+      return res;
+  }
+
   for (ptr= buf; ptr < (buf + sizeof(buf)); ptr+= LSN_STORE_SIZE)
     lsn_store(ptr, lsn);
   share->state.skip_redo_lsn= share->state.is_of_horizon= lsn;

=== modified file 'storage/maria/ma_key_recover.c'
--- a/storage/maria/ma_key_recover.c	2008-06-26 05:18:28 +0000
+++ b/storage/maria/ma_key_recover.c	2008-07-09 09:02:27 +0000
@@ -207,7 +207,8 @@ my_bool write_hook_for_undo_key(enum tra
     @todo BUG
     so we have log mutex and then intern_lock.
     While in checkpoint we have intern_lock and then log mutex, like when we
-    flush bitmap (flushing bitmap pages can call hook which takes log mutex).
+    flush bitmap (flushing bitmap pages can call hook which takes log mutex);
+    and in _ma_update_state_lsns_sub() this is the same.
     So we can deadlock.
     Another one is that in translog_assign_id_to_share() we have intern_lock
     and then log mutex.

=== modified file 'storage/maria/ma_locking.c'
--- a/storage/maria/ma_locking.c	2008-06-26 05:18:28 +0000
+++ b/storage/maria/ma_locking.c	2008-07-09 09:02:27 +0000
@@ -425,8 +425,8 @@ int _ma_mark_file_changed(MARIA_HA *info
     {
       /* Lock table to current installation */
       if (_ma_set_uuid(info, 0) ||
-          (share->state.create_rename_lsn == LSN_REPAIRED_BY_MARIA_CHK &&
-           _ma_update_state_lsns_sub(share, translog_get_horizon(),
+          (share->state.create_rename_lsn == LSN_NEEDS_NEW_STATE_LSNS &&
+           _ma_update_state_lsns_sub(share, LSN_IMPOSSIBLE,
                                      trnman_get_min_trid(),
                                      TRUE, TRUE)))
         DBUG_RETURN(1);

=== modified file 'storage/maria/ma_loghandler.c'
--- a/storage/maria/ma_loghandler.c	2008-06-26 19:27:08 +0000
+++ b/storage/maria/ma_loghandler.c	2008-07-09 09:02:27 +0000
@@ -671,6 +671,10 @@ static LOG_DESC INIT_LOGREC_REDO_BITMAP_
  NULL, NULL, NULL, 0,
  "redo_create_bitmap", LOGREC_IS_GROUP_ITSELF, NULL, NULL};
 
+static LOG_DESC INIT_LOGREC_IMPORTED_TABLE=
+{LOGRECTYPE_VARIABLE_LENGTH, 0, 0, NULL, NULL, NULL, 0,
+ "imported_table", LOGREC_IS_GROUP_ITSELF, NULL, NULL};
+
 const myf log_write_flags= MY_WME | MY_NABP | MY_WAIT_IF_FULL;
 
 void translog_table_init()
@@ -758,6 +762,8 @@ void translog_table_init()
     INIT_LOGREC_UNDO_BULK_INSERT;
   log_record_type_descriptor[LOGREC_REDO_BITMAP_NEW_PAGE]=
     INIT_LOGREC_REDO_BITMAP_NEW_PAGE;
+  log_record_type_descriptor[LOGREC_IMPORTED_TABLE]=
+    INIT_LOGREC_IMPORTED_TABLE;
   for (i= LOGREC_FIRST_FREE; i < LOGREC_NUMBER_OF_TYPES; i++)
     log_record_type_descriptor[i].rclass= LOGRECTYPE_NOT_ALLOWED;
 #ifndef DBUG_OFF

=== modified file 'storage/maria/ma_loghandler.h'
--- a/storage/maria/ma_loghandler.h	2008-06-26 05:18:28 +0000
+++ b/storage/maria/ma_loghandler.h	2008-07-09 09:02:27 +0000
@@ -143,6 +143,7 @@ enum translog_record_type
   LOGREC_INCOMPLETE_GROUP,
   LOGREC_UNDO_BULK_INSERT,
   LOGREC_REDO_BITMAP_NEW_PAGE,
+  LOGREC_IMPORTED_TABLE,
   LOGREC_FIRST_FREE,
   LOGREC_RESERVED_FUTURE_EXTENSION= 63
 };

=== modified file 'storage/maria/ma_loghandler_lsn.h'
--- a/storage/maria/ma_loghandler_lsn.h	2008-04-03 13:40:25 +0000
+++ b/storage/maria/ma_loghandler_lsn.h	2008-07-09 09:02:27 +0000
@@ -93,7 +93,13 @@ typedef LSN LSN_WITH_FLAGS;
 #define LSN_ERROR             ((LSN)1)
 
 /** @brief some impossible LSN serve as markers */
-#define LSN_REPAIRED_BY_MARIA_CHK ((LSN)2)
+
+/**
+   When table is modified by maria_chk, or auto-zerofilled, old REDOs don't
+   apply, table is freshly born again somehow: its state's LSNs need to be
+   updated to the new instance which receives this table.
+*/
+#define LSN_NEEDS_NEW_STATE_LSNS ((LSN)2)
 
 /**
    @brief the maximum valid LSN.

=== modified file 'storage/maria/ma_open.c'
--- a/storage/maria/ma_open.c	2008-07-05 11:03:21 +0000
+++ b/storage/maria/ma_open.c	2008-07-09 09:02:27 +0000
@@ -665,7 +665,7 @@ MARIA_HA *maria_open(const char *name, i
     if (share->base.born_transactional)
     {
       share->page_type= PAGECACHE_LSN_PAGE;
-      if (share->state.create_rename_lsn == LSN_REPAIRED_BY_MARIA_CHK)
+      if (share->state.create_rename_lsn == LSN_NEEDS_NEW_STATE_LSNS)
       {
         /*
           Was repaired with maria_chk, maybe later maria_pack-ed. Some sort of
@@ -674,7 +674,7 @@ MARIA_HA *maria_open(const char *name, i
         */
         if (((open_flags & HA_OPEN_FROM_SQL_LAYER) &&
              (share->state.changed & STATE_NOT_MOVABLE)) || maria_in_recovery)
-          _ma_update_state_lsns_sub(share, translog_get_horizon(),
+          _ma_update_state_lsns_sub(share, LSN_IMPOSSIBLE,
                                     trnman_get_min_safe_trid(), TRUE, TRUE);
       }
       else if ((!LSN_VALID(share->state.create_rename_lsn) ||
@@ -688,7 +688,7 @@ MARIA_HA *maria_open(const char *name, i
       {
         /*
           If in Recovery, it will not work. If LSN is invalid and not
-          LSN_REPAIRED_BY_MARIA_CHK, header must be corrupted.
+          LSN_NEEDS_NEW_STATE_LSNS, header must be corrupted.
           In both cases, must repair.
         */
         my_errno=((share->state.changed & STATE_CRASHED_ON_REPAIR) ?

=== modified file 'storage/maria/ma_recovery.c'
--- a/storage/maria/ma_recovery.c	2008-06-26 09:32:22 +0000
+++ b/storage/maria/ma_recovery.c	2008-07-09 09:02:27 +0000
@@ -77,6 +77,7 @@ prototype_redo_exec_hook(FILE_ID);
 prototype_redo_exec_hook(INCOMPLETE_LOG);
 prototype_redo_exec_hook_dummy(INCOMPLETE_GROUP);
 prototype_redo_exec_hook(UNDO_BULK_INSERT);
+prototype_redo_exec_hook(IMPORTED_TABLE);
 prototype_redo_exec_hook(REDO_INSERT_ROW_HEAD);
 prototype_redo_exec_hook(REDO_INSERT_ROW_TAIL);
 prototype_redo_exec_hook(REDO_INSERT_ROW_HEAD);
@@ -1861,6 +1862,24 @@ prototype_redo_exec_hook(UNDO_BULK_INSER
 }
 
 
+prototype_redo_exec_hook(IMPORTED_TABLE)
+{
+  char *name;
+  enlarge_buffer(rec);
+  if (log_record_buffer.str == NULL ||
+      translog_read_record(rec->lsn, 0, rec->record_length,
+                           log_record_buffer.str, NULL) !=
+      rec->record_length)
+  {
+    eprint(tracef, "Failed to read record");
+    return 1;
+  }
+  name= (char *)log_record_buffer.str;
+  tprint(tracef, "Table '%s' was imported (auto-zerofilled) in this Maria instance\n", name);
+  return 0;
+}
+
+
 prototype_redo_exec_hook(COMMIT)
 {
   uint16 sid= rec->short_trid;
@@ -2328,6 +2347,7 @@ static int run_redo_phase(LSN lsn, enum 
   install_redo_exec_hook_shared(REDO_NEW_ROW_TAIL, REDO_INSERT_ROW_TAIL);
   install_redo_exec_hook(UNDO_BULK_INSERT);
   install_undo_exec_hook(UNDO_BULK_INSERT);
+  install_redo_exec_hook(IMPORTED_TABLE);
 
   current_group_end_lsn= LSN_IMPOSSIBLE;
 #ifndef DBUG_OFF

=== modified file 'storage/maria/maria_chk.c'
--- a/storage/maria/maria_chk.c	2008-06-26 05:18:28 +0000
+++ b/storage/maria/maria_chk.c	2008-07-09 09:02:27 +0000
@@ -1155,7 +1155,7 @@ static int maria_chk(HA_CHECK *param, ch
                                T_ZEROFILL | T_ZEROFILL_KEEP_LSN)) !=
            (T_ZEROFILL | T_ZEROFILL_KEEP_LSN)))
         share->state.create_rename_lsn= share->state.is_of_horizon=
-          share->state.skip_redo_lsn= LSN_REPAIRED_BY_MARIA_CHK;
+          share->state.skip_redo_lsn= LSN_NEEDS_NEW_STATE_LSNS;
     }
     if (!error && (param->testflag & T_REP_ANY))
     {
@@ -1409,6 +1409,18 @@ static void descript(HA_CHECK *param, re
       get_date(buff,1,share->state.check_time);
       printf("Recover time:        %s\n",buff);
     }
+    if (share->base.born_transactional)
+    {
+      printf("LSNs:                create_rename (%lu,0x%lx),"
+             " state_horizon (%lu,0x%lx), skip_redo (%lu,0x%lx)\n",
+             LSN_IN_PARTS(share->state.create_rename_lsn),
+             LSN_IN_PARTS(share->state.is_of_horizon),
+             LSN_IN_PARTS(share->state.skip_redo_lsn));
+    }
+    compile_time_assert((MY_UUID_STRING_LENGTH + 1) <= sizeof(buff));
+    buff[MY_UUID_STRING_LENGTH]= 0;
+    my_uuid2str(share->base.uuid, buff);
+    printf("UUID:                %s\n", buff);
     pos=buff;
     if (share->state.changed & STATE_CRASHED)
       strmov(buff,"crashed");

=== modified file 'storage/maria/maria_pack.c'
--- a/storage/maria/maria_pack.c	2008-05-29 15:33:33 +0000
+++ b/storage/maria/maria_pack.c	2008-07-09 09:02:27 +0000
@@ -2979,7 +2979,7 @@ static int save_state(MARIA_HA *isam_fil
   share->state.version=(ulong) time((time_t*) 0);
   if (share->base.born_transactional)
     share->state.create_rename_lsn= share->state.is_of_horizon=
-      share->state.skip_redo_lsn= LSN_REPAIRED_BY_MARIA_CHK;
+      share->state.skip_redo_lsn= LSN_NEEDS_NEW_STATE_LSNS;
   if (! maria_is_all_keys_active(share->state.key_map, share->base.keys))
   {
     /*
@@ -3031,7 +3031,7 @@ static int save_state_mrg(File file,PACK
   state.state.empty=0;
   state.state.records=state.split=(ha_rows) mrg->records;
   state.create_rename_lsn= state.is_of_horizon= state.skip_redo_lsn=
-    LSN_REPAIRED_BY_MARIA_CHK;
+    LSN_NEEDS_NEW_STATE_LSNS;
 
   /* See comment above in save_state about key_file_length handling. */
   if (mrg->src_file_has_indexes_disabled)

=== modified file 'storage/maria/unittest/ma_test_recovery.pl'
--- a/storage/maria/unittest/ma_test_recovery.pl	2008-06-10 13:44:41 +0000
+++ b/storage/maria/unittest/ma_test_recovery.pl	2008-07-09 09:02:27 +0000
@@ -114,7 +114,7 @@ sub main
       die("can't guess table name");
     }
     $com=  "$maria_exe_path/maria_chk$suffix -dvv $table ";
-    $com.= "| grep -v \"Creation time:\" | grep -v \"file length\" ";
+    $com.= "| grep -v \"Creation time:\" | grep -v \"file length\" | grep -v \"LSNs:\" | grep -v \"UUID:\"";
     $com.= "> $tmp/maria_chk_message.good.txt 2>&1";
     my_exec($com);
     my $checksum= my_exec("$maria_exe_path/maria_chk$suffix -dss $table");
@@ -197,7 +197,7 @@ sub main
             die("can't guess table name");
           }
           $com=  "$maria_exe_path/maria_chk$suffix -dvv $table ";
-          $com.= "| grep -v \"Creation time:\" | grep -v \"file length\" ";
+          $com.= "| grep -v \"Creation time:\" | grep -v \"file length\" | grep -v \"LSNs:\" | grep -v \"UUID:\" ";
           $com.= "> $tmp/maria_chk_message.good.txt 2>&1";
           $res= my_exec($com);
           print MY_LOG $res;
@@ -297,7 +297,7 @@ sub check_table_is_same
   }
 
   $com=  "$maria_exe_path/maria_chk$suffix -dvv $table | grep -v \"Creation time:\" ";
-  $com.= "| grep -v \"file length\"> $tmp/maria_chk_message.txt 2>&1";
+  $com.= "| grep -v \"file length\" | grep -v \"LSNs:\" | grep -v \"UUID:\" > $tmp/maria_chk_message.txt 2>&1";
   $res= `$com`;
   print MY_LOG $res;
   $res= `$maria_exe_path/maria_chk$suffix -s -e --read-only $table`;

Thread
bzr commit into MySQL/Maria:mysql-maria branch (guilhem:2656) Bug#37876Guilhem Bichot9 Jul