summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Lindström <jan.lindstrom@mariadb.com>2023-01-26 14:34:12 +0200
committerJan Lindström <jan.lindstrom@mariadb.com>2023-01-27 10:34:06 +0200
commit696562ce5528faa60653aa31058bf42f26d71dc4 (patch)
tree1547a9ae1fea34740d56281a58d3fa918db974bf
parent015fb54d45a27dc33191f513f896ab1ead5d2377 (diff)
downloadmariadb-git-696562ce5528faa60653aa31058bf42f26d71dc4.tar.gz
MDEV-30473 : Do not allow GET_LOCK() / RELEASE_LOCK() in cluster
If WSREP_ON=ON do not allow GET_LOCK and RELEASE_LOCK functions. Instead print clear error message.
-rw-r--r--mysql-test/suite/galera/r/galera_locks_funcs.result19
-rw-r--r--mysql-test/suite/galera/t/galera_locks_funcs.test14
-rw-r--r--sql/item_create.cc14
3 files changed, 47 insertions, 0 deletions
diff --git a/mysql-test/suite/galera/r/galera_locks_funcs.result b/mysql-test/suite/galera/r/galera_locks_funcs.result
new file mode 100644
index 00000000000..378067aa461
--- /dev/null
+++ b/mysql-test/suite/galera/r/galera_locks_funcs.result
@@ -0,0 +1,19 @@
+connection node_2;
+connection node_1;
+CREATE TABLE t (c DOUBLE,c2 INT,PRIMARY KEY(c)) ENGINE=InnoDB;
+INSERT INTO t values (1,1);
+SELECT GET_LOCK('a',1);
+ERROR 42000: This version of MariaDB doesn't yet support 'GET_LOCK in cluster (WSREP_ON=ON)'
+SHOW WARNINGS;
+Level Code Message
+Error 1235 This version of MariaDB doesn't yet support 'GET_LOCK in cluster (WSREP_ON=ON)'
+SELECT * FROM t;
+c c2
+1 1
+SELECT RELEASE_LOCK('a');
+ERROR 42000: This version of MariaDB doesn't yet support 'RELEASE_LOCK in cluster (WSREP_ON=ON)'
+SHOW WARNINGS;
+Level Code Message
+Error 1235 This version of MariaDB doesn't yet support 'RELEASE_LOCK in cluster (WSREP_ON=ON)'
+COMMIT;
+DROP TABLE t;
diff --git a/mysql-test/suite/galera/t/galera_locks_funcs.test b/mysql-test/suite/galera/t/galera_locks_funcs.test
new file mode 100644
index 00000000000..68737f2daab
--- /dev/null
+++ b/mysql-test/suite/galera/t/galera_locks_funcs.test
@@ -0,0 +1,14 @@
+--source include/galera_cluster.inc
+
+CREATE TABLE t (c DOUBLE,c2 INT,PRIMARY KEY(c)) ENGINE=InnoDB;
+INSERT INTO t values (1,1);
+--error ER_NOT_SUPPORTED_YET
+SELECT GET_LOCK('a',1);
+SHOW WARNINGS;
+SELECT * FROM t;
+--error ER_NOT_SUPPORTED_YET
+SELECT RELEASE_LOCK('a');
+SHOW WARNINGS;
+COMMIT;
+DROP TABLE t;
+
diff --git a/sql/item_create.cc b/sql/item_create.cc
index feae487ff0c..81621253cd5 100644
--- a/sql/item_create.cc
+++ b/sql/item_create.cc
@@ -3547,6 +3547,13 @@ Create_func_get_lock Create_func_get_lock::s_singleton;
Item*
Create_func_get_lock::create_2_arg(THD *thd, Item *arg1, Item *arg2)
{
+#ifdef WITH_WSREP
+ if (WSREP_ON && WSREP(thd))
+ {
+ my_error(ER_NOT_SUPPORTED_YET, MYF(0), "GET_LOCK in cluster (WSREP_ON=ON)");
+ return NULL;
+ }
+#endif /* WITH_WSREP */
thd->lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_SYSTEM_FUNCTION);
thd->lex->uncacheable(UNCACHEABLE_SIDEEFFECT);
return new (thd->mem_root) Item_func_get_lock(thd, arg1, arg2);
@@ -4847,6 +4854,13 @@ Create_func_release_lock Create_func_release_lock::s_singleton;
Item*
Create_func_release_lock::create_1_arg(THD *thd, Item *arg1)
{
+#ifdef WITH_WSREP
+ if (WSREP_ON && WSREP(thd))
+ {
+ my_error(ER_NOT_SUPPORTED_YET, MYF(0), "RELEASE_LOCK in cluster (WSREP_ON=ON)");
+ return NULL;
+ }
+#endif /* WITH_WSREP */
thd->lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_SYSTEM_FUNCTION);
thd->lex->uncacheable(UNCACHEABLE_SIDEEFFECT);
return new (thd->mem_root) Item_func_release_lock(thd, arg1);