Bug #41755 | Intermittent failures of concurrent_ddl.test | ||
---|---|---|---|
Submitted: | 26 Dec 2008 13:34 | Modified: | 6 Feb 2009 17:38 |
Reporter: | Davi Arnaut (OCA) | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Tests | Severity: | S3 (Non-critical) |
Version: | 6.0-runtime | OS: | Linux |
Assigned to: | Jørgen Austvik | CPU Architecture: | Any |
[26 Dec 2008 13:34]
Davi Arnaut
[28 Jan 2009 13:22]
Jørgen Austvik
Davi, thanks for your report. I am not able to reproduce here. [ja@frigg24:mysql-test] uname -a Linux frigg24 2.6.18-53.1.14.el5 #1 SMP Tue Feb 19 07:18:46 EST 2008 x86_64 x86_64 x86_64 GNU/Linux [ja@frigg24:mysql-test] cat /etc/redhat-release Red Hat Enterprise Linux Server release 5.1 (Tikanga) Branch: mysql-6.0-runtime Could you please run: ./mysql-test-run --debug --suite=ddl_lock concurrent_ddl ...and attach or mail me var/log/master.trace from your run? Also, are we running on the same branch and platform?
[28 Jan 2009 13:41]
Davi Arnaut
Branch is 6.0-runtime based on revno: 2714 Linux skynet 2.6.27-9-server #1 SMP Thu Nov 20 22:56:07 UTC 2008 x86_64 GNU/Linux Ubuntu 8.10 MTR_BUILD_THREAD="1798" MTR_MEM="/dev/shm" 2x Dual-Core AMD Opteron(tm) Processor 2222 Trace file attached for failure: mysqltest: At line 411: query 'reap' failed: 1146: Table 'test.t2' doesn't exist
[28 Jan 2009 14:40]
Jørgen Austvik
This is the test code: ---------8<--------------8<--------------8<--------------8<----- --echo # Switch to connection locker connection locker; SET DEBUG_SYNC= 'after_lock_tables_takes_lock SIGNAL locked WAIT_FOR do_unlock'; --echo # "send" next statement send ALTER TABLE t1 RENAME t2; --echo # Switch to connection waiter connection waiter; SET DEBUG_SYNC= 'now WAIT_FOR locked'; SET DEBUG_SYNC= 'after_start_ddl SIGNAL do_unlock'; --echo # "send" next statement send ALTER TABLE t2 RENAME t3; ---------8<--------------8<--------------8<--------------8<----- In Davi's run, rename from t2 to t3 is T@6 and signals do_unlock to T@5 which is the rename t1 to t2: ---------8<--------------8<--------------8<--------------8<----- T@6 : | | | | | | | debug_sync: sync_point: 'after_start_ddl' activation_count: 1 hit_limit: 0 execute: 1 timeout: 0 signal: 'do_unlock' wait_for: '' T@6 : | | | | | | | mutex: debug_sync_global.ds_mutex (0x1364bd0) locking T@6 : | | | | | | | mutex: debug_sync_global.ds_mutex (0x1364bd0) locked T@6 : | | | | | | | debug_sync_exec: signal 'do_unlock' at: 'after_start_ddl' ---------8<--------------8<--------------8<--------------8<----- ...but then dies out when it can't find the file with the table definition: ---------8<--------------8<--------------8<--------------8<----- T@6 : | | | | | | >my_open T@6 : | | | | | | | my: Name: './test/t2.frm' Flags: 0 MyFlags: 0 T@6 : | | | | | | <my_open T@6 : | | | | | | >my_register_filename T@6 : | | | | | | | error: Got error 2 on open ---------8<--------------8<--------------8<--------------8<----- When I run, T@5 is the rename t2 to t3 and T@4 is rename t1 to t2, but the significant difference is that T@5 is locked on the open table, and then T@4 takes over. ---------8<--------------8<--------------8<--------------8<----- T@5 : | | | | | >mysql_frm_type T@5 : | | | | | | >my_open T@5 : | | | | | | | my: Name: './test/t2.frm' Flags: 0 MyFlags: 0 T@4 : | | | | | | | | | | debug_sync: awoke from do_unlock global: do_unlock error: 0 T@4 : | | | | | | | | | | debug_sync_exec: resume from 'do_unlock' at: 'after_lock_tables_takes_lock' T@4 : | | | | | | | | | | mutex: debug_sync_global.ds_mutex (0x1035310) unlocking T@4 : | | | | | | | | | | mutex: mysys_var->mutex (0xa404228) locking T@4 : | | | | | | | | | | mutex: mysys_var->mutex (0xa404228) locked ---------8<--------------8<--------------8<--------------8<----- This is how the test is designed. When T@4 is finished with the work and unlock the MDL, T@5 wil run and rename the table. Now I have to figure out why Davi's myopen returns to quickly: ---------8<--------------8<--------------8<--------------8<----- T@6 : | | | | | | >my_open T@6 : | | | | | | | my: Name: './test/t2.frm' Flags: 0 MyFlags: 0 T@6 : | | | | | | <my_open ---------8<--------------8<--------------8<--------------8<-----
[29 Jan 2009 11:42]
Jørgen Austvik
Further investigations by Davi, Trond and me makes us believe the open() system call in my_open() makes the thread being rescheduled in my environment, but not in Davi's environment. The test therefor depends on a side effect in my environment, end it is therefor a bug in the test case. To fix it, I must stop the first rename (t1 to t2) thread while it has an exclusive MDL lock on t2, either by using another sync point, or by adding a new sync point.
[2 Feb 2009 15:33]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/64884 2718 Jorgen Austvik 2009-02-02 bug#41755: add sync point and use it for testing locking of table names during ALTER TABLE RENAME
[4 Feb 2009 9:11]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/65101 2718 Jorgen Austvik 2009-02-04 bug#41755: add sync point and use it for testing locking of table names during ALTER TABLE RENAME
[4 Feb 2009 22:46]
Bugs System
Pushed into 6.0.10-alpha (revid:kostja@sun.com-20090204224034-07j5981v33849tkw) (version source revid:jorgen.austvik@sun.com-20090204091118-y696ncr59wcyki5b) (merge vers: 6.0.10-alpha) (pib:6)
[5 Feb 2009 7:40]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/65287 2812 He Zhenxing 2009-02-05 [merge] Auto merge 6.0 -> 6.0-rpl
[6 Feb 2009 17:38]
Paul DuBois
Test suite changes. No changelog entry needed.