Skip to content

Commit eb472f7

Browse files
committed
Revert "MDEV-30473 : Do not allow GET_LOCK() / RELEASE_LOCK() in cluster"
This reverts commit b05218e.
1 parent 0fd54c9 commit eb472f7

File tree

4 files changed

+97
-0
lines changed

4 files changed

+97
-0
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
connection node_2;
2+
connection node_1;
3+
CREATE TABLE t1 (c1 BIGINT NOT NULL PRIMARY KEY, c2 BINARY (10), c3 DATETIME);
4+
SELECT get_lock ('test2', 0);
5+
get_lock ('test2', 0)
6+
1
7+
DROP TABLE t1;
8+
CREATE TABLE t1 (c1 SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY);
9+
INSERT INTO t1 VALUES (1);
10+
SET SESSION wsrep_trx_fragment_size=10;
11+
SET SESSION autocommit=0;
12+
SELECT * FROM t1 WHERE c1 <=0 ORDER BY c1 DESC;
13+
c1
14+
INSERT INTO t1 VALUES (4),(3),(1),(2);
15+
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
16+
CREATE TABLE t1 (pk INT PRIMARY KEY, b INT) ENGINE=SEQUENCE;
17+
ERROR 42S01: Table 't1' already exists
18+
ALTER TABLE t1 DROP COLUMN c2;
19+
ERROR 42000: Can't DROP COLUMN `c2`; check that it exists
20+
SELECT get_lock ('test', 1.5);
21+
get_lock ('test', 1.5)
22+
1
23+
DROP TABLE t1;
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
connection node_2;
2+
connection node_1;
3+
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
4+
connection node_2a;
5+
SELECT GET_LOCK("foo", 1000);
6+
GET_LOCK("foo", 1000)
7+
1
8+
connection node_2;
9+
SET AUTOCOMMIT=OFF;
10+
INSERT INTO t1 VALUES (1);
11+
SELECT GET_LOCK("foo", 1000);;
12+
connection node_1;
13+
INSERT INTO t1 VALUES (1);
14+
connection node_2;
15+
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
16+
wsrep_local_aborts_increment
17+
1
18+
DROP TABLE t1;
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
--source include/galera_cluster.inc
2+
--source include/have_sequence.inc
3+
4+
CREATE TABLE t1 (c1 BIGINT NOT NULL PRIMARY KEY, c2 BINARY (10), c3 DATETIME);
5+
SELECT get_lock ('test2', 0);
6+
DROP TABLE t1;
7+
CREATE TABLE t1 (c1 SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY);
8+
INSERT INTO t1 VALUES (1);
9+
SET SESSION wsrep_trx_fragment_size=10;
10+
SET SESSION autocommit=0;
11+
SELECT * FROM t1 WHERE c1 <=0 ORDER BY c1 DESC;
12+
--error ER_LOCK_DEADLOCK
13+
INSERT INTO t1 VALUES (4),(3),(1),(2);
14+
--error ER_TABLE_EXISTS_ERROR
15+
CREATE TABLE t1 (pk INT PRIMARY KEY, b INT) ENGINE=SEQUENCE;
16+
--error ER_CANT_DROP_FIELD_OR_KEY
17+
ALTER TABLE t1 DROP COLUMN c2;
18+
SELECT get_lock ('test', 1.5);
19+
DROP TABLE t1;
20+
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
--source include/galera_cluster.inc
2+
--source include/have_innodb.inc
3+
4+
#
5+
# Test a local transaction being aborted by a slave one while it is running a GET_LOCK()
6+
#
7+
8+
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
9+
10+
--let $galera_connection_name = node_2a
11+
--let $galera_server_number = 2
12+
--source include/galera_connect.inc
13+
--connection node_2a
14+
SELECT GET_LOCK("foo", 1000);
15+
16+
--connection node_2
17+
SET AUTOCOMMIT=OFF;
18+
--let $wsrep_local_bf_aborts_before = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_bf_aborts'`
19+
INSERT INTO t1 VALUES (1);
20+
--send SELECT GET_LOCK("foo", 1000);
21+
22+
--connection node_1
23+
INSERT INTO t1 VALUES (1);
24+
25+
--connection node_2
26+
--error ER_LOCK_DEADLOCK
27+
--reap
28+
29+
--let $wsrep_local_bf_aborts_after = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_bf_aborts'`
30+
31+
# Check that wsrep_local_bf_aborts has been incremented by exactly 1
32+
--disable_query_log
33+
--eval SELECT $wsrep_local_bf_aborts_after - $wsrep_local_bf_aborts_before = 1 AS wsrep_local_aborts_increment;
34+
--enable_query_log
35+
36+
DROP TABLE t1;

0 commit comments

Comments
 (0)