1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
|
###############################################################################
# Variable Name: binlog_transaction_dependency_tracking
# Scope: global
# Access Type: dynamic
# Data Type: enum
#
# Description: Test Cases of Dynamic System Variable
# "binlog_transaction_dependency_history_size" that checks
# behavior of this variable in the following ways
# * Scope & Access type
# * Valid & Default value
# * Invalid values
# * Dependency on transaction_write_set_extraction
#
# Reference: WL#9556
###############################################################################
--source include/have_binlog_format_row.inc
# Save initial value
--let $saved_binlog_transaction_dependency_tracking= `SELECT @@global.binlog_transaction_dependency_tracking`
--let $saved_transaction_write_set_extraction= `SELECT @@global.transaction_write_set_extraction`
# Set initial values to test further
SET GLOBAL binlog_transaction_dependency_tracking= 'COMMIT_ORDER';
SET GLOBAL transaction_write_set_extraction= 'XXHASH64';
#
# Scope: Global only
#
SELECT COUNT(@@GLOBAL.binlog_transaction_dependency_tracking);
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
SELECT COUNT(@@SESSION.binlog_transaction_dependency_tracking);
--disable_warnings
SELECT VARIABLE_NAME FROM performance_schema.global_variables WHERE VARIABLE_NAME='binlog_transaction_dependency_tracking';
SELECT VARIABLE_NAME FROM performance_schema.session_variables WHERE variable_name='binlog_transaction_dependency_tracking';
--enable_warnings
#
# Access Type: Dynamic
#
SET GLOBAL binlog_transaction_dependency_tracking= 'COMMIT_ORDER';
--let $assert_text= 'binlog_transaction_dependency_tracking is a dynamic variable'
--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_tracking]" = "COMMIT_ORDER"
--source include/assert.inc
#
# Valid values and Default value
#
SET GLOBAL binlog_transaction_dependency_tracking= 'COMMIT_ORDER';
--let $assert_text= 'binlog_transaction_dependency_tracking should be COMMIT_ORDER'
--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_tracking]" = "COMMIT_ORDER"
--source include/assert.inc
SET GLOBAL binlog_transaction_dependency_tracking= 0;
--let $assert_text= 'binlog_transaction_dependency_tracking should be COMMIT_ORDER'
--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_tracking]" = "COMMIT_ORDER"
--source include/assert.inc
SET GLOBAL binlog_transaction_dependency_tracking= 'WRITESET';
--let $assert_text= 'binlog_transaction_dependency_tracking should be WRITESET'
--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_tracking]" = "WRITESET"
--source include/assert.inc
SET GLOBAL binlog_transaction_dependency_tracking= 1;
--let $assert_text= 'binlog_transaction_dependency_tracking should be WRITESET'
--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_tracking]" = "WRITESET"
--source include/assert.inc
SET GLOBAL binlog_transaction_dependency_tracking= 'WRITESET_SESSION';
--let $assert_text= 'binlog_transaction_dependency_tracking should be WRITESET_SESSION'
--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_tracking]" = "WRITESET_SESSION"
--source include/assert.inc
SET GLOBAL binlog_transaction_dependency_tracking= 2;
--let $assert_text= 'binlog_transaction_dependency_tracking should be WRITESET_SESSION'
--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_tracking]" = "WRITESET_SESSION"
--source include/assert.inc
SET GLOBAL binlog_transaction_dependency_tracking= DEFAULT;
--let $assert_text= 'binlog_transaction_dependency_tracking should be COMMIT_ORDER'
--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_tracking]" = "COMMIT_ORDER"
--source include/assert.inc
#
# Invalid values
#
--error ER_WRONG_VALUE_FOR_VAR
SET GLOBAL binlog_transaction_dependency_tracking= NULL;
--error ER_WRONG_VALUE_FOR_VAR
SET GLOBAL binlog_transaction_dependency_tracking= '';
--error ER_WRONG_TYPE_FOR_VAR
SET GLOBAL binlog_transaction_dependency_tracking= 1.0;
--error ER_WRONG_VALUE_FOR_VAR
SET GLOBAL binlog_transaction_dependency_tracking= 'GARBAGE';
--error ER_WRONG_VALUE_FOR_VAR
SET GLOBAL binlog_transaction_dependency_tracking= ON;
--error ER_WRONG_VALUE_FOR_VAR
SET GLOBAL binlog_transaction_dependency_tracking= OFF;
--error ER_WRONG_VALUE_FOR_VAR
SET GLOBAL binlog_transaction_dependency_tracking= 3;
--echo Expect value still set to "COMMIT_ORDER"
SELECT @@global.binlog_transaction_dependency_tracking;
#
# Test usage: Dependency on transaction_write_set_extraction
#
--echo Case1 a): "When binlog_transaction_dependency_tracking != COMMIT_ORDER,
--echo transaction_write_set_extraction cannot be changed."
SET GLOBAL binlog_transaction_dependency_tracking= 'WRITESET';
--error ER_WRONG_USAGE
SET GLOBAL transaction_write_set_extraction= OFF;
--error ER_WRONG_USAGE
SET GLOBAL transaction_write_set_extraction= MURMUR32;
--echo Expect value still set to XXHASH64
SELECT @@global.transaction_write_set_extraction;
--echo Case1 b): "When binlog_transaction_dependency_tracking != COMMIT_ORDER,
--echo transaction_write_set_extraction cannot be changed."
SET GLOBAL binlog_transaction_dependency_tracking= 'WRITESET_SESSION';
--error ER_WRONG_USAGE
SET GLOBAL transaction_write_set_extraction= OFF;
--error ER_WRONG_USAGE
SET GLOBAL transaction_write_set_extraction= MURMUR32;
--echo Expect value still set to XXHASH64
SELECT @@global.transaction_write_set_extraction;
--echo Case2: "When transaction_write_set_extraction = OFF,
--echo binlog_transaction_dependency_tracking cannot be set to WRITESET%"
SET GLOBAL binlog_transaction_dependency_tracking= 'COMMIT_ORDER';
SET GLOBAL transaction_write_set_extraction= OFF;
--error ER_WRONG_USAGE
SET GLOBAL binlog_transaction_dependency_tracking= 'WRITESET';
--error ER_WRONG_USAGE
SET GLOBAL binlog_transaction_dependency_tracking= 'WRITESET_SESSION';
--echo Expect value still set to COMMIT_ORDER
SELECT @@global.binlog_transaction_dependency_tracking;
SET GLOBAL transaction_write_set_extraction= XXHASH64;
# Clean up
--disable_query_log
--eval SET GLOBAL binlog_transaction_dependency_tracking= '$saved_binlog_transaction_dependency_tracking';
--eval SET GLOBAL transaction_write_set_extraction= '$saved_transaction_write_set_extraction';
--enable_query_log
|