Rather than galera this should be fixed in mysqld for following
reasons:
a) Only the connection/thread which issued FTWRL should be prevented from
issuing other DDL/DML and not other threads. I am not sure if
Galera can make that distinction.
b) To conform to vanilla mysql behavior:
MySQL [test]> flush tables with read lock;
Query OK, 0 rows affected (0.00 sec)
MySQL [test]> CREATE TABLE IF NOT EXISTS test.mytest (a INT) ENGINE=INNODB;
ERROR 1223 (HY000): Can't execute the query because you have a conflicting read lock
So, I have fixed this in wsrep_to_isolation_begin.
After the fix:
MySQL [test]> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)
MySQL [test]> CREATE TABLE IF NOT EXISTS test.mytest (a INT) ENGINE=INNODB;
ERROR 1223 (HY000): Can't execute the query because you have a conflicting read lock
MySQL [test]> unlock tables;
Query OK, 0 rows affected (0.00 sec)
Rather than galera this should be fixed in mysqld for following
reasons:
a) Only the connection/thread which issued FTWRL should be prevented from
issuing other DDL/DML and not other threads. I am not sure if
Galera can make that distinction.
b) To conform to vanilla mysql behavior:
MySQL [test]> flush tables with read lock;
Query OK, 0 rows affected (0.00 sec)
MySQL [test]> CREATE TABLE IF NOT EXISTS test.mytest (a INT) ENGINE=INNODB;
ERROR 1223 (HY000): Can't execute the query because you have a conflicting read lock
So, I have fixed this in wsrep_to_ isolation_ begin.
After the fix:
MySQL [test]> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)
MySQL [test]> CREATE TABLE IF NOT EXISTS test.mytest (a INT) ENGINE=INNODB;
ERROR 1223 (HY000): Can't execute the query because you have a conflicting read lock
MySQL [test]> unlock tables;
Query OK, 0 rows affected (0.00 sec)