You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by va...@apache.org on 2020/04/18 19:21:02 UTC
[couchdb-erlfdb] branch dont-create-new-tx-object-on-retries
created (now 15b5974)
This is an automated email from the ASF dual-hosted git repository.
vatamane pushed a change to branch dont-create-new-tx-object-on-retries
in repository https://gitbox.apache.org/repos/asf/couchdb-erlfdb.git.
at 15b5974 Do not create a new transaction object during retries
This branch includes the following new commits:
new 15b5974 Do not create a new transaction object during retries
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
[couchdb-erlfdb] 01/01: Do not create a new transaction object
during retries
Posted by va...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
vatamane pushed a commit to branch dont-create-new-tx-object-on-retries
in repository https://gitbox.apache.org/repos/asf/couchdb-erlfdb.git
commit 15b597460d922a0e9df463bd3f2990cf6abdacb0
Author: Nick Vatamaniuc <va...@apache.org>
AuthorDate: Sat Apr 18 15:16:23 2020 -0400
Do not create a new transaction object during retries
`on_error` function automatically resets the transaction object but
preserves retry and backoff-related information in the object. Avoid
creating a new transaction object which would lose that context in
case transactions retry more than 2 times.
Reference:
https://apple.github.io/foundationdb/api-c.html#c.fdb_transaction_on_error
---
src/erlfdb.erl | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/erlfdb.erl b/src/erlfdb.erl
index d4e7d8a..2f6460e 100644
--- a/src/erlfdb.erl
+++ b/src/erlfdb.erl
@@ -156,7 +156,8 @@ create_transaction(?IS_DB = Db) ->
transactional(?IS_DB = Db, UserFun) when is_function(UserFun, 1) ->
clear_erlfdb_error(),
- do_transaction(Db, UserFun);
+ Tx = create_transaction(Db),
+ do_transaction(Tx, UserFun);
transactional(?IS_TX = Tx, UserFun) when is_function(UserFun, 1) ->
UserFun(Tx);
@@ -641,8 +642,7 @@ clear_erlfdb_error() ->
put(?ERLFDB_ERROR, undefined).
-do_transaction(Db, UserFun) ->
- Tx = create_transaction(Db),
+do_transaction(?IS_TX = Tx, UserFun) ->
try
Ret = UserFun(Tx),
wait(commit(Tx)),
@@ -650,7 +650,7 @@ do_transaction(Db, UserFun) ->
catch error:{erlfdb_error, Code} ->
put(?ERLFDB_ERROR, Code),
wait(on_error(Tx, Code)),
- do_transaction(Db, UserFun)
+ do_transaction(Tx, UserFun)
end.