summaryrefslogtreecommitdiff
path: root/src/perm.erl
diff options
context:
space:
mode:
authorMagnus Ahltorp <map@kth.se>2015-04-07 22:15:22 +0200
committerLinus Nordberg <linus@nordberg.se>2015-04-08 18:20:57 +0200
commit950442da625b22e5e033f4955f61a2a4efbd487f (patch)
tree4324366d7fe866b7c5029dca904adf305eba2a2b /src/perm.erl
parent16520e4f8e9ac02d213455f213fe84ed0a705448 (diff)
perm:ensurefile now only does fsync only when sync flag is set
Closes CATLFISH-35
Diffstat (limited to 'src/perm.erl')
-rw-r--r--src/perm.erl57
1 files changed, 30 insertions, 27 deletions
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.