From 61bda9a2f0017b1fbe88c63a0ada68ad1024a72c Mon Sep 17 00:00:00 2001 From: Seppo Jaakola Date: Mon, 7 Oct 2013 09:43:19 +0300 Subject: [PATCH] Merged revisions 3425..3430 from mariadb-galera-5.5 --- sql/mdl.cc | 7 ++++++- sql/mdl.h | 3 +++ sql/sql_parse.cc | 9 ++++++--- sql/wsrep_mysqld.cc | 8 +++++++- 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/sql/mdl.cc b/sql/mdl.cc index c3aa4b2363b..7fbbfa74537 100644 --- a/sql/mdl.cc +++ b/sql/mdl.cc @@ -2951,7 +2951,12 @@ void MDL_context::release_locks_stored_before(enum_mdl_duration duration, DBUG_VOID_RETURN; } - +#ifdef WITH_WSREP +void MDL_context::release_explicit_locks() +{ + release_locks_stored_before(MDL_EXPLICIT, NULL); +} +#endif /** Release all explicit locks in the context which correspond to the same name/object as this lock request. diff --git a/sql/mdl.h b/sql/mdl.h index 8590450b76e..498c9fc3ba3 100644 --- a/sql/mdl.h +++ b/sql/mdl.h @@ -782,6 +782,9 @@ public: void release_statement_locks(); void release_transactional_locks(); +#ifdef WITH_WSREP + void release_explicit_locks(); +#endif void rollback_to_savepoint(const MDL_savepoint &mdl_savepoint); MDL_context_owner *get_owner() { return m_owner; } diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 2ecdf7cbdfb..72a8739261f 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -8617,6 +8617,9 @@ static void wsrep_client_rollback(THD *thd) /* Release transactional metadata locks. */ thd->mdl_context.release_transactional_locks(); + /* release explicit MDL locks */ + thd->mdl_context.release_explicit_locks(); + if (thd->get_binlog_table_maps()) { WSREP_DEBUG("clearing binlog table map for BF abort (%ld)", thd->thread_id); @@ -8790,11 +8793,11 @@ static inline wsrep_status_t wsrep_apply_rbr( DBUG_RETURN(WSREP_FATAL); } - if (ev->get_type_code() != TABLE_MAP_EVENT && + if ((ev->get_type_code() == WRITE_ROWS_EVENT || + ev->get_type_code() == UPDATE_ROWS_EVENT || + ev->get_type_code() == DELETE_ROWS_EVENT) && ((Rows_log_event *) ev)->get_flags(Rows_log_event::STMT_END_F)) { - // TODO: combine with commit on higher level common for the query ws - thd->wsrep_rli->cleanup_context(thd, 0); if (error == 0) diff --git a/sql/wsrep_mysqld.cc b/sql/wsrep_mysqld.cc index 2196a7b050c..14bc3e54845 100644 --- a/sql/wsrep_mysqld.cc +++ b/sql/wsrep_mysqld.cc @@ -714,7 +714,7 @@ bool wsrep_start_replication() uint64_t caps = wsrep->capabilities (wsrep); wsrep_incremental_data_collection = - (caps & WSREP_CAP_WRITE_SET_INCREMENTS); + !!(caps & WSREP_CAP_WRITE_SET_INCREMENTS); char* opts= wsrep->options_get(wsrep); if (opts) @@ -1254,6 +1254,12 @@ int wsrep_to_isolation_begin(THD *thd, char *db_, char *table_, if (!ret) { thd->wsrep_exec_mode= TOTAL_ORDER; + /* It makes sense to set auto_increment_* to defaults in TOI operations */ + if (wsrep_auto_increment_control) + { + thd->variables.auto_increment_offset = 1; + thd->variables.auto_increment_increment = 1; + } } } return ret;