Add fadvise help to scan
This commit is contained in:
parent
d5babe0c29
commit
62a84b95bb
1 changed files with 21 additions and 11 deletions
|
@ -649,19 +649,29 @@ handle_sync_event({cdb_scan, FilterFun, Acc, StartPos},
|
|||
{ok, StartPos}
|
||||
end,
|
||||
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
|
||||
(StartPos0 >= (EndPos0 - ?DWORD_SIZE)),
|
||||
case MaybeEnd of
|
||||
true ->
|
||||
{reply, {eof, Acc}, StateName, State};
|
||||
false ->
|
||||
{LastPosition, Acc2} = scan_over_file(State#state.handle,
|
||||
StartPos0,
|
||||
FilterFun,
|
||||
Acc,
|
||||
State#state.last_key),
|
||||
{reply, {LastPosition, Acc2}, StateName, State}
|
||||
end;
|
||||
{LastPosition, Acc2} =
|
||||
case MaybeEnd of
|
||||
true ->
|
||||
{eof, Acc};
|
||||
false ->
|
||||
scan_over_file(State#state.handle,
|
||||
StartPos0,
|
||||
FilterFun,
|
||||
Acc,
|
||||
State#state.last_key)
|
||||
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) ->
|
||||
{reply, State#state.last_key, StateName, State};
|
||||
handle_sync_event(cdb_firstkey, _From, StateName, State) ->
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue