Server IP : 172.67.216.182 / Your IP : 162.158.170.16 Web Server : Apache System : Linux krdc-ubuntu-s-2vcpu-4gb-amd-blr1-01.localdomain 5.15.0-142-generic #152-Ubuntu SMP Mon May 19 10:54:31 UTC 2025 x86_64 User : www ( 1000) PHP Version : 7.4.33 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /www/server/mysql/mysql-test/t/ |
Upload File : |
# Let's see if FLUSH TABLES WITH READ LOCK can be killed when waiting # for running commits to finish (in the past it could not) # This will not be a meaningful test on non-debug servers so will be # skipped. # This also won't work with the embedded server test --source include/not_embedded.inc --source include/have_debug.inc # This test needs transactional engine as otherwise COMMIT # won't block FLUSH TABLES WITH GLOBAL READ LOCK. --source include/have_innodb.inc # Save the initial number of concurrent sessions --source include/count_sessions.inc connect (con1,localhost,root,,); connect (con2,localhost,root,,); connection con1; --disable_warnings DROP TABLE IF EXISTS t1; --enable_warnings SET DEBUG_SYNC= 'RESET'; CREATE TABLE t1 (kill_id INT) engine = InnoDB; INSERT INTO t1 VALUES(connection_id()); --echo # Switching to connection 'default'. connection default; --echo # Start transaction. BEGIN; INSERT INTO t1 VALUES(connection_id()); --echo # Ensure that COMMIT will pause once it acquires protection --echo # against its global read lock. SET DEBUG_SYNC='ha_commit_trans_after_acquire_commit_lock SIGNAL acquired WAIT_FOR go'; --echo # Sending: --send COMMIT --echo # Switching to 'con1'. connection con1; --echo # Wait till COMMIT acquires protection against global read --echo # lock and pauses. SET DEBUG_SYNC='now WAIT_FOR acquired'; --echo # Sending: send FLUSH TABLES WITH READ LOCK; --echo # Switching to 'con2'. connection con2; SELECT ((@id := kill_id) - kill_id) FROM t1 LIMIT 1; --echo # Wait till FLUSH TABLES WITH READ LOCK blocks due --echo # to active COMMIT let $wait_condition= select count(*) = 1 from information_schema.processlist where state = "Waiting for commit lock" and info = "flush tables with read lock"; --source include/wait_condition.inc --echo # Kill connection 'con1'. KILL CONNECTION @id; --echo # Switching to 'con1'. connection con1; --echo # Try to reap FLUSH TABLES WITH READ LOCK, --echo # it fail due to killed statement and connection. --error 1317,2013 reap; --echo # Switching to 'con2'. connection con2; --echo # Resume COMMIT. SET DEBUG_SYNC='now SIGNAL go'; --echo # Switching to 'default'. connection default; --echo # Reaping COMMIT. --reap disconnect con2; DROP TABLE t1; SET DEBUG_SYNC= 'RESET'; # Wait till all disconnects are completed --source include/wait_until_count_sessions.inc