summaryrefslogtreecommitdiff
path: root/src/frontend.erl
diff options
context:
space:
mode:
authorMagnus Ahltorp <map@kth.se>2015-10-01 12:39:28 +0200
committerLinus Nordberg <linus@nordu.net>2015-11-11 13:32:37 +0100
commit0a3e6aafee314eaf9e5343c4cad89a9e2ae1d913 (patch)
tree2ceb97ebf656a26ac384e0e550dc2070d1b7ec72 /src/frontend.erl
parent55820add0bda7ac926f11ee49b232dc11d6fe39c (diff)
Change index.erl to use gen_server and named databases.
Prefetch indices in frontend:fetchmissingentries/2.
Diffstat (limited to 'src/frontend.erl')
-rw-r--r--src/frontend.erl31
1 files changed, 23 insertions, 8 deletions
diff --git a/src/frontend.erl b/src/frontend.erl
index 3b7c15b..b7fa4b1 100644
--- a/src/frontend.erl
+++ b/src/frontend.erl
@@ -302,26 +302,41 @@ check_entry_noreverse(LeafHash, Index) ->
end
end.
+prefetchindices(Index, []) ->
+ case db:leafhash_for_indices(Index, Index + 1000) of
+ noentry ->
+ case db:leafhash_for_index(Index) of
+ noentry ->
+ noentry;
+ Hash ->
+ [Hash]
+ end;
+ Hashes ->
+ Hashes
+ end;
+prefetchindices(_Index, PrefetchList) ->
+ PrefetchList.
+
-spec fetchmissingentries(non_neg_integer(), non_neg_integer()) -> [binary() | noentry].
fetchmissingentries(Index, MaxEntries) ->
- lists:reverse(fetchmissingentries(Index, [], MaxEntries)).
+ lists:reverse(fetchmissingentries(Index, [], [], MaxEntries)).
--spec fetchmissingentries(non_neg_integer(), [binary() | noentry], non_neg_integer()) ->
+-spec fetchmissingentries(non_neg_integer(), [binary() | noentry], [binary()], non_neg_integer()) ->
[binary() | noentry].
-fetchmissingentries(_Index, Acc, 0) ->
+fetchmissingentries(_Index, Acc, _PrefetchList, 0) ->
Acc;
-fetchmissingentries(Index, Acc, MaxEntries) ->
+fetchmissingentries(Index, Acc, PrefetchList, MaxEntries) ->
lager:debug("index ~p", [Index]),
- case db:leafhash_for_index(Index) of
+ case prefetchindices(Index, PrefetchList) of
noentry ->
Acc;
- Hash ->
+ [Hash|PrefetchRest] ->
case db:entry_for_leafhash(Hash) of
noentry ->
lager:debug("didn't find hash ~p", [Hash]),
- fetchmissingentries(Index + 1, [Hash | Acc], MaxEntries - 1);
+ fetchmissingentries(Index + 1, [Hash | Acc], PrefetchRest, MaxEntries - 1);
_ ->
- fetchmissingentries(Index + 1, Acc, MaxEntries)
+ fetchmissingentries(Index + 1, Acc, PrefetchRest, MaxEntries)
end
end.