You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by da...@apache.org on 2019/07/23 21:55:00 UTC
[couchdb] 15/31: Fix compiler errors
This is an automated email from the ASF dual-hosted git repository.
davisp pushed a commit to branch prototype/views
in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit 4dbf745b913b0879d8ca5c02cd9e72a2a0c08ca6
Author: Paul J. Davis <pa...@gmail.com>
AuthorDate: Thu Jul 18 15:05:00 2019 -0500
Fix compiler errors
---
src/couch_views/src/couch_views.erl | 18 +++---
src/couch_views/src/couch_views_encoding.erl | 10 +--
src/couch_views/src/couch_views_fdb.erl | 81 ++++++++++++-----------
src/couch_views/src/couch_views_indexer.erl | 97 ++++++++++++----------------
src/couch_views/src/couch_views_jobs.erl | 29 +++++----
src/couch_views/src/couch_views_reader.erl | 19 +++---
src/couch_views/src/couch_views_server.erl | 30 +--------
src/couch_views/src/couch_views_util.erl | 1 +
8 files changed, 127 insertions(+), 158 deletions(-)
diff --git a/src/couch_views/src/couch_views.erl b/src/couch_views/src/couch_views.erl
index 7deb54d..e10675b 100644
--- a/src/couch_views/src/couch_views.erl
+++ b/src/couch_views/src/couch_views.erl
@@ -31,13 +31,12 @@ query(Db, DDoc, ViewName, Callback, Acc0, QueryArgs0) ->
{ok, Mrst} = couch_views_util:ddoc_to_mrst(DbName, DDoc),
#mrst{
- views = Views,
- language = Lang
+ views = Views
} = Mrst,
+ View = get_view(ViewName, Views),
QueryArgs1 = couch_mrview_util:set_view_type(QueryArgs0, View, Views),
QueryArgs2 = couch_mrview_util:validate_args(QueryArgs1),
- VInfo = couch_mrview_util:extract_view(Lang, QueryArgs2, View, Views),
case is_reduce_view(QueryArgs2) of
true -> throw({not_implemented});
false -> ok
@@ -72,15 +71,18 @@ maybe_update_view(Db, Mrst, _Args) ->
end),
if WaitSeq == ready -> ok; true ->
- couch_views_jobs:build_view(Db, Mrst, DbSeq)
+ couch_views_jobs:build_view(Db, Mrst, WaitSeq)
end.
+get_view(ViewName, Views) ->
+ {value, View} = lists:search(fun(View) ->
+ lists:member(ViewName, View#mrview.map_names)
+ end, Views),
+ View.
+
+
is_reduce_view(#mrargs{view_type = ViewType}) ->
ViewType =:= red;
is_reduce_view({Reduce, _, _}) ->
Reduce =:= red.
-
-
-remove_ununsed_values(Args) ->
- maps:filter(fun (_, V) -> V /= undefined end, Args).
diff --git a/src/couch_views/src/couch_views_encoding.erl b/src/couch_views/src/couch_views_encoding.erl
index 9d3e3fc..9f76ea6 100644
--- a/src/couch_views/src/couch_views_encoding.erl
+++ b/src/couch_views/src/couch_views_encoding.erl
@@ -34,7 +34,7 @@ encode(X) ->
encode(X, Type) when Type == key; Type == value ->
- erlfdb_tuple:pack(encode_int(X, value))
+ erlfdb_tuple:pack(encode_int(X, value)).
decode(Encoded) ->
@@ -60,7 +60,7 @@ encode_int(Num, value) when is_number(Num) ->
encode_int(Bin, key) when is_binary(Bin) ->
{?STRING, couch_util:get_sort_key(Bin)};
-encode_int(Bin, value) when is_bianry(Bin) ->
+encode_int(Bin, value) when is_binary(Bin) ->
{?STRING, Bin};
encode_int(List, Type) when is_list(List) ->
@@ -75,7 +75,7 @@ encode_int({Props}, Type) when is_list(Props) ->
EV = encode_int(V, Type),
{EK, EV}
end, Props),
- {?OBJECT, list_to_tuple(EncodedProps)}.
+ {?OBJECT, list_to_tuple(Encoded)}.
decode_int({?NULL}) ->
@@ -98,8 +98,8 @@ decode_int({?LIST, List}) ->
decode_int({?OBJECT, Object}) ->
Props = lists:map(fun({EK, EV}) ->
- K = decode_int(EncodedK),
- V = decode_int(EncodedV),
+ K = decode_int(EK),
+ V = decode_int(EV),
{K, V}
end, tuple_to_list(Object)),
{Props}.
diff --git a/src/couch_views/src/couch_views_fdb.erl b/src/couch_views/src/couch_views_fdb.erl
index 57ed5f1..dc1840d 100644
--- a/src/couch_views/src/couch_views_fdb.erl
+++ b/src/couch_views/src/couch_views_fdb.erl
@@ -16,7 +16,7 @@
get_update_seq/2,
set_update_seq/3,
- fold_map_idx/5,
+ fold_map_idx/6,
write_doc/4
]).
@@ -27,6 +27,7 @@
-define(VALUE, 2).
+-include_lib("couch_mrview/include/couch_mrview.hrl").
-include_lib("fabric/src/fabric2.hrl").
-include("couch_views.hrl").
@@ -40,25 +41,22 @@ get_update_seq(TxDb, #mrst{sig = Sig}) ->
db_prefix := DbPrefix
} = TxDb,
- Key = get_seq_key(Sig, DbPrefix),
- case erlfdb:wait(erlfdb:get(Tx, Key)) of
+ case erlfdb:wait(erlfdb:get(Tx, seq_key(DbPrefix, Sig))) of
not_found -> <<>>;
UpdateSeq -> UpdateSeq
end.
-set_view_seq(TxDb, Sig, Seq) ->
+set_update_seq(TxDb, Sig, Seq) ->
#{
- tx := Tx
- db_prefix := DbPrefix,
+ tx := Tx,
+ db_prefix := DbPrefix
} = TxDb,
- SeqKey = get_seq_key(Sig, DbPrefix),
- ok = erlfdb:set(Tx, SeqKey, Seq).
+ ok = erlfdb:set(Tx, seq_key(DbPrefix, Sig), Seq).
fold_map_idx(TxDb, Sig, ViewId, Options, Callback, Acc0) ->
#{
- tx := Tx,
db_prefix := DbPrefix
} = TxDb,
@@ -73,11 +71,11 @@ fold_map_idx(TxDb, Sig, ViewId, Options, Callback, Acc0) ->
docid => undefined,
dupe_id => undefined,
callback => Callback,
- acc => Acc0,
+ acc => Acc0
},
- {fun fold_fwd/2, FwdAcc}
+ {fun fold_fwd/2, FwdAcc};
rev ->
- RevAcc #{
+ RevAcc = #{
prefix => MapIdxPrefix,
next => value,
value => undefined,
@@ -93,24 +91,20 @@ fold_map_idx(TxDb, Sig, ViewId, Options, Callback, Acc0) ->
fabric2_db:fold_range(TxDb, MapIdxPrefix, Fun, Acc, Options).
-write_doc(TxDb, Sig, #{deleted := true} = Doc, ViewIds) ->
+write_doc(TxDb, Sig, #{deleted := true} = Doc, _ViewIds) ->
#{
id := DocId
} = Doc,
ExistingViewKeys = get_view_keys(TxDb, Sig, DocId),
- sclear_id_idx(TxDb, Sig, DocId),
+ clear_id_idx(TxDb, Sig, DocId),
lists:foreach(fun({ViewId, ViewKeys}) ->
- clear_map_idx(TxDb, Sig, ViewId, ViewKeys)
+ clear_map_idx(TxDb, Sig, ViewId, DocId, ViewKeys)
end, ExistingViewKeys);
write_doc(TxDb, Sig, Doc, ViewIds) ->
#{
- db_prefix := DbPrefix
- } = TxDb,
-
- #{
id := DocId,
results := Results
} = Doc,
@@ -122,7 +116,7 @@ write_doc(TxDb, Sig, Doc, ViewIds) ->
lists:foreach(fun({ViewId, NewRows}) ->
ExistingKeys = fabric2_util:get_value(ViewId, ExistingViewKeys, []),
update_id_idx(TxDb, Sig, ViewId, DocId, NewRows),
- update_map_idx(TxDb, Sig, ViewId, DocId, ExitingKeys, NewRows)
+ update_map_idx(TxDb, Sig, ViewId, DocId, ExistingKeys, NewRows)
end, lists:zip(ViewIds, Results)).
@@ -131,7 +125,7 @@ fold_fwd({RowKey, EncodedOriginalKey}, #{next := key} = Acc) ->
prefix := Prefix
} = Acc,
- {{SortKey, DocId}, _DupeId, ?VIEW_ROW_KEY} =
+ {{SortKey, DocId}, DupeId, ?VIEW_ROW_KEY} =
erlfdb_tuple:unpack(RowKey, Prefix),
Acc#{
next := val,
@@ -147,21 +141,21 @@ fold_fwd({RowKey, EncodedValue}, #{next := val} = Acc) ->
key := Key,
sort_key := SortKey,
docid := DocId,
- dupe_id := DocId,
- callback := UserCallback
+ dupe_id := DupeId,
+ callback := UserCallback,
acc := UserAcc0
} = Acc,
% We're asserting there that this row is paired
% correctly with the previous row by relying on
% a badmatch if any of these values don't match.
- {{SortKey, DocId}, DupeId, ?VIEW_ROW_VAL} =
+ {{SortKey, DocId}, DupeId, ?VIEW_ROW_VALUE} =
erlfdb_tuple:unpack(RowKey, Prefix),
Value = couch_views_encoding:decode(EncodedValue),
- NewAcc = UserCallback(DocId, Key, Value, UserAcc0),
+ UserAcc1 = UserCallback(DocId, Key, Value, UserAcc0),
- #{
+ Acc#{
next := key,
key := undefined,
sort_key := undefined,
@@ -176,7 +170,7 @@ fold_rev({RowKey, EncodedValue}, #{next := value} = Acc) ->
prefix := Prefix
} = Acc,
- {{SortKey, DocId}, _DupeId, ?VIEW_ROW_VAL} =
+ {{SortKey, DocId}, DupeId, ?VIEW_ROW_VALUE} =
erlfdb_tuple:unpack(RowKey, Prefix),
Acc#{
next := key,
@@ -192,8 +186,8 @@ fold_rev({RowKey, EncodedOriginalKey}, #{next := key} = Acc) ->
value := Value,
sort_key := SortKey,
docid := DocId,
- dupe_id := DocId,
- callback := UserCallback
+ dupe_id := DupeId,
+ callback := UserCallback,
acc := UserAcc0
} = Acc,
@@ -204,9 +198,9 @@ fold_rev({RowKey, EncodedOriginalKey}, #{next := key} = Acc) ->
erlfdb_tuple:unpack(RowKey, Prefix),
Key = couch_views_encoding:decode(EncodedOriginalKey),
- NewAcc = UserCallback(DocId, Key, Value, UserAcc0),
+ UserAcc1 = UserCallback(DocId, Key, Value, UserAcc0),
- #{
+ Acc#{
next := val,
value := undefined,
sort_key := undefined,
@@ -222,10 +216,10 @@ clear_id_idx(TxDb, Sig, DocId) ->
} = TxDb,
{Start, End} = id_idx_range(DbPrefix, Sig, DocId),
- ok = erlfdb:clear_range(Start, End).
+ ok = erlfdb:clear_range(Tx, Start, End).
-clear_map_idx(TxDb, Sig, ViewId, ViewKeys) ->
+clear_map_idx(TxDb, Sig, ViewId, DocId, ViewKeys) ->
#{
tx := Tx,
db_prefix := DbPrefix
@@ -269,7 +263,7 @@ update_map_idx(TxDb, Sig, ViewId, DocId, ExistingKeys, NewRows) ->
lists:foreach(fun({DupeId, Key1, Key2, Val}) ->
KK = map_idx_key(MapIdxPrefix, {Key1, DocId}, DupeId, ?VIEW_ROW_KEY),
- VK = map_idx_key(MapIdxPrefix, {Key1, DocId}, DupeId, ?VIEW_ROW_VAL),
+ VK = map_idx_key(MapIdxPrefix, {Key1, DocId}, DupeId, ?VIEW_ROW_VALUE),
ok = erlfdn:store(Tx, KK, Key2),
ok = erlfdb:store(Tx, VK, Val)
end, KVsToAdd).
@@ -280,15 +274,20 @@ get_view_keys(TxDb, Sig, DocId) ->
tx := Tx,
db_prefix := DbPrefix
} = TxDb,
- {Start, End} = id_idx_range(DbPrefix, Sig, DocId)
+ {Start, End} = id_idx_range(DbPrefix, Sig, DocId),
lists:map(fun({K, V}) ->
{?DB_VIEWS, Sig, ?VIEW_ID_RANGE, DocId, ViewId} =
erlfdb_tuple:unpack(K, DbPrefix),
- ViewKeys = couch_views_encoding:decode(V)
+ ViewKeys = couch_views_encoding:decode(V),
{ViewId, ViewKeys}
end, erlfdb:get_range(Tx, Start, End, [])).
+seq_key(DbPrefix, Sig) ->
+ Key = {?DB_VIEWS, Sig, ?VIEW_UPDATE_SEQ},
+ erlfdb_tuple:pack(Key, DbPrefix).
+
+
id_idx_key(DbPrefix, Sig, DocId, ViewId) ->
Key = {?DB_VIEWS, Sig, ?VIEW_ID_RANGE, DocId, ViewId},
erlfdb_tuple:pack(Key, DbPrefix).
@@ -300,12 +299,12 @@ id_idx_range(DbPrefix, Sig, DocId) ->
map_idx_prefix(DbPrefix, Sig, ViewId) ->
- Key = {?DB_VIES, Sig, ?VIEW_MAP_RANGE, ViewId},
- erlfdb_tuple:pack(Key).
+ Key = {?DB_VIEWS, Sig, ?VIEW_MAP_RANGE, ViewId},
+ erlfdb_tuple:pack(Key, DbPrefix).
-map_idx_key(MapIdxPrefix, MapKey, DocId, DupeId, Type)
- Key = {MapKey, DocId, DupeId, Type},
+map_idx_key(MapIdxPrefix, MapKey, DupeId, Type) ->
+ Key = {MapKey, DupeId, Type},
erldb_tuple:encode(Key, MapIdxPrefix).
@@ -320,7 +319,7 @@ process_rows(Rows) ->
EK1 = couch_views_encoding:encode(K, key),
EK2 = couch_views_encoding:encode(K, value),
EV = couch_views_encoding:encode(V, value),
- {EKK, EKV, EV}
+ {EK1, EK2, EV}
end, Rows),
Grouped = lists:foldl(fun({K1, K2, V}, Acc) ->
diff --git a/src/couch_views/src/couch_views_indexer.erl b/src/couch_views/src/couch_views_indexer.erl
index 1a84116..91072a1 100644
--- a/src/couch_views/src/couch_views_indexer.erl
+++ b/src/couch_views/src/couch_views_indexer.erl
@@ -21,10 +21,10 @@
init/0
]).
--include_lib("couch_views/include/couch_views.hrl").
-include_lib("couch/include/couch_db.hrl").
+-include_lib("couch_mrview/include/couch_mrview.hrl").
-include_lib("fabric/src/fabric2.hrl").
--include_lib("eunit/include/eunit.hrl").
+-include("couch_views.hrl").
% TODO:
% * Handle timeouts of transaction and other errors
@@ -57,6 +57,8 @@ init() ->
db_seq => undefined,
view_seq => undefined,
last_seq => undefined,
+ job => Job,
+ job_data => Data,
count => 0,
limit => num_changes(),
doc_acc => [],
@@ -67,7 +69,7 @@ init() ->
update(#{} = Db, Mrst0, State0) ->
- fabric2_fdb:transactional(Db, fun(TxDb) ->
+ {Mrst2, State3} = fabric2_fdb:transactional(Db, fun(TxDb) ->
% In the first iteration of update we need
% to populate our db and view sequences
State1 = case State0 of
@@ -75,7 +77,7 @@ update(#{} = Db, Mrst0, State0) ->
State0#{
tx_db := TxDb,
db_seq := fabric2_db:get_update_seq(TxDb),
- view_seq := couch_views_fdb:get_update_seq(TxDb, Mrst)
+ view_seq := couch_views_fdb:get_update_seq(TxDb, Mrst0)
};
_ ->
State0#{
@@ -93,53 +95,29 @@ update(#{} = Db, Mrst0, State0) ->
} = State2,
{Mrst1, MappedDocs} = map_docs(Mrst0, DocAcc),
- write_docs(Db, Mrst1, MappedResults, State2),
+ write_docs(Db, Mrst1, MappedDocs, State2),
case Count < Limit of
true ->
- report_progress(State2, finished);
+ report_progress(State2, finished),
+ {Mrst1, finished};
false ->
report_progress(State2, update),
- State3 = maps:merge(FinalState, #{
- count => 0,
- doc_acc => [],
- db_seq => LastSeq,
- last_seq => 0,
- mrst => Mrst1
- }),
-
- end).
-
-
-update_int(#{} = Db, State) ->
-
-
- #{
- count := Count,
- limit := Limit,
- doc_acc := DocAcc,
- last_seq := LastSeq,
- callback := Cb,
- callback_args := CallbackArgs,
- mrst := Mrst
- } = FinalState,
-
- {MappedDocs, Mrst1} = map_docs(Mrst, DocAcc),
- write_docs(Db, Mrst1, MappedDocs, FinalState),
-
- case Count < Limit of
- true ->
- Cb(undefined, finished, CallbackArgs, Db, Mrst, LastSeq);
- false ->
- NextState = maps:merge(FinalState, #{
- limit => Limit,
- count => 0,
- doc_acc => [],
- since_seq => LastSeq,
- last_seq => 0,
- mrst => Mrst1
- }),
- update_int(Db, NextState)
+ {Mrst1, State2#{
+ tx_db := undefined,
+ count := 0,
+ doc_acc := [],
+ view_seq := LastSeq,
+ last_seq := undefined
+ }}
+ end
+ end),
+
+ case State3 of
+ finished ->
+ couch_query_servers:stop_doc_map(Mrst2#mrst.qserver);
+ _ ->
+ update(Db, Mrst2, State3)
end.
@@ -172,7 +150,6 @@ process_changes(Change, Acc) ->
Acc1 = case {Id, IncludeDesign} of
{<<"_design/", _/binary>>, false} ->
- % {ok, Doc} = fabric2_db:open_doc(Db, Id),
maps:merge(Acc, #{
count => Count + 1,
last_seq => LastSeq
@@ -186,11 +163,11 @@ process_changes(Change, Acc) ->
end,
Change1 = maps:put(doc, Doc, Change),
- maps:merge(Acc, #{
- doc_acc => DocAcc ++ [Change1],
- count => Count + 1,
- last_seq => LastSeq
- })
+ Acc#{
+ doc_acc := DocAcc ++ [Change1],
+ count := Count + 1,
+ last_seq := LastSeq
+ }
end,
{ok, Acc1}.
@@ -247,10 +224,22 @@ start_query_server(#mrst{} = Mrst) ->
report_progress(State, UpdateType) ->
+ #{
+ tx_db := TxDb,
+ job := Job,
+ job_data := JobData,
+ last_seq := LastSeq
+ } = State,
+
+ NewData = JobData#{view_seq => LastSeq},
+
case UpdateType of
update ->
- couch_views_jobs:update(Tx, Job, Db, Mrst, LastSeq);
+ couch_jobs:update(TxDb, Job, NewData);
finished ->
- couch_views_jobs:finish(Tx, Job, Db, Mrst, LastSeq)
+ couch_jobs:finish(TxDb, Job, NewData)
end.
+
+num_changes() ->
+ config:get_integer("couch_views", "change_limit", 100).
diff --git a/src/couch_views/src/couch_views_jobs.erl b/src/couch_views/src/couch_views_jobs.erl
index 9714b29..9e299af 100644
--- a/src/couch_views/src/couch_views_jobs.erl
+++ b/src/couch_views/src/couch_views_jobs.erl
@@ -19,6 +19,7 @@
]).
+-include_lib("couch_mrview/include/couch_mrview.hrl").
-include("couch_views.hrl").
@@ -26,18 +27,18 @@ set_timeout() ->
couch_jobs:set_type_timeout(?INDEX_JOB_TYPE, 6 * 1000).
-build_view(Db, Mrst, UpdateSeq) ->
- {ok, JobId} = build_view_async(Db, Mrst),
+build_view(TxDb, Mrst, UpdateSeq) ->
+ {ok, JobId} = build_view_async(TxDb, Mrst),
case wait_for_job(JobId, UpdateSeq) of
ok -> ok;
- retry -> build_view(Db, Mrst, UpdateSeq)
+ retry -> build_view(TxDb, Mrst, UpdateSeq)
end.
-build_view_async(Db, Mrst) ->
- JobId = create_job_id(TxDb, Mrst),
- JobData = create_job_data(TxDb, Mrst),
- ok = couch_jobs:add(undefined, ?INDEX_JOB_TYPE, JobId, JobData).
+build_view_async(TxDb, Mrst) ->
+ JobId = job_id(TxDb, Mrst),
+ JobData = job_data(TxDb, Mrst),
+ ok = couch_jobs:add(undefined, ?INDEX_JOB_TYPE, JobId, JobData),
{ok, JobId}.
@@ -45,7 +46,7 @@ build_view_async(Db, Mrst) ->
wait_for_job(JobId, UpdateSeq) ->
case couch_jobs:subscribe(?INDEX_JOB_TYPE, JobId) of
{ok, Subscription, _State, _Data} ->
- wait_for_job(JobId, Subscription, UpdateSeq)
+ wait_for_job(JobId, Subscription, UpdateSeq);
{ok, finished, Data} ->
case Data of
#{view_seq := ViewSeq} when ViewSeq >= UpdateSeq ->
@@ -57,7 +58,7 @@ wait_for_job(JobId, UpdateSeq) ->
wait_for_job(JobId, Subscription, UpdateSeq) ->
- case wait(Subscription, infinity) of
+ case wait(Subscription) of
{error, Error} ->
erlang:error(Error);
{finished, #{view_seq := ViewSeq}} when ViewSeq >= UpdateSeq ->
@@ -72,14 +73,14 @@ wait_for_job(JobId, Subscription, UpdateSeq) ->
end.
-get_id(#{name := DbName}, #mrst{sig = Sig}) ->
- create_job_id(DbName, Sig);
+job_id(#{name := DbName}, #mrst{sig = Sig}) ->
+ job_id(DbName, Sig);
-get_id(DbName, Sig) ->
+job_id(DbName, Sig) ->
<<DbName/binary, Sig/binary>>.
-create_job_data(Db, Mrst) ->
+job_data(Db, Mrst) ->
#mrst{
idx_name = DDocId,
sig = Sig
@@ -93,7 +94,7 @@ create_job_data(Db, Mrst) ->
wait(Subscription) ->
- case couch_jobs:wait(JobSubscription, infinity) of
+ case couch_jobs:wait(Subscription, infinity) of
{?INDEX_JOB_TYPE, _JobId, JobState, JobData} -> {JobState, JobData};
timeout -> {error, timeout}
end.
diff --git a/src/couch_views/src/couch_views_reader.erl b/src/couch_views/src/couch_views_reader.erl
index 56b23f2..8d2bf5a 100644
--- a/src/couch_views/src/couch_views_reader.erl
+++ b/src/couch_views/src/couch_views_reader.erl
@@ -19,6 +19,7 @@
-include("couch_views.hrl").
-include_lib("couch/include/couch_db.hrl").
+-include_lib("couch_mrview/include/couch_mrview.hrl").
-include_lib("fabric/src/fabric2.hrl").
@@ -39,7 +40,7 @@ read(Db, Mrst, ViewName, UserCallback, UserAcc0, Args) ->
fabric2_fdb:transactional(Db, fun(TxDb) ->
Acc0 = #{
- db => TxDb
+ db => TxDb,
skip => Args#mrargs.skip,
mrargs => Args,
callback => UserCallback,
@@ -59,7 +60,7 @@ read(Db, Mrst, ViewName, UserCallback, UserAcc0, Args) ->
acc := UserAcc2
} = Acc1,
- maybe_stop(Callback(complete, UserAcc2)
+ maybe_stop(UserCallback(complete, UserAcc2))
end)
catch throw:{done, Out} ->
{ok, Out}
@@ -71,10 +72,10 @@ handle_row(_DocId, _Key, _Value, #{skip := Skip} = Acc) when Skip > 0 ->
handle_row(DocId, Key, Value, Acc) ->
#{
- db := TxDb
+ db := TxDb,
mrargs := Args,
callback := UserCallback,
- acc := UserAcc
+ acc := UserAcc0
} = Acc,
BaseRow = [
@@ -83,21 +84,21 @@ handle_row(DocId, Key, Value, Acc) ->
{value, Value}
],
- Row = BaseRow ++ if not IncludeDocs -> []; true ->
+ Row = BaseRow ++ if not Args#mrargs.include_docs -> []; true ->
DocOpts0 = Args#mrargs.doc_options,
- DocOpts1 = OpenOpts0 ++ case Args#mrargs.conflicts of
+ DocOpts1 = DocOpts0 ++ case Args#mrargs.conflicts of
true -> [conflicts];
false -> []
end,
- DocObj = case fabric2_db:open_doc(Db, DocId, DocOpts1) of
+ DocObj = case fabric2_db:open_doc(TxDb, DocId, DocOpts1) of
{ok, Doc} -> couch_doc:to_json_obj(Doc, DocOpts1);
{not_found, _} -> null
end,
[{doc, DocObj}]
end,
- UserAcc1 = maybe_stop(Callback({row, Row1}, UserAcc0)),
- Acc#{acc := UserAcc1}
+ UserAcc1 = maybe_stop(UserCallback({row, Row}, UserAcc0)),
+ Acc#{acc := UserAcc1}.
get_view_id(ViewName, Views) ->
diff --git a/src/couch_views/src/couch_views_server.erl b/src/couch_views/src/couch_views_server.erl
index 8ec2425..0417a9b 100644
--- a/src/couch_views/src/couch_views_server.erl
+++ b/src/couch_views/src/couch_views_server.erl
@@ -41,7 +41,7 @@ start_link() ->
init(_) ->
process_flag(trap_exit, true),
couch_views_jobs:set_timeout(),
- State0 = #{
+ State = #{
workers => [],
num_workers => num_workers()
},
@@ -70,7 +70,7 @@ handle_info({'EXIT', Pid, Reason}, State) ->
NewWorkers ->
if Reason == normal -> ok; true ->
LogMsg = "~p : indexer process ~p exited with ~p",
- couch_log:error(LogMsg, [?MODULE, Pid, Reason]),
+ couch_log:error(LogMsg, [?MODULE, Pid, Reason])
end,
{noreply, spawn_workers(State#{workers := NewWorkers})}
end;
@@ -90,36 +90,12 @@ spawn_workers(State) ->
} = State,
case length(Workers) < NumWorkers of
true ->
- Pid = spawn_worker(),
+ Pid = couch_views_indexer:spawn_link(),
spawn_workers(State#{workers := [Pid | Workers]});
false ->
State
end.
-spawn_worker() ->
- couch_views_indexer:spawn_link().
-
-
-blocking_acceptor(Parent) ->
- case couch_views_jobs:accept() of
- not_found ->
- blocking_acceptor(Parent);
- {ok, Job, JobData} ->
- gen_server:cast(Parent, {job, Job, JobData})
- end.
-
-
-check_finished_process(#{acceptor_pid := Pid} = State, Pid) ->
- State1 = State#{acceptor_pid := undefined},
- spawn_acceptor(State1);
-
-check_finished_process(State, Pid) ->
- #{workers := Workers} = State,
- Workers1 = maps:remove(Pid, Workers),
- State#{workers := Workers1}.
-
-
-
num_workers() ->
config:get_integer("couch_views", "max_workers", ?MAX_WORKERS).
diff --git a/src/couch_views/src/couch_views_util.erl b/src/couch_views/src/couch_views_util.erl
index d7ed29f..b88cfcd 100644
--- a/src/couch_views/src/couch_views_util.erl
+++ b/src/couch_views/src/couch_views_util.erl
@@ -19,6 +19,7 @@
-include_lib("couch/include/couch_db.hrl").
+-include_lib("couch_mrview/include/couch_mrview.hrl").
-include("couch_views.hrl").