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]

Reply via email to