diff options
author | unknown <knielsen@knielsen-hq.org> | 2013-11-01 12:00:11 +0100 |
---|---|---|
committer | unknown <knielsen@knielsen-hq.org> | 2013-11-01 12:00:11 +0100 |
commit | 57a267a8c00471bbe13724e7d9ba89d23acef3c2 (patch) | |
tree | 808a9f9b165bfe034304e4974dd618eaafcdedb2 /sql/handler.cc | |
parent | bd3dc54261f10f387a03ad99ce74c3824c42e462 (diff) | |
parent | cb86ce60b9bade5ae7712d8f3f74668208ee3fd2 (diff) | |
download | mariadb-git-57a267a8c00471bbe13724e7d9ba89d23acef3c2.tar.gz |
Merge from 10.0-base to 10.0 the feature MDEV-4506: Parallel replication.
The merge is still missing a few hunks related to temporary tables and
InnoDB log file size. The associated code did not seem to exist in
10.0, so the merge of that needs more work. Until this is fixed, there
are a number of test failures as a result.
Diffstat (limited to 'sql/handler.cc')
-rw-r--r-- | sql/handler.cc | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/sql/handler.cc b/sql/handler.cc index 9fca0a5d133..c06da7194be 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -1256,6 +1256,8 @@ int ha_commit_trans(THD *thd, bool all) bool need_prepare_ordered, need_commit_ordered; my_xid xid; DBUG_ENTER("ha_commit_trans"); + DBUG_PRINT("info",("thd: %p option_bits: %lu all: %d", + thd, (ulong) thd->variables.option_bits, all)); /* Just a random warning to test warnings pushed during autocommit. */ DBUG_EXECUTE_IF("warn_during_ha_commit_trans", @@ -1320,6 +1322,8 @@ int ha_commit_trans(THD *thd, bool all) /* rw_trans is TRUE when we in a transaction changing data */ bool rw_trans= is_real_trans && (rw_ha_count > 0); MDL_request mdl_request; + DBUG_PRINT("info", ("is_real_trans: %d rw_trans: %d rw_ha_count: %d", + is_real_trans, rw_trans, rw_ha_count)); if (rw_trans) { @@ -1468,8 +1472,11 @@ int ha_commit_one_phase(THD *thd, bool all) transaction.all.ha_list, see why in trans_register_ha()). */ bool is_real_trans=all || thd->transaction.all.ha_list == 0; + int res; DBUG_ENTER("ha_commit_one_phase"); - int res= commit_one_phase_2(thd, all, trans, is_real_trans); + if (is_real_trans && (res= thd->wait_for_prior_commit())) + DBUG_RETURN(res); + res= commit_one_phase_2(thd, all, trans, is_real_trans); DBUG_RETURN(res); } @@ -1508,7 +1515,10 @@ commit_one_phase_2(THD *thd, bool all, THD_TRANS *trans, bool is_real_trans) } /* Free resources and perform other cleanup even for 'empty' transactions. */ if (is_real_trans) + { + thd->wakeup_subsequent_commits(error); thd->transaction.cleanup(); + } DBUG_RETURN(error); } @@ -1583,7 +1593,10 @@ int ha_rollback_trans(THD *thd, bool all) } /* Always cleanup. Even if nht==0. There may be savepoints. */ if (is_real_trans) + { + thd->wakeup_subsequent_commits(error); thd->transaction.cleanup(); + } if (all) thd->transaction_rollback_request= FALSE; |