summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Lindström <jan.lindstrom@mariadb.com>2022-01-09 09:37:44 +0200
committerJan Lindström <jan.lindstrom@mariadb.com>2022-01-11 08:11:48 +0200
commite0dc422eded88c59cebe5ec46dec2ddd9c0f7b5b (patch)
treef8c8fb5043eb4f1b7c75fb2c13ecaf9c5279f299
parent10a86d86d5e87a2360957188bb59ecdd10bfda5d (diff)
downloadmariadb-git-bb-10.6-galera-jan.tar.gz
MDEV-25201 : Assertion `thd->wsrep_trx_meta.gtid.seqno == (-1)' failed in int wsrep_to_isolation_begin(THD*, const char*, const char*, const TABLE_LIST*, Alter_info*)bb-10.6-galera-jan
Test case does not assert anymore but works incorrectly. We should not replicate PREPARE using TOI.
-rw-r--r--mysql-test/suite/galera/r/enforce_storage_engine2.result1
-rw-r--r--mysql-test/suite/galera/r/galera_myisam_transactions.result17
-rw-r--r--mysql-test/suite/galera/t/galera_myisam_transactions.test17
-rw-r--r--sql/sql_base.cc2
4 files changed, 37 insertions, 0 deletions
diff --git a/mysql-test/suite/galera/r/enforce_storage_engine2.result b/mysql-test/suite/galera/r/enforce_storage_engine2.result
index 8b174139eae..e0fb8d867dc 100644
--- a/mysql-test/suite/galera/r/enforce_storage_engine2.result
+++ b/mysql-test/suite/galera/r/enforce_storage_engine2.result
@@ -9,6 +9,7 @@ CREATE TABLE t1(i INT) ENGINE=INNODB;
CREATE TABLE t2(i INT) ENGINE=MYISAM;
Warnings:
Note 1266 Using storage engine InnoDB for table 't2'
+Note 1266 Using storage engine InnoDB for table 't2'
connection node_2;
SHOW TABLES;
Tables_in_test
diff --git a/mysql-test/suite/galera/r/galera_myisam_transactions.result b/mysql-test/suite/galera/r/galera_myisam_transactions.result
index 091c5ffb6f6..fc8c95bd3e0 100644
--- a/mysql-test/suite/galera/r/galera_myisam_transactions.result
+++ b/mysql-test/suite/galera/r/galera_myisam_transactions.result
@@ -37,3 +37,20 @@ SELECT COUNT(*) = 0 FROM t2;
COUNT(*) = 0
1
DROP TABLE t1, t2, t3;
+SET SESSION lock_wait_timeout=2;
+SET GLOBAL wsrep_mode = "REPLICATE_MYISAM,REPLICATE_ARIA";
+CREATE TEMPORARY TABLE t1 (i INT, PRIMARY KEY pk (i)) ENGINE=MyISAM;
+Warnings:
+Warning 1280 Name 'pk' ignored for PRIMARY key.
+CREATE TEMPORARY TABLE t2 (i INT, PRIMARY KEY pk (i)) ENGINE=Aria;
+Warnings:
+Warning 1280 Name 'pk' ignored for PRIMARY key.
+PREPARE stmt FROM "INSERT INTO t1 (id) SELECT * FROM (SELECT 4 AS i) AS y";
+PREPARE stmt2 FROM "INSERT INTO t2 (id) SELECT * FROM (SELECT 4 AS i) AS y";
+INSERT INTO t1 VALUES(4);
+INSERT INTO t2 VALUES(4);
+DEALLOCATE PREPARE stmt;
+DEALLOCATE PREPARE stmt2;
+COMMIT;
+DROP TABLE t1,t2;
+SET GLOBAL wsrep_mode=DEFAULT;
diff --git a/mysql-test/suite/galera/t/galera_myisam_transactions.test b/mysql-test/suite/galera/t/galera_myisam_transactions.test
index 00e0bf3fdca..6843764ccb4 100644
--- a/mysql-test/suite/galera/t/galera_myisam_transactions.test
+++ b/mysql-test/suite/galera/t/galera_myisam_transactions.test
@@ -34,3 +34,20 @@ SELECT COUNT(*) = 0 FROM t2;
SELECT COUNT(*) = 0 FROM t2;
DROP TABLE t1, t2, t3;
+
+#
+# MDEV-25201 : Assertion `thd->wsrep_trx_meta.gtid.seqno == (-1)' failed in int wsrep_to_isolation_begin(THD*, const char*, const char*, const TABLE_LIST*, Alter_info*)
+#
+SET SESSION lock_wait_timeout=2;
+SET GLOBAL wsrep_mode = "REPLICATE_MYISAM,REPLICATE_ARIA";
+CREATE TEMPORARY TABLE t1 (i INT, PRIMARY KEY pk (i)) ENGINE=MyISAM;
+CREATE TEMPORARY TABLE t2 (i INT, PRIMARY KEY pk (i)) ENGINE=Aria;
+PREPARE stmt FROM "INSERT INTO t1 (id) SELECT * FROM (SELECT 4 AS i) AS y";
+PREPARE stmt2 FROM "INSERT INTO t2 (id) SELECT * FROM (SELECT 4 AS i) AS y";
+INSERT INTO t1 VALUES(4);
+INSERT INTO t2 VALUES(4);
+DEALLOCATE PREPARE stmt;
+DEALLOCATE PREPARE stmt2;
+COMMIT;
+DROP TABLE t1,t2;
+SET GLOBAL wsrep_mode=DEFAULT;
diff --git a/sql/sql_base.cc b/sql/sql_base.cc
index 8ee1d19961f..509da905c63 100644
--- a/sql/sql_base.cc
+++ b/sql/sql_base.cc
@@ -4458,6 +4458,7 @@ restart:
wsrep_thd_is_local(thd) &&
tbl &&
tables == *start &&
+ !thd->stmt_arena->is_stmt_prepare() &&
!wsrep_check_mode_after_open_table(thd,
tbl->file->ht, tables))
{
@@ -4474,6 +4475,7 @@ restart:
{
enum_sql_command sql_command= thd->lex->sql_command;
bool is_dml_stmt= thd->get_command() != COM_STMT_PREPARE &&
+ !thd->stmt_arena->is_stmt_prepare() &&
(sql_command == SQLCOM_INSERT ||
sql_command == SQLCOM_INSERT_SELECT ||
sql_command == SQLCOM_REPLACE ||