summaryrefslogtreecommitdiff
path: root/sql/log_event.cc
diff options
context:
space:
mode:
authorDaniele Sciascia <daniele.sciascia@galeracluster.com>2015-11-03 14:16:08 +0100
committerNirbhay Choubey <nirbhay@mariadb.com>2016-02-22 23:42:32 -0500
commitc6659345a03b14225bfe0a2464a9cc8346a43adf (patch)
treef09280a1bbcbfd38ac5916cc4fcf9c03e9a2e935 /sql/log_event.cc
parentc05d85f45d24691831b862dedc52f188deaa13d2 (diff)
downloadmariadb-git-c6659345a03b14225bfe0a2464a9cc8346a43adf.tar.gz
refs codership/mysql-wsrep#201
Fix remaining issues with wsrep_sync_wait and query cache. - Fixes misplaced call to invalidate query cache in Rows_log_event::do_apply_event(). Query cache was invalidated too early, and allowed old entries to be inserted to the cache. - Reset thd->wsrep_sync_wait_gtid on query cache hit. THD->cleanup_after_query is not called in such cases, and thd->wsrep_sync_wait_gtid remained initialized.
Diffstat (limited to 'sql/log_event.cc')
-rw-r--r--sql/log_event.cc19
1 files changed, 19 insertions, 0 deletions
diff --git a/sql/log_event.cc b/sql/log_event.cc
index 3870467e1da..1afa1475931 100644
--- a/sql/log_event.cc
+++ b/sql/log_event.cc
@@ -9892,7 +9892,18 @@ int Rows_log_event::do_apply_event(rpl_group_info *rgi)
}
#ifdef HAVE_QUERY_CACHE
+#ifdef WITH_WSREP
+ /*
+ Moved invalidation right before the call to rows_event_stmt_cleanup(),
+ to avoid query cache being polluted with stale entries.
+ */
+ if (! (WSREP(thd) && (thd->wsrep_exec_mode == REPL_RECV)))
+ {
+#endif /* WITH_WSREP */
query_cache.invalidate_locked_for_write(thd, rgi->tables_to_lock);
+#ifdef WITH_WSREP
+ }
+#endif /* WITH_WSREP */
#endif
}
@@ -10080,6 +10091,14 @@ int Rows_log_event::do_apply_event(rpl_group_info *rgi)
/* remove trigger's tables */
if (slave_run_triggers_for_rbr)
restore_empty_query_table_list(thd->lex);
+
+#if defined(WITH_WSREP) && defined(HAVE_QUERY_CACHE)
+ if (WSREP(thd) && thd->wsrep_exec_mode == REPL_RECV)
+ {
+ query_cache.invalidate_locked_for_write(thd, rgi->tables_to_lock);
+ }
+#endif /* WITH_WSREP && HAVE_QUERY_CACHE */
+
if (get_flags(STMT_END_F) && (error= rows_event_stmt_cleanup(rgi, thd)))
slave_rows_error_report(ERROR_LEVEL,
thd->is_error() ? 0 : error,