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/07/20 22:34:38 UTC

[couchdb] 05/10: [wip] add couch_jobs:fold/4

This is an automated email from the ASF dual-hosted git repository.

vatamane pushed a commit to branch prototype/fdb-replicator
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit f481258fa14bfe9609b71498b0e2e10d4098bb65
Author: Nick Vatamaniuc <va...@apache.org>
AuthorDate: Mon Jul 20 18:30:05 2020 -0400

    [wip] add couch_jobs:fold/4
---
 src/couch_jobs/src/couch_jobs.erl | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/src/couch_jobs/src/couch_jobs.erl b/src/couch_jobs/src/couch_jobs.erl
index 88b4bf4..a20db8f 100644
--- a/src/couch_jobs/src/couch_jobs.erl
+++ b/src/couch_jobs/src/couch_jobs.erl
@@ -19,6 +19,7 @@
     remove/3,
     get_job_data/3,
     get_job_state/3,
+    fold_jobs/4
 
     % Job processing
     accept/1,
@@ -104,6 +105,16 @@ get_job_state(Tx, Type, JobId) when is_binary(JobId) ->
     end).
 
 
+-spec fold_jobs(jtx(), job_type(), fun(), any()) -> any().
+fold_jobs(Tx, Type, Fun, UserAcc) when is_function(Fun, 4) ->
+    couch_jobs_fdb:tx(couch_jobs_fdb:get_jtx(Tx), fun(JTX) ->
+        lists:foldl(fun(#{JobId => {_Seq, JobState, DataEnc}}, Acc) ->
+            Data = couch_jobs_fdb:decode(DataEnc),
+            Fun({JTx, JobId, JobState, Data}, Acc)
+        end, UserAcc, couch_jobs_fdb:get_jobs(JTx, Type))
+    end).
+
+
 %% Job processor API
 
 -spec accept(job_type()) -> {ok, job(), job_data()} | {error, any()}.