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
|
#
# Test that the wsrep_retry_autocommit variable is respected.
#
--source include/galera_cluster.inc
--source include/have_innodb.inc
--source include/have_debug_sync.inc
--connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1
#
# With wsrep_retry_autocommit = 0, error is certain
#
--connection node_1
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
SET SESSION wsrep_retry_autocommit = 0;
SET DEBUG_SYNC = 'wsrep_before_replication SIGNAL before_rep WAIT_FOR continue';
--send INSERT INTO t1 (f1) VALUES (2)
--connection node_1a
SET DEBUG_SYNC = 'now WAIT_FOR before_rep';
--connection node_2
TRUNCATE TABLE t1;
--connection node_1
--error ER_LOCK_DEADLOCK
--reap
SELECT COUNT(*) = 0 FROM t1;
SET DEBUG_SYNC = 'RESET';
DROP TABLE t1;
#
# With wsrep_retry_autocommit = 1, success against one TRUNCATE
#
--connection node_1
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
SET SESSION wsrep_retry_autocommit = 1;
SET DEBUG_SYNC = 'wsrep_before_replication SIGNAL before_rep WAIT_FOR continue';
--send INSERT INTO t1 (f1) VALUES (2)
--connection node_1a
SET DEBUG_SYNC = 'now WAIT_FOR before_rep';
--connection node_2
TRUNCATE TABLE t1;
--connection node_1
--reap
SELECT COUNT(*) = 1 FROM t1;
SET DEBUG_SYNC = 'RESET';
DROP TABLE t1;
#
# With wsrep_retry_autcommit = 1, failure against multiple TRUNCATEs
#
--connection node_1
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
SET SESSION wsrep_retry_autocommit = 1;
SET GLOBAL debug_dbug = '+d,sync.wsrep_retry_autocommit';
SET DEBUG_SYNC = 'wsrep_before_replication SIGNAL before_rep WAIT_FOR continue EXECUTE 2';
--send INSERT INTO t1 VALUES (2);
--connection node_1a
SET DEBUG_SYNC = 'now WAIT_FOR before_rep';
--connection node_2
TRUNCATE TABLE t1;
--connection node_1a
SET DEBUG_SYNC = 'now WAIT_FOR wsrep_retry_autocommit_reached';
SELECT COUNT(*) = 0 FROM t1;
SET DEBUG_SYNC = 'now SIGNAL wsrep_retry_autocommit_continue WAIT_FOR before_rep';
--connection node_2
TRUNCATE TABLE t1;
--connection node_1a
SELECT COUNT(*) = 0 FROM t1;
--connection node_1
--error ER_LOCK_DEADLOCK
--reap
SET DEBUG_SYNC = 'RESET';
SET GLOBAL debug_dbug = NULL;
DROP TABLE t1;
#
# With wsrep_retry_autocommit = 64, success against 64 TRUNCATEs
#
--connection node_1
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
SET SESSION wsrep_retry_autocommit = 64;
SET GLOBAL debug_dbug = '+d,sync.wsrep_retry_autocommit';
SET DEBUG_SYNC = 'wsrep_before_replication SIGNAL before_rep WAIT_FOR continue EXECUTE 64';
--send INSERT INTO t1 VALUES (2)
--disable_query_log
--disable_result_log
--let $count = 64
while ($count)
{
--connection node_1a
SET DEBUG_SYNC = 'now WAIT_FOR before_rep';
--connection node_2
TRUNCATE TABLE t1;
--connection node_1a
SET DEBUG_SYNC = 'now WAIT_FOR wsrep_retry_autocommit_reached';
SELECT COUNT(*) = 1 FROM t1;
SET DEBUG_SYNC = 'now SIGNAL wsrep_retry_autocommit_continue';
--dec $count
}
--enable_result_log
--enable_query_log
--connection node_1
--reap
SELECT COUNT(*) = 1 FROM t1;
SET DEBUG_SYNC = 'RESET';
SET GLOBAL debug_dbug = NULL;
DROP TABLE t1;
|