diff options
-rw-r--r-- | src/couch_jobs/src/couch_jobs.erl | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/couch_jobs/src/couch_jobs.erl b/src/couch_jobs/src/couch_jobs.erl index d9ea0fbfa..adc1b464e 100644 --- a/src/couch_jobs/src/couch_jobs.erl +++ b/src/couch_jobs/src/couch_jobs.erl @@ -297,9 +297,17 @@ accept_loop(Type, NoSched, MaxSchedTime, Timeout) -> TxFun = fun(JTx) -> couch_jobs_fdb:accept(JTx, Type, MaxSchedTime, NoSched) end, - case couch_jobs_fdb:tx(couch_jobs_fdb:get_jtx(), TxFun) of + AcceptResult = try + couch_jobs_fdb:tx(couch_jobs_fdb:get_jtx(), TxFun) + catch + error:{erlfdb_error, Err} when Err =:= 1020 orelse Err =:= 1031 -> + retry + end, + case AcceptResult of {ok, Job, Data} -> {ok, Job, Data}; + retry -> + accept_loop(Type, NoSched, MaxSchedTime, Timeout); {not_found, PendingWatch} -> case wait_pending(PendingWatch, MaxSchedTime, Timeout) of {error, not_found} -> |