mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 10:56:12 +01:00 
			
		
		
		
	 2cb5fb6019
			
		
	
	
	2cb5fb6019
	
	
	
		
			
			If log_slave_updates==OFF, wsrep applier threads used to be configured with option: thd->variables.option_bits&= ~(OPTION_BIN_LOG); (i.e. like sql_log_bin=ON). And this was regardless of log-bin configuration. With this, having configuration of: --log-bin && --log-slave-updates=OFF, local threads used binlogging, but applier threads did not. And further: local threads went through binlog group commit, while applier threads did direct commits. This resulted in situation, where applier threads entered earlier in wsrep XID checkpointing, and could sync their wsrep XID out of order. Later local thread commit would see that higher seqno was already checkpointed, and fire an assert because of this. As a fix, applier threads are now forced to enable binlogging regardless of log-slave-updates configuration. This PR comes with new mtr test: galera.MDEV-24327, which causes a scenario where applier transaction is applied and committed while earlier local transaction is parked before commit order monitor enter. A buggy mariadb versoin would fail for assertion because of wsrep XID checkpoint order violation. Reviewed-by: Jan Lindström <jan.lindstrom@mariadb.com>
		
			
				
	
	
		
			35 lines
		
	
	
	
		
			989 B
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
	
		
			989 B
		
	
	
	
		
			Text
		
	
	
	
	
	
| connection node_2;
 | |
| connection node_1;
 | |
| CREATE TABLE t1 (f1 INTEGER PRIMARY KEY, f2 CHAR(1));
 | |
| INSERT INTO t1 VALUES (1, 'f');
 | |
| INSERT INTO t1 VALUES (2, 'g');
 | |
| connection node_1;
 | |
| SET AUTOCOMMIT=ON;
 | |
| START TRANSACTION;
 | |
| UPDATE t1 SET f2 = '1' WHERE f1 = 1;
 | |
| connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1;
 | |
| SET SESSION wsrep_sync_wait=0;
 | |
| connection node_1a;
 | |
| SET SESSION wsrep_on = 0;
 | |
| SET SESSION wsrep_on = 1;
 | |
| SET GLOBAL wsrep_provider_options = 'dbug=';
 | |
| SET GLOBAL wsrep_provider_options = 'dbug=d,commit_monitor_master_enter_sync';
 | |
| connection node_1;
 | |
| COMMIT;
 | |
| connection node_1a;
 | |
| SET SESSION wsrep_on = 0;
 | |
| SET SESSION wsrep_on = 1;
 | |
| SET GLOBAL wsrep_provider_options = 'dbug=';
 | |
| connection node_2;
 | |
| UPDATE t1 SET f2 = '2' WHERE f1 = 2;
 | |
| connection node_1a;
 | |
| SET GLOBAL wsrep_provider_options = 'signal=commit_monitor_master_enter_sync';
 | |
| SET GLOBAL wsrep_provider_options = 'dbug=';
 | |
| connection node_1;
 | |
| SELECT * FROM t1;
 | |
| f1	f2
 | |
| 1	1
 | |
| 2	2
 | |
| "node 1 is complete now"
 | |
| connection node_2;
 | |
| DROP TABLE t1;
 |