File: galera_var_dirty_reads2.test

package info (click to toggle)
mariadb 1%3A11.8.3-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 772,520 kB
  • sloc: ansic: 2,414,714; cpp: 1,791,394; asm: 381,336; perl: 62,905; sh: 49,647; pascal: 40,897; java: 39,363; python: 20,791; yacc: 20,432; sql: 17,907; xml: 12,344; ruby: 8,544; cs: 6,542; makefile: 6,145; ada: 1,879; lex: 1,193; javascript: 996; objc: 80; tcl: 73; awk: 46; php: 22
file content (130 lines) | stat: -rw-r--r-- 3,039 bytes parent folder | download | duplicates (5)
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
#
# Additional tests for wsrep_dirty_reads
#

--source include/galera_cluster.inc
--source include/have_innodb.inc

--let $galera_connection_name = node_3
--let $galera_server_number = 3
--source include/galera_connect.inc

# Save original auto_increment_offset values.
--let $node_1=node_1
--let $node_2=node_2
--let $node_3=node_3
--source ../galera/include/auto_increment_offset_save.inc

--connection node_1
CREATE TABLE t1 (f1 INTEGER) ENGINE=INNODB;
INSERT INTO t1 VALUES (1);

--connection node_2
--let $wait_condition = SELECT COUNT(*) = 1 FROM t1;
--source include/wait_condition.inc

SET GLOBAL wsrep_provider_options='gmcast.isolate=1';

--connection node_1
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc

--connection node_2
SET SESSION wsrep_sync_wait = 0;
--let $wait_condition = SELECT VARIABLE_VALUE = 'non-Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status';
--source include/wait_condition.inc

SET SESSION wsrep_dirty_reads = 1;

# Those statements should succeed

--error 0
SELECT f1 FROM t1;

--error 0
USE test;

--error 0
SHOW CREATE TABLE t1;

--error 0
LOCK TABLE t1 WRITE;

--error 0
UNLOCK TABLES;

--error 0
FLUSH TABLES WITH READ LOCK;

--error 0
UNLOCK TABLES;

--error 0
PREPARE stmt_select FROM 'SELECT f1 FROM t1';

--error 0
EXECUTE stmt_select;

--error 0
PREPARE stmt_update FROM 'UPDATE t1 SET f1 = f1 + f1';

# Mysqldump should succeed

SET GLOBAL wsrep_dirty_reads = 1;
SET GLOBAL wsrep_sync_wait = 0;
--error 0
--exec $MYSQL_DUMP -u root -S $NODE_MYSOCK_2 test >/dev/null
SET GLOBAL wsrep_dirty_reads = 0;
SET GLOBAL wsrep_sync_wait = 15;

# Those statements should fail

SET SESSION wsrep_dirty_reads = 1;

--error ER_UNKNOWN_COM_ERROR
INSERT INTO t1 SELECT * FROM t1;

--error ER_UNKNOWN_COM_ERROR
DELETE FROM t1;

--error ER_UNKNOWN_COM_ERROR
UPDATE t1 SET f1 = f1 + 1;

--error ER_UNKNOWN_COM_ERROR
DROP TABLE t1;

--error ER_UNKNOWN_COM_ERROR
EXECUTE stmt_update;

# With wsrep_dirty_reads = 0 , even SELECTS are not allowed

SET SESSION wsrep_dirty_reads = 0;

--error ER_UNKNOWN_COM_ERROR
SELECT * FROM t1;

--error ER_UNKNOWN_COM_ERROR
EXECUTE stmt_select;

# But reads from INFORMATION_SCHEMA are allowed

--error 0
SELECT COUNT(*) > 0 FROM INFORMATION_SCHEMA.PROCESSLIST;

# Restore cluster
SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
--source include/galera_wait_ready.inc

--connection node_1
--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc

--connection node_2
--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc
--source include/galera_wait_ready.inc

DROP TABLE t1;

# Restore original auto_increment_offset values.
--source ../galera/include/auto_increment_offset_restore.inc