diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2021-11-16 13:58:22 +0200 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2021-11-16 13:58:22 +0200 |
commit | 0269d491eaf02556817654e6365ebf50eb4616fc (patch) | |
tree | a1fd8a60456a50a2b3c716a5e3a999f87bd2b088 | |
parent | 079516f00efc526682aca727ac918ebf2322a16d (diff) | |
download | mariadb-git-0269d491eaf02556817654e6365ebf50eb4616fc.tar.gz |
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 5f8561a6bcdb66e05ca539365cce33a9fc1817a2.
In Galera, the query cache will be invalidated near the end
of the function.
-rw-r--r-- | mysql-test/suite/rpl/r/rpl_query_cache.result | 29 | ||||
-rw-r--r-- | mysql-test/suite/rpl/t/rpl_query_cache.test | 27 | ||||
-rw-r--r-- | sql/log_event_server.cc | 8 |
3 files changed, 61 insertions, 3 deletions
diff --git a/mysql-test/suite/rpl/r/rpl_query_cache.result b/mysql-test/suite/rpl/r/rpl_query_cache.result new file mode 100644 index 00000000000..6256ddb37f4 --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_query_cache.result @@ -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 diff --git a/mysql-test/suite/rpl/t/rpl_query_cache.test b/mysql-test/suite/rpl/t/rpl_query_cache.test new file mode 100644 index 00000000000..b23f2b20b47 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_query_cache.test @@ -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 diff --git a/sql/log_event_server.cc b/sql/log_event_server.cc index 79f197d4ec3..093adebf536 100644 --- a/sql/log_event_server.cc +++ b/sql/log_event_server.cc @@ -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); |