summaryrefslogtreecommitdiff
path: root/src/db.erl
diff options
context:
space:
mode:
authorMagnus Ahltorp <map@kth.se>2015-01-28 17:29:58 +0100
committerLinus Nordberg <linus@nordberg.se>2015-02-27 02:29:16 +0100
commit6fdc0f0ae77d6aaefd175277fa8355089f41806a (patch)
tree244212754b2163304734529cb554fb8adeb316bf /src/db.erl
parentd34e60f273b3fef49c80ebf866ce781333f90d79 (diff)
Perform frontend index writes in two phases
Diffstat (limited to 'src/db.erl')
-rw-r--r--src/db.erl25
1 files changed, 18 insertions, 7 deletions
diff --git a/src/db.erl b/src/db.erl
index d2e0814..0541678 100644
--- a/src/db.erl
+++ b/src/db.erl
@@ -6,10 +6,11 @@
%% API.
-export([start_link/0, stop/0]).
--export([add/2, add_entryhash/2, add_index/2, set_treesize/1, size/0]).
+-export([add/2, add_entryhash/2, add_index_nosync/2, set_treesize/1, size/0]).
-export([get_by_index/1, get_by_indices/3, get_by_leaf_hash/1]).
-export([get_by_entry_hash/1, entry_for_leafhash/1, leafhash_for_index/1]).
-export([leafhash_for_indices/2, indexsize/0]).
+-export([indexforhash_sync/2, index_sync/0]).
%% gen_server callbacks.
-export([init/1, handle_call/3, terminate/2, handle_cast/2, handle_info/2,
code_change/3]).
@@ -48,9 +49,9 @@ add_entryhash(LeafHash, EntryHash) ->
ok = perm:ensurefile(entryhash_root_path(), EntryHash, LeafHash),
ok.
--spec add_index(binary(), non_neg_integer()) -> ok.
-add_index(LeafHash, Index) ->
- call(?MODULE, {add_index, {LeafHash, Index}}).
+-spec add_index_nosync(binary(), non_neg_integer()) -> ok.
+add_index_nosync(LeafHash, Index) ->
+ call(?MODULE, {add_index_nosync, {LeafHash, Index}}).
-spec set_treesize(non_neg_integer()) -> ok.
set_treesize(Size) ->
@@ -177,8 +178,18 @@ get_by_indices_helper(Start, End) ->
handle_call(stop, _From, State) ->
{stop, normal, stopped, State};
-handle_call({add_index, {LeafHash, Index}}, _From, State) ->
- ok = perm:ensurefile(indexforhash_root_path(),
- LeafHash, integer_to_binary(Index)),
+handle_call({add_index_nosync, {LeafHash, Index}}, _From, State) ->
+ ok = perm:ensurefile_nosync(indexforhash_root_path(),
+ LeafHash, integer_to_binary(Index)),
ok = index:add(index_path(), Index, LeafHash),
{reply, ok, State}.
+
+indexforhash_sync(LeafHash, Index) ->
+ ok = perm:ensurefile(indexforhash_root_path(),
+ LeafHash, integer_to_binary(Index)),
+ ok.
+
+index_sync() ->
+ Basepath = index_path(),
+ ok = util:fsync([Basepath, filename:dirname(Basepath)]),
+ ok.