From 23b4431cb4f72001cb6cbb2849f1f972e8375e11 Mon Sep 17 00:00:00 2001 From: Julius Goryavsky Date: Wed, 13 Aug 2025 17:53:56 +0200 Subject: [PATCH 1/6] galera: wsrep-lib submodule update --- wsrep-lib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wsrep-lib b/wsrep-lib index e55f01ce1ee..14ce8cab76e 160000 --- a/wsrep-lib +++ b/wsrep-lib @@ -1 +1 @@ -Subproject commit e55f01ce1eed02e0781bc53bb23456c936667ccf +Subproject commit 14ce8cab76e9388f7266b91b163a62c654b1d329 From c24b4b92aa341937e2500e3939c7a288da1a5957 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Lindstr=C3=B6m?= Date: Thu, 5 Jun 2025 12:54:23 +0300 Subject: [PATCH 2/6] MDEV-36949 : unstable autoincrement value in galera_toi_ddl_nonconflicting test Remove show create table because, Test has two concurrent statements: (1) ALTER TABLE t1 ADD COLUMN f3 INTEGER; INSERT INTO t1 VALUES (NULL, 10000, 10000); (2) CREATE UNIQUE INDEX i1 ON t1(f2); If INSERT starts execution and reaches certifying state and execution is switched to CREATE, there will be MDL-conflict. This MDL-conflict is resolved by BF-abort (brute force abort) i.e. INSERT is aborted. But it has already acquired value for auto_increment column from InnoDB. INSERT is then retryed and that will cause new auto_increment value generation. Therefore, later SHOW CREATE TABLE could show unstable values i.e. either value that is generated on schedule where there was no retry and value where there was a retry. Signed-off-by: Julius Goryavsky --- .../r/galera_toi_ddl_nonconflicting.result | 18 ------------------ .../t/galera_toi_ddl_nonconflicting.test | 2 -- 2 files changed, 20 deletions(-) diff --git a/mysql-test/suite/galera/r/galera_toi_ddl_nonconflicting.result b/mysql-test/suite/galera/r/galera_toi_ddl_nonconflicting.result index abdf46f84ba..41e5e960872 100644 --- a/mysql-test/suite/galera/r/galera_toi_ddl_nonconflicting.result +++ b/mysql-test/suite/galera/r/galera_toi_ddl_nonconflicting.result @@ -35,15 +35,6 @@ EXPECT_3 SELECT COUNT(*) AS EXPECT_2 FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_NAME = 't1'; EXPECT_2 2 -SHOW CREATE TABLE t1; -Table Create Table -t1 CREATE TABLE `t1` ( - `f1` int(11) NOT NULL AUTO_INCREMENT, - `f2` int(11) DEFAULT NULL, - `f3` int(11) DEFAULT NULL, - PRIMARY KEY (`f1`), - UNIQUE KEY `i1` (`f2`) -) ENGINE=InnoDB AUTO_INCREMENT=2002 DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci SELECT COUNT(*) AS EXPECT_1001 FROM t1; EXPECT_1001 1001 @@ -54,15 +45,6 @@ EXPECT_3 SELECT COUNT(*) AS EXPECT_2 FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_NAME = 't1'; EXPECT_2 2 -SHOW CREATE TABLE t1; -Table Create Table -t1 CREATE TABLE `t1` ( - `f1` int(11) NOT NULL AUTO_INCREMENT, - `f2` int(11) DEFAULT NULL, - `f3` int(11) DEFAULT NULL, - PRIMARY KEY (`f1`), - UNIQUE KEY `i1` (`f2`) -) ENGINE=InnoDB AUTO_INCREMENT=2047 DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci SELECT COUNT(*) AS EXPECT_1001 FROM t1; EXPECT_1001 1001 diff --git a/mysql-test/suite/galera/t/galera_toi_ddl_nonconflicting.test b/mysql-test/suite/galera/t/galera_toi_ddl_nonconflicting.test index cc65e6bda9d..a8ad72af97d 100644 --- a/mysql-test/suite/galera/t/galera_toi_ddl_nonconflicting.test +++ b/mysql-test/suite/galera/t/galera_toi_ddl_nonconflicting.test @@ -66,7 +66,6 @@ SET SESSION wsrep_sync_wait=0; SELECT COUNT(*) AS EXPECT_3 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1'; SELECT COUNT(*) AS EXPECT_2 FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_NAME = 't1'; -SHOW CREATE TABLE t1; SELECT COUNT(*) AS EXPECT_1001 FROM t1; --connection node_1 @@ -79,7 +78,6 @@ SELECT COUNT(*) AS EXPECT_1001 FROM t1; SELECT COUNT(*) AS EXPECT_3 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1'; SELECT COUNT(*) AS EXPECT_2 FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_NAME = 't1'; -SHOW CREATE TABLE t1; SELECT COUNT(*) AS EXPECT_1001 FROM t1; DROP TABLE t1; From abc5661c12ee49462318a19e7a250ba4eb13c464 Mon Sep 17 00:00:00 2001 From: Julius Goryavsky Date: Tue, 12 Aug 2025 05:47:43 +0200 Subject: [PATCH 3/6] galera mtr tests: fix some tests after rebase to reflect recent changes --- mysql-test/suite/galera/t/galera_toi_ddl_nonconflicting.test | 2 +- mysql-test/suite/galera/t/mysql-wsrep#198.test | 4 ++-- .../suite/galera_3nodes/t/galera_vote_rejoin_mysqldump.test | 2 ++ 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/mysql-test/suite/galera/t/galera_toi_ddl_nonconflicting.test b/mysql-test/suite/galera/t/galera_toi_ddl_nonconflicting.test index a8ad72af97d..ca911b2d323 100644 --- a/mysql-test/suite/galera/t/galera_toi_ddl_nonconflicting.test +++ b/mysql-test/suite/galera/t/galera_toi_ddl_nonconflicting.test @@ -42,7 +42,7 @@ SET SESSION wsrep_sync_wait=0; --send CREATE UNIQUE INDEX i1 ON t1(f2); --connection node_1a ---let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE LIKE 'acquiring total order%' or STATE LIKE 'Waiting for table metadata%' +--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE LIKE 'Waiting for table metadata lock%' OR STATE LIKE 'acquiring total order isolation%' OR STATE LIKE 'Waiting to execute in isolation%'; --source include/wait_condition.inc --echo # Signal DDL 1 diff --git a/mysql-test/suite/galera/t/mysql-wsrep#198.test b/mysql-test/suite/galera/t/mysql-wsrep#198.test index 78facd64356..57b2b3ac958 100644 --- a/mysql-test/suite/galera/t/mysql-wsrep#198.test +++ b/mysql-test/suite/galera/t/mysql-wsrep#198.test @@ -20,7 +20,7 @@ SET SESSION wsrep_sync_wait=0; --connection node_2_ctrl SET SESSION wsrep_sync_wait = 0; ---let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE LIKE 'Waiting for table metadata lock%' OR STATE LIKE 'acquiring total order isolation%'; +--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE LIKE 'Waiting for table metadata lock%' OR STATE LIKE 'acquiring total order isolation%' OR STATE LIKE 'Waiting to execute in isolation%'; --let $wait_condition_on_error_output = SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST --source include/wait_condition_with_debug_and_kill.inc @@ -29,7 +29,7 @@ SET SESSION wsrep_sync_wait = 0; --send REPAIR TABLE t1,t2; --connection node_2_ctrl ---let $wait_condition = SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE LIKE 'Waiting for table metadata lock%' OR STATE LIKE 'acquiring total order isolation%'; +--let $wait_condition = SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE LIKE 'Waiting for table metadata lock%' OR STATE LIKE 'acquiring total order isolation%' OR STATE LIKE 'Waiting to execute in isolation%'; --let $wait_condition_on_error_output = SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST --source include/wait_condition_with_debug_and_kill.inc diff --git a/mysql-test/suite/galera_3nodes/t/galera_vote_rejoin_mysqldump.test b/mysql-test/suite/galera_3nodes/t/galera_vote_rejoin_mysqldump.test index a0837db3a4b..4ffa3eeeb93 100644 --- a/mysql-test/suite/galera_3nodes/t/galera_vote_rejoin_mysqldump.test +++ b/mysql-test/suite/galera_3nodes/t/galera_vote_rejoin_mysqldump.test @@ -46,6 +46,8 @@ SELECT VARIABLE_VALUE AS expect_Primary FROM INFORMATION_SCHEMA.GLOBAL_STATUS WH --connection node_2 SET SESSION wsrep_on=OFF; +--let $wait_condition = SELECT VARIABLE_VALUE = 'Disconnected' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +--source include/wait_condition.inc SELECT VARIABLE_VALUE AS expect_Disconnected FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; SET SESSION wsrep_on=ON; From 858dc5bd5c9dac30541fba3a9eb3ee40ddfb45f2 Mon Sep 17 00:00:00 2001 From: Julius Goryavsky Date: Wed, 13 Aug 2025 20:43:12 +0200 Subject: [PATCH 4/6] galera: fixed duplicated debug checkpoint name --- sql/wsrep_mysqld.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/wsrep_mysqld.cc b/sql/wsrep_mysqld.cc index 4ba3364267e..74a65785109 100644 --- a/sql/wsrep_mysqld.cc +++ b/sql/wsrep_mysqld.cc @@ -2778,7 +2778,7 @@ static int wsrep_TOI_begin(THD *thd, const char *db, const char *table, DBUG_ASSERT(wsrep_OSU_method_get(thd) == WSREP_OSU_TOI); WSREP_DEBUG("TOI Begin: %s", wsrep_thd_query(thd)); - DEBUG_SYNC(thd, "wsrep_before_toi_begin"); + DEBUG_SYNC(thd, "wsrep_toi_begin"); if (!wsrep_ready || wsrep_can_run_in_toi(thd, db, table, table_list, create_info) == false) From 88d43afd33ba35af02fdf64d27f591cfc55885b5 Mon Sep 17 00:00:00 2001 From: Hemant Dangi Date: Mon, 4 Aug 2025 13:26:34 +0530 Subject: [PATCH 5/6] MDEV-37366: Inconsistency detected - create sequence Issue: When applying 'SELECT NEXT VALUE..' on applier node with binlog_row_image=MINIMAL and log-binlog enabled, applier node fails with below error: Slave SQL: Could not execute Write_rows_v1 event on table monitor.seq_moni_num; Unknown error, Error_code: 1105; handler error No Error!; the event's master log FIRST, end_log_pos 0, Internal MariaDB error code: 1105 To reproduce run below command on the first/active node: > CREATE SEQUENCE `seq_test` start with 1 minvalue 1 maxvalue 9223372036854775806 increment by 0 cache 1000 nocycle ENGINE=InnoDB; > SELECT NEXT VALUE FOR seq_test; > SELECT NEXT VALUE FOR seq_test; The applier node will leave the cluster after executing the 'SELECT NEXT VALUE' with below error: ERROR] Slave SQL: Could not execute Write_rows_v1 event on table test.seq_test; Unknown error, Error_code: 1105; handler error No Error!; the event's master log FIRST, end_log_pos 0, Internal MariaDB error code: 1105 [Warning] WSREP: Event 3 Write_rows_v1 apply failed: 195, seqno 14511334511 Solution: When binary loggging is enabled and binlog_row_image is set to 'MINIMAL', then 'SELECT NEXT VALUE' fails to apply on applier node. It fails with error HA_ERR_SEQUENCE_INVALID_DATA 195 in sequence_definition::check_and_adjust() because sequence variables like min_value, max_value, start are 0. The marking of all columns in 'TABLE::mark_columns_per_binlog_row_image()' will prevent update/set column values for the sequence table. For the sequence table column bitmap sent from master is only used. Signed-off-by: Julius Goryavsky --- mysql-test/suite/galera/r/MDEV-37366.result | 27 +++++++++++ mysql-test/suite/galera/t/MDEV-37366.test | 51 +++++++++++++++++++++ sql/table.cc | 13 ++++++ 3 files changed, 91 insertions(+) create mode 100644 mysql-test/suite/galera/r/MDEV-37366.result create mode 100644 mysql-test/suite/galera/t/MDEV-37366.test diff --git a/mysql-test/suite/galera/r/MDEV-37366.result b/mysql-test/suite/galera/r/MDEV-37366.result new file mode 100644 index 00000000000..9fbd6be70f2 --- /dev/null +++ b/mysql-test/suite/galera/r/MDEV-37366.result @@ -0,0 +1,27 @@ +connection node_2; +connection node_1; +connection node_1; +connection node_2; +connection node_1; +SET SESSION binlog_row_image=minimal; +CREATE SEQUENCE `seq_test` start with 1 minvalue 1 maxvalue 9223372036854775806 increment by 0 cache 1000 nocycle ENGINE=InnoDB; +SHOW CREATE TABLE seq_test; +Table Create Table +seq_test CREATE TABLE `seq_test` ( + `next_not_cached_value` bigint(21) NOT NULL, + `minimum_value` bigint(21) NOT NULL, + `maximum_value` bigint(21) NOT NULL, + `start_value` bigint(21) NOT NULL COMMENT 'start value when sequences is created or value if RESTART is used', + `increment` bigint(21) NOT NULL COMMENT 'increment value', + `cache_size` bigint(21) unsigned NOT NULL, + `cycle_option` tinyint(1) unsigned NOT NULL COMMENT '0 if no cycles are allowed, 1 if the sequence should begin a new cycle when maximum_value is passed', + `cycle_count` bigint(21) NOT NULL COMMENT 'How many cycles have been done' +) ENGINE=InnoDB SEQUENCE=1 +SELECT NEXT VALUE FOR seq_test; +NEXT VALUE FOR seq_test +1 +SELECT NEXT VALUE FOR seq_test; +NEXT VALUE FOR seq_test +3 +connection node_2; +DROP SEQUENCE seq_test; diff --git a/mysql-test/suite/galera/t/MDEV-37366.test b/mysql-test/suite/galera/t/MDEV-37366.test new file mode 100644 index 00000000000..939f760308a --- /dev/null +++ b/mysql-test/suite/galera/t/MDEV-37366.test @@ -0,0 +1,51 @@ +# +# MDEV-37366: Inconsistency detected - create sequence +# Failed 'SELECT NEXT VALUE' on applier node. +# +--source include/galera_cluster.inc +--source include/have_innodb.inc +--source include/big_test.inc +--source include/have_log_bin.inc + +# +# Save original auto_increment_offset values. +# +--let $node_1=node_1 +--let $node_2=node_2 +--source ../galera/include/auto_increment_offset_save.inc + +# +# Verify there are two nodes in galera cluster. +# +--connection node_1 +--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size' +--source include/wait_condition.inc + +# +# Create a sequence table on node1. +# +SET SESSION binlog_row_image=minimal; +CREATE SEQUENCE `seq_test` start with 1 minvalue 1 maxvalue 9223372036854775806 increment by 0 cache 1000 nocycle ENGINE=InnoDB; +SHOW CREATE TABLE seq_test; + +# +# Execute 'SELECT NEXT VALUE' which should not fail on applier node. +# +SELECT NEXT VALUE FOR seq_test; +SELECT NEXT VALUE FOR seq_test; + +# +# Verify there are two nodes in galera cluster. +# +--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size' +--source include/wait_condition.inc + +# +# Cleanup +# +--connection node_2 + +DROP SEQUENCE seq_test; + +# Restore original variable values. +--source ../galera/include/auto_increment_offset_restore.inc diff --git a/sql/table.cc b/sql/table.cc index 683da12f7d9..8cd9957b88c 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -7952,6 +7952,19 @@ void TABLE::mark_columns_per_binlog_row_image() if (file->row_logging && !ha_check_storage_engine_flag(s->db_type(), HTON_NO_BINLOG_ROW_OPT)) { +#ifdef WITH_WSREP + /** + The marking of all columns will prevent update/set column values for the + sequence table. For the sequence table column bitmap sent from master is + used. + */ + if (WSREP(thd) && wsrep_thd_is_applying(thd) && + s->sequence && s->primary_key >= MAX_KEY) + { + DBUG_VOID_RETURN; + } +#endif /* WITH_WSREP */ + /* if there is no PK, then mark all columns for the BI. */ if (s->primary_key >= MAX_KEY) { From fc2990fd90cf6477bddf733fbb7f2c0fed421f76 Mon Sep 17 00:00:00 2001 From: Julius Goryavsky Date: Thu, 14 Aug 2025 03:11:08 +0200 Subject: [PATCH 6/6] MDEV-37366 test correction: added missing --disable_ps_protocol --- mysql-test/suite/galera/t/MDEV-37366.test | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mysql-test/suite/galera/t/MDEV-37366.test b/mysql-test/suite/galera/t/MDEV-37366.test index 939f760308a..083a78ae6ae 100644 --- a/mysql-test/suite/galera/t/MDEV-37366.test +++ b/mysql-test/suite/galera/t/MDEV-37366.test @@ -31,8 +31,10 @@ SHOW CREATE TABLE seq_test; # # Execute 'SELECT NEXT VALUE' which should not fail on applier node. # +--disable_ps_protocol SELECT NEXT VALUE FOR seq_test; SELECT NEXT VALUE FOR seq_test; +--enable_ps_protocol # # Verify there are two nodes in galera cluster.