summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2021-09-17 19:57:13 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2021-09-17 19:57:13 +0300
commit699de65d5e1cda0b8c6a994f8513e97804b1a7ad (patch)
treec622b2cade098680afd65bf860146b377f0936be
parentc430aa72abbdccb1ece7f0d65b49a6b48e7c5ba7 (diff)
parent03a10706ecfa5cf0a6252d436e341483f5c0827c (diff)
downloadmariadb-git-699de65d5e1cda0b8c6a994f8513e97804b1a7ad.tar.gz
Merge 10.4 into 10.5
-rw-r--r--include/wsrep.h7
-rw-r--r--mysql-test/main/alias.result12
-rw-r--r--mysql-test/main/alias.test2
-rw-r--r--mysql-test/suite/galera/disabled.def1
-rw-r--r--mysql-test/suite/galera/r/galera_fk_truncate.result47
-rw-r--r--mysql-test/suite/galera/r/galera_ssl_upgrade.result3
-rw-r--r--mysql-test/suite/galera/t/galera_fk_truncate.test39
-rw-r--r--mysql-test/suite/innodb/r/instant_alter_import.result8
-rw-r--r--mysql-test/suite/innodb/t/instant_alter_import.test19
-rw-r--r--sql/sql_admin.cc15
-rw-r--r--sql/sql_truncate.cc12
-rw-r--r--sql/wsrep_mysqld.cc5
-rw-r--r--storage/innobase/include/dict0mem.h2
13 files changed, 140 insertions, 32 deletions
diff --git a/include/wsrep.h b/include/wsrep.h
index 703b89f966a..0223fbbe602 100644
--- a/include/wsrep.h
+++ b/include/wsrep.h
@@ -25,8 +25,6 @@
#define DBUG_ASSERT_IF_WSREP(A) DBUG_ASSERT(A)
#define WSREP_MYSQL_DB (char *)"mysql"
-#define WSREP_TO_ISOLATION_BEGIN_IF(db_, table_, table_list_) \
- if (WSREP_ON && WSREP(thd) && wsrep_to_isolation_begin(thd, db_, table_, table_list_))
#define WSREP_TO_ISOLATION_BEGIN(db_, table_, table_list_) \
if (WSREP_ON && WSREP(thd) && wsrep_to_isolation_begin(thd, db_, table_, table_list_)) \
@@ -58,10 +56,6 @@
if (WSREP(thd) && !thd->lex->no_write_to_binlog \
&& wsrep_to_isolation_begin(thd, db_, table_, table_list_)) goto wsrep_error_label;
-#define WSREP_TO_ISOLATION_BEGIN_FK_TABLES(db_, table_, table_list_, fk_tables) \
- if (WSREP(thd) && !thd->lex->no_write_to_binlog \
- && wsrep_to_isolation_begin(thd, db_, table_, table_list_, NULL, fk_tables))
-
#define WSREP_SYNC_WAIT(thd_, before_) \
{ if (WSREP_CLIENT(thd_) && \
wsrep_sync_wait(thd_, before_)) goto wsrep_error_label; }
@@ -76,7 +70,6 @@
#define WSREP_ERROR(...)
#define WSREP_TO_ISOLATION_BEGIN(db_, table_, table_list_) do { } while(0)
#define WSREP_TO_ISOLATION_BEGIN_ALTER(db_, table_, table_list_, alter_info_, fk_tables_, create_info_)
-#define WSREP_TO_ISOLATION_BEGIN_FK_TABLES(db_, table_, table_list_, fk_tables_)
#define WSREP_TO_ISOLATION_END
#define WSREP_TO_ISOLATION_BEGIN_CREATE(db_, table_, table_list_, create_info_)
#define WSREP_TO_ISOLATION_BEGIN_WRTCHK(db_, table_, table_list_)
diff --git a/mysql-test/main/alias.result b/mysql-test/main/alias.result
index d8bb211539f..0d14607f613 100644
--- a/mysql-test/main/alias.result
+++ b/mysql-test/main/alias.result
@@ -223,16 +223,16 @@ disconnect c1;
#
create or replace table t1 (a int);
create or replace table t2 (b int);
-insert into t1 values(1),(2);
+insert into t1 values(1<<30),(1<<29);
insert into t2 values(1),(2);
select t1.a as a1 from t1 as t1,t2 order by t2.b,t1.a;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
-def test t1 t1 a a1 3 11 1 Y 32768 0 63
+def test t1 t1 a a1 3 11 10 Y 32768 0 63
a1
-1
-2
-1
-2
+536870912
+1073741824
+536870912
+1073741824
drop table t1,t2;
#
# End of 10.4 tests
diff --git a/mysql-test/main/alias.test b/mysql-test/main/alias.test
index f0c4e13abfd..2408509ba10 100644
--- a/mysql-test/main/alias.test
+++ b/mysql-test/main/alias.test
@@ -231,7 +231,7 @@ disconnect c1;
--echo #
create or replace table t1 (a int);
create or replace table t2 (b int);
-insert into t1 values(1),(2);
+insert into t1 values(1<<30),(1<<29);
insert into t2 values(1),(2);
--enable_metadata
select t1.a as a1 from t1 as t1,t2 order by t2.b,t1.a;
diff --git a/mysql-test/suite/galera/disabled.def b/mysql-test/suite/galera/disabled.def
index ec35dacb03e..51ee1e9bfe3 100644
--- a/mysql-test/suite/galera/disabled.def
+++ b/mysql-test/suite/galera/disabled.def
@@ -32,7 +32,6 @@ galera_parallel_simple : MDEV-20318 galera.galera_parallel_simple fails
galera_pc_ignore_sb : MDEV-20888 galera.galera_pc_ignore_sb
galera_pc_recovery : MDEV-25199 cluster fails to start up
galera_shutdown_nonprim : MDEV-21493 galera.galera_shutdown_nonprim
-galera_ssl_upgrade : MDEV-19950 Galera test failure on galera_ssl_upgrade
galera_toi_ddl_nonconflicting : MDEV-21518 galera.galera_toi_ddl_nonconflicting
galera_toi_truncate : MDEV-22996 Hang on galera_toi_truncate test case
galera_trigger : MDEV-24048 galera.galera_trigger MTR fails: Result content mismatch
diff --git a/mysql-test/suite/galera/r/galera_fk_truncate.result b/mysql-test/suite/galera/r/galera_fk_truncate.result
new file mode 100644
index 00000000000..a90f3e27ab7
--- /dev/null
+++ b/mysql-test/suite/galera/r/galera_fk_truncate.result
@@ -0,0 +1,47 @@
+connection node_2;
+connection node_1;
+CREATE TABLE author (
+id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
+name VARCHAR(100) NOT NULL
+) ENGINE = InnoDB;
+CREATE TABLE book (
+id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
+title VARCHAR(200) NOT NULL,
+author_id SMALLINT UNSIGNED NOT NULL,
+CONSTRAINT `fk_book_author`
+ FOREIGN KEY (author_id) REFERENCES author (id)
+ON DELETE CASCADE
+ON UPDATE RESTRICT
+) ENGINE = InnoDB;
+INSERT INTO author (name) VALUES ('Abdul Alhazred');
+INSERT INTO book (title, author_id) VALUES ('Necronomicon', LAST_INSERT_ID());
+TRUNCATE TABLE book;
+SELECT * FROM author;
+id name
+1 Abdul Alhazred
+SELECT * FROM book;
+id title author_id
+connection node_2;
+SELECT * FROM author;
+id name
+1 Abdul Alhazred
+SELECT * FROM book;
+id title author_id
+INSERT INTO author (name) VALUES ('Abdul Alhazred');
+INSERT INTO book (title, author_id) VALUES ('Necronomicon', LAST_INSERT_ID());
+TRUNCATE TABLE book;
+SELECT * FROM author;
+id name
+1 Abdul Alhazred
+2 Abdul Alhazred
+SELECT * FROM book;
+id title author_id
+connection node_1;
+TRUNCATE TABLE book;
+SELECT * FROM author;
+id name
+1 Abdul Alhazred
+2 Abdul Alhazred
+SELECT * FROM book;
+id title author_id
+DROP TABLE book, author;
diff --git a/mysql-test/suite/galera/r/galera_ssl_upgrade.result b/mysql-test/suite/galera/r/galera_ssl_upgrade.result
index 1443e34d041..134d1d1b605 100644
--- a/mysql-test/suite/galera/r/galera_ssl_upgrade.result
+++ b/mysql-test/suite/galera/r/galera_ssl_upgrade.result
@@ -1,3 +1,5 @@
+connection node_2;
+connection node_1;
connection node_1;
call mtr.add_suppression("WSREP: write_handler(): protocol is shutdown.*");
connection node_2;
@@ -24,5 +26,6 @@ connection node_1;
SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
VARIABLE_VALUE = 2
1
+connection node_2;
disconnect node_2;
disconnect node_1;
diff --git a/mysql-test/suite/galera/t/galera_fk_truncate.test b/mysql-test/suite/galera/t/galera_fk_truncate.test
new file mode 100644
index 00000000000..9d54a720432
--- /dev/null
+++ b/mysql-test/suite/galera/t/galera_fk_truncate.test
@@ -0,0 +1,39 @@
+--source include/galera_cluster.inc
+
+CREATE TABLE author (
+ id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
+ name VARCHAR(100) NOT NULL
+) ENGINE = InnoDB;
+
+CREATE TABLE book (
+ id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
+ title VARCHAR(200) NOT NULL,
+ author_id SMALLINT UNSIGNED NOT NULL,
+ CONSTRAINT `fk_book_author`
+ FOREIGN KEY (author_id) REFERENCES author (id)
+ ON DELETE CASCADE
+ ON UPDATE RESTRICT
+) ENGINE = InnoDB;
+
+INSERT INTO author (name) VALUES ('Abdul Alhazred');
+INSERT INTO book (title, author_id) VALUES ('Necronomicon', LAST_INSERT_ID());
+
+TRUNCATE TABLE book;
+SELECT * FROM author;
+SELECT * FROM book;
+
+--connection node_2
+SELECT * FROM author;
+SELECT * FROM book;
+INSERT INTO author (name) VALUES ('Abdul Alhazred');
+INSERT INTO book (title, author_id) VALUES ('Necronomicon', LAST_INSERT_ID());
+TRUNCATE TABLE book;
+SELECT * FROM author;
+SELECT * FROM book;
+
+--connection node_1
+TRUNCATE TABLE book;
+SELECT * FROM author;
+SELECT * FROM book;
+
+DROP TABLE book, author;
diff --git a/mysql-test/suite/innodb/r/instant_alter_import.result b/mysql-test/suite/innodb/r/instant_alter_import.result
index 2d9a39f7886..008a26ea6af 100644
--- a/mysql-test/suite/innodb/r/instant_alter_import.result
+++ b/mysql-test/suite/innodb/r/instant_alter_import.result
@@ -70,3 +70,11 @@ select * from t1;
ERROR HY000: Tablespace has been discarded for table `t1`
drop table t2;
drop table t1;
+CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT, i1 INT) ENGINE=INNODB;
+CREATE TABLE t2 (id INT PRIMARY KEY AUTO_INCREMENT, i1 INT, i2 INT) ENGINE=INNODB;
+ALTER TABLE t2 DROP COLUMN i2, ALGORITHM=INSTANT;
+ALTER TABLE t2 DISCARD TABLESPACE;
+FLUSH TABLE t1 FOR EXPORT;
+UNLOCK TABLES;
+ALTER TABLE t2 IMPORT TABLESPACE;
+DROP TABLE t2, t1;
diff --git a/mysql-test/suite/innodb/t/instant_alter_import.test b/mysql-test/suite/innodb/t/instant_alter_import.test
index fb187debb51..d01f4325f1e 100644
--- a/mysql-test/suite/innodb/t/instant_alter_import.test
+++ b/mysql-test/suite/innodb/t/instant_alter_import.test
@@ -82,3 +82,22 @@ select * from t1;
drop table t2;
drop table t1;
+
+
+--let $MYSQLD_DATADIR= `SELECT @@datadir`
+
+CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT, i1 INT) ENGINE=INNODB;
+
+CREATE TABLE t2 (id INT PRIMARY KEY AUTO_INCREMENT, i1 INT, i2 INT) ENGINE=INNODB;
+ALTER TABLE t2 DROP COLUMN i2, ALGORITHM=INSTANT;
+ALTER TABLE t2 DISCARD TABLESPACE;
+
+FLUSH TABLE t1 FOR EXPORT;
+
+--copy_file $MYSQLD_DATADIR/test/t1.ibd $MYSQLD_DATADIR/test/t2.ibd
+--copy_file $MYSQLD_DATADIR/test/t1.cfg $MYSQLD_DATADIR/test/t2.cfg
+
+UNLOCK TABLES;
+ALTER TABLE t2 IMPORT TABLESPACE;
+
+DROP TABLE t2, t1;
diff --git a/sql/sql_admin.cc b/sql/sql_admin.cc
index f713064f197..b9d0d65df11 100644
--- a/sql/sql_admin.cc
+++ b/sql/sql_admin.cc
@@ -462,16 +462,17 @@ static bool wsrep_toi_replication(THD *thd, TABLE_LIST *tables)
/* now TOI replication, with no locks held */
if (keys.empty())
{
- WSREP_TO_ISOLATION_BEGIN_WRTCHK(NULL, NULL, tables);
- } else {
- WSREP_TO_ISOLATION_BEGIN_FK_TABLES(NULL, NULL, tables, &keys) {
+ if (!thd->lex->no_write_to_binlog &&
+ wsrep_to_isolation_begin(thd, NULL, NULL, tables))
+ return true;
+ }
+ else
+ {
+ if (!thd->lex->no_write_to_binlog &&
+ wsrep_to_isolation_begin(thd, NULL, NULL, tables, NULL, &keys))
return true;
- }
}
return false;
-
- wsrep_error_label:
- return true;
}
#endif /* WITH_WSREP */
diff --git a/sql/sql_truncate.cc b/sql/sql_truncate.cc
index 3473701e187..cb0849400ee 100644
--- a/sql/sql_truncate.cc
+++ b/sql/sql_truncate.cc
@@ -435,15 +435,13 @@ bool Sql_cmd_truncate_table::truncate_table(THD *thd, TABLE_LIST *table_ref)
{
if (keys.empty())
{
- WSREP_TO_ISOLATION_BEGIN_IF(table_ref->db.str, table_ref->table_name.str, NULL)
- {
+ if (wsrep_to_isolation_begin(thd, table_ref->db.str, table_ref->table_name.str, NULL))
DBUG_RETURN(TRUE);
- }
- } else {
- WSREP_TO_ISOLATION_BEGIN_FK_TABLES(NULL, NULL, table_ref, &keys)
- {
+ }
+ else
+ {
+ if (wsrep_to_isolation_begin(thd, NULL, NULL, table_ref, NULL, &keys))
DBUG_RETURN(TRUE);
- }
}
}
}
diff --git a/sql/wsrep_mysqld.cc b/sql/wsrep_mysqld.cc
index 56b92df65b3..7661dab2b8a 100644
--- a/sql/wsrep_mysqld.cc
+++ b/sql/wsrep_mysqld.cc
@@ -2389,8 +2389,9 @@ int wsrep_to_isolation_begin(THD *thd, const char *db_, const char *table_,
{
/*
No isolation for applier or replaying threads.
- */
- if (!wsrep_thd_is_local(thd)) return 0;
+ */
+ if (!wsrep_thd_is_local(thd))
+ return 0;
int ret= 0;
mysql_mutex_lock(&thd->LOCK_thd_data);
diff --git a/storage/innobase/include/dict0mem.h b/storage/innobase/include/dict0mem.h
index 6decc682b22..a039776dfbf 100644
--- a/storage/innobase/include/dict0mem.h
+++ b/storage/innobase/include/dict0mem.h
@@ -2454,7 +2454,7 @@ inline void dict_index_t::clear_instant_alter()
{ return a.col->ind < b.col->ind; });
table->instant = NULL;
if (ai_col) {
- auto a = std::find_if(begin, end,
+ auto a = std::find_if(fields, end,
[ai_col](const dict_field_t& f)
{ return f.col == ai_col; });
table->persistent_autoinc = (a == end)