You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by da...@apache.org on 2020/09/02 18:56:25 UTC
[couchdb-erlfdb] branch report-conflicting-keys created (now
5c81514)
This is an automated email from the ASF dual-hosted git repository.
davisp pushed a change to branch report-conflicting-keys
in repository https://gitbox.apache.org/repos/asf/couchdb-erlfdb.git.
at 5c81514 Add support for reporting conflicting keys
This branch includes the following new commits:
new 5c81514 Add support for reporting conflicting keys
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: Add support for reporting conflicting keys
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
davisp pushed a commit to branch report-conflicting-keys
in repository https://gitbox.apache.org/repos/asf/couchdb-erlfdb.git
commit 5c81514a6465f6a5809ac2255e3b37677be46f93
Author: Paul J. Davis <pa...@gmail.com>
AuthorDate: Wed Sep 2 13:55:27 2020 -0500
Add support for reporting conflicting keys
Transactions that fail due to a conflict can be hard to debug. This
exposes a recent feature that reports keys that were in conflict if a
transaction has to be retried due to a conflict.
---
c_src/atom_names.h | 1 +
c_src/main.c | 2 ++
src/erlfdb.erl | 9 +++++++++
3 files changed, 12 insertions(+)
diff --git a/c_src/atom_names.h b/c_src/atom_names.h
index 0a6b1ad..98b5c4f 100644
--- a/c_src/atom_names.h
+++ b/c_src/atom_names.h
@@ -107,6 +107,7 @@ ATOM_MAP(allow_writes);
ATOM_MAP(disallow_writes);
ATOM_MAP(include_port_in_address);
ATOM_MAP(use_provisional_proxies);
+ATOM_MAP(report_conflicting_keys);
// Streaming mode
diff --git a/c_src/main.c b/c_src/main.c
index b693f06..0893e9f 100644
--- a/c_src/main.c
+++ b/c_src/main.c
@@ -946,6 +946,8 @@ erlfdb_transaction_set_option(
option = FDB_TR_OPTION_SIZE_LIMIT;
} else if(IS_ATOM(argv[1], use_provisional_proxies)) {
option = FDB_TR_OPTION_USE_PROVISIONAL_PROXIES;
+ } else if(IS_ATOM(argv[1], report_conflicting_keys)) {
+ option = FDB_TR_OPTION_REPORT_CONFLICTING_KEYS;
} else {
return enif_make_badarg(env);
}
diff --git a/src/erlfdb.erl b/src/erlfdb.erl
index 240925f..56ea4f7 100644
--- a/src/erlfdb.erl
+++ b/src/erlfdb.erl
@@ -115,6 +115,9 @@
% Locality
get_addresses_for_key/2,
+ % Get conflict information
+ get_conflicting_keys/1,
+
% Misc
on_error/2,
error_predicate/2,
@@ -629,6 +632,12 @@ get_addresses_for_key(?IS_SS = SS, Key) ->
get_addresses_for_key(?GET_TX(SS), Key).
+get_conflicting_keys(?IS_TX = Tx) ->
+ StartKey = <<16#FF, 16#FF, "/transaction/conflicting_keys/">>,
+ EndKey = <<16#FF, 16#FF, "/transaction/conflicting_keys/", 16#FF>>,
+ get_range(Tx, StartKey, EndKey).
+
+
on_error(?IS_TX = Tx, {erlfdb_error, ErrorCode}) ->
on_error(Tx, ErrorCode);