mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 10:56:12 +01:00 
			
		
		
		
	 feeeacc4d7
			
		
	
	
	feeeacc4d7
	
	
	
		
			
			Assertion `thd->mdl_context.is_lock_owner()` fires when a client is disconnected, while transaction and and a table is opened through `HANDLER` interface. Reason for the assertion is that when a connection closes, its ongoing transaction is eventually rolled back in `Wsrep_client_state::bf_rollback()`. This method also releases explicit which are expected to survive beyond the transaction lifetime. This patch also removes calls to `mysql_ull_cleanup()`. User level locks are not supported in combination with Galera, making these calls unnecessary.
		
			
				
	
	
		
			70 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| #
 | |
| # MDEV-30955
 | |
| # Assertion `thd->mdl_context.is_lock_owner(MDL_key::TABLE,
 | |
| # table->s->db.str, table->s->table_name.str, MDL_SHARED)'
 | |
| # failed in close_thread_table()
 | |
| #
 | |
| 
 | |
| --source include/galera_cluster.inc
 | |
| 
 | |
| #
 | |
| # Test 1: Assertion thd->mdl_context.is_lock_owner()
 | |
| # failed in close_thread_table()
 | |
| #
 | |
| CREATE TABLE t (a CHAR(1) KEY);
 | |
| START TRANSACTION;
 | |
| HANDLER t OPEN;
 | |
| 
 | |
| #
 | |
| # If bug is present the transaction will be aborted
 | |
| # through Wsrep_client_service::bf_rollback() and
 | |
| # release explicit locks too early. Later, during
 | |
| # THD::cleanup(), table t will be closed and the
 | |
| # THD is expected to be owner of the MDL lock that
 | |
| # was just released.
 | |
| #
 | |
| --disconnect node_1
 | |
| 
 | |
| --connect node_1, 127.0.0.1, root, , test, $NODE_MYPORT_1
 | |
| DROP TABLE t;
 | |
| 
 | |
| 
 | |
| #
 | |
| # Test 2: Similar issue reproduces also with BACKUP STAGE locks.
 | |
| # See comments in MDEV-25037
 | |
| #
 | |
| 
 | |
| BACKUP STAGE START;
 | |
| START TRANSACTION;
 | |
| --disconnect node_1
 | |
| --connect node_1, 127.0.0.1, root, , test, $NODE_MYPORT_1
 | |
| 
 | |
| 
 | |
| #
 | |
| # Test 3: Assertion `!thd->mdl_context.has_locks()' failed
 | |
| # in do_command()
 | |
| #
 | |
| 
 | |
| --connection node_1
 | |
| CREATE TABLE t1 (f1 INTEGER PRIMARY KEY);
 | |
| CREATE TABLE t2 (f1 INTEGER PRIMARY KEY);
 | |
| 
 | |
| --let $bf_count = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.global_status WHERE VARIABLE_NAME = 'wsrep_local_bf_aborts'`
 | |
| 
 | |
| START TRANSACTION;
 | |
| INSERT INTO t1 VALUES(1);
 | |
| HANDLER t2 OPEN;
 | |
| 
 | |
| --connection node_2
 | |
| INSERT INTO t1 VALUES(1);
 | |
| 
 | |
| --connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1
 | |
| --connection node_1a
 | |
| --let $wait_condition = SELECT VARIABLE_VALUE = $bf_count + 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_bf_aborts'
 | |
| --source include/wait_condition.inc
 | |
| 
 | |
| --connection node_1
 | |
| --error ER_LOCK_DEADLOCK
 | |
| COMMIT;
 | |
| 
 | |
| DROP TABLE t1,t2;
 |