403Webshell
Server IP : 172.67.216.182  /  Your IP : 172.69.165.18
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/extra/binlog_tests/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /www/server/mysql/src/mysql-test/extra/binlog_tests/enforce_gtid_consistency.test
# ==== Purpose ====
#
# Test that GTID-consistency violations generate warnings or errors,
# or pass with success, as expected.
#
# Generally, the following statement types are considered to be GTID
# consistency violations:
#
#  1. DML statements that mix non-transactional updates with
#     transactional updates. (Exception: non-transactional *temporary*
#     tables do not count, in case the statement is logged in row
#     format.)
#
#  2. Transactions that use non-transactional tables after having used
#     transactional tables. (Exception: non-transactional *temporary*
#     tables do not count, in case the statement is logged in row
#     format.)
#
#  3. CREATE TABLE ... SELECT.
#
#  4. CREATE TEMPORARY TABLE or DROP TEMPORARY TABLE within a
#     transaction
#
# A GTID-violating statement can pass with success, generate a
# warning, or generate an error, according to the following rules:
#
#  1. If ENFORCE_GTID_CONSISTENCY=ON, or GTID_NEXT='UUID:NUMBER', or
#     (GTID_NEXT='AUTOMATIC' and GTID_MODE=ON or ON_PERMISSIVE),
#     generate an error.
#
#  2. Otherwise, if ENFORCE_GTID_CONSISTENCY=WARN, generate a warning.
#
#  3. Otherwise, statement should pass without warning or error.
#
# ==== Implementation ====
#
# Iterate over all values of enforce_gtid_consistency.
# Iterate over all values of gtid_mode.
# For each gtid_next in automatic, anonymus, and GTID:
#   source $test_specification
#
# $test_specification must be set by the caller to one of:
# - extra/binlog/enforce_gtid_consistency_temporary.test
# - extra/binlog/enforce_gtid_consistency_create_select.test
# - extra/binlog/enforce_gtid_consistency_trx_nontrx.test
#
# Each of
# extra/binlog/enforce_gtid_consistency_[temporary|create_select|trx_nontrx].test
# contains a number of specific test scenarios. Each test scenario has
# a statement that will be tested. For some scenarios, the expectation
# is that the statement violates GTID consistency, for other scenarios
# the expectation is that the statement does not violate GTID
# consistency.  Each scenario sources
# extra/binlog_tests/enforce_gtid_consistency_statement.inc to execute
# the statement and verify that the outcome is as expected.
#
# ==== References ====
#
# WL#3584: Global Transaction Identifiers
# - Created the test.
# WL#7083: GTIDs: set gtid_mode=ON online
# - Rewrote the test to improve coverage and test new logic for
#   enforce_gtid_consistency.

# This test uses ONGOING_ANONYMOUS_GTID_VIOLATING_TRANSACTION_COUNT
# and ONGOING_AUTOMATIC_GTID_VIOLATING_TRANSACTION_COUNT, which are
# only define in debug mode.
--source include/have_debug.inc
--source include/have_debug_sync.inc

--source include/have_myisam.inc
--source include/have_innodb.inc
--let $rpl_gtid_utils= 1
--let $rpl_server_count= 1
--let $rpl_topology= none
--source include/rpl_init.inc

--connection server_1

# Disable warnings from binlog_format-unsafe statements, since they
# confuses the logic for checking that a GTID-violation warning was
# generated.
--let $binlog_format= `SELECT @@SESSION.BINLOG_FORMAT`
--let $binlog_direct_non_transactional_updates= `SELECT @@SESSION.BINLOG_DIRECT_NON_TRANSACTIONAL_UPDATES`
SET @old_sql_notes= @@GLOBAL.SQL_NOTES;
SET GLOBAL SQL_NOTES= 0;
SET SESSION SQL_NOTES= 0;

CALL mtr.add_suppression('Statement violates GTID consistency:');
CALL mtr.add_suppression('Unsafe statement written to the binary log');

--let $gtid_next_mask_mode= 1
--let $gtid_next_connection= default

--let $statement_connection= default
--let $auxiliary_connection= server_1_1

--connection $statement_connection

# Foreach enforce_gtid_consistency = 0, 1, 2.
--let $enforce_gtid_consistency= 0
while ($enforce_gtid_consistency < 3)
{
  eval SET GLOBAL ENFORCE_GTID_CONSISTENCY = $enforce_gtid_consistency;
  --let $enforce_gtid_consistency_text= `SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('OFF,ERROR,WARN', ',', $enforce_gtid_consistency + 1), ',', -1)`

  # Foreach gtid_mode = [3,] 2, 1, 0.
  # 3 is only used when enforce_gtid_consistency=1.
  SET GLOBAL GTID_MODE = OFF_PERMISSIVE;
  SET GLOBAL GTID_MODE = ON_PERMISSIVE;
  if ($enforce_gtid_consistency != 1)
  {
    --let $gtid_mode= 2
  }
  if ($enforce_gtid_consistency == 1)
  {
    --let $gtid_mode= 3
    SET GLOBAL GTID_MODE = ON;
  }
  while ($gtid_mode >= 0)
  {
    eval SET GLOBAL GTID_MODE = $gtid_mode;
    --let $gtid_mode_text= `SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('OFF,OFF_PERMISSIVE,ON_PERMISSIVE,ON', ',', $gtid_mode + 1), ',', -1)`

    --echo ######## ENFORCE_GTID_CONSISTENCY=$enforce_gtid_consistency_text GTID_MODE=$gtid_mode_text GTID_NEXT=AUTOMATIC ########
    --let $gtid_next= AUTOMATIC
    --let $violation_result= $enforce_gtid_consistency
    if ($gtid_mode >= 2)
    {
      --let $violation_result= 1
    }
    --source $test_file

    if ($gtid_mode < 3)
    {
      --echo ######## ENFORCE_GTID_CONSISTENCY=$enforce_gtid_consistency_text GTID_MODE=$gtid_mode_text GTID_NEXT=ANONYMOUS ########
      --let $gtid_next= ANONYMOUS
      --let $violation_result= $enforce_gtid_consistency
      --source $test_file
    }
    if ($gtid_mode > 0)
    {
      --echo ######## ENFORCE_GTID_CONSISTENCY=$enforce_gtid_consistency_text GTID_MODE=$gtid_mode_text GTID_NEXT=GTID ########
      --let $gtid_next= GTID
      --let $violation_result= 1
      --source $test_file
    }

    --dec $gtid_mode
  }

  --inc $enforce_gtid_consistency
}

--connection server_1

SET GLOBAL ENFORCE_GTID_CONSISTENCY = OFF;
SET GLOBAL SQL_NOTES = @old_sql_notes;

--source include/rpl_end.inc

Youez - 2016 - github.com/yon3zu
LinuXploit