diff options
author | Magnus Ahltorp <map@kth.se> | 2015-10-01 12:39:28 +0200 |
---|---|---|
committer | Linus Nordberg <linus@nordu.net> | 2015-11-11 13:32:37 +0100 |
commit | 0a3e6aafee314eaf9e5343c4cad89a9e2ae1d913 (patch) | |
tree | 2ceb97ebf656a26ac384e0e550dc2070d1b7ec72 /src/frontend.erl | |
parent | 55820add0bda7ac926f11ee49b232dc11d6fe39c (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.erl | 31 |
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. |