[MDEV-30978] On slave XA COMMIT/XA ROLLBACK fail to return an error in read-only mode Created: 2023-03-31  Updated: 2023-10-27  Resolved: 2023-07-11

Status: Closed
Project: MariaDB Server
Component/s: Replication, XA
Affects Version/s: 10.5, 10.6, 10.7, 10.8, 10.9, 10.10, 10.11, 11.0, 11.1
Fix Version/s: 10.5.22, 10.6.15, 10.9.8, 10.10.6, 10.11.5, 11.0.3, 11.1.2

Type: Bug Priority: Critical
Reporter: Pandikrishnan Gurusamy Assignee: Brandon Nesterenko
Resolution: Fixed Votes: 1
Labels: server, xa

Issue Links:
Blocks

 Description   

On slave , Non-super users can able to execute XA COMMIT/XA ROLLBACK.
slave fails to return an error in read-only mode. It causes the slave to break replication when gtid_strict_mode is enabled.

On Master:

MariaDB [test]> select @@read_only;
+-------------+
| @@read_only |
+-------------+
|           0 |
+-------------+
1 row in set (0.000 sec)
MariaDB [test]> XA START 'MyXA';
Query OK, 0 rows affected (0.001 sec)
 
MariaDB [test]> INSERT INTO test.t1 VALUES(1);
Query OK, 1 row affected (0.001 sec)
 
MariaDB [test]> XA END 'MyXA';
Query OK, 0 rows affected (0.000 sec)
 
MariaDB [test]> XA PREPARE 'MyXA';
Query OK, 0 rows affected (0.003 sec)

On slave:

MariaDB [(none)]> select @@read_only;
+-------------+
| @@read_only |
+-------------+
|           1 |
+-------------+
1 row in set (0.001 sec)
 
MariaDB [test]> show grants;
+---------------------------------------------------------------------------------------------------------+
| Grants for app_user@%                                                                                   |
+---------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO "app_user"@"%" IDENTIFIED BY PASSWORD '*8232A1298A49F710DBEE0B330C42EEC825D4190A' |
| GRANT SELECT, INSERT, UPDATE, DELETE ON "test".* TO "app_user"@"%"                                      |
+---------------------------------------------------------------------------------------------------------+
2 rows in set (0.001 sec)
 
MariaDB [(none)]> XA COMMIT 'MyXA';
Query OK, 0 rows affected (0.004 sec)

on Slave:

 
MariaDB [test]> select @@read_only;
+-------------+
| @@read_only |
+-------------+
|           1 |
+-------------+
1 row in set (0.000 sec)
 
MariaDB [test]> show grants;
+---------------------------------------------------------------------------------------------------------+
| Grants for app_user@%                                                                                   |
+---------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO "app_user"@"%" IDENTIFIED BY PASSWORD '*8232A1298A49F710DBEE0B330C42EEC825D4190A' |
| GRANT SELECT, INSERT, UPDATE, DELETE ON "test".* TO "app_user"@"%"                                      |
+---------------------------------------------------------------------------------------------------------+
2 rows in set (0.001 sec)
 
MariaDB [test]> XA ROLLBACK 'MyXA';
Query OK, 0 rows affected (0.005 sec)



 Comments   
Comment by Valerii Kravchuk [ 2023-04-04 ]

As far as I can see, the test case (or the basic idea behind it) in the issue Description.

Comment by Andrei Elkin [ 2023-05-01 ]

Also see a somewhat related MDEV-13437, which backs up the correct polity, to implement.

Comment by Brandon Nesterenko [ 2023-06-26 ]

Hi Andrei!

This is ready for review as PR-2678.

Comment by Brandon Nesterenko [ 2023-07-11 ]

Pushed into 10.5 as 9808ebe19.

No merge conflicts/test failures observed through manual cherry picking into 11.2.

Generated at Thu Feb 08 10:20:20 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.