summaryrefslogtreecommitdiff
path: root/mysql-test/suite/galera/t/GCF-1081.test
blob: 38553feda391230a0957ee26ea7270443024b481 (plain)
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
#
# GCF-1081 - Assertion `!thd->sp_runtime_ctx`
#
# Test replaying of stored procedures
#

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

--connection node_1

--let $wsrep_local_replays_old = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_replays'`

CREATE TABLE t1 (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=InnoDB;
INSERT INTO t1 VALUES (1, 0), (3, 0);

DELIMITER |;
CREATE PROCEDURE proc_update ()
BEGIN
        UPDATE t1 SET f2 = 1 where f1 > 0;
END|
DELIMITER ;|

# Block the SP
--connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1
--let $galera_sync_point = commit_monitor_master_enter_sync
--source include/galera_set_sync_point.inc

--connection node_1
--send CALL proc_update ();

# Wait until SP is blocked
--connection node_1a
SET SESSION wsrep_sync_wait = 0;
--source include/galera_wait_sync_point.inc

# Issue a conflicting insert on node #2
--connection node_1a
SET GLOBAL debug_dbug = 'd,sync.wsrep_before_BF_victim_unlock';

--connection node_2
--send INSERT INTO t1 VALUES (2, 2);

# Wait until it BF aborts the SP
--connection node_1a
SET SESSION DEBUG_SYNC = 'now WAIT_FOR sync.wsrep_before_BF_victim_unlock_reached';
SET GLOBAL debug_dbug = '';

# Unblock the SP
--connection node_1a
--source include/galera_clear_sync_point.inc
--source include/galera_signal_sync_point.inc

--connection node_2
--reap
SELECT * FROM t1;

# SP succeeds
--connection node_1
--reap
SELECT * FROM t1;

# wsrep_local_replays has increased by 1
--let $wsrep_local_replays_new = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_replays'`
--disable_query_log
--eval SELECT $wsrep_local_replays_new - $wsrep_local_replays_old AS wsrep_local_replays;
--enable_query_log

DROP PROCEDURE proc_update;
DROP TABLE t1;