mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
cac0fc97cc
Before MDEV-15158, wsrep xid information was stored in only one place: in the TRX_SYS page. Starting with 10.3, it is not stored there but in the rollback segment header pages, and the latest one is what matters. MDEV-19229 allows the undo tablespaces to be rebuilt when innodb_undo_tablespaces is changed on startup. Previously it was not possible to change that parameter. These changes caused the fact that rollback segment header pages could contain several wsrep xid's stored and when undo tablespaces were rebuilt there was a effort to restore wsrep xid back to rollback segment header page but because there was several of them the latest wsrep xid was overwritten with older one. trx_rseg_read_wsrep_checkpoint trx_rseg_init_wsrep_xid Return true if read xid is wsrep xid, false if not trx_rseg_mem_restore Try to read wsrep xid and if it is found copy it to trx_sys.recovered_wsrep_xid if read xid has larger seqno.
193 lines
7 KiB
Text
193 lines
7 KiB
Text
--- galera/r/galera_sst_mariabackup.result 2024-04-11 09:53:12.950512316 +0300
|
|
+++ galera/r/galera_sst_mariabackup,debug.reject 2024-04-11 10:00:36.771144955 +0300
|
|
@@ -524,6 +524,190 @@
|
|
1
|
|
DROP TABLE t1;
|
|
COMMIT;
|
|
+Performing State Transfer on a server that has been killed and restarted
|
|
+while a DDL was in progress on it
|
|
+connection node_1;
|
|
+CREATE TABLE t1 (id int not null primary key,f1 CHAR(255)) ENGINE=InnoDB;
|
|
+SET AUTOCOMMIT=OFF;
|
|
+START TRANSACTION;
|
|
+INSERT INTO t1 VALUES (1,'node1_committed_before');
|
|
+INSERT INTO t1 VALUES (2,'node1_committed_before');
|
|
+INSERT INTO t1 VALUES (3,'node1_committed_before');
|
|
+INSERT INTO t1 VALUES (4,'node1_committed_before');
|
|
+INSERT INTO t1 VALUES (5,'node1_committed_before');
|
|
+connection node_2;
|
|
+START TRANSACTION;
|
|
+INSERT INTO t1 VALUES (6,'node2_committed_before');
|
|
+INSERT INTO t1 VALUES (7,'node2_committed_before');
|
|
+INSERT INTO t1 VALUES (8,'node2_committed_before');
|
|
+INSERT INTO t1 VALUES (9,'node2_committed_before');
|
|
+INSERT INTO t1 VALUES (10,'node2_committed_before');
|
|
+COMMIT;
|
|
+SET GLOBAL debug_dbug = 'd,sync.alter_opened_table';
|
|
+connection node_1;
|
|
+ALTER TABLE t1 ADD COLUMN f2 INTEGER;
|
|
+connection node_2;
|
|
+SET wsrep_sync_wait = 0;
|
|
+Killing server ...
|
|
+connection node_1;
|
|
+SET AUTOCOMMIT=OFF;
|
|
+START TRANSACTION;
|
|
+INSERT INTO t1 (id,f1) VALUES (11,'node1_committed_during');
|
|
+INSERT INTO t1 (id,f1) VALUES (12,'node1_committed_during');
|
|
+INSERT INTO t1 (id,f1) VALUES (13,'node1_committed_during');
|
|
+INSERT INTO t1 (id,f1) VALUES (14,'node1_committed_during');
|
|
+INSERT INTO t1 (id,f1) VALUES (15,'node1_committed_during');
|
|
+COMMIT;
|
|
+START TRANSACTION;
|
|
+INSERT INTO t1 (id,f1) VALUES (16,'node1_to_be_committed_after');
|
|
+INSERT INTO t1 (id,f1) VALUES (17,'node1_to_be_committed_after');
|
|
+INSERT INTO t1 (id,f1) VALUES (18,'node1_to_be_committed_after');
|
|
+INSERT INTO t1 (id,f1) VALUES (19,'node1_to_be_committed_after');
|
|
+INSERT INTO t1 (id,f1) VALUES (20,'node1_to_be_committed_after');
|
|
+connect node_1a_galera_st_kill_slave_ddl, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
|
+SET AUTOCOMMIT=OFF;
|
|
+START TRANSACTION;
|
|
+INSERT INTO t1 (id,f1) VALUES (21,'node1_to_be_rollbacked_after');
|
|
+INSERT INTO t1 (id,f1) VALUES (22,'node1_to_be_rollbacked_after');
|
|
+INSERT INTO t1 (id,f1) VALUES (23,'node1_to_be_rollbacked_after');
|
|
+INSERT INTO t1 (id,f1) VALUES (24,'node1_to_be_rollbacked_after');
|
|
+INSERT INTO t1 (id,f1) VALUES (25,'node1_to_be_rollbacked_after');
|
|
+connection node_2;
|
|
+Performing --wsrep-recover ...
|
|
+connection node_2;
|
|
+Starting server ...
|
|
+Using --wsrep-start-position when starting mysqld ...
|
|
+SET AUTOCOMMIT=OFF;
|
|
+START TRANSACTION;
|
|
+INSERT INTO t1 (id,f1) VALUES (26,'node2_committed_after');
|
|
+INSERT INTO t1 (id,f1) VALUES (27,'node2_committed_after');
|
|
+INSERT INTO t1 (id,f1) VALUES (28,'node2_committed_after');
|
|
+INSERT INTO t1 (id,f1) VALUES (29,'node2_committed_after');
|
|
+INSERT INTO t1 (id,f1) VALUES (30,'node2_committed_after');
|
|
+COMMIT;
|
|
+connection node_1;
|
|
+INSERT INTO t1 (id,f1) VALUES (31,'node1_to_be_committed_after');
|
|
+INSERT INTO t1 (id,f1) VALUES (32,'node1_to_be_committed_after');
|
|
+INSERT INTO t1 (id,f1) VALUES (33,'node1_to_be_committed_after');
|
|
+INSERT INTO t1 (id,f1) VALUES (34,'node1_to_be_committed_after');
|
|
+INSERT INTO t1 (id,f1) VALUES (35,'node1_to_be_committed_after');
|
|
+COMMIT;
|
|
+SET AUTOCOMMIT=OFF;
|
|
+START TRANSACTION;
|
|
+INSERT INTO t1 (id,f1) VALUES (36,'node1_committed_after');
|
|
+INSERT INTO t1 (id,f1) VALUES (37,'node1_committed_after');
|
|
+INSERT INTO t1 (id,f1) VALUES (38,'node1_committed_after');
|
|
+INSERT INTO t1 (id,f1) VALUES (39,'node1_committed_after');
|
|
+INSERT INTO t1 (id,f1) VALUES (40,'node1_committed_after');
|
|
+COMMIT;
|
|
+connection node_1a_galera_st_kill_slave_ddl;
|
|
+INSERT INTO t1 (id,f1) VALUES (41,'node1_to_be_rollbacked_after');
|
|
+INSERT INTO t1 (id,f1) VALUES (42,'node1_to_be_rollbacked_after');
|
|
+INSERT INTO t1 (id,f1) VALUES (43,'node1_to_be_rollbacked_after');
|
|
+INSERT INTO t1 (id,f1) VALUES (44,'node1_to_be_rollbacked_after');
|
|
+INSERT INTO t1 (id,f1) VALUES (45,'node1_to_be_rollbacked_after');
|
|
+ROLLBACK;
|
|
+SET AUTOCOMMIT=ON;
|
|
+SET SESSION wsrep_sync_wait=15;
|
|
+SELECT COUNT(*) AS EXPECT_3 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
|
|
+EXPECT_3
|
|
+3
|
|
+SELECT COUNT(*) AS EXPECT_35 FROM t1;
|
|
+EXPECT_35
|
|
+35
|
|
+SELECT * FROM t1;
|
|
+id f1 f2
|
|
+1 node1_committed_before NULL
|
|
+2 node1_committed_before NULL
|
|
+3 node1_committed_before NULL
|
|
+4 node1_committed_before NULL
|
|
+5 node1_committed_before NULL
|
|
+6 node2_committed_before NULL
|
|
+7 node2_committed_before NULL
|
|
+8 node2_committed_before NULL
|
|
+9 node2_committed_before NULL
|
|
+10 node2_committed_before NULL
|
|
+11 node1_committed_during NULL
|
|
+12 node1_committed_during NULL
|
|
+13 node1_committed_during NULL
|
|
+14 node1_committed_during NULL
|
|
+15 node1_committed_during NULL
|
|
+16 node1_to_be_committed_after NULL
|
|
+17 node1_to_be_committed_after NULL
|
|
+18 node1_to_be_committed_after NULL
|
|
+19 node1_to_be_committed_after NULL
|
|
+20 node1_to_be_committed_after NULL
|
|
+26 node2_committed_after NULL
|
|
+27 node2_committed_after NULL
|
|
+28 node2_committed_after NULL
|
|
+29 node2_committed_after NULL
|
|
+30 node2_committed_after NULL
|
|
+31 node1_to_be_committed_after NULL
|
|
+32 node1_to_be_committed_after NULL
|
|
+33 node1_to_be_committed_after NULL
|
|
+34 node1_to_be_committed_after NULL
|
|
+35 node1_to_be_committed_after NULL
|
|
+36 node1_committed_after NULL
|
|
+37 node1_committed_after NULL
|
|
+38 node1_committed_after NULL
|
|
+39 node1_committed_after NULL
|
|
+40 node1_committed_after NULL
|
|
+SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
|
+COUNT(*) = 0
|
|
+1
|
|
+COMMIT;
|
|
+connection node_1;
|
|
+SET AUTOCOMMIT=ON;
|
|
+SET SESSION wsrep_sync_wait=15;
|
|
+SELECT COUNT(*) AS EXPECT_3 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
|
|
+EXPECT_3
|
|
+3
|
|
+SELECT COUNT(*) AS EXPECT_35 FROM t1;
|
|
+EXPECT_35
|
|
+35
|
|
+SELECT * FROM t1;
|
|
+id f1 f2
|
|
+1 node1_committed_before NULL
|
|
+2 node1_committed_before NULL
|
|
+3 node1_committed_before NULL
|
|
+4 node1_committed_before NULL
|
|
+5 node1_committed_before NULL
|
|
+6 node2_committed_before NULL
|
|
+7 node2_committed_before NULL
|
|
+8 node2_committed_before NULL
|
|
+9 node2_committed_before NULL
|
|
+10 node2_committed_before NULL
|
|
+11 node1_committed_during NULL
|
|
+12 node1_committed_during NULL
|
|
+13 node1_committed_during NULL
|
|
+14 node1_committed_during NULL
|
|
+15 node1_committed_during NULL
|
|
+16 node1_to_be_committed_after NULL
|
|
+17 node1_to_be_committed_after NULL
|
|
+18 node1_to_be_committed_after NULL
|
|
+19 node1_to_be_committed_after NULL
|
|
+20 node1_to_be_committed_after NULL
|
|
+26 node2_committed_after NULL
|
|
+27 node2_committed_after NULL
|
|
+28 node2_committed_after NULL
|
|
+29 node2_committed_after NULL
|
|
+30 node2_committed_after NULL
|
|
+31 node1_to_be_committed_after NULL
|
|
+32 node1_to_be_committed_after NULL
|
|
+33 node1_to_be_committed_after NULL
|
|
+34 node1_to_be_committed_after NULL
|
|
+35 node1_to_be_committed_after NULL
|
|
+36 node1_committed_after NULL
|
|
+37 node1_committed_after NULL
|
|
+38 node1_committed_after NULL
|
|
+39 node1_committed_after NULL
|
|
+40 node1_committed_after NULL
|
|
+SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
|
+COUNT(*) = 0
|
|
+1
|
|
+DROP TABLE t1;
|
|
+COMMIT;
|
|
+SET GLOBAL debug_dbug = $debug_orig;
|
|
connection node_2;
|
|
Shutting down server ...
|
|
connection node_1;
|