diff options
author | Sergei Golubchik <serg@mariadb.org> | 2018-06-30 16:39:20 +0200 |
---|---|---|
committer | Sergei Golubchik <serg@mariadb.org> | 2018-06-30 16:39:20 +0200 |
commit | 36e59752e7fc70bc5179a3d730b5ce3ee58e4e30 (patch) | |
tree | 0d3e30ce973b2e1f044931c0eb1846d7192becda /sql/wsrep_hton.cc | |
parent | 7c0779da7c37f6ef6eff2f79dda6f1b0c57e3869 (diff) | |
parent | 1dd3c8f8ba49ec06e550d7376d27ff05ce024bec (diff) | |
download | mariadb-git-36e59752e7fc70bc5179a3d730b5ce3ee58e4e30.tar.gz |
Merge branch '10.2' into 10.3
Diffstat (limited to 'sql/wsrep_hton.cc')
-rw-r--r-- | sql/wsrep_hton.cc | 36 |
1 files changed, 24 insertions, 12 deletions
diff --git a/sql/wsrep_hton.cc b/sql/wsrep_hton.cc index 3ffd5d7706b..d4d35d752be 100644 --- a/sql/wsrep_hton.cc +++ b/sql/wsrep_hton.cc @@ -119,7 +119,7 @@ void wsrep_post_commit(THD* thd, bool all) switch (thd->wsrep_exec_mode) { - case LOCAL_COMMIT: + case LOCAL_COMMIT: { DBUG_ASSERT(thd->wsrep_trx_meta.gtid.seqno != WSREP_SEQNO_UNDEFINED); if (wsrep && wsrep->post_commit(wsrep, &thd->wsrep_ws_handle)) @@ -131,18 +131,30 @@ void wsrep_post_commit(THD* thd, bool all) wsrep_cleanup_transaction(thd); break; } - case LOCAL_STATE: - { - /* - Non-InnoDB statements may have populated events in stmt cache => cleanup - */ - WSREP_DEBUG("cleanup transaction for LOCAL_STATE: %s", thd->query()); - wsrep_cleanup_transaction(thd); - break; - } - default: break; + case LOCAL_STATE: + { + /* non-InnoDB statements may have populated events in stmt cache + => cleanup + */ + WSREP_DEBUG("cleanup transaction for LOCAL_STATE"); + /* + Run post-rollback hook to clean up in the case if + some keys were populated for the transaction in provider + but during commit time there was no write set to replicate. + This may happen when client sets the SAVEPOINT and immediately + rolls back to savepoint after first operation. + */ + if (all && thd->wsrep_conflict_state != MUST_REPLAY && + wsrep && wsrep->post_rollback(wsrep, &thd->wsrep_ws_handle)) + { + WSREP_WARN("post_rollback fail: %llu %d", + (long long)thd->thread_id, thd->get_stmt_da()->status()); + } + wsrep_cleanup_transaction(thd); + break; + } + default: break; } - } /* |