List:Commits« Previous MessageNext Message »
From:Chuck Bell Date:June 17 2008 2:42pm
Subject:bzr commit into mysql-6.0-backup branch (cbell:2619) Bug#36749, Bug#36778
View as plain text  
#At file:///C:/source/bzr/mysql-6.0-bug-36749/

 2619 Chuck Bell	2008-06-17
      BUG#36778 Read operation during RESTORE leads to data loss
      
      This bug is related to BUG#36749. The patch for BUG#36749 fixes this problem. The problem is
      while the native driver is running, any open of the table alters its status thereby leaving
      the table in an incorrect state. In this case, the table is emptied. Locking the tables
      before restore (as done in BUG#36749) fixes the problem and forces other connections to wait
      until the restore is complete to run.
modified:
  mysql-test/r/backup_lock_myisam.result
  mysql-test/t/backup_lock_myisam.test

per-file messages:
  mysql-test/r/backup_lock_myisam.result
    New result file.
  mysql-test/t/backup_lock_myisam.test
    Test added to ensure the bug does not repeat
=== modified file 'mysql-test/r/backup_lock_myisam.result'
--- a/mysql-test/r/backup_lock_myisam.result	2008-06-17 12:40:00 +0000
+++ b/mysql-test/r/backup_lock_myisam.result	2008-06-17 14:42:06 +0000
@@ -86,6 +86,55 @@ a
 11
 12
 13
+SET DEBUG_SYNC= 'RESET';
+DELETE FROM db2.t2;
+now start the restore and while the restore is running, fire the trigger
+activate synchronization points for restore.
+SET DEBUG_SYNC= 'restore_in_progress SIGNAL wait_for_restore WAIT_FOR finish';
+RESTORE FROM 'db1.bak';
+From breakpoints:
+Wait for restore to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR wait_for_restore';
+breakpoints: Show process list.
+SELECT id, command, state, info FROM INFORMATION_SCHEMA.PROCESSLIST
+WHERE info LIKE "RESTORE%";
+From con2:
+Now do the select while restore is running.
+SELECT * FROM db1.t1 limit 10;
+From breakpoints:
+breakpoints: Sending finish signal to wake restore.
+SET DEBUG_SYNC= 'now SIGNAL finish';
+Reattach to connection 2 and finish.
+a
+1
+2
+3
+4
+5
+6
+7
+8
+9
+0
+Reattach to connection 1 and finish.
+backup_id
+#
+Show the count for t1. It should be the same as before restore.
+SELECT COUNT(*) FROM db1.t1;
+COUNT(*)
+327680
+SELECT * FROM db1.t2;
+a
+1
+2
+3
+4
+5
+SELECT * FROM db1.t3;
+a
+11
+12
+13
 cleanup
 DROP DATABASE db1;
 DROP DATABASE db2;

=== modified file 'mysql-test/t/backup_lock_myisam.test'
--- a/mysql-test/t/backup_lock_myisam.test	2008-06-17 12:40:00 +0000
+++ b/mysql-test/t/backup_lock_myisam.test	2008-06-17 14:42:06 +0000
@@ -132,6 +132,55 @@ SELECT * FROM db1.t2;
 
 SELECT * FROM db1.t3;
 
+SET DEBUG_SYNC= 'RESET';
+
+#
+# BUG#36778 - Data loss during select at time of restore.
+#
+
+DELETE FROM db2.t2;
+
+--echo now start the restore and while the restore is running, fire the trigger
+--echo activate synchronization points for restore.
+SET DEBUG_SYNC= 'restore_in_progress SIGNAL wait_for_restore WAIT_FOR finish';
+--send RESTORE FROM 'db1.bak'
+
+--echo From breakpoints:
+--connection breakpoints
+--echo Wait for restore to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR wait_for_restore';
+
+--echo breakpoints: Show process list.
+--replace_column 1 #
+query_vertical SELECT id, command, state, info FROM INFORMATION_SCHEMA.PROCESSLIST
+WHERE info LIKE "RESTORE%";
+
+--echo From con2:
+--connection con2
+--echo Now do the select while restore is running.
+send SELECT * FROM db1.t1 limit 10;
+
+--echo From breakpoints:
+--connection breakpoints
+--echo breakpoints: Sending finish signal to wake restore.
+SET DEBUG_SYNC= 'now SIGNAL finish';
+
+--echo Reattach to connection 2 and finish.
+--connection con2
+--reap
+
+--echo Reattach to connection 1 and finish.
+--connection con1
+--replace_column 1 #
+--reap
+
+--echo Show the count for t1. It should be the same as before restore.
+SELECT COUNT(*) FROM db1.t1;
+
+SELECT * FROM db1.t2;
+
+SELECT * FROM db1.t3;
+
 --echo cleanup
 DROP DATABASE db1;
 DROP DATABASE db2;

Thread
bzr commit into mysql-6.0-backup branch (cbell:2619) Bug#36749, Bug#36778Chuck Bell17 Jun
  • Re: bzr commit into mysql-6.0-backup branch (cbell:2619) Bug#36749,Bug#36778Jørgen Løland19 Jun