List:Commits« Previous MessageNext Message »
From:Oystein Grovlen Date:June 25 2008 1:41pm
Subject:bzr push into mysql-6.0-backup branch (oystein.grovlen:2642) Bug#36624
View as plain text  
 2642 Oystein Grovlen	2008-06-25
      BUG#36624 Backup stream library works wrong on 64bit platform.
      Restore failed on multi-block backup images on 64-bit platforms
      with 'Error when reading summary section of backup image'.
      Fixed by casting int to unsigned before performing shift left
      operation.
      
      I have verified that all shift-left operations in the backup
      directory are now based on unsigned ints. This is necessary to
      avoid problems with sign bit on 64-bit platforms.
modified:
  mysql-test/lib/mtr_report.pl
  mysql-test/r/backup_multi_blocks.result
  mysql-test/t/backup_multi_blocks.test
  sql/backup/stream_v1_transport.c

=== modified file 'mysql-test/lib/mtr_report.pl'
--- a/mysql-test/lib/mtr_report.pl	2008-06-23 14:53:35 +0000
+++ b/mysql-test/lib/mtr_report.pl	2008-06-25 13:40:49 +0000
@@ -333,13 +333,7 @@ sub mtr_report_stats ($) {
 		(
 		  /Backup:/ or /Restore:/ or /Can't open the online backup progress tables/
 		) or
-
-                # Filter expected Restore error in backup_multi_blocks
-                ($testname eq 'main.backup_multi_blocks') and
-                (
-                 /Restore: Error when reading summary section of backup image/
-                ) or
-
+                
 		# The tablespace test triggers error below on purpose
 		($testname eq 'main.backup_tablespace') and
 		(

=== modified file 'mysql-test/r/backup_multi_blocks.result'
--- a/mysql-test/r/backup_multi_blocks.result	2008-06-23 14:53:35 +0000
+++ b/mysql-test/r/backup_multi_blocks.result	2008-06-25 13:40:49 +0000
@@ -29,12 +29,14 @@ backup_id
 DROP DATABASE mysqltest;
 Performing restore ...
 RESTORE FROM 'test.ba';
-ERROR HY000: Error when reading summary section of backup image
+backup_id
+#;
 Checking contents of restore ...
 SELECT LENGTH(a) FROM t1;
 LENGTH(a)
+32768
 CHECKSUM TABLE t1;
 Table	Checksum
-mysqltest.t1	0
+mysqltest.t1	3394496868
 Clean-up
 DROP DATABASE mysqltest;

=== modified file 'mysql-test/t/backup_multi_blocks.test'
--- a/mysql-test/t/backup_multi_blocks.test	2008-06-23 14:53:35 +0000
+++ b/mysql-test/t/backup_multi_blocks.test	2008-06-25 13:40:49 +0000
@@ -1,14 +1,7 @@
 --source include/not_embedded.inc
---source include/have_debug.inc
-
-# Run test only on 64-bit platforms until BUG#36624 has been fixed.
---source include/have_64bit.inc
-
 
 # Test that it is possible to restore backups of tables with more than
-# a single block of data.  Until BUG#36624 is fixed, restore will fail
-# on 64-bit platforms.  Test is temporarily modified to expect this
-# failure.
+# a single block of data.
 
 --disable_warnings
 DROP DATABASE IF EXISTS mysqltest;
@@ -37,9 +30,9 @@ BACKUP DATABASE mysqltest TO 'test.ba';
 
 DROP DATABASE mysqltest;
 
-# Perform restore.  Will fail on 64-bit platforms due to BUG#36224
+# Perform restore.
 --echo Performing restore ...
---error ER_BACKUP_READ_SUMMARY
+--replace_column 1 #;
 RESTORE FROM 'test.ba';
 
 --echo Checking contents of restore ...

=== modified file 'sql/backup/stream_v1_transport.c'
--- a/sql/backup/stream_v1_transport.c	2008-06-23 14:53:35 +0000
+++ b/sql/backup/stream_v1_transport.c	2008-06-25 13:40:49 +0000
@@ -696,7 +696,7 @@ int load_buffer(backup_stream *s)
     for (i= 0; i<4; ++i)
     {
       block_size >>= 8;
-      block_size |= (*(s->buf.begin++)) << 3*8;
+      block_size |= ((unsigned long int) *(s->buf.begin++)) << 3 * 8;
     }
 
     /*

Thread
bzr push into mysql-6.0-backup branch (oystein.grovlen:2642) Bug#36624Oystein Grovlen25 Jun