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

 

Command :


[ Back ]     

Current File : /www/server/mysql/src/mysql-test/suite/perfschema/t/transaction_gtid.test
# ==== 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

Youez - 2016 - github.com/yon3zu
LinuXploit