From 9a809fe31be15131baf909e898c1ad2c02976728 Mon Sep 17 00:00:00 2001 From: Daniele Sciascia Date: Thu, 14 Jul 2016 14:29:59 +0200 Subject: [PATCH] MW-292 Reset timestamp after transaction replay Transaction replay causes the THD to re-apply the replication events from execution, using the same path appliers do. While applying the log events, the THD's timestamp is set to the timestamp of the event. Setting the timestamp explicitly causes function NOW() to always the timestamp that was set. To avoid this behavior we reset the timestamp after replaying is done. --- sql/sql_class.h | 1 + sql/wsrep_thd.cc | 2 ++ 2 files changed, 3 insertions(+) diff --git a/sql/sql_class.h b/sql/sql_class.h index ad3e94d43ca..e42eeacfff0 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -55,6 +55,7 @@ struct wsrep_thd_shadow { ulong tx_isolation; char *db; size_t db_length; + my_hrtime_t user_time; }; #endif class Reprepare_observer; diff --git a/sql/wsrep_thd.cc b/sql/wsrep_thd.cc index 50e8a09706b..4d665775f2d 100644 --- a/sql/wsrep_thd.cc +++ b/sql/wsrep_thd.cc @@ -127,6 +127,7 @@ static void wsrep_prepare_bf_thd(THD *thd, struct wsrep_thd_shadow* shadow) shadow->db = thd->db; shadow->db_length = thd->db_length; + shadow->user_time = thd->user_time; thd->reset_db(NULL, 0); } @@ -137,6 +138,7 @@ static void wsrep_return_from_bf_mode(THD *thd, struct wsrep_thd_shadow* shadow) thd->wsrep_exec_mode = shadow->wsrep_exec_mode; thd->net.vio = shadow->vio; thd->variables.tx_isolation = shadow->tx_isolation; + thd->user_time = shadow->user_time; thd->reset_db(shadow->db, shadow->db_length); thd->wsrep_rli->cleanup_after_session();