File: binlog_transaction_dependency_tracking_basic.test

package info (click to toggle)
mysql-8.0 8.0.43-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,273,924 kB
  • sloc: cpp: 4,684,605; ansic: 412,450; pascal: 108,398; java: 83,641; perl: 30,221; cs: 27,067; sql: 26,594; sh: 24,181; python: 21,816; yacc: 17,169; php: 11,522; xml: 7,388; javascript: 7,076; makefile: 2,194; lex: 1,075; awk: 670; asm: 520; objc: 183; ruby: 97; lisp: 86
file content (154 lines) | stat: -rw-r--r-- 6,354 bytes parent folder | download
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