diff options
-rw-r--r-- | sql/rpl_gtid.cc | 12 | ||||
-rw-r--r-- | sql/sql_class.cc | 7 | ||||
-rw-r--r-- | sql/sql_class.h | 1 | ||||
-rw-r--r-- | sql/wsrep_mysqld.h | 3 | ||||
-rw-r--r-- | storage/innobase/handler/ha_innodb.cc | 19 | ||||
-rw-r--r-- | storage/xtradb/handler/ha_innodb.cc | 18 |
6 files changed, 42 insertions, 18 deletions
diff --git a/sql/rpl_gtid.cc b/sql/rpl_gtid.cc index 709cb284df5..81f2dd5812a 100644 --- a/sql/rpl_gtid.cc +++ b/sql/rpl_gtid.cc @@ -574,6 +574,14 @@ rpl_slave_state::record_gtid(THD *thd, const rpl_gtid *gtid, uint64 sub_id, if ((err= gtid_check_rpl_slave_state_table(table))) goto end; +#ifdef WITH_WSREP + /* + Updates in slave state table should not be appended to galera transaction + writeset. + */ + thd->wsrep_skip_append_keys= true; +#endif + if (!in_transaction) { DBUG_PRINT("info", ("resetting OPTION_BEGIN")); @@ -687,6 +695,10 @@ IF_DBUG(dbug_break:, ) end: +#ifdef WITH_WSREP + thd->wsrep_skip_append_keys= false; +#endif + if (table_opened) { if (err || (err= ha_commit_trans(thd, FALSE))) diff --git a/sql/sql_class.cc b/sql/sql_class.cc index 5f1714558eb..6c7282c3505 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -962,6 +962,10 @@ extern "C" int wsrep_thd_retry_counter(THD *thd) { return(thd->wsrep_retry_counter); } +extern "C" bool wsrep_thd_skip_append_keys(THD *thd) +{ + return thd->wsrep_skip_append_keys; +} extern int wsrep_trx_order_before(void *thd1, void *thd2) @@ -1083,7 +1087,8 @@ THD::THD() wsrep_po_cnt(0), wsrep_po_in_trans(FALSE), wsrep_apply_format(0), - wsrep_apply_toi(false) + wsrep_apply_toi(false), + wsrep_skip_append_keys(false) #endif { ulong tmp; diff --git a/sql/sql_class.h b/sql/sql_class.h index 596a2713d19..83899ecee21 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -3863,6 +3863,7 @@ public: #endif /* GTID_SUPPORT */ void* wsrep_apply_format; bool wsrep_apply_toi; /* applier processing in TOI */ + bool wsrep_skip_append_keys; #endif /* WITH_WSREP */ }; diff --git a/sql/wsrep_mysqld.h b/sql/wsrep_mysqld.h index 4e0d2f4128f..1616bab695e 100644 --- a/sql/wsrep_mysqld.h +++ b/sql/wsrep_mysqld.h @@ -180,7 +180,7 @@ extern "C" query_id_t wsrep_thd_wsrep_last_query_id(THD *thd); extern "C" void wsrep_thd_set_wsrep_last_query_id(THD *thd, query_id_t id); extern "C" void wsrep_thd_awake(THD *thd, my_bool signal); extern "C" int wsrep_thd_retry_counter(THD *thd); - +extern "C" bool wsrep_thd_skip_append_keys(THD *thd); extern void wsrep_close_client_connections(my_bool wait_to_end); extern int wsrep_wait_committing_connections_close(int wait_time); @@ -195,7 +195,6 @@ extern bool wsrep_start_replication(); extern bool wsrep_sync_wait (THD* thd, uint mask = WSREP_SYNC_WAIT_BEFORE_READ); extern int wsrep_check_opts (int argc, char* const* argv); extern void wsrep_prepend_PATH (const char* path); -/* some inline functions are defined in wsrep_mysqld_inl.h */ /* Other global variables */ extern wsrep_seqno_t wsrep_locked_seqno; diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 8bc00e40051..51f37aa4f06 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -7760,7 +7760,8 @@ report_error: if (!error_result && wsrep_thd_exec_mode(user_thd) == LOCAL_STATE && wsrep_on(user_thd) && - !wsrep_consistency_check(user_thd)) + !wsrep_consistency_check(user_thd) && + !wsrep_thd_skip_append_keys(user_thd)) { if (wsrep_append_keys(user_thd, false, record, NULL)) { @@ -8278,10 +8279,11 @@ func_exit: innobase_active_small(); #ifdef WITH_WSREP - if (error == DB_SUCCESS && + if (error == DB_SUCCESS && wsrep_thd_exec_mode(user_thd) == LOCAL_STATE && - wsrep_on(user_thd)) { - + wsrep_on(user_thd) && + !wsrep_thd_skip_append_keys(user_thd)) + { DBUG_PRINT("wsrep", ("update row key")); if (wsrep_append_keys(user_thd, false, old_row, new_row)) { @@ -8343,10 +8345,11 @@ ha_innobase::delete_row( innobase_active_small(); #ifdef WITH_WSREP - if (error == DB_SUCCESS && - wsrep_thd_exec_mode(user_thd) == LOCAL_STATE && - wsrep_on(user_thd)) { - + if (error == DB_SUCCESS && + wsrep_thd_exec_mode(user_thd) == LOCAL_STATE && + wsrep_on(user_thd) && + !wsrep_thd_skip_append_keys(user_thd)) + { if (wsrep_append_keys(user_thd, false, record, NULL)) { DBUG_PRINT("wsrep", ("delete fail")); error = (dberr_t)HA_ERR_INTERNAL_ERROR; diff --git a/storage/xtradb/handler/ha_innodb.cc b/storage/xtradb/handler/ha_innodb.cc index d4d9e1c4aa7..878d567c9b2 100644 --- a/storage/xtradb/handler/ha_innodb.cc +++ b/storage/xtradb/handler/ha_innodb.cc @@ -8381,7 +8381,8 @@ report_error: if (!error_result && wsrep_thd_exec_mode(user_thd) == LOCAL_STATE && wsrep_on(user_thd) && - !wsrep_consistency_check(user_thd)) + !wsrep_consistency_check(user_thd) && + !wsrep_thd_skip_append_keys(user_thd)) { if (wsrep_append_keys(user_thd, false, record, NULL)) { @@ -8911,10 +8912,11 @@ func_exit: innobase_active_small(); #ifdef WITH_WSREP - if (error == DB_SUCCESS && + if (error == DB_SUCCESS && wsrep_thd_exec_mode(user_thd) == LOCAL_STATE && - wsrep_on(user_thd)) { - + wsrep_on(user_thd) && + !wsrep_thd_skip_append_keys(user_thd)) + { DBUG_PRINT("wsrep", ("update row key")); if (wsrep_append_keys(user_thd, false, old_row, new_row)) { @@ -8990,9 +8992,11 @@ ha_innobase::delete_row( innobase_active_small(); #ifdef WITH_WSREP - if (error == DB_SUCCESS && wsrep_thd_exec_mode(user_thd) == LOCAL_STATE && - wsrep_on(user_thd)) { - + if (error == DB_SUCCESS && + wsrep_thd_exec_mode(user_thd) == LOCAL_STATE && + wsrep_on(user_thd) && + !wsrep_thd_skip_append_keys(user_thd)) + { if (wsrep_append_keys(user_thd, false, record, NULL)) { DBUG_PRINT("wsrep", ("delete fail")); error = DB_ERROR; |