Server IP : 185.86.78.101 / Your IP : 216.73.216.124 Web Server : Apache System : Linux 675867-vds-valikoshka1996.gmhost.pp.ua 5.4.0-150-generic #167-Ubuntu SMP Mon May 15 17:35:05 UTC 2023 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 : OFF Directory : /www/server/mysql/mysql-test/t/ |
Upload File : |
--source include/have_debug_sync.inc --source include/have_gtid.inc # Save the initial number of concurrent sessions --source include/count_sessions.inc --echo # --echo # BUG#21463167 - GTIDS: LOCK_OPEN DEADLOCK WITH REVOKE INCIDENT + --echo # SHOW TABLE STATUS CONCURRENTLY --echo # CREATE USER u1; CREATE TABLE t1(a INT); CREATE VIEW v1 AS SELECT * FROM t1; CALL mtr.add_suppression("REVOKE failed while revoking all_privileges from a list of users."); --enable_connect_log --connect (con1, localhost, root,,) # Set force_mysql_revoke_all_fail in order to simulate partial execution failure # in mysql_revoke_all(). In this case execution flow go to the 'if' branch where # mysql_bin_log.write_incident is called. SET debug="+d,force_mysql_revoke_all_fail"; # When the sync point revoke_all_before_write_incident_to_binlog # will be hit a write lock for LOCK_grant has already been acquired # in mysql_revoke_all() and we are waiting for the signal revoke_all_cont # be emitted to go inside mysql_bin_log.write_incident() where LOCK_open # will be acquired. SET DEBUG_SYNC='revoke_all_before_write_incident_to_binlog SIGNAL revoke_all_has_lock_grant WAIT_FOR revoke_all_cont'; --connection default # Set the debug variable force_check_table_access_return_ok # in order to avoid calling of check_grant as part of handling # the statement SET DEBUG_SYNC="....". If we didn't do so we would be suspended on # waiting for LOCK_grant be released that had been acquired on handling REVOKE ALL. SET debug="+d,force_check_table_access_return_ok"; --connection con1 # Processing of the following REVOKE ALL will be suspended on # the sync point revoke_all_before_write_incident_to_binlog waiting until # the signal revoke_all_cont be emitted. While suspending it holds # the lock LOCK_grant on write. --echo # Sending REVOKE ALL PRIVILEGES --send REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'u1'@'%' --connection default # In the default connection we are waiting until processing of the statement # REVOKE ALL PRIVILEGES hit the sync point revoke_all_before_write_incident_to_binlog. # When this happen the connection con1 holds LOCK_grant on write. SET DEBUG_SYNC='now WAIT_FOR revoke_all_has_lock_grant'; # When processing the statement SHOW TABLE STATUS we will hit the sync point # fill_effective_table_privileges that will emit signal revoke_all_cont. # At this point we know that REVOKE ALL PRIVILEGES has already acquired LOCK_grant. # Waken up thread that is handling REVOKE ALL PRIVILEGES will try to acquire # LOCK_open while executing mysql_bin_log.write_incident(). SET DEBUG_SYNC='fill_effective_table_privileges SIGNAL revoke_all_cont'; --replace_column 12 x # When there is a view while handling SHOW TABLE STATUS the function mysql_make_view() # is called from open_table(). LOCK_open has been acquired within open_table before calling # mysql_make_view and when we are trying to lock LOCK_grant on read from # revoke_all_before_write_incident_to_binlog we would get a deadlock without the patch. SHOW TABLE STATUS; --connection con1 # Get execution result of REVOKE ALL PRIVILEGES. # We expect the error ER_REVOKE_GRANTS since the debug variable force_mysql_revoke_all_fail # was set to simulate failure of REVOKE ALL PRIVILEGES --echo # Reaping REVOKE ALL PRIVILEGES --error ER_REVOKE_GRANTS --reap --connection default --disconnect con1 DROP USER u1; DROP VIEW v1; DROP TABLE t1; # Wait till we reached the initial number of concurrent sessions --source include/wait_until_count_sessions.inc --disable_connect_log SET debug='';