summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul J. Davis <paul.joseph.davis@gmail.com>2018-07-03 15:02:58 +0200
committerGarren Smith <garren.smith@gmail.com>2018-08-06 09:02:49 +0200
commitef2683a747a4abcc33a0db697047c8bc574b5354 (patch)
tree1e2dedd63fb6178fff0084f097caee3a948283ad
parent0cbaefcaceff750c46ea612322fa1aa02d37c87e (diff)
downloadcouchdb-ef2683a747a4abcc33a0db697047c8bc574b5354.tar.gz
[WIP] Configurable callback for fabric_rpc workers
-rw-r--r--src/fabric/src/fabric_rpc.erl19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/fabric/src/fabric_rpc.erl b/src/fabric/src/fabric_rpc.erl
index 60526f495..ef4092d56 100644
--- a/src/fabric/src/fabric_rpc.erl
+++ b/src/fabric/src/fabric_rpc.erl
@@ -100,8 +100,8 @@ all_docs(DbName, Options, Args0) ->
set_io_priority(DbName, Options),
Args = fix_skip_and_limit(Args1),
{ok, Db} = get_or_create_db(DbName, Options),
- VAcc0 = #vacc{db=Db},
- couch_mrview:query_all_docs(Db, Args, fun view_cb/2, VAcc0)
+ CB = get_view_cb(Args),
+ couch_mrview:query_all_docs(Db, Args, CB, Args)
end.
update_mrview(DbName, {DDocId, Rev}, ViewName, Args0) ->
@@ -124,8 +124,8 @@ map_view(DbName, DDoc, ViewName, Args0, DbOptions) ->
set_io_priority(DbName, DbOptions),
Args = fix_skip_and_limit(fabric_util:upgrade_mrargs(Args0)),
{ok, Db} = get_or_create_db(DbName, DbOptions),
- VAcc0 = #vacc{db=Db},
- couch_mrview:query_view(Db, DDoc, ViewName, Args, fun view_cb/2, VAcc0).
+ CB = get_view_cb(Args),
+ couch_mrview:query_view(Db, DDoc, ViewName, Args, CB, Args).
%% @equiv reduce_view(DbName, DDoc, ViewName, Args0)
reduce_view(DbName, DDocInfo, ViewName, Args0) ->
@@ -303,6 +303,17 @@ get_or_create_db(DbName, Options) ->
couch_db:open_int(DbName, [{create_if_missing, true} | Options]).
+get_view_cb(#mrargs{extra = Options}) ->
+ case couch_util:get_value(callback, Options) of
+ {Mod, Fun} when is_atom(Mod), is_atom(Fun) ->
+ fun Mod:Fun/2;
+ _ ->
+ fun view_cb/2
+ end;
+get_view_cb(_) ->
+ fun view_cb/2.
+
+
view_cb({meta, Meta}, Acc) ->
% Map function starting
ok = rexi:stream2({meta, Meta}),