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/02/18 17:02:50 UTC
[couchdb] 01/01: Handle spurious 1009 (future_version) errors in
couch_jobs pending
This is an automated email from the ASF dual-hosted git repository.
vatamane pushed a commit to branch handle-1009-errors-in-jobs-pending-call
in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit 2871b5214f1ee5a3f6bbde983dabd88b5460900e
Author: Nick Vatamaniuc <va...@apache.org>
AuthorDate: Tue Feb 18 11:53:42 2020 -0500
Handle spurious 1009 (future_version) errors in couch_jobs pending
We already handle them in couch_jobs_type_monitor so let's do it in
`couch_jobs:wait_pending` as well. Recent fixes in FDB 6.2 didn't completely
fix the issue and ther are still spurious 1009 errors dumped in the logs. They
seem to be benign as far as couch_jobs operation goes as type monitor code
already showed, so let's not pollute the logs with them.
---
src/couch_jobs/src/couch_jobs.erl | 5 +++++
src/couch_jobs/src/couch_jobs_type_monitor.erl | 2 +-
src/fabric/include/fabric2.hrl | 1 +
3 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/src/couch_jobs/src/couch_jobs.erl b/src/couch_jobs/src/couch_jobs.erl
index d469ed4..c134f5a 100644
--- a/src/couch_jobs/src/couch_jobs.erl
+++ b/src/couch_jobs/src/couch_jobs.erl
@@ -296,6 +296,8 @@ accept_loop(Type, NoSched, MaxSchedTime, Timeout) ->
case wait_pending(PendingWatch, MaxSchedTime, Timeout) of
{error, not_found} ->
{error, not_found};
+ retry ->
+ accept_loop(Type, NoSched, MaxSchedTime, Timeout);
ok ->
accept_loop(Type, NoSched, MaxSchedTime, Timeout)
end
@@ -318,6 +320,9 @@ wait_pending(PendingWatch, MaxSTime, UserTimeout) ->
erlfdb:wait(PendingWatch, [{timeout, Timeout}]),
ok
catch
+ error:{erlfdb_error, ?FUTURE_VERSION} ->
+ erlfdb:cancel(PendingWatch, [flush]),
+ retry;
error:{timeout, _} ->
erlfdb:cancel(PendingWatch, [flush]),
{error, not_found}
diff --git a/src/couch_jobs/src/couch_jobs_type_monitor.erl b/src/couch_jobs/src/couch_jobs_type_monitor.erl
index 562a866..04ad60a 100644
--- a/src/couch_jobs/src/couch_jobs_type_monitor.erl
+++ b/src/couch_jobs/src/couch_jobs_type_monitor.erl
@@ -55,7 +55,7 @@ loop(#st{vs = VS, timeout = Timeout} = St) ->
try
erlfdb:wait(Watch, [{timeout, Timeout}])
catch
- error:{erlfdb_error, 1009} ->
+ error:{erlfdb_error, ?FUTURE_VERSION} ->
erlfdb:cancel(Watch, [flush]),
ok;
error:{timeout, _} ->
diff --git a/src/fabric/include/fabric2.hrl b/src/fabric/include/fabric2.hrl
index b1bd306..f526d7b 100644
--- a/src/fabric/include/fabric2.hrl
+++ b/src/fabric/include/fabric2.hrl
@@ -66,6 +66,7 @@
% Let's keep these in ascending order
-define(TRANSACTION_TOO_OLD, 1007).
+-define(FUTURE_VERSION, 1009).
-define(COMMIT_UNKNOWN_RESULT, 1021).