blob: e37362f437fd9b1bd4baf77fa35ccfd43801d8e0 [file] [log] [blame]
-module(couch_dbupdates).
-export([handle_dbupdates/3]).
handle_dbupdates(Fun, Acc, Options) ->
NotifierPid = db_update_notifier(),
try
loop(Fun, Acc, Options)
after
couch_db_update_notifier:stop(NotifierPid)
end.
loop(Fun, Acc, Options) ->
[{timeout, Timeout}, {heartbeat, Heartbeat}] = Options,
receive
{db_updated, Event} ->
case Fun(Event, Acc) of
{ok, Acc1} ->
loop(Fun, Acc1, Options);
stop ->
Fun(stop, Acc)
end
after Timeout ->
case Heartbeat of
true ->
case Fun(heartbeat, Acc) of
{ok, Acc1} ->
loop(Fun, Acc1, Options);
stop ->
Fun(stop, Acc)
end;
_ ->
Fun(stop, Acc)
end
end.
db_update_notifier() ->
Self = self(),
{ok, Notifier} = couch_db_update_notifier:start_link(fun(Event) ->
Self ! {db_updated, Event}
end),
Notifier.