diff options
Diffstat (limited to 'src/couch_jobs/src/couch_jobs_type_monitor.erl')
-rw-r--r-- | src/couch_jobs/src/couch_jobs_type_monitor.erl | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/src/couch_jobs/src/couch_jobs_type_monitor.erl b/src/couch_jobs/src/couch_jobs_type_monitor.erl index 04ad60acc..95aee4e7a 100644 --- a/src/couch_jobs/src/couch_jobs_type_monitor.erl +++ b/src/couch_jobs/src/couch_jobs_type_monitor.erl @@ -55,10 +55,7 @@ loop(#st{vs = VS, timeout = Timeout} = St) -> try erlfdb:wait(Watch, [{timeout, Timeout}]) catch - error:{erlfdb_error, ?FUTURE_VERSION} -> - erlfdb:cancel(Watch, [flush]), - ok; - error:{timeout, _} -> + error:{Tag, Err} when ?COUCH_JOBS_RETRYABLE(Tag, Err) -> erlfdb:cancel(Watch, [flush]), ok end, @@ -78,7 +75,14 @@ notify(#st{} = St) -> St#st{timestamp = Now}. -get_vs_and_watch(#st{jtx = JTx, type = Type}) -> - couch_jobs_fdb:tx(JTx, fun(JTx1) -> - couch_jobs_fdb:get_activity_vs_and_watch(JTx1, Type) - end). +get_vs_and_watch(#st{} = St) -> + #st{jtx = JTx, type = Type, holdoff = HoldOff} = St, + try + couch_jobs_fdb:tx(JTx, fun(JTx1) -> + couch_jobs_fdb:get_activity_vs_and_watch(JTx1, Type) + end) + catch + error:{Tag, Err} when ?COUCH_JOBS_RETRYABLE(Tag, Err) -> + timer:sleep(HoldOff), + get_vs_and_watch(St) + end. |