LGTM, thanks
On Mon, Jul 07, 2014 at 12:25:59PM +0200, 'Klaus Aehlig' via ganeti-devel wrote: > In this way, we ensure that the temporary file is fully written > to disk before the rename makes it take over the position of the > old file. > > Signed-off-by: Klaus Aehlig <[email protected]> > --- > src/Ganeti/Utils/Atomic.hs | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/src/Ganeti/Utils/Atomic.hs b/src/Ganeti/Utils/Atomic.hs > index eb9acab..84b9834 100644 > --- a/src/Ganeti/Utils/Atomic.hs > +++ b/src/Ganeti/Utils/Atomic.hs > @@ -45,6 +45,7 @@ import System.Posix.Types > import Ganeti.BasicTypes > import Ganeti.Errors > import Ganeti.Utils > +import Ganeti.Utils.UniStd (hCloseAndFsync) > > -- | Atomically write a file, by first writing the contents into a temporary > -- file and then renaming it to the old position. > @@ -62,7 +63,8 @@ atomicUpdateFile :: (MonadBaseControl IO m) > atomicUpdateFile path action = do > (tmppath, tmphandle) <- liftBase $ openTempFile (takeDirectory path) > (takeBaseName path) > - r <- L.finally (action tmppath tmphandle) (liftBase $ hClose tmphandle) > + r <- L.finally (action tmppath tmphandle) > + (liftBase $ hCloseAndFsync tmphandle) > -- if all went well, rename the file > liftBase $ renameFile tmppath path > return r > -- > 2.0.0.526.g5318336 >
