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

MDEV-27047: Replication fails to remove affected queries from query cache

Rows_log_event::do_apply_event(): Correct the mistake that was made in
the merge 5f8561a6bc.

In Galera, the query cache will be invalidated near the end
of the function.
This commit is contained in:
Marko Mäkelä
2021-11-16 13:58:22 +02:00
parent 079516f00e
commit 0269d491ea
3 changed files with 61 additions and 3 deletions

View File

@@ -0,0 +1,29 @@
include/master-slave.inc
[connection master]
connection slave;
SET @qtype= @@global.query_cache_type;
SET GLOBAL query_cache_type= ON;
SET query_cache_type= ON;
connection master;
create table t1 (i int) engine=innodb;
insert into t1 set i=1;
connection slave;
select * from t1;
i
1
connection master;
insert into t1 set i=2;
connection slave;
select * from t1;
i
1
2
select sql_no_cache * from t1;
i
1
2
connection master;
DROP TABLE t1;
connection slave;
SET GLOBAL query_cache_type= @qtype;
include/rpl_end.inc

View File

@@ -0,0 +1,27 @@
-- source include/have_binlog_format_row.inc
-- source include/have_innodb.inc
-- source include/master-slave.inc
--connection slave
SET @qtype= @@global.query_cache_type;
SET GLOBAL query_cache_type= ON;
SET query_cache_type= ON;
--connection master
create table t1 (i int) engine=innodb;
insert into t1 set i=1;
--sync_slave_with_master
select * from t1;
--connection master
insert into t1 set i=2;
--sync_slave_with_master
select * from t1;
select sql_no_cache * from t1;
--connection master
DROP TABLE t1;
--sync_slave_with_master
SET GLOBAL query_cache_type= @qtype;
--source include/rpl_end.inc

View File

@@ -5573,14 +5573,16 @@ int Rows_log_event::do_apply_event(rpl_group_info *rgi)
}
}
#if defined(WITH_WSREP) && defined(HAVE_QUERY_CACHE)
#ifdef HAVE_QUERY_CACHE
/*
Moved invalidation right before the call to rows_event_stmt_cleanup(),
to avoid query cache being polluted with stale entries,
*/
if (WSREP(thd) && wsrep_thd_is_applying(thd))
# ifdef WITH_WSREP
if (!WSREP(thd) && !wsrep_thd_is_applying(thd))
# endif /* WITH_WSREP */
query_cache.invalidate_locked_for_write(thd, rgi->tables_to_lock);
#endif /* WITH_WSREP && HAVE_QUERY_CACHE */
#endif /* HAVE_QUERY_CACHE */
}
table= m_table= rgi->m_table_map.get_table(m_table_id);