diff --git a/src/couch_index_updater.erl b/src/couch_index_updater.erl index ad48f40..0ba2b09 100644 --- a/src/couch_index_updater.erl +++ b/src/couch_index_updater.erl @@ -133,10 +133,7 @@ update(Idx, Mod, IdxState) -> DbUpdateSeq = couch_db:get_update_seq(Db), DbCommittedSeq = couch_db:get_committed_update_seq(Db), - PurgedIdxState = case purge_index(Db, Mod, IdxState) of - {ok, IdxState0} -> IdxState0; - reset -> exit({reset, self()}) - end, + {ok, PurgedIdxState} = purge_index(Db, Mod, IdxState), NumChanges = couch_db:count_changes_since(Db, CurrSeq), @@ -166,7 +163,7 @@ update(Idx, Mod, IdxState) -> end end, - Proc = fun(DocInfo, _, {IdxStateAcc, _}) -> + Proc = fun(DocInfo, {IdxStateAcc, _}) -> case CommittedOnly and (GetSeq(DocInfo) > DbCommittedSeq) of true -> {stop, {IdxStateAcc, false}}; @@ -180,7 +177,7 @@ update(Idx, Mod, IdxState) -> {ok, InitIdxState} = Mod:start_update(Idx, PurgedIdxState, NumChanges), Acc0 = {InitIdxState, true}, - {ok, _, Acc} = couch_db:enum_docs_since(Db, CurrSeq, Proc, Acc0, []), + {ok, Acc} = couch_db:fold_changes(Db, CurrSeq, Proc, Acc0, []), {ProcIdxSt, SendLast} = Acc, % If we didn't bail due to hitting the last committed seq we need @@ -201,11 +198,16 @@ purge_index(Db, Mod, IdxState) -> DbPurgeSeq = couch_db:get_purge_seq(Db), IdxPurgeSeq = Mod:get(purge_seq, IdxState), if - DbPurgeSeq == IdxPurgeSeq -> + IdxPurgeSeq == DbPurgeSeq -> {ok, IdxState}; - DbPurgeSeq == IdxPurgeSeq + 1 -> - {ok, PurgedIdRevs} = couch_db:get_last_purged(Db), - Mod:purge(Db, DbPurgeSeq, PurgedIdRevs, IdxState); true -> - reset + FoldFun = fun({PurgeSeq, _UUId, Id, Revs}, Acc) -> + {ok, StateAcc} = Mod:purge(Db, PurgeSeq, + [{Id, Revs}], Acc), + StateAcc + end, + {ok, NewStateAcc} = couch_db:fold_purged_docs(Db, + IdxPurgeSeq, FoldFun, IdxState, []), + Mod:update_local_purge_doc(Db, NewStateAcc), + {ok, NewStateAcc} end.