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/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/MDEV-37366.test b/mysql-test/suite/galera/t/MDEV-37366.test new file mode 100644 index 00000000000..083a78ae6ae --- /dev/null +++ b/mysql-test/suite/galera/t/MDEV-37366.test @@ -0,0 +1,53 @@ +# +# 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. +# +--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. +# +--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/mysql-test/suite/galera/t/galera_toi_ddl_nonconflicting.test b/mysql-test/suite/galera/t/galera_toi_ddl_nonconflicting.test index cc65e6bda9d..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 @@ -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; 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; diff --git a/sql/table.cc b/sql/table.cc index 5fcb5928865..af9d3f899cf 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -7978,6 +7978,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) { diff --git a/sql/wsrep_mysqld.cc b/sql/wsrep_mysqld.cc index 7fd9a987cc5..d709d7b5960 100644 --- a/sql/wsrep_mysqld.cc +++ b/sql/wsrep_mysqld.cc @@ -2827,7 +2827,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) 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