Server IP : 172.67.216.182 / Your IP : 172.70.208.140 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/src/mysql-test/suite/binlog/t/ |
Upload File : |
############################################################################### # Bug#22915670 'XA ROLLBACK' ASSERTS AFTER FAILED XA PREPARE # Problem: A 'XA PREPARE' that is failed in intermediate steps is leaving the # 'xa' transaction state in a bad way (ID = -1 but binlogged flag is 'true'). # This is causing problems (hitting asserts) while executing # 'XA COMMIT/ROLLBACK' queries. # Steps to reproduce: # 1) Start a XA transaction # 2) Inject a failure point for 'XA PREPARE' # 3) Execute 'XA PREPARE'. Check that 'XA PREPARE' failed as expected. # 4) After failure, execute XA ROLLBACK or XA COMMIT. # It should fail with UNKNOWN XID error instead of ASSERT. # 5) Repeat step 2 and 4 with different failure points. ############################################################################### --source include/have_debug.inc --source include/have_log_bin.inc CALL mtr.add_suppression("Statement is unsafe because it is being used inside a XA transaction"); # Initial setup SET @save_session_debug= @@SESSION.debug; CREATE TABLE t1 (a INT PRIMARY KEY); # Loop through three failure points --let $iter=1 while ($iter <= 3) { # Step-1: Start A XA transaction. XA START 'xa1'; --disable_warnings INSERT INTO t1 VALUES (1); --enable_warnings XA END 'xa1'; # Step-2: Inject a failure point for 'XA PREPARE' if ( $iter == 1) { SET @@SESSION.debug = "+d,simulate_xa_prepare_failure_in_cache_finalize"; } if ( $iter == 2) { SET @@SESSION.debug = "+d,simulate_failure_in_before_commit_hook"; } if ( $iter == 3) { SET @@SESSION.debug = "+d,simulate_transaction_rollback_request"; } # Step-3: Execute 'XA PREPARE' and check that 'XA PREPARE' failed as expected. --error ER_XA_RBROLLBACK,ER_TRANSACTION_ROLLBACK_DURING_COMMIT XA PREPARE 'xa1'; # Step-4: Execute 'XA COMMIT/ XA ROLLBACK'. Check that it fails with error. --error ER_XAER_NOTA XA ROLLBACK 'xa1'; --error ER_XAER_NOTA XA COMMIT 'xa1'; # Step-5: Repeat for other failure points. --inc $iter } # Cleanup SET @@SESSION.debug= @save_session_debug; DROP TABLE t1;