1
0
mirror of https://github.com/MariaDB/server.git synced 2025-11-08 00:28:29 +03:00

Merge branch '10.6' into '10.11'

This commit is contained in:
Julius Goryavsky
2025-08-14 03:15:04 +02:00
9 changed files with 100 additions and 25 deletions

View File

@@ -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;

View File

@@ -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

View File

@@ -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

View File

@@ -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;

View File

@@ -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

View File

@@ -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;

View File

@@ -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)
{

View File

@@ -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)