Server IP : 49.212.180.16 / Your IP : 3.140.248.104 Web Server : Apache System : FreeBSD www2606.sakura.ne.jp 13.0-RELEASE-p14 FreeBSD 13.0-RELEASE-p14 #2: Mon Dec 9 13:54:55 JST 2024 root@www5301.sakura.ne.jp:/usr/obj/usr/src/amd64.amd64/sys/GENERIC amd64 User : utannto ( 1076) PHP Version : 7.4.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : ON | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /home/rs/mysql/5.1/mysql-test/include/ |
Upload File : |
# # SUMMARY # Check if statement reading table '$table' allows concurrent # inserts in it. # # PARAMETERS # $table Table in which concurrent inserts should be allowed. # $con_aux1 Name of the first auxiliary connection to be used by this # script. # $con_aux2 Name of the second auxiliary connection to be used by this # script. # $statement Statement to be checked. # $restore_table Table which might be modified by statement to be checked # and thus needs backing up before its execution and # restoring after it (can be empty). # # EXAMPLE # lock_sync.test # --disable_result_log --disable_query_log # Reset DEBUG_SYNC facility for safety. set debug_sync= "RESET"; if ($restore_table) { --eval create temporary table t_backup select * from $restore_table; } connection $con_aux1; set debug_sync='after_lock_tables_takes_lock SIGNAL parked WAIT_FOR go'; --send_eval $statement; connection $con_aux2; set debug_sync='now WAIT_FOR parked'; --send_eval insert into $table (i) values (0); --enable_result_log --enable_query_log connection default; # Wait until concurrent insert is successfully executed while # statement being checked has its tables locked. # We use wait_condition.inc instead of simply reaping # concurrent insert here in order to avoid deadlocks if test # fails and to time out gracefully instead. let $wait_condition= select count(*) = 0 from information_schema.processlist where info = "insert into $table (i) values (0)"; --source include/wait_condition.inc --disable_result_log --disable_query_log if ($success) { # Apparently concurrent insert was successfully executed. # To be safe against wait_condition.inc succeeding due to # races let us first reap concurrent insert to ensure that # it has really been successfully executed. connection $con_aux2; --reap connection default; set debug_sync= 'now SIGNAL go'; connection $con_aux1; --reap connection default; --echo Success: '$statement' allows concurrent inserts into '$table'. } if (!$success) { # Waiting has timed out. Apparently concurrent insert was blocked. # So to be able to continue we need to end our statement first. set debug_sync= 'now SIGNAL go'; connection $con_aux1; --reap connection $con_aux2; --reap connection default; --echo Error: '$statement' doesn't allow concurrent inserts into '$table'! } --eval delete from $table where i = 0; if ($restore_table) { --eval truncate table $restore_table; --eval insert into $restore_table select * from t_backup; drop temporary table t_backup; } # Clean-up. Reset DEBUG_SYNC facility after use. set debug_sync= "RESET"; --enable_result_log --enable_query_log