| Bug #40807 | Validity point corrupt on restore on powermac platform | ||
|---|---|---|---|
| Submitted: | 18 Nov 2008 2:33 | Modified: | 4 Feb 23:08 |
| Reporter: | Chuck Bell | ||
| Status: | Can't repeat | ||
| Category: | Server: Backup | Severity: | S3 (Non-critical) |
| Version: | 6.0.9 | OS: | Mac OS X (Powermacg5) |
| Assigned to: | Chuck Bell | Target Version: | 6.0-beta |
| Triage: | Triaged: D2 (Serious) | ||
[18 Nov 2008 3:41]
Chuck Bell
Test failure can be seen in mysql-6.0-falcon tree.
[18 Nov 2008 11:10]
John H. Embretsen
Test case failure was already filed as Bug#40759 - "backup.backup test fails with wrong validity_point_time on powermacg5".
[19 Nov 2008 11:33]
Sveta Smirnova
Thank you for the report. Verified as described in both main and falcon trees with failures like in pushbuild.
[5 Dec 2008 11:02]
Oystein Grovlen
I see that in disabled.def, Hakan blames the failure on big-endian architectures. However, I have not been able to reproduce this on Solaris Sparc.
[23 Dec 2008 13:22]
Oystein Grovlen
I have run the backup test 100 times on powermac both with and without the Ingo's fix to Bug#40808, and I have not been able to make it fail. I suggest we reenable the test and see what happens.
[23 Dec 2008 13:51]
Oystein Grovlen
Note that I observe, as reported by Chuck, that the vp_time is wrong. Hence, this is still a valid bug. I will handling the enabling of the backup test in Bug#40759 instead. I will revisit this bug after I have fixed Bug#37146 which deals with timestamps and time zones in general.
[22 Jan 23:12]
Chuck Bell
Observation: The error is simply because the 'timezone' variable does not exist on powermac in the same form as other platforms. Apple has a method timegm() that does what 'mktime() - timezone' does on other platforms. I think part of the problem is the mixing of time structures (e.g. time_t, tm, backup-specific time structures) and/or possibly the incorrect assumptions regarding UTC and timezone conversion. Still investigating a platform independent solution.
[4 Feb 23:08]
Chuck Bell
I have tested this with a (much) newer build on the PowerMacG5 platform (see /cbell/mysql-6.0.9-alpha-pb144) and the problem does not reappear. It seems to be fixed now. Cannot repeat and recommend closing bug report.

Description: The validity point read from the backup stream is not calculated correctly on the powermacg5 platform. The backup.backup test checks the validity point during restore by querying the backup logs. Additional statements show the vailidity point is being incorrectly translated to UTC on the powermacg5 platform. +SELECT * FROM mysql.backup_history where backup_id = @bid;; +backup_id 271 +process_id 0 +binlog_pos 3046 +binlog_file master-bin.000001 +backup_state complete +operation restore +error_num 0 +num_objects 4 +total_bytes 4205 +validity_point_time 1930-04-29 20:37:59 +start_time 2008-11-18 01:29:30 +stop_time 2008-11-18 01:29:30 +host_or_server_name localhost +username root +backup_file test.ba +backup_file_path /Users/mysqldev/cbell/mysql-6.0.9-alpha-pb111/mysql-test /var/master-data/ +user_comment +command RESTORE FROM 'test.ba' +drivers MyISAM, Nodata +select @vp_time; +@vp_time +2008-11-18 01:29:27 How to repeat: ./mysql-test-run.pl backup Suggested fix: Correct code in sql/backup/image_info.h: time_t Image_info::get_vp_time() const { struct tm time; bzero(&time,sizeof(time)); time.tm_year= vp_time.year; time.tm_mon= vp_time.mon; time.tm_mday= vp_time.mday; time.tm_hour= vp_time.hour; time.tm_min= vp_time.min; time.tm_sec= vp_time.sec; /* Note: mktime() assumes that time is expressed as local time and vp_time is in UTC. Hence we must correct the result to get it right. */ return mktime(&time) - (time_t)timezone; } This method is returning the incorrect gmt value.