From: Nikita Malyavin <[email protected]>
Row events prelock tables for triggers even if those triggers are not
accessed. Write_row event is known to trigger a wider set of row
operations. In IDEMPOTENT mode it is
trg2bit(TRG_EVENT_INSERT) | trg2bit(TRG_EVENT_DELETE);
So no surprise that AFTER DELETE trigger is prepared for insert event.
If the table in trigger doesn't exist though, the error wouldn't be
triggered.
Make the same for GTT:
ignore its open denials on slave if it's meant so.
Parent issue:
MDEV-35915 Implement Global temporary tables
---
.../suite/rpl/r/rpl_row_triggers.result | 22 ++++++++++++++++
mysql-test/suite/rpl/t/rpl_row_triggers.test | 25 +++++++++++++++++++
sql/sql_base.cc | 1 +
3 files changed, 48 insertions(+)
diff --git a/mysql-test/suite/rpl/r/rpl_row_triggers.result
b/mysql-test/suite/rpl/r/rpl_row_triggers.result
index 07a66d13bcf..d52e01830e3 100644
--- a/mysql-test/suite/rpl/r/rpl_row_triggers.result
+++ b/mysql-test/suite/rpl/r/rpl_row_triggers.result
@@ -470,4 +470,26 @@ drop table t2;
#
# enterprise 10.4 tests end
#
+# MDEV-38937
+# GTT: 1944 Error executing row event: 'Failed to open t2.test' on INSERT
+connection slave;
+set global slave_run_triggers_for_rbr= LOGGING;
+set global slave_exec_mode= IDEMPOTENT;
+connection master;
+create table t1 (a text);
+create global temporary table t2 like t1;
+create trigger tr after delete on t1 for each row update t2 set b=(1);
+connection slave;
+connection master;
+insert into t1 select 1 t1;
+connection slave;
+connection master;
+# Cleanup
+drop table t1,t2;
+connection slave;
+set global slave_exec_mode= @old_slave_exec_mode;
+set global slave_run_triggers_for_rbr= @old_slave_run_triggers_for_rbr;
+#
+# End of 13.0 tests
+#
include/rpl_end.inc
diff --git a/mysql-test/suite/rpl/t/rpl_row_triggers.test
b/mysql-test/suite/rpl/t/rpl_row_triggers.test
index 68002dbe7e2..8362175fd30 100644
--- a/mysql-test/suite/rpl/t/rpl_row_triggers.test
+++ b/mysql-test/suite/rpl/t/rpl_row_triggers.test
@@ -439,4 +439,29 @@ drop table t2;
--echo # enterprise 10.4 tests end
--echo #
+--echo # MDEV-38937
+--echo # GTT: 1944 Error executing row event: 'Failed to open t2.test' on
INSERT
+connection slave;
+set global slave_run_triggers_for_rbr= LOGGING;
+set global slave_exec_mode= IDEMPOTENT;
+connection master;
+create table t1 (a text);
+create global temporary table t2 like t1;
+create trigger tr after delete on t1 for each row update t2 set b=(1);
+sync_slave_with_master;
+connection master;
+insert into t1 select 1 t1;
+sync_slave_with_master;
+connection master;
+
+--echo # Cleanup
+drop table t1,t2;
+connection slave;
+set global slave_exec_mode= @old_slave_exec_mode;
+set global slave_run_triggers_for_rbr= @old_slave_run_triggers_for_rbr;
+
+--echo #
+--echo # End of 13.0 tests
+--echo #
+
--source include/rpl_end.inc
diff --git a/sql/sql_base.cc b/sql/sql_base.cc
index c56d75fbe00..1360ea369fc 100644
--- a/sql/sql_base.cc
+++ b/sql/sql_base.cc
@@ -82,6 +82,7 @@ No_such_table_error_handler::handle_condition(THD *,
first_error= sql_errno;
if (sql_errno == ER_NO_SUCH_TABLE
|| sql_errno == ER_NO_SUCH_TABLE_IN_ENGINE
+ || sql_errno == ER_GTID_OPEN_TABLE_FAILED
|| sql_errno == ER_UNKNOWN_SEQUENCES)
{
m_handled_errors++;
--
2.43.0
_______________________________________________
commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]