Add fadvise help to scan

This commit is contained in:
Martin Sumner 2017-11-20 10:40:09 +00:00
parent d5babe0c29
commit 62a84b95bb

View file

@ -649,19 +649,29 @@ handle_sync_event({cdb_scan, FilterFun, Acc, StartPos},
{ok, StartPos} {ok, StartPos}
end, end,
file:position(State#state.handle, StartPos0), file:position(State#state.handle, StartPos0),
file:advise(State#state.handle,
StartPos0,
EndPos0 - StartPos0,
sequential),
MaybeEnd = (check_last_key(State#state.last_key) == empty) or MaybeEnd = (check_last_key(State#state.last_key) == empty) or
(StartPos0 >= (EndPos0 - ?DWORD_SIZE)), (StartPos0 >= (EndPos0 - ?DWORD_SIZE)),
case MaybeEnd of {LastPosition, Acc2} =
true -> case MaybeEnd of
{reply, {eof, Acc}, StateName, State}; true ->
false -> {eof, Acc};
{LastPosition, Acc2} = scan_over_file(State#state.handle, false ->
StartPos0, scan_over_file(State#state.handle,
FilterFun, StartPos0,
Acc, FilterFun,
State#state.last_key), Acc,
{reply, {LastPosition, Acc2}, StateName, State} State#state.last_key)
end; end,
{ok, LastReadPos} = file:position(State#state.handle, cur),
file:advise(State#state.handle,
StartPos0,
LastReadPos - StartPos0,
dont_need),
{reply, {LastPosition, Acc2}, StateName, State};
handle_sync_event(cdb_lastkey, _From, StateName, State) -> handle_sync_event(cdb_lastkey, _From, StateName, State) ->
{reply, State#state.last_key, StateName, State}; {reply, State#state.last_key, StateName, State};
handle_sync_event(cdb_firstkey, _From, StateName, State) -> handle_sync_event(cdb_firstkey, _From, StateName, State) ->