summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/db.erl2
-rw-r--r--src/perm.erl57
2 files changed, 31 insertions, 28 deletions
diff --git a/src/db.erl b/src/db.erl
index 707c8d3..f910079 100644
--- a/src/db.erl
+++ b/src/db.erl
@@ -59,7 +59,7 @@ add(LeafHash, Data) ->
-spec add_entryhash(binary(), binary()) -> ok.
add_entryhash(LeafHash, EntryHash) ->
- ok = perm:ensurefile(entryhash_root_path(), EntryHash, LeafHash),
+ ok = perm:ensurefile_nosync(entryhash_root_path(), EntryHash, LeafHash),
ok.
-spec add_index_nosync(binary(), non_neg_integer()) -> ok.
diff --git a/src/perm.erl b/src/perm.erl
index 0cbe6cb..725cfb7 100644
--- a/src/perm.erl
+++ b/src/perm.erl
@@ -58,34 +58,37 @@ ensurefile_nosync(Rootdir, Key, Content) ->
ensurefile(Rootdir, Key, Content, Syncflag) ->
lager:debug("dir ~p key ~s", [Rootdir, mochihex:to_hex(Key)]),
{Dirs, Path} = path_for_key(Rootdir, Key),
- case readfile_and_verify(Path, Content) of
- ok ->
- lager:debug("key ~s existed, fsync", [mochihex:to_hex(Key)]),
- ok = util:fsync([Path, Rootdir | Dirs]),
+ Result =
+ case readfile_and_verify(Path, Content) of
+ ok ->
+ lager:debug("key ~s existed, fsync", [mochihex:to_hex(Key)]),
+ ok = util:fsync([Path, Rootdir | Dirs]),
+ lager:debug("key ~s fsynced", [mochihex:to_hex(Key)]),
+ ok;
+ differ ->
+ lager:debug("key ~s existed, was different",
+ [mochihex:to_hex(Key)]),
+ differ;
+ {error, enoent} ->
+ lager:debug("key ~s didn't exist, add", [mochihex:to_hex(Key)]),
+ util:check_error(make_dirs([Rootdir, Rootdir ++ "nursery/"]
+ ++ Dirs),
+ makedir, "Error creating directory"),
+ NurseryName = Rootdir ++ "nursery/" ++
+ util:tempfilename(hex:bin_to_hexstr(Key)),
+ util:write_tempfile_and_rename(Path, NurseryName, Content),
+ ok;
+ {error, Error} ->
+ util:exit_with_error(Error, readfile, "Error reading file")
+ end,
+ case Syncflag of
+ sync ->
+ lager:debug("key ~s added, fsync", [mochihex:to_hex(Key)]),
+ ok = util:fsync([Path, Rootdir | Dirs]),
lager:debug("key ~s fsynced", [mochihex:to_hex(Key)]),
- ok;
- differ ->
- lager:debug("key ~s existed, was different", [mochihex:to_hex(Key)]),
- differ;
- {error, enoent} ->
- lager:debug("key ~s didn't exist, add", [mochihex:to_hex(Key)]),
- util:check_error(make_dirs([Rootdir, Rootdir ++ "nursery/"]
- ++ Dirs),
- makedir, "Error creating directory"),
- NurseryName = Rootdir ++ "nursery/" ++
- util:tempfilename(hex:bin_to_hexstr(Key)),
- util:write_tempfile_and_rename(Path, NurseryName, Content),
- case Syncflag of
- sync ->
- lager:debug("key ~s added, fsync", [mochihex:to_hex(Key)]),
- ok = util:fsync([Path, Rootdir | Dirs]),
- lager:debug("key ~s fsynced", [mochihex:to_hex(Key)]),
- ok;
- nosync ->
- ok
- end;
- {error, Error} ->
- util:exit_with_error(Error, readfile, "Error reading file")
+ Result;
+ nosync ->
+ Result
end.
-spec readfile(string(), binary()) -> binary() | noentry.