LGTM

Just small nitpick: s/filesnames/filenames/ in the comment.

On 28 September 2016 at 14:28, 'Brian Foley' via ganeti-devel <
[email protected]> wrote:

> This stops them being confused with 'real' filenames by both users and
> code if the daemon crashes before the temporary file is removed.
>
> Signed-off-by: Brian Foley <[email protected]>
> ---
>  src/Ganeti/Utils/Atomic.hs | 8 +++++++-
>  1 file changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/src/Ganeti/Utils/Atomic.hs b/src/Ganeti/Utils/Atomic.hs
> index 7f4d2df..7bb35b2 100644
> --- a/src/Ganeti/Utils/Atomic.hs
> +++ b/src/Ganeti/Utils/Atomic.hs
> @@ -80,8 +80,14 @@ fsyncFileChecked path =
>  atomicUpdateFile :: (MonadBaseControl IO m)
>                   => FilePath -> (FilePath -> Handle -> m a) -> m a
>  atomicUpdateFile path action = do
> +  -- Put a separator on the filename pattern to produce temporary
> filesnames
> +  -- such as job-1234-NNNNNN.tmp instead of job-1234NNNNNN. The latter
> can cause
> +  -- problems (as well as user confusion) because temporary filenames
> have the
> +  -- same format as real filenames, and anything that scans a directory
> won't be
> +  -- able to tell them apart.
> +  let filenameTemplate = takeBaseName path ++ "-.tmp"
>    (tmppath, tmphandle) <- liftBase $ openBinaryTempFile (takeDirectory
> path)
> -                                                        (takeBaseName
> path)
> +                                                        filenameTemplate
>    r <- L.finally (action tmppath tmphandle)
>                   (liftBase (hClose tmphandle >> fsyncFileChecked tmppath))
>    -- if all went well, rename the file
> --
> 2.8.0.rc3.226.g39d4020
>
>

Reply via email to