Server IP : 104.21.38.3 / Your IP : 162.158.170.159 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/perfschema/t/ |
Upload File : |
# ==== Purpose ==== # # Verify that the GTID column of # performance_schema.events_transactions_current and # performance_schema.events_transactions_history has the correct # value, during different parts of the transaction life cycle. # # There are several cases: # # - When GTID_MODE=ON, a GTID of the form UUID:NUMBER is generated. # When GTID_MODE=OFF, transactions have the special GTID # "ANONYMOUS". # # - On a master, the GTID is generated during the transaction commit; # prior to that it is "AUTOMATIC". On a slave, the GTID is specified # (using SET GTID_NEXT) prior to executing the transaction. # # ==== Implementation ==== # # Execute a transaction like: # BEGIN; # INSERT; # COMMIT; # On a different connection, check the GTID columns of the tables # between each statement. # # Transactions to be checked are executed on connection # 'default'. Auxiliary statements to read or truncate the tables are # executed on connection 'server_1'. # # Also execute a ROLLBACK transaction. # # Execute the transaction in these two cases: # - GTID_MODE=ON, # - GTID_MODE=OFF. # # Execute the transaction in these two cases: # - GTID_NEXT='UUID:NUMBER'/'ANONYMOUS' (when GTID_MODE=ON/OFF) # - GTID_NEXT='AUTOMATIC'. # # Due to implementation details, there is a window in time at the # beginning of the transaction when the GTID has not been copied from # the server to the performance_schema internal structures. During # this window, the GTID should be AUTOMATIC even if GTID_NEXT is set # to 'UUID:NUMBER' or 'ANONYMOUS'. To verify this, we use a debug # sync point during the execution of the BEGIN statement. # # ==== References ==== # # WL#7592: GTIDS: generate Gtid_log_event and Previous_gtids_log_event always # - The current behavior was specified and the test was introduced in # this worklog. --source include/have_debug_sync.inc --source include/not_gtid_enabled.inc --let $rpl_topology= none --let $rpl_server_count= 1 --source include/rpl_init.inc --echo ==== Configure ==== --connection default SET GLOBAL ENFORCE_GTID_CONSISTENCY = ON; --let $thread_id= `SELECT THREAD_ID FROM performance_schema.threads WHERE PROCESSLIST_ID = CONNECTION_ID()` --let $server_uuid= `SELECT @@GLOBAL.SERVER_UUID` CREATE TABLE t1 (a INT); # These are parameters to include/execute_at_sync_point.inc, # which will remain the same each time the script is invoked. --let $statement_connection= default --let $auxiliary_connection= server_1 --let $auxiliary_file= suite/perfschema/include/show_transaction_gtid.inc --let $quiet= 1 --echo ==== Test ==== --let $n= 1 while ($n <= 4) { if ($n == 1) { --echo ---- Case 1: Specify ANONYMOUS prior to transaction ---- --let $gtid= ANONYMOUS } if ($n == 2) { --echo ---- Case 2: Generate ANONYMOUS at commit ---- --let $gtid= AUTOMATIC } if ($n == 3) { --let $rpl_gtid_mode= ON --source include/rpl_set_gtid_mode.inc --echo ---- Case 3: Specify GTID prior to transaction ---- --let $gtid= aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1 } if ($n == 4) { --echo ---- Case 4: Generate GTID at commit ---- --let $gtid= AUTOMATIC } # Execute a transaction, show the GTID column of the tables # after ROLLBACK. --echo * BEGIN ... ROLLBACK --source ../include/reset_transaction_gtid.inc --source ../include/show_transaction_gtid.inc eval SET SESSION GTID_NEXT = '$gtid'; BEGIN; eval INSERT INTO t1 VALUES ($n); ROLLBACK; --source ../include/show_transaction_gtid.inc # Same transaction as above, but with a commit. Show the GTID column # of the tables between each statement, as well as in the middle of # the BEGIN statement. --echo * BEGIN ... COMMIT --source ../include/reset_transaction_gtid.inc --source ../include/show_transaction_gtid.inc eval SET SESSION GTID_NEXT = '$gtid'; --source ../include/show_transaction_gtid.inc --let $statement= BEGIN --let $sync_point= after_set_transaction_psi_before_set_transaction_gtid --source include/execute_at_sync_point.inc --source ../include/show_transaction_gtid.inc eval INSERT INTO t1 VALUES ($n); --source ../include/show_transaction_gtid.inc COMMIT; --source ../include/show_transaction_gtid.inc # A transaction executed with AUTOCOMMIT=OFF and no BEGIN. Show the # GTID column between each statement, as well as in the middle of # the first DML statement. --echo * AUTOCOMMIT = OFF SET @@SESSION.AUTOCOMMIT = 0; --source ../include/reset_transaction_gtid.inc --source ../include/show_transaction_gtid.inc eval SET SESSION GTID_NEXT = '$gtid'; --source ../include/show_transaction_gtid.inc --let $statement= INSERT INTO t1 VALUES ($n) --let $sync_point= begin_decide_logging_format --source include/execute_at_sync_point.inc --source ../include/show_transaction_gtid.inc COMMIT; --source ../include/show_transaction_gtid.inc # A single-statement transaction executed with AUTOCOMMIT=ON and no # BEGIN. Show the GTID column before and after, as well as in the # middle of the statement. --echo * AUTOCOMMIT = ON SET @@SESSION.AUTOCOMMIT = 1; --source ../include/reset_transaction_gtid.inc --source ../include/show_transaction_gtid.inc eval SET SESSION GTID_NEXT = '$gtid'; --source ../include/show_transaction_gtid.inc --let $statement= INSERT INTO t1 VALUES ($n) --let $sync_point= begin_decide_logging_format --source include/execute_at_sync_point.inc --source ../include/show_transaction_gtid.inc # Disabled because DDL is not inserted into the tables if (0) { # An implicitly committing statement (DDL), no BEGIN. --echo * implicit commit (DDL) --source ../include/reset_transaction_gtid.inc --source ../include/show_transaction_gtid.inc eval SET SESSION GTID_NEXT = '$gtid'; --source ../include/show_transaction_gtid.inc --let $statement= CREATE TABLE t_$n (a INT) --let $sync_point= begin_decide_logging_format --source include/execute_at_sync_point.inc --source ../include/show_transaction_gtid.inc } --inc $n } --echo ==== Clean up ==== DROP TABLE t1; # DROP TABLE t_1, t_2, t_3, t_4; --let $rpl_gtid_mode= OFF --source include/rpl_set_gtid_mode.inc SET GLOBAL ENFORCE_GTID_CONSISTENCY = OFF; --source include/rpl_end.inc