File: gr_multi_primary_key_conflict.result

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 (110 lines) | stat: -rw-r--r-- 4,618 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
include/group_replication.inc
Warnings:
Note	####	Sending passwords in plain text without SSL/TLS is extremely insecure.
Note	####	Storing MySQL user name or password information in the connection metadata repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START REPLICA; see the 'START REPLICA Syntax' in the MySQL Manual for more information.
[connection server1]

############################################################
# 1. Create a table on server1.
[connection server1]
CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a, b));
INSERT INTO t1 VALUE(1, 2);
include/rpl_sync.inc

############################################################
# 2. Set a debug sync before broadcast message to group on
#    connection server_1.
#    Commit a transaction that will be block before broadcast.
[connection server_1]
SET @debug_save= @@GLOBAL.DEBUG;
SET @@GLOBAL.DEBUG='d,group_replication_before_message_broadcast';
BEGIN;
UPDATE t1 SET a=3 AND b=5 WHERE a=1;
COMMIT;

############################################################
# 3. Wait until server_1 connection reaches the
# group_replication_before_message_broadcast debug sync point.
[connection server1]

############################################################
# 4. Execute a transaction on server2, that will reach first
#    certification, since server_1 is blocked before broadcast.
[connection server2]
UPDATE t1 SET a=4 AND b=5 WHERE b=2;

############################################################
# 5. Signal the waiting thread on server_1 to resume.
[connection server1]
SET DEBUG_SYNC='now SIGNAL waiting';
SET @@GLOBAL.DEBUG= @debug_save;

############################################################
# 6. It will end up in an error stating that it was aborted,
#    since transactions are conflicting and server2 was
#    ordered first.
[connection server2]
include/sync_slave_sql_with_master.inc
[connection server_1]
ERROR 40000: Plugin instructed the server to rollback the current transaction.

############################################################
# 7. Assert that number of certified transactions are the
#    expected ones.
[connection server1]
include/assert.inc [The value of Count_Transactions_Checked should be 4 after starting group replication]
include/assert.inc [The value of Count_Conflicts_Detected should be 1 after starting group replication]

############################################################
# Checking the positive case in which there is no conflict.
############################################################

############################################################
# 1. Set a debug sync before broadcast message to group on
#    connection server_1.
#    Commit a transaction that will be block before broadcast.
[connection server_1]
SET @@GLOBAL.DEBUG='d,group_replication_before_message_broadcast';
BEGIN;
INSERT INTO t1 VALUE(10, 11);
COMMIT;

############################################################
# 2. Wait until server_1 connection reaches the
# group_replication_before_message_broadcast debug sync point.
[connection server1]

############################################################
# 3. Execute a transaction on server2, that will reach first
#    certification, since server_1 is blocked before broadcast.
[connection server2]
INSERT INTO t1 VALUE(12, 13);
include/sync_slave_sql_with_master.inc

############################################################
# 4. Signal the waiting thread on server_1 to resume.
[connection server1]
SET DEBUG_SYNC='now SIGNAL waiting';
SET @@GLOBAL.DEBUG= @debug_save;

########################################################################
# 5. It will execute without error as the conflicting transactions have
#    been removed.
[connection server_1]
include/rpl_sync.inc

############################################################
# 6. Assert that number of certified transactions are the
#    expected ones.
[connection server1]
include/assert.inc [Table t1 will contain row after the above execution]
include/assert.inc [Table t1 will contain row after the above execution]
include/assert.inc [Table t1 will contain row after the above execution]
include/assert.inc [Table t1 will contain 3 rows after the above execution]
include/assert.inc [The value of Count_Transactions_Checked should be 6 after starting group replication]
include/assert.inc [The value of Count_Conflicts_Detected should be 1 after starting group replication]

############################################################
# Clean up.
DROP TABLE t1;
include/group_replication_end.inc