diff options
author | Magnus Ahltorp <map@kth.se> | 2015-04-07 22:15:22 +0200 |
---|---|---|
committer | Magnus Ahltorp <map@kth.se> | 2015-04-07 22:15:22 +0200 |
commit | 282af9dbbc5aa62eef7b714ac9536b7e393555b8 (patch) | |
tree | 65c6b6c806ffc575f66ee71f2ffe9989c7525759 /src/perm.erl | |
parent | f39a8c41c58ab431a65a2bc54e6c730e25908c33 (diff) |
perm:ensurefile now only does fsync only when sync flag is setsslverify
Closes CATLFISH-35
Diffstat (limited to 'src/perm.erl')
-rw-r--r-- | src/perm.erl | 57 |
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. |