diff --git a/src/dreyfus/src/dreyfus_index.erl b/src/dreyfus/src/dreyfus_index.erl index 5295a0065fb..d7540500151 100644 --- a/src/dreyfus/src/dreyfus_index.erl +++ b/src/dreyfus/src/dreyfus_index.erl @@ -119,11 +119,11 @@ init({DbName, Index}) -> case couch_db:open_int(DbName, []) of {ok, Db} -> try - couch_db:monitor(Db) + couch_db:monitor(Db), + dreyfus_util:maybe_create_local_purge_doc(Db, Pid, Index) after couch_db:close(Db) end, - dreyfus_util:maybe_create_local_purge_doc(Db, Pid, Index), proc_lib:init_ack({ok, self()}), gen_server:enter_loop(?MODULE, [], State); Error -> diff --git a/src/dreyfus/src/dreyfus_index_updater.erl b/src/dreyfus/src/dreyfus_index_updater.erl index 6edc5a257e8..278d42b5419 100644 --- a/src/dreyfus/src/dreyfus_index_updater.erl +++ b/src/dreyfus/src/dreyfus_index_updater.erl @@ -92,30 +92,27 @@ purge_index(Db, IndexPid, Index) -> Proc = get_os_process(Index#index.def_lang), try true = proc_prompt(Proc, [<<"add_fun">>, Index#index.def]), - FoldFun = fun({PurgeSeq, _UUID, Id, _Revs}, {Acc, _}) -> - Acc0 = - case couch_db:get_full_doc_info(Db, Id) of - not_found -> - ok = clouseau_rpc:delete(IndexPid, Id), - Acc; - FDI -> - DI = couch_doc:to_doc_info(FDI), - #doc_info{id = Id, revs = [#rev_info{rev = Rev} | _]} = DI, - case lists:member({Id, Rev}, Acc) of - true -> - Acc; - false -> - update_or_delete_index(IndexPid, Db, DI, Proc), - [{Id, Rev} | Acc] - end - end, - update_task(1), - {ok, {Acc0, PurgeSeq}} + FoldFun = fun({_PurgeSeq, _UUID, Id, _Revs}, Acc) -> + case couch_db:get_full_doc_info(Db, Id) of + not_found -> + ok = clouseau_rpc:delete(IndexPid, Id), + update_task(1), + {ok, Acc}; + FDI -> + DI = couch_doc:to_doc_info(FDI), + #doc_info{id = Id, revs = [#rev_info{rev = Rev} | _]} = DI, + case lists:member({Id, Rev}, Acc) of + true -> + {ok, Acc}; + false -> + update_or_delete_index(IndexPid, Db, DI, Proc), + update_task(1), + {ok, [{Id, Rev} | Acc]} + end + end end, - - {ok, {ExcludeList, NewPurgeSeq}} = couch_db:fold_purge_infos( - Db, IdxPurgeSeq, FoldFun, {[], 0}, [] - ), + {ok, ExcludeList} = couch_db:fold_purge_infos(Db, IdxPurgeSeq, FoldFun, []), + NewPurgeSeq = couch_db:get_purge_seq(Db), clouseau_rpc:set_purge_seq(IndexPid, NewPurgeSeq), update_local_doc(Db, Index, NewPurgeSeq), {ok, ExcludeList}