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
> 

Reply via email to