403Webshell
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 :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /www/server/mysql/src/mysql-test/suite/binlog/t/binlog_xa_prepare_failure.test
###############################################################################
# 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;

Youez - 2016 - github.com/yon3zu
LinuXploit