Fix scan_backward with stopping LPN #
This commit is contained in:
parent
1bb127eb65
commit
1184607bce
1 changed files with 19 additions and 7 deletions
|
@ -79,17 +79,29 @@ scan_backward(Proj, Stream, LastLPN, WithPagesP) ->
|
||||||
scan_backward(Proj, Stream, LastLPN, 0, WithPagesP).
|
scan_backward(Proj, Stream, LastLPN, 0, WithPagesP).
|
||||||
|
|
||||||
scan_backward(Proj, Stream, LastLPN, StopAtLPN, WithPagesP) ->
|
scan_backward(Proj, Stream, LastLPN, StopAtLPN, WithPagesP) ->
|
||||||
lists:reverse(scan_backward2(Proj, Stream, LastLPN, StopAtLPN, WithPagesP)).
|
lists:reverse(scan_backward2(Proj, Stream, LastLPN, StopAtLPN,
|
||||||
|
0, WithPagesP)).
|
||||||
|
|
||||||
scan_backward2(_Proj, _Stream, LastLPN, StopAtLPN, _WithPagesP)
|
scan_backward2(_Proj, _Stream, LastLPN, StopAtLPN, _NumPages, _WithPagesP)
|
||||||
when LastLPN =< StopAtLPN ->
|
when LastLPN =< StopAtLPN; LastLPN =< 0 ->
|
||||||
[];
|
[];
|
||||||
scan_backward2(Proj, Stream, LastLPN, StopAtLPN, WithPagesP) ->
|
scan_backward2(Proj, Stream, LastLPN, StopAtLPN, NumPages, WithPagesP) ->
|
||||||
case corfurl:read_page(Proj, LastLPN) of
|
case corfurl:read_page(Proj, LastLPN) of
|
||||||
{ok, FullPage} ->
|
{ok, FullPage} ->
|
||||||
case proplists:get_value(Stream, unpack_v1(FullPage, stream_list)) of
|
case proplists:get_value(Stream, unpack_v1(FullPage, stream_list)) of
|
||||||
undefined ->
|
undefined ->
|
||||||
{gah_fixme, lpn, LastLPN, unpack_v1(FullPage, stream_list)};
|
if NumPages == 0 ->
|
||||||
|
%% We were told to start scanning backward at some
|
||||||
|
%% LPN, but that LPN doesn't have a stream for us.
|
||||||
|
%% So we'll go backward a page and see if we get
|
||||||
|
%% lucky there.
|
||||||
|
scan_backward2(Proj, Stream, LastLPN-1, StopAtLPN,
|
||||||
|
NumPages, WithPagesP);
|
||||||
|
true ->
|
||||||
|
%% Oops, we pointed into a hole. That's bad.
|
||||||
|
%% TODO: fixme
|
||||||
|
{gah_fixme, lpn, LastLPN, unpack_v1(FullPage, stream_list)}
|
||||||
|
end;
|
||||||
[] ->
|
[] ->
|
||||||
if WithPagesP ->
|
if WithPagesP ->
|
||||||
[{LastLPN, unpack_v1(FullPage, page)}];
|
[{LastLPN, unpack_v1(FullPage, page)}];
|
||||||
|
@ -100,7 +112,7 @@ scan_backward2(Proj, Stream, LastLPN, StopAtLPN, WithPagesP) ->
|
||||||
if WithPagesP ->
|
if WithPagesP ->
|
||||||
[{LastLPN, unpack_v1(FullPage, page)}|
|
[{LastLPN, unpack_v1(FullPage, page)}|
|
||||||
scan_backward2(Proj, Stream,
|
scan_backward2(Proj, Stream,
|
||||||
hd(BackPs), StopAtLPN,
|
hd(BackPs), StopAtLPN, NumPages + 1,
|
||||||
WithPagesP)];
|
WithPagesP)];
|
||||||
true ->
|
true ->
|
||||||
SkipLPN = lists:last(BackPs),
|
SkipLPN = lists:last(BackPs),
|
||||||
|
@ -109,7 +121,7 @@ scan_backward2(Proj, Stream, LastLPN, StopAtLPN, WithPagesP) ->
|
||||||
LPN > StopAtLPN],
|
LPN > StopAtLPN],
|
||||||
[LastLPN] ++ AddLPNs ++
|
[LastLPN] ++ AddLPNs ++
|
||||||
scan_backward2(Proj, Stream,
|
scan_backward2(Proj, Stream,
|
||||||
SkipLPN, StopAtLPN,
|
SkipLPN, StopAtLPN, NumPages + 1,
|
||||||
WithPagesP)
|
WithPagesP)
|
||||||
end
|
end
|
||||||
end;
|
end;
|
||||||
|
|
Loading…
Reference in a new issue